C cenaly.com
Bepul boshlash

Shaxsiy ATS-ning API va MCP vositalari

Kalitlar va ruxsatlar, REST API, Claude va Cursor uchun MCP serveri, kalitsiz OAuth orqali ChatGPT va claude.ai-ni ulash, misollar, limitlar va xatolar

11 min read Admin-panel demo versiyasi
On this page 10

Oʻz PBXingizning API va MCP

Cenaly PBXingiz dasturlaringiz va AI yordamchilaringiz uchun ochiq:

  • CRM, hisob tizimi, oʻz saytingiz — REST API: qoʻngʻiroqlar jurnali, yozib olishlar va transkripsiyalar, bir bosishda qoʻngʻiroq, qoʻshimcha raqamlar, yoʻnaltirish, qoʻngʻiroq qoidalari;
  • Claude Code, Claude Desktop, Cursor — kalit orqali masofaviy MCP server;
  • ChatGPT, claude.ai, Perplexity, Cursor va VS Code — oʻsha MCP server kalitsiz: siz hisobingizga kirasiz va ruxsat berasiz (OAuth).

Hammasi hisob egasi nomidan va faqat u bergan huquqlar doirasida ishlaydi. Har bir oʻzgarish PBX harakatlar jurnalida kalit yoki ilova nomi bilan koʻrinadi.

Manzillar#

Nima Manzil
REST API https://api.cenaly.com/pbx-api/v1
MCP server (streamable HTTP) https://api.cenaly.com/pbx-api/mcp
Metodlar boʻyicha hujjatlar api.cenaly.com/pbx-api/v1/docs
OpenAPI 3.1 tavsifi api.cenaly.com/pbx-api/v1/openapi.json
OAuth metamaʼlumotlari https://api.cenaly.com/.well-known/oauth-authorization-server/pbx-api

Kalit va huquqlar#

Kalitni faqat hisob egasi yaratadi: Telefoniya → API va MCP → Kalitlar → Kalit yaratish. «PBX administratori» rolidagi xodim kalitlarni koʻrmaydi — kalit hisob egasi nomidan ishlaydi.

  • cpx_… koʻrinishidagi kalit bir marta koʻrsatiladi — yaratilgandan soʻng darhol, ulanish uchun tayyor qoʻyilmalar bilan birga. Bizda faqat uning barmoq izi (SHA-256) saqlanadi, kalitni tiklash mumkin emas — faqat yangisini chiqarish mumkin.
  • Kalitni filiallar bilan (aks holda — barcha filiallar, jumladan kelgusi filiallar ham) va muddat bilan (30, 90, 365 kun yoki muddatsiz) cheklash mumkin.
  • «Huquqlar» kalitning huquqlari va filiallarini darhol oʻzgartiradi: integratsiya ishlashda davom etadi, yangi huquqlar keyingi soʻrovdan boshlab amal qiladi.
  • «Bekor qilish» — darhol va butunlay: bu kalit bilan keyingi soʻrov 401 oladi.
  • Tirik kalitlar va ulanishlar — hisob uchun 20 tagacha.

Huquqlar tayyor toʻplam yoki belgilash orqali tanlanadi:

Huquq Nima beradi Toʻplamlar
calls:read qoʻngʻiroqlar jurnali va marshrutli qoʻngʻiroq kartasi CRM, AI yordamchisi, faqat oʻqish, hammasi
recordings:read suhbat yozib olishiga havola (10 daqiqa) va transkripsiya CRM, AI yordamchisi, faqat oʻqish, hammasi
calls:dial bir bosishda qoʻngʻiroq: avval xodimning telefoni jiringlaydi, javobdan soʻng PBX raqamni teradi CRM, AI yordamchisi, hammasi
extensions:read qoʻshimcha raqamlar, guruhlar, yoʻnaltirish, «bezovta qilmang» CRM, AI yordamchisi, faqat oʻqish, hammasi
extensions:write shaxsiy yoʻnaltirish va «bezovta qilmang»ni oʻzgartirish AI yordamchisi, hammasi
presence:read kim boʻsh, kim jiringlayapti, kim gaplashyapti AI yordamchisi, faqat oʻqish, hammasi
reports:read davr uchun call-markaz koʻrsatkichlari: xizmat koʻrsatish darajasi, kutish, tashlab ketilganlar, AHT, FCR, CSAT, qayerda qoʻngʻiroqlarni yoʻqotamiz, navbatlar, liniyalar, xodimlar boʻyicha kesimlar faqat oʻqish, hammasi
routes:read raqamlar, kiruvchi va chiquvchi qoidalari, qoidalar tarixi faqat oʻqish, hammasi
routes:write qoʻngʻiroq qoidalarini yaratish, oʻzgartirish, oʻchirish va qayta tartiblash, tarixdan qaytarish faqat alohida belgilash orqali
config:export PBX sozlamalarini fayl formatida chiqarish faqat alohida belgilash orqali
config:import sozlamalarni jadvallardan yuklash: oldindan koʻrish, soʻngra qoʻllash faqat alohida belgilash orqali
webhooks:write qoʻngʻiroq hodisalari webhooklarini yaratish, oʻzgartirish, tekshirish va oʻchirish faqat alohida belgilash orqali
daynight:write filialni kun oxirigacha yoki sanagacha yopish, ochish — telefondagi *28 bilan bir xil faqat alohida belgilash orqali

Biror narsani oʻzgartiradigan yoki daqiqalarni sarflaydigan huquqlar oynada sargʻish rang bilan belgilangan. Oxirgi uchta huquq hech bir toʻplamga, hatto «Hammasi»ga ham kirmaydi — ularni faqat ongli ravishda, alohida belgilash orqali berish mumkin.

ChatGPT, claude.ai, Perplexity, Cursor, VS Code: kalitsiz ulanish#

Bulutli yordamchilar kalitni sarlavhaga qoʻya olmaydi — ular MCP serverni OAuth orqali ulanadi. Kalit yaratish shart emas.

claude.ai: Sozlamalar → Konnektorlar → Oʻz konnektoringizni qoʻshish → https://api.cenaly.com/pbx-api/mcp manzilini qoʻying → Ulanish.

ChatGPT: Sozlamalar → Ilovalar va konnektorlar → Qoʻshimcha → ishlab chiquvchi rejimini yoqing → Yaratish → https://api.cenaly.com/pbx-api/mcp manzilini qoʻying, autentifikatsiya — OAuth.

Perplexity: Hisob sozlamalari → Konnektorlar → «+ Oʻz konnektori» → Masofaviy → https://api.cenaly.com/pbx-api/mcp manzilini qoʻying, autentifikatsiya — OAuth.

Cursor va VS Code: https://api.cenaly.com/pbx-api/mcp manzilli masofaviy (HTTP) MCP serverni kalitli sarlavhasiz qoʻshing — kirish oynasi brauzerda ochiladi. Cursor’da: .cursor/mcp.json → {"mcpServers": {"cenaly-pbx": {"url": "https://api.cenaly.com/pbx-api/mcp"}}}; VS Code’da: «MCP: Add Server» buyrugʻi → HTTP.

Soʻngra yordamchi Cenaly kirish oynasini ochadi. Kirgandan soʻng quyidagilarni koʻrasiz:

  • kim ruxsat soʻrayapti — ilova javob qaytadigan manzil boʻyicha nomlanadi: «Tekshirilgan konnektor · chatgpt.com» (xuddi shunday — claude.ai, perplexity.ai, vscode.dev, Cursor), «Bu kompyuterdagi dastur» yoki «Notanish manzil» ogohlantirishi. Ilova yuborgan nom mayda koʻrsatiladi — uni har kim yozishi mumkin;
  • huquqlar — ilova soʻragan narsa belgilangan (agar u «hammasini ketma-ket» soʻrasa, «AI yordamchisi» toʻplami belgilanadi); «faqat alohida belgilash orqali» huquqlar hech qachon oldindan belgilanmaydi;
  • filiallar — hammasi yoki tanlanganlari.

«Ruxsat berish» sizni yordamchiga qaytaradi va u darhol PBX vositalarini koʻradi. Ulanish Telefoniya → API va MCP → Kalitlar boʻlimida OAuth belgisi va ilova manzili bilan satr sifatida paydo boʻladi — oʻsha yerda huquqlar oʻzgartiriladi va ruxsat bekor qilinadi. Oʻsha ilovani qayta ulash uning huquqlarini yangilaydi, ikkinchi ulanish yaratmaydi.

Ulanishlarga ruxsat berishni faqat hisob egasi amalga oshirishi mumkin.

Claude Code, Claude Desktop, Cursor: kalit orqali ulanish#

Claude Code — bitta buyruq bilan:

claude mcp add --transport http telephony https://api.cenaly.com/pbx-api/mcp --header "Authorization: Bearer cpx_…"

Claude Desktop, Cursor (.cursor/mcp.json) va sozlamalar fayli boʻlgan boshqa mijozlar:

{
  "mcpServers": {
    "telephony": {
      "type": "http",
      "url": "https://api.cenaly.com/pbx-api/mcp",
      "headers": { "Authorization": "Bearer cpx_…" }
    }
  }
}

Kalitingiz bilan tayyor qoʻshimchalar kalit yaratilgandan soʻng darhol koʻrsatiladi. AI yordamchisi faqat kalit ruxsat bergan vositalarni koʻradi va «bugun kim qoʻngʻiroq qildi va javob olmadi», «bu mijozga Anna telefonidan qayta qoʻngʻiroq qil», «menga mobil raqamga yoʻnaltirishni yoq» kabi savollarga javob bera oladi.

REST API#

Kalit Authorization: Bearer <kalit> sarlavhasida (yoki X-Api-Key). Agar kalitda bitta filial boʻlsa, location parametrini uzatmasa ham boʻladi; agar bir nechta boʻlsa, 400 location_required javobi ularni sanab beradi.

Metod Yoʻl Huquq Nima qiladi
GET /v1/me — kalitning huquqlari, filiallari va limitlari
GET /v1/locations — kalitning filiallari va ularning ATS
GET /v1/calls calls:read qoʻngʻiroqlar jurnali: since, until, direction, status (answered, missed, ai), number, extension, limit 100 gacha, cursor
GET /v1/calls/{id} calls:read marshruti bilan qoʻngʻiroq: qaysi qoida ishladi, kimning telefoni jiringladi, kim javob berdi
GET /v1/calls/{id}/recording recordings:read yozib olishga 10 daqiqalik havola
GET /v1/calls/{id}/transcript recordings:read suhbatning matni va yakuni
POST /v1/dial calls:dial bir bosishda qoʻngʻiroq: { "extension": "101", "number": "+995555123456" }
GET /v1/dial/{commandId} calls:dial bir bosishda qoʻngʻiroq qanday ketmoqda
GET /v1/extensions extensions:read qoʻshimcha raqamlar, guruhlar, yoʻnaltirish, «bezovta qilmang»
PUT /v1/extensions/{ext}/forwarding extensions:write qoʻshimcha raqamning shaxsiy yoʻnaltirishi
PUT /v1/extensions/{ext}/dnd extensions:write «bezovta qilmang»: { "on": true }
GET /v1/presence presence:read hozir kim boʻsh
GET /v1/metrics reports:read davr uchun call-markaz metrikalari: from, to (filialning mahalliy sanalari YYYY-MM-DD, sukut boʻyicha — oxirgi 7 kun), compare (prev, year, prev,year yoki boʻsh), sections (metrics,loss,queues,lines,operators,directions,heatmap,daily), callbacks=true — qayta qoʻngʻiroq tezligi ham
GET /v1/routes routes:read raqamlar, kiruvchi va chiquvchi qoidalar
GET /v1/routes/history routes:read qoidalar oʻzgarishlari tarixi
POST, PUT, DELETE /v1/routes/inbound…, /v1/routes/outbound… routes:write qoʻngʻiroq qoidalarini bittadan: yaratish, uzatilgan maydonlarni oʻzgartirish, oʻchirish, joyini almashtirish, orqaga qaytarish
GET, POST /v1/config/export, /v1/config/import config:export, config:import sozlamalar fayl formatida; yuklash — avval koʻrib chiqish, soʻng qoʻllash
GET /v1/events calls:read filialning 7 kunlik qoʻngʻiroq hodisalari (2000 gacha): since (hodisa id yoki vaqt), types, limit (bir javobda 500 gacha)
GET, POST, PATCH, DELETE /v1/webhooks… webhooks:write vebhuklar: roʻyxat, yaratish, oʻzgartirish, oʻchirish; …/rotate-secret, …/test, …/deliveries
GET, PUT /v1/open-closed routes:read, daynight:write yopiqmi va qachongacha; kun oxirigacha yopish { "closed": true }, sanagacha { "closed": true, "until": "2026-10-05T09:00" } yoki ochish

Maydonlarning toʻliq tavsifi — hujjatlar sahifasida va OpenAPIda.

Bugun kim qoʻngʻiroq qildi va javob olmadi:

curl -H "Authorization: Bearer cpx_…" \
  "https://api.cenaly.com/pbx-api/v1/calls?status=missed&since=$(date -u +%Y-%m-%dT00:00:00Z)"

Mijozga 101-qoʻshimcha raqam telefonidan qayta qoʻngʻiroq qilish:

curl -X POST -H "Authorization: Bearer cpx_…" -H "Content-Type: application/json" \
  -d '{"extension":"101","number":"+995555123456"}' "https://api.cenaly.com/pbx-api/v1/dial"

Sentabr metrikalari avgust va oʻtgan yilning sentabri bilan taqqoslagan holda — oʻz BI panelingiz uchun:

curl -H "Authorization: Bearer cpx_…" \
  "https://api.cenaly.com/pbx-api/v1/metrics?from=2026-09-01&to=2026-09-30&compare=prev,year"

Javobdagi metrics — Telefoniya → Qoʻngʻiroqlar jurnali → Analitika ekranidagi aynan oʻsha raqamlar: kiruvchi, qabul qilingan va oʻtkazib yuborilgan, xizmat koʻrsatish darajasi (chegara va maqsad — navbat sozlamalaridan), oʻrtacha va maksimal kutish, qisqalarsiz tashlab ketilganlar ulushi, AHT, FCR, oʻtkazmalar va bot ulushi, CSAT. compare.prev va compare.year — oʻtgan davr va oʻtgan yilning aynan shu davri uchun oʻsha maydonlar. Oʻtgan yil bilan taqqoslash 400 kungacha boʻlgan davrlar uchun hisoblanadi.

Xodim 15 soniyada javob bermasa, mobil raqamga yoʻnaltirishni yoqish:

curl -X PUT -H "Authorization: Bearer cpx_…" -H "Content-Type: application/json" \
  -d '{"forward":{"noAnswer":{"kind":"number","number":"+995599000111"},"noAnswerSec":15}}' \
  "https://api.cenaly.com/pbx-api/v1/extensions/101/forwarding"

MCP vositalari#

REST bilan bir xil amallar. Mijoz faqat kalit yoki ulanish ruxsat bergan vositalarni koʻradi:

Vositalar Huquq
list_locations —
list_calls, get_call calls:read
get_call_recording, get_call_transcript recordings:read
call_number, get_dial_status calls:dial
list_extensions extensions:read
set_forwarding, set_do_not_disturb extensions:write
get_presence presence:read
get_call_metrics reports:read
list_routes, list_route_history routes:read
save_inbound_rule, delete_inbound_rule, move_inbound_rule, save_outbound_rule, delete_outbound_rule, move_outbound_rule, set_outbound_calls, restore_route_version routes:write
export_config config:export
import_config config:import
get_call_events calls:read
list_webhooks, save_webhook, delete_webhook, rotate_webhook_secret, test_webhook, list_webhook_deliveries webhooks:write
get_open_closed routes:read
set_open_closed daynight:write

Server sessiyalarsiz ishlaydi (streamable HTTP, JSON-RPC 2.0): initialize, tools/list, tools/call.

Oʻz konnektorlaringizni ishlab chiquvchilar uchun OAuth#

Avtorizatsiya serveri MCP avtorizatsiya spetsifikatsiyasiga amal qiladi — uni qoʻllab-quvvatlaydigan har qanday mijoz mos keladi:

  1. Tokensiz MCP ga soʻrov 401 oladi, WWW-Authenticate: Bearer resource_metadata="https://api.cenaly.com/.well-known/oauth-protected-resource/pbx-api/mcp" sarlavhasi bilan.
  2. Resurs metadatalari (RFC 9728) avtorizatsiya serverini koʻrsatadi — https://api.cenaly.com/pbx-api; uning metadatalari (RFC 8414) — https://api.cenaly.com/.well-known/oauth-authorization-server/pbx-api manzilida (va …/pbx-api/.well-known/openid-configuration).
  3. Mijozni dinamik roʻyxatdan oʻtkazish (RFC 7591): POST /pbx-api/oauth/register. Qaytish manzili — faqat localhost / 127.0.0.1 (istalgan port) yoki maʼlum konnektor manzili (claude.ai, claude.com, chatgpt.com, chat.openai.com, vscode.dev, www.perplexity.ai, enterprise.perplexity.ai; Cursor uchun — yana aynan cursor://anysphere.cursor-mcp/oauth/callback). Mijozning kirish usuli — none (ommaviy mijoz), client_secret_post yoki client_secret_basic.
  4. PKCE bilan avtorizatsiya kodi (faqat S256): GET /pbx-api/oauth/authorize → egasining kirish va rozilik oynasi → code, state va iss bilan sizning manzilingizga qaytish. resource parametri — MCP server manzili.
  5. Tokenlar: POST /pbx-api/oauth/token. Kod bir martalik va 2 daqiqa yashaydi (notoʻgʻri code_verifier uni oʻchiradi); kirish tokeni — 1 soat; yangilash tokeni — 90 kun, har yangilashda yangisi beriladi, avvalgisi ishlashdan toʻxtaydi.
  6. Bekor qilish: POST /pbx-api/oauth/revoke (RFC 7009) ulanishni butunlay oʻchiradi — «API va MCP» oynasidagi «Bekor qilish» kabi.

Kirish tokeni kalit qabul qilinadigan hamma joyda qabul qilinadi: ham MCP da, ham REST da, egasi ruxsat bergan huquq va filiallar bilan.

Limitlar va xatolar#

  • Kalit yoki ulanish uchun: daqiqada 120 soʻrov va sutkada 20 000 (REST va MCP birgalikda).
  • Bir klikda qoʻngʻiroq — alohida: daqiqada 10 va sutkada 300.
  • Jurnal — soʻrov uchun 100 tagacha qoʻngʻiroq; filial PBX jurnalida — oxirgi 90 kun ichidagi 400 tagacha qoʻngʻiroq.
Kod Xato Nima qilish kerak
401 api_key_missing, api_key_invalid kalit yoʻq, u bekor qilingan yoki muddati oʻtgan; OAuth tokeni muddati oʻtgan — uni yangilang
403 scope_required kalitda huquq yoʻq — uni «Huquqlar» boʻlimida qoʻshing
400 location_required kalitda bir nechta filial bor — location ni uzating
404 location_not_found filial yoʻq yoki kalit boshqa filiallar bilan cheklangan
429 rate_limited limit tugagan, Retry-After soniyadan keyin qayta urinib koʻring

Qoʻngʻiroqlar hodisalari#

Real vaqtda — PBX vebhuklari: Telefoniya → API va MCP → Vebhuklar yoki webhooks:write huquqiga ega kalit bilan POST /v1/webhooks. Sizning https manzilingizga har bir hodisa uchun bir necha soniya ichida POST keladi: call.started (boshlandi: yoʻnalish, kim, qayerga, liniya), call.ringing (kimda jiringlayapti — har bir telefon uchun bittadan), call.answered (kim javob berdi), call.transferred (kim va kimga oʻtkazdi), call.ended (natija, davomiylik, suhbat, kim javob berdi). Vebhukni filiallar va hodisa turlari bilan cheklash mumkin.

{ "id": "1727771234.56:2", "type": "call.answered", "createdAt": "2026-10-01T10:00:05Z",
  "locationId": "…", "webhookId": "wh_…", "attempt": 1,
  "data": { "callId": "1727771234.56", "seq": 2, "direction": "inbound",
            "from": { "number": "+995555123456" }, "party": { "extension": "101", "name": "Анна" } } }

Imzo — X-Cenaly-Signature: t=<unix vaqti>,v1=<vebhuk maxfiy kaliti bilan "t.tana" dan HMAC-SHA256> sarlavhasi. Qayta hisoblang, doimiy vaqtda solishtiring va t 5 daqiqadan eski boʻlsa rad eting. whsec_… maxfiy kaliti bir marta koʻrsatiladi; «Yangi maxfiy kalit» avvalgisini darhol bekor qiladi.

Yetkazib berish — 10 soniya ichida 2xx bilan javob bering. Aks holda 10 s, 30 s, 2, 5, 10, 15 va 15 daqiqa tanaffuslar bilan qayta yuboramiz (8 urinish, taxminan bir soat); qayta yuborishda oʻsha id boʻladi — shu orqali dublikatlarni tashlab yuboring. Yetkazib berishlar jurnali (javob kodi, vaqt, urinish) — vebhuk oynasida va GET /v1/webhooks/{id}/deliveries; «Tekshirish» xizmat webhook.ping yuboradi. Manzil 3 sutka ketma-ket bitta ham yetkazib berishni qabul qilmasa — vebhuk oʻzi oʻchadi: egasiga xat keladi, «Vebhuklar» oynasida «Avtomatik oʻchirilgan» belgisi va «Yoqish» tugmasi paydo boʻladi (yoki { "enabled": true } bilan PATCH /v1/webhooks/{id}).

Oʻz serveringizsiz — xuddi shu lentani soʻrov orqali oling: GET /v1/events?since=<oxirgi hodisa id> yoki MCP get_call_events vositasi (filial hodisalari oxirgi 7 kun uchun, 2000 tagacha; bitta javobda — 500 tagacha, more: true — oʻsha since bilan keyingisini oling).

Yozuv qayta ishlangandan soʻng — transkripsiya va tahlilga ega qoʻngʻiroq «Qoʻngʻiroqlar» boʻlimidagi «Vebhuk» manbasi vebhuki orqali keladi.

«Ochiq / yopiq» — { "closed": true } bilan PUT /v1/open-closed filialni sutka oxirigacha yopadi (telefondan *28 kabi: qoʻngʻiroqlar «ish vaqtidan tashqari» qoidalari boʻyicha ketadi), false — ochadi; GET yopiqmi va kim yopganini koʻrsatadi. "until" bilan — shu paytgacha yopiq (30 kundan oshmasligi kerak), keyin oʻzi ochiladi: vaqt siljishsiz (2026-10-05T09:00) filial vaqt mintaqasida oʻqiladi; false uni ham bekor qiladi. Marshrutlashda «*28 kodi bilan yopish» belgisi yoqilgan boʻlishi kerak (aks holda 409).

Xavfsizlik#

  • Kalit bir marta koʻrsatiladi va bizda faqat barmoq izi sifatida saqlanadi; oshkor boʻlgan kalit bitta tugma bilan bekor qilinadi.
  • OAuth ulanishiga faqat egasi ruxsat beradi va ruxsat qaysi manzilga berilayotgani koʻrinadi; ruxsat berilgan ulanishni huquqlar va filiallar bilan cheklash hamda istalgan vaqtda bekor qilish mumkin.
  • Telefon raqamlari — mijozlaringizning shaxsiy maʼlumotlari: jurnal va yozuvlarga huquqni faqat ularga chindan kerak boʻlgan integratsiyalarga bering.
  • Kalit yoki ulanish boʻyicha barcha oʻzgarishlar PBX harakatlar jurnalida kalit yoki ilova nomi bilan qayd etiladi.
Was this article helpful?