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.