شروع سریع
در چند دقیقه نخستین پیامک را با API نجوا بفرستید و وضعیت آن را بگیرید.
این راهنما شما را از یک حساب خالی تا ارسال نخستین پیامک میرساند. در پایان میدانید پاسخهای API را چطور بخوانید و وضعیت ارسال را چطور پیگیری کنید.
پیشنیازها
۱. کلید API بسازید — دریافت کلید API
۲. آیپی سرورتان را ثبت کنید — وایتلیست IP
۳. یک سرشمارهٔ فعال روی حساب خود داشته باشید (مثلاً 3000505).
سه نسل از API کنار هم فعالاند:
- نسخهٔ ۲ (
/v2/...) — بدنهٔ JSON، احراز هویت با هدرAuthorization، بدون نیاز به وایتلیست IP. برای ادغامهای جدید همین را انتخاب کنید. - نسخهٔ ۱ (
/v1/{apiKey}/...) — سازگار با کاوهنگار. اگر کدی دارید که قبلاً با کاوهنگار کار میکرده، بدون تغییر ساختار به این نسخه وصل میشود. - نسخهٔ ۳ (
/v3/...) — ارسال همزمان روی پیامک و پیامرسانها (بله، روبیکا).
این راهنما نسخهٔ ۲ را نشان میدهد.
گام ۱ — ارسال نخستین پیامک
curl -X POST "https://sms.najva.com/v2/sms/send" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "sender": "3000505", "receivers": ["09121234567"], "message": "سلام! این نخستین پیامک ما با API نجواست." }'پاسخ موفق:
{ "return": { "status": 200, "message": "درخواست تایید شد." }, "entries": [ { "messageid": 18392011, "message": "سلام! این نخستین پیامک ما با API نجواست.\nلغو۱۱", "status": 1, "statustext": "در صف ارسال", "sender": "3000505", "receptor": "09121234567", "date": 1757145600, "cost": 700 } ]}مقدار messageid را نگه دارید؛ برای پیگیری وضعیت به آن نیاز دارید.
- به انتهای متن بهصورت خودکار «لغو۱۱» اضافه شده است. این کار برای خطوط پیامکی الزامی است و روی طول و هزینهٔ پیام اثر دارد؛ برای خطوط پیامرسانها (بله، روبیکا) انجام نمیشود.
- شمارهها به قالب
09xxxxxxxxxنرمال میشوند. قالبهای9xxxxxxxxx،989xxxxxxxxxو+989xxxxxxxxxهم پذیرفته میشوند. - مقدار
costبر حسب ریال است. status: 1یعنی «در صف ارسال» — پیام هنوز به گیرنده نرسیده است.
گام ۲ — پیگیری وضعیت
curl -X POST "https://sms.najva.com/v2/sms/status" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"messageids": [18392011]}'{ "return": { "status": 200, "message": "درخواست تایید شد." }, "entries": [ { "messageid": 18392011, "status": 10, "statustext": "رسیده به گیرنده" } ]}وضعیتهای 10، 11 و 14 نهاییاند و دیگر تغییر نمیکنند. وضعیتهای 1، 2 و 4 میانی هستند؛
استعلام را با فاصلهٔ زمانی تکرار کنید، نه در حلقهٔ تنگ. فهرست کامل وضعیتها در
خطاها و کدهای وضعیت آمده است.
گام ۳ — مدیریت خطا
همهٔ پاسخها — موفق یا ناموفق — ساختار یکسانی دارند و کد وضعیت HTTP همان return.status است.
پس بدنهٔ پاسخ را در هر حالتی بخوانید:
import requestsBASE_URL = "https://sms.najva.com"API_KEY = "YOUR_API_KEY"response = requests.post( f"{BASE_URL}/v2/sms/send", headers={"Authorization": f"Bearer {API_KEY}"}, json={ "sender": "3000505", "receivers": ["09121234567"], "message": "سلام!", },)body = response.json()result = body["return"]if result["status"] == 200: for item in body["entries"]: print(item["messageid"], item["statustext"])else: print("خطا:", result["status"], result["message"])خطاهایی که در آغاز کار بیشتر میبینید:
| کد | معنی | راهحل |
|---|---|---|
403 | کلید API معتبر نیست | کلید را از پنل بررسی کنید |
412 | سرشماره نامعتبر است | سرشماره باید متعلق به حساب شما باشد |
411 | هیچ گیرندهٔ معتبری باقی نماند | قالب شمارهها را بررسی کنید |
418 | اعتبار کافی نیست | حساب را شارژ کنید |
گام بعدی
- ارسال متن متفاوت برای هر گیرنده: ارسال نظیربهنظیر
- ارسال با الگوی تأییدشده (کد یکبارمصرف): ارسال با الگو
- ارسال انبوه با گزارشگیری: کمپینها