وبسرویسی که فقط بگوید «خطا»، برنامهنویس را ساعتها سرگردان میکند. در درگاه پیامک (SMSGate) بدنهٔ همهٔ پاسخها یک قالب ثابت دارد:
{ "code": 164, "message": "موجودی کافی نیست", "data": {} }
code برای موفقیت ۱۰۰ است و خطاها از ۱۰۱ شروع میشوند. برنامهتان را بر اساس این عدد بنویسید و message را که توضیح فارسی خطاست، برای لاگ و پشتیبانی نگه دارید. در ادامه، کدها را بهترتیب موضوع مرور میکنیم.
کلید API و IP
| کد | معنی | راهحل |
| ۱۰۱ | کلید API ارسال نشده | سرآیند Authorization: Bearer کلید را بفرستید و مطمئن شوید پراکسی یا فریمورک آن را حذف نمیکند. |
| ۱۰۲ | کلید نامعتبر است | کلید را دوباره کپی کنید؛ معمولاً فاصله یا کاراکتر اضافه در ابتدا یا انتهای آن است. |
| ۱۰۳ | کلید غیرفعال یا تعلیق شده | وضعیت کلید را در فهرست کلیدها ببینید یا از کلید فعال دیگری استفاده کنید. |
| ۱۰۴ | IP شما برای این کلید مجاز نیست | IP خروجی واقعی سرور را به فهرست IPهای مجاز همان کلید اضافه کنید. |
| ۱۰۵ | کلید به این عملیات دسترسی ندارد | دسترسی (scope) لازم را به کلید بدهید، یا از کلیدی استفاده کنید که این اجازه را دارد. |
| ۱۲۲ | کلید API پیدا نشد | در عملیات مدیریت کلید، شناسهٔ کلید مقصد را بررسی کنید. |
حساب کاربری
| کد | معنی | راهحل |
| ۱۰۶ | حساب به این عملیات دسترسی ندارد | این امکان برای حساب شما فعال نشده؛ با پشتیبانی هماهنگ کنید. |
| ۱۰۷ | حساب غیرفعال است | با پشتیبانی تماس بگیرید. |
| ۱۰۸ | حساب تعلیق شده | با پشتیبانی تماس بگیرید. |
| ۱۲۳ | این دسترسی روی حساب داده نشده | کلید نمیتواند دسترسیای بگیرد که خود حساب ندارد. |
دادههای درخواست
| کد | معنی | راهحل |
| ۱۱۰ | دادههای ارسالی نامعتبر | بدنه را با JSON معتبر و سرآیند Content-Type: application/json بفرستید. |
| ۱۱۱ | فیلد اجباری نیامده | نام فیلد در data.field میآید؛ مثلاً body در ارسال غیرنظیربهنظیر. |
| ۱۱۵ | منبع پیدا نشد | شناسهای که در نشانی فرستادهاید (مثلاً شناسهٔ ارسال) را بررسی کنید. |
| ۱۱۹ تا ۱۲۱ | IP تکراری، IP پیدا نشد، قالب IP نادرست | در مدیریت فهرست IP، نشانی را درست وارد کنید. نشانیهای IPv6 باید در نشانی درخواست URL Encode شوند. |
| ۱۲۶ | مقدار اعتبار نامعتبر | مبلغ انتقال باید عدد صحیح مثبت و به ریال باشد. |
خط فرستنده و گیرندگان
| کد | معنی | راهحل |
| ۱۵۰ | شمارهٔ فرستنده نامعتبر | شمارهٔ خط را با ارقام لاتین و بدون پیشوند ۹۸ بفرستید. |
| ۱۵۲ | هیچ گیرندهٔ معتبری نیست | همهٔ شمارهها نامعتبر بودهاند. اگر فقط برخی نامعتبر باشند، بقیه ارسال میشوند و آنها در پاسخ با وضعیت invalid مشخص میشوند. |
| ۱۵۷ | برای این فرستنده اپراتوری پیدا نشد | شمارهٔ خط را بررسی کنید؛ احتمالاً پیششمارهٔ آن اشتباه است. |
| ۱۵۹ | این خط متعلق به حساب شما نیست | فهرست خطوط حساب را با GET /v1/account/line ببینید و از یکی از همانها استفاده کنید. |
| ۱۶۰ | خط غیرفعال است | خط دیگری را انتخاب کنید یا برای فعالسازی با پشتیبانی تماس بگیرید. |
موجودی و پرداخت
| کد | معنی | راهحل |
| ۱۶۴ و ۱۲۴ | موجودی حساب کافی نیست | حساب را شارژ کنید. بهتر است برای موجودی هشدار بگذارید تا ارسالهای ضروری مثل کد تأیید ناگهان قطع نشوند. |
| ۱۲۵ | موجودی این کلید کافی نیست | حساب موجودی دارد، اما کلید موجودی ندارد؛ از حساب اصلی به این کلید اعتبار منتقل کنید. |
| ۱۳۲ و ۱۳۳ | درگاه پرداخت پیکربندی نشده یا در دسترس نیست | برای شارژ آنلاین کمی بعد دوباره تلاش کنید یا از راه پنل شارژ کنید. |
خطاهای موقت: دوباره تلاش کنید، ولی درست
| کد | معنی | راهحل |
| ۱۱۶ | خطای سرور | با فاصله دوباره تلاش کنید. |
| ۱۱۷ | سرویس صف در دسترس نیست | درخواست پیش از هر ثبت رد شده، پس تکرار آن پیام تکراری نمیسازد. |
برای خطاهای موقت، تکرار با فاصلهٔ فزاینده (مثلاً ۲، ۴ و ۸ ثانیه) و تعداد محدود را پیاده کنید. خطاهای ۴xx مثل داده یا کلید نامعتبر را تکرار نکنید؛ با تکرار درست نمیشوند و فقط لاگ را شلوغ میکنند.
پاسخ «پذیرفته» با وضعیت pending: گاهی پاسخ موفق است، ولی وضعیت ارسال بهجای enqueued، pending است؛ یعنی ارسال ثبت شده اما هنوز به صف نرسیده. این خطا نیست؛ همان درخواست را دوباره نفرستید، وگرنه پیام تکراری ارسال میکنید.
جمعبندی
بیشتر خطاهای وبسرویس در سه دستهاند: کلید و IP، داده و خط، و موجودی. هرکدام راهحل روشنی دارد. اگر خطایی برطرف نشد، با ثبت تیکت پشتیبانی و فرستادن کد خطا، زمان درخواست و بدنهٔ آن (بدون کلید API) سریعتر به جواب میرسید. مستندات کامل در doc.webservice.ir است.