الأخطاء
يستخدم كل خطأ، عبر الـ API بأكمله، مغلّفًا واحدًا، بحيث يمكنك التعامل مع الإخفاقات بمسار كود واحد.
شكل الخطأ
غلاف الخطأ
{
"error": {
"code": "VALIDATION_FAILED",
"message": "The request was invalid.",
"details": [
{ "path": "declaredNumber", "message": "must be E.164" }
]
}
}تطابق حالة HTTP الرمز code. الحقل details موجود فقط في أخطاء التحقّق.
رموز الأخطاء
| الرمز | HTTP | متى |
|---|---|---|
| UNAUTHORIZED | 401 | مفتاح مفقود أو غير صالح. |
| FORBIDDEN | 403 | المفتاح يفتقر إلى النطاق المطلوب. |
| NOT_FOUND | 404 | لا يوجد مورد كهذا في حسابك. ويظهر هذا الخطأ أيضًا عند الإرسال أو إعادة التوجيه إلى chatId ليس محادثةً للرقم المُرسِل، حتى لو كان محادثةً لرقم آخر من أرقامك، وعندها لا يُرسَل شيء. |
| VALIDATION_FAILED | 400 | كان جسم الطلب أو الاستعلام غير صالح. |
| CONFLICT | 409 | الإجراء يتعارض مع الحالة الحالية (مثل الإرسال من رقم غير متصل). |
| RATE_LIMITED | 429 | طلبات كثيرة جدًا. خفّف الوتيرة وأعِد المحاولة. |
| OUTBOUND_LIMIT | 429 | سقف المراسلة الباردة: بدأ هذا الرقم عددًا كبيرًا جدًا من المحادثات الجديدة خلال هذه الساعة. والردود لا تُحتسب أبدًا. انتظر المدة التي تحدّدها Retry-After، وأبقِ حجم الاتصالات الأولى معتدلًا. |
| SLOT_REQUIRED | 402 | ربط رقم يتطلّب خانة متاحة. |
| ACCOUNT_SUSPENDED | 402 | الحساب كله قيد الإيقاف المؤقت. وكل المسارات تردّ بهذا عدا تسجيل الدخول والفوترة. المفتاح صالح وإعادة المحاولة لن تفيد: تواصل معنا لاستعادة الوصول. |
| TRANSPORT_UNAVAILABLE | 503 | خدمة الاتصال غير متاحة لبرهة. أعِد المحاولة بعد قليل. |
| TRANSPORT_BUSY | 503 | خدمة الرسائل مشغولة. انتظر المدة التي تحدّدها ترويسة Retry-After ثم أعِد المحاولة، وكل ما صدر سابقًا يبقى صالحًا. |
| BILLING_UNAVAILABLE | 503 | لا يوجد في هذا النشر أي معالج مدفوعات مُهيّأ. |
| INTERNAL | 500 | خطأ غير متوقّع من جهتنا. |
التمهّل وإعادة المحاولة
ثلاثة رموز تطلب منك الانتظار، ومعانيها مختلفة. فـ RATE_LIMITED يعني خفّف الوتيرة. وOUTBOUND_LIMIT يعني توقّف مدةً عن مراسلة أشخاص جدد: فالردود ما زالت تمرّ، والميزانية تخصّ الرقم لا مفتاحك. وTRANSPORT_BUSY يعني أن خدمة الرسائل تحدّ من وتيرتنا: إنه ضغط حِمل، لا عيب في طلبك، وكل ما صدر سابقًا يبقى صالحًا. وتحمل الرموز الثلاثة Retry-After بالثواني حين تكون المدة معروفة، فانتظر تلك المدة على الأقل.
429 Too Many Requests
{
"error": {
"code": "OUTBOUND_LIMIT",
"message": "This number has started too many new conversations in the last hour."
}
}أخطاء التحقّق
بالنسبة لخطأ VALIDATION_FAILED، يسرد details كل حقل مخالف عبر path لتتمكّن من إظهار المشكلة بجوار الحقل الصحيح.
معالجة الأخطاء
const res = await fetch("https://api.sendveo.com/v1/numbers", options)
if (!res.ok) {
const { error } = await res.json()
if (error.code === "VALIDATION_FAILED") {
for (const d of error.details ?? []) showFieldError(d.path, d.message)
} else {
showBanner(error.message)
}
}