رفتن به محتوای اصلی

شروع سریع

در چند دقیقه نخستین پیامک را با 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 requests
BASE_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اعتبار کافی نیستحساب را شارژ کنید

گام بعدی