Dasturchilar uchun: Sado AI API
Lidlarni Sado’ga yuboring — agent qo‘ng‘iroq qiladi. Natija (xulosa, lid harorati, keyingi qadam) webhook yoki voqealar lentasi orqali sizning tizimingizga qaytadi.
To‘liq ma’lumotnoma (OpenAPI 3.1): https://api.sadoai.uz/v1/openapi.json
Postman/Insomnia: Import → Link → shu manzilni qo‘ying.
1. Kalit oling
Portal → Sozlamalar → API kalitlari. Kalit faqat bir marta ko‘rsatiladi, har bir kalitning ruxsatlari (scope) bor: leads:write, leads:read, calls:read, calls:content (xulosa va matn), catalog:write.
2. Lid yuboring
event_id — sizning ID’ingiz: takror yuborilsa, ikkinchi lid yaratilmaydi. Rozilik asosi majburiy (qonun talabi).
curl -X POST https://api.sadoai.uz/v1/leads \
-H "Authorization: Bearer $SADO_KEY" \
-H "Content-Type: application/json" \
-d '{
"event_id": "site-form-1042",
"phone": "+998901112233",
"name": "Aziz",
"purpose": "2 xonali kvartira",
"consent": { "basis": "inbound_enquiry", "evidence": "sayt formasi #1042", "captured_at": "2026-09-26T10:00:00+05:00" }
}'3. Natijani oling — webhook
Portal → Integratsiyalar → Webhook qo‘shish. Har bir so‘rov imzolangan: X-Sado-Signature = HMAC-SHA256(maxfiy kalit, «timestamp.tana»). Imzoni tekshiring va 5 daqiqadan eski so‘rovlarni rad eting. 2xx bo‘lmasa, 8 marta qayta yuboriladi.
import { createHmac, timingSafeEqual } from "node:crypto";
function verify(rawBody: string, headers: Record<string, string>, secret: string) {
const ts = headers["x-sado-timestamp"];
if (Math.abs(Date.now() / 1000 - Number(ts)) > 300) return false;
const expected = "sha256=" + createHmac("sha256", secret).update(`${ts}.${rawBody}`).digest("hex");
const got = headers["x-sado-signature"] ?? "";
return got.length === expected.length && timingSafeEqual(Buffer.from(got), Buffer.from(expected));
}$ts = $_SERVER['HTTP_X_SADO_TIMESTAMP'];
$body = file_get_contents('php://input');
$expected = 'sha256=' . hash_hmac('sha256', $ts . '.' . $body, $secret);
$ok = abs(time() - (int)$ts) <= 300 && hash_equals($expected, $_SERVER['HTTP_X_SADO_SIGNATURE'] ?? '');…yoki voqealar lentasi (1C va NAT ortidagi tizimlar uchun)
Webhook qabul qila olmasangiz, lentani so‘rang: eskidan yangiga, 30 kun saqlanadi. Sahifani ishlab bo‘lgach next_cursor’ni saqlang va keyingi so‘rovda after sifatida yuboring.
curl "https://api.sadoai.uz/v1/events?types=call.analyzed,lead.created&after=$CURSOR" \
-H "Authorization: Bearer $SADO_KEY"
# → { "data": [ { "id": "evt_…", "type": "call.analyzed", "data": { "call": {…}, "analysis": {…} } } ], "next_cursor": "…" }4. Katalog: narx va qoldiq
Agent qo‘ng‘iroqda faqat katalogdagi narxni aytadi. 1000 tagacha mahsulotni bir so‘rovda yuboring; to‘liq sinxronlashda boshlanish vaqtini oldindan yozib oling, oxirida retire chaqiring — yuborilmaganlar sotuvdan olinadi. 24 soat yangilanmasa, agent «narx o‘zgargan bo‘lishi mumkin» deydi.
curl -X PUT https://api.sadoai.uz/v1/catalog/items \
-H "Authorization: Bearer $SADO_KEY" -H "Content-Type: application/json" \
-d '{ "source": "shop", "items": [ { "external_id": "NK-42", "name": "Krossovka Nike Air", "name_alt": "Кроссовки Найк", "price_uzs": 1250000, "stock": 3 } ] }'
curl -X POST https://api.sadoai.uz/v1/catalog/items/retire \
-H "Authorization: Bearer $SADO_KEY" -H "Content-Type: application/json" \
-d '{ "source": "shop", "before": "2026-09-26T10:00:00Z" }'Chegaralar va xatolar
Har bir kalit uchun daqiqasiga 600 so‘rov (oshsa 429 va Retry-After). Xatolar JSON: {error, issues}. Ro‘yxatlar yangidan eskiga, cursor bilan.
1C uchun kengaytma manba kodi va o‘rnatish yo‘riqnomasi menejeringizdan olinadi · Savol bo‘lsa: menejeringizga yoki Telegram’dagi Sado jamoasiga yozing.
