Hujjatlar

Umumiy ma'lumot

ownsms — o'z telefoningiz SIM'i orqali oddiy REST API bilan SMS yuborish imkonini beradi. API xabarni navbatga qo'yadi; unga ulangan Android telefon xabarni oladi va o'z SIM'idan jo'natadi.

Ikki yo'l bor:

Har bir so'rov Authorization: Bearer <osk_...> API kaliti bilan autentifikatsiya qilinadi. API kalitni Android ilovadan yoki register endpoint'dan olasiz.

Quickstart

API kalit oling (akkaunt + qurilma yaratadi, kalitni bir marta qaytaradi):

curl -X POST https://sms.omadli.uz/api/v1/register \ -H "Content-Type: application/json" \ -d '{"device_name":"Mening telefonim"}'

So'ng quyidagi bo'limdagi namunalar bilan SMS yuboring.

SMS yuborish — kod namunalari

Bitta SMS yuborish. osk_YOUR_KEY o'rniga o'z kalitingizni qo'ying.

curl -X POST https://sms.omadli.uz/api/v1/messages \ -H "Authorization: Bearer osk_YOUR_KEY" \ -H "Content-Type: application/json" \ -d '{"to":"+998901234567","text":"Salom!"}'
<?php $ch = curl_init("https://sms.omadli.uz/api/v1/messages"); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_HTTPHEADER => [ "Authorization: Bearer osk_YOUR_KEY", "Content-Type: application/json", ], CURLOPT_POSTFIELDS => json_encode([ "to" => "+998901234567", "text" => "Salom!", ]), ]); echo curl_exec($ch);
import requests r = requests.post( "https://sms.omadli.uz/api/v1/messages", headers={"Authorization": "Bearer osk_YOUR_KEY"}, json={"to": "+998901234567", "text": "Salom!"}, ) print(r.json())
const res = await fetch("https://sms.omadli.uz/api/v1/messages", { method: "POST", headers: { "Authorization": "Bearer osk_YOUR_KEY", "Content-Type": "application/json", }, body: JSON.stringify({ to: "+998901234567", text: "Salom!" }), }); console.log(await res.json());
Javob: {"id":"msg_1","status":"queued","to":"+998901234567","text":"Salom!", ...}. Keyin GET /api/v1/messages/msg_1 bilan statusni tekshiring.

Parametrlar

ParametrTuriMa'nosi
tostringQabul qiluvchi, E.164 (+998901234567). Majburiy.
textstringXabar matni. Majburiy.
fromstringMuayyan SIM raqami; berilmasa standart SIM.
queuedbooltrue = telefon onlayn bo'lganda yubor. Standart: darrov (telefon oflayn bo'lsa 409).
ttlintAmal qilish muddati (soniya).
send_atdate-timeKeyinga rejalash.
idempotency_keystringTakroriy so'rovni oldini olish.
callback_urlstringShu xabar uchun webhook.

Status sikli

queued sending sent ✓✓ delivered
StatusMa'nosi
queuedQabul qilindi, telefon kutilmoqda.
sendingTelefonga berildi; SIM orqali yuborilmoqda.
sentOperator qabul qildi — buni muvaffaqiyat deb qabul qiling.
deliveredOperator yetkazish hisobotini qaytardi. Bonus — ko'p tarmoqlar qaytarmaydi, kutib qolmang.
failed / expired / canceledYuborilmadi / TTL o'tdi / bekor qilindi.

Rassilka — ommaviy kampaniya

Bitta shablon va qabul qiluvchilar ro'yxatidan kampaniya yarating. Shablondagi {o'zgaruvchi} o'rinlari har bir raqam uchun alohida to'ldiriladi.

curl -X POST https://sms.omadli.uz/api/v1/campaigns \ -H "Authorization: Bearer osk_..." \ -H "Content-Type: application/json" \ -d '{ "text": "Salom {name}! Chegirma kodingiz: {code}", "recipients": [ {"to": "+998901112233", "vars": {"name": "Aziz", "code": "A50"}}, {"to": "+998907654321", "vars": {"name": "Laylo", "code": "B30"}} ] }'

Javob — 202 va kampaniya identifikatori:

{ "id": "camp_1", "status": "running", "total": 2 }
Fail-fast: agar biror raqam noto'g'ri bo'lsa, butun kampaniya 422 bilan rad etiladi va xato qatorlar bad_rowsda qaytariladi — hech biri yuborilmaydi. Raqamlarni oldindan tekshiring.

Progressni kuzatish

Kampaniya holatini so'rang; foiz = (sent + delivered + failed + expired + canceled) / total.

curl https://sms.omadli.uz/api/v1/campaigns/camp_1 \ -H "Authorization: Bearer osk_..." # messages ro'yxati: GET /api/v1/campaigns/camp_1/messages (?before=&limit=)

Pauza / davom / bekor

curl -X POST https://sms.omadli.uz/api/v1/campaigns/camp_1/pause \ -H "Authorization: Bearer osk_..." # amallar: pause · resume · cancel
To'liq retsept — CSV import, {var} shablon, idempotency — QUICKSTARTda.

Django loyihaga ulash

O'z serveringizni ko'tarish uchun ownsms paketini Django loyihangizga ulang.

  1. Paketni o'rnating
    pip install ownsms
  2. INSTALLED_APPS'ga qo'shing (settings.py)
    INSTALLED_APPS = [ ... "ownsms", ]
  3. URL'larni ulang (urls.py)
    from django.urls import include, path urlpatterns = [ path("", include("ownsms.urls")), ]
  4. Migratsiya qiling
    python manage.py migrate
  5. Serverni ishga tushiring va API kalit olingPOST /api/v1/register (yuqorida), yoki Django admin orqali akkaunt/kalit yarating.
  6. Telefonni ulang — Android ilovada server URL'ingizni kiriting (localhost bo'lsa ngrok/jprq) va ro'yxatdan o'ting.
Xizmat vazifalari (cron / systemd timer bilan davriy ishga tushiring): python manage.py ownsms_housekeeping (TTL/lease) va python manage.py ownsms_webhooks (webhook yetkazish).

Localhost'ni ochish (ngrok / jprq)

Telefon localhost'ga ula olmaydi — dev serveringizni internetga chiqaring, so'ng chiqqan HTTPS manzilni Android ilovada API URL sifatida kiriting.

# Django dev server 8000-portda ishlayotgan bo'lsin python manage.py runserver 0.0.0.0:8000 # boshqa terminalda ngrok http 8000 # → https://abc123.ngrok-free.app — shuni Android ilovaga kiriting
jprq http 8000 # → https://xxxx.jprq.io — shuni Android ilovaga kiriting
Eslatma: tunnel URL'ini ALLOWED_HOSTS va CSRF_TRUSTED_ORIGINS'ga qo'shing (Django), aks holda 400 qaytishi mumkin.

Python'dan to'g'ridan (HTTP so'rovsiz)

Agar backend Django loyihangizning o'zi bo'lsa — HTTP so'rov qilmasdan, xizmatni to'g'ridan-to'g'ri chaqirib SMS navbatga qo'ying:

# Django ichida — HTTP round-trip yo'q from ownsms.models import ApiKey from ownsms.services.messaging import create_message key = ApiKey.objects.filter(scopes__contains=["send"]).first() msg, _ = create_message(key, to="+998901234567", text="Salom!", queued=True) print(msg.id, msg.status)
queued=True — telefon o'sha payt onlayn bo'lmasa ham xabar navbatda turadi va telefon ulanganda yuboriladi. Xabarni ulangan telefon o'z SIM'idan jo'natadi.

sms.omadli.uz serveri

O'z serveringizni ko'tarmoqchi bo'lmasangiz — sms.omadli.uz tayyor turibdi. Ro'yxatdan o'tasiz, o'z Android telefoningizni shu serverga ulaysiz va o'z SIM'ingizdan yuborasiz. Barcha API namunalari shu server bilan ishlaydi.

Muhim: ownsms — o'z-o'zi uchun model. sms.omadli.uz umumiy server bo'lsa ham, SMS aynan sizning ulangan telefoningiz orqali ketadi — server o'zi SMS jo'natmaydi. Telefon ulanmagan bo'lsa, xabar queuedda qoladi.

Narx va cheklovlar

sms.omadli.uz (demo)O'z serveringiz
NarxBepulBepul (ochiq kod, MIT)
Kunlik limitAdolatli foydalanish — ~100 SMS/kun/akkauntCheklovsiz
SMS narxiOperatoringiz tarifi (o'z SIM'ingiz) — ownsms qo'shimcha to'lov olmaydi
Haqiqiy cheklovSIM tarifingiz + qurilmada sozlagan rate/jitter/ish-soati/kunlik kvota
NazoratUmumiy demo serverTo'liq — o'z domeningiz, ma'lumotlaringiz
Ko'proq kerakmi? Kafolatli imkoniyat va cheksizlik uchun o'z serveringizni ko'taring — bir necha daqiqada.

Android ilovani sozlash

SMS aynan telefon orqali ketadi, shuning uchun bitta Android telefonni serverga ulash kerak. Bu bir martalik sozlash.

  1. Ilovani yuklab o'rnatingso’nggi APKni yuklab, telefonda oching. "Noma'lum manbadan o'rnatish"ga ruxsat bering (brauzer/fayl menejeri uchun).
  2. API URL kiriting — ilova ochilgach https://sms.omadli.uz (yoki o'z serveringiz / tunnel manzili) kiriting va URL saqlash.
  3. Ro'yxatdan o'tingYangi qurilma ro'yxatdan o'tkazish tugmasini bosing. Qurilma serverga ulanadi va akkaunt + API kalit yaratiladi.
  4. Ruxsatlarni bering — Sozlamalar → Tayyorlikda Ruxsatlarni so'rash: SMS yuborish, telefon holati, bildirishnomalar. Hammasiga ruxsat bering (SMS yuborish uchun shart).
  5. SIM tanlangSIM bo'limida standart SIM'ni tanlang (SMS shu raqamdan ketadi).
  6. API kalitni oling — Sozlamalar → Akkauntda API kalit yonidagi 👁 bilan ochib, 📋 bilan nusxa oling. Shu kalitni yuqoridagi kod namunalarida osk_YOUR_KEY o'rniga qo'yasiz.
  7. Fonda ishlashini yoqing — telefon uxlaganda ham xabarlarni qabul qilishi uchun:
    • Sozlamalar → Batareya optimizatsiyasini o'chirish (ownsms uchun).
    • Xiaomi/Oppo/Vivo/Huawei bo'lsa — OEM Autostart tugmasi orqali avtoishga tushishni yoqing.
  8. Xizmatni ishga tushiring — Bosh ekranda Boshlash. Holat "Faol — xabarlar kutilmoqda" bo'lsa, telefon tayyor. Endi API orqali yuborilgan SMS'lar shu telefondan ketadi.
Test: Sozlamalar → Test SMS bo'limidan o'zingizga bitta SMS yuborib ko'ring. Status Yuborildi bo'lsa — hammasi ishlayapti.

Asosiy endpointlar

MetodYo'lTavsif
POST/api/v1/registerAkkaunt + qurilma yaratish (token + kalit).
POST/api/v1/messagesBitta SMS yuborish.
GET/api/v1/messages / /{id}Ro'yxat / bitta xabar statusi.
POST/api/v1/messages/{id}/cancelNavbatdagi xabarni bekor qilish.
POST/api/v1/campaignsKampaniya (rassilka).
GET/api/v1/deviceQurilma holati + today_sent.
GET/api/v1/auditAudit jurnali.

To'liq interaktiv ma'lumotnoma — Swagger UI (/api/v1/openapi.yaml — sxema).

Tayyormisiz?

Telefoningizni ulang, kalit oling, birinchi SMS'ingizni yuboring.