নিজের PBX-এর API ও MCP
আপনার নিজের PBX Cenaly আপনার প্রোগ্রাম ও AI সহায়কদের জন্য উন্মুক্ত:
- CRM, হিসাব সিস্টেম, নিজের সাইট — REST API: কল লগ, রেকর্ডিং ও প্রতিলিপি, ক্লিক-টু-কল, এক্সটেনশন, ফরওয়ার্ডিং, কলের নিয়ম;
- Claude Code, Claude Desktop, Cursor — কী দিয়ে রিমোট MCP সার্ভার;
- ChatGPT, claude.ai, Perplexity, Cursor ও VS Code — একই MCP সার্ভার কী ছাড়াই: আপনি নিজের অ্যাকাউন্টে লগইন করে অ্যাক্সেস অনুমোদন করেন (OAuth)।
সবকিছু অ্যাকাউন্ট মালিকের নামে এবং শুধু তিনি যে অনুমতি দিয়েছেন তা দিয়েই কাজ করে। প্রতিটি পরিবর্তন PBX-এর অ্যাকশন লগে কী বা অ্যাপের নামসহ দেখা যায়।
ঠিকানা#
| কী | ঠিকানা |
|---|---|
| REST API | https://api.cenaly.com/pbx-api/v1 |
| MCP সার্ভার (streamable HTTP) | https://api.cenaly.com/pbx-api/mcp |
| মেথডের ডকুমেন্টেশন | api.cenaly.com/pbx-api/v1/docs |
| OpenAPI 3.1 বর্ণনা | api.cenaly.com/pbx-api/v1/openapi.json |
| OAuth মেটাডেটা | https://api.cenaly.com/.well-known/oauth-authorization-server/pbx-api |
কী ও অনুমতি#
কী তৈরি করেন শুধু অ্যাকাউন্ট মালিক: টেলিফোনি → API ও MCP → কী → কী তৈরি করুন। «PBX অ্যাডমিনিস্ট্রেটর» ভূমিকার কর্মী কী দেখতে পান না — কী মালিকের নামে কাজ করে।
cpx_…ধরনের কী একবারই দেখানো হয় — তৈরির সাথে সাথেই, সংযোগের জন্য প্রস্তুত স্নিপেটসহ। আমাদের কাছে শুধু তার ফিঙ্গারপ্রিন্ট (SHA-256) সংরক্ষিত থাকে, কী পুনরুদ্ধার করা যায় না — শুধু নতুন ইস্যু করা যায়।- কী শাখা (নাহলে — সব শাখা, ভবিষ্যতেরগুলোসহ) এবং মেয়াদ (30, 90, 365 দিন বা অনির্দিষ্টকাল) দিয়ে সীমাবদ্ধ করা যায়।
- «অনুমতি» কী-এর অনুমতি ও শাখা তাৎক্ষণিকভাবে বদলায়: ইন্টিগ্রেশন কাজ করতে থাকে, নতুন অনুমতি পরের অনুরোধ থেকেই কার্যকর হয়।
- «প্রত্যাহার» — সাথে সাথে ও চিরতরে: এই কী দিয়ে পরের অনুরোধ 401 পাবে।
- সক্রিয় কী ও সংযোগ — প্রতি অ্যাকাউন্টে সর্বোচ্চ 20টি।
অনুমতি রেডিমেড সেট বা চেকবক্স দিয়ে বেছে নেওয়া হয়:
| অনুমতি | কী দেয় | সেট |
|---|---|---|
calls:read |
কল লগ ও রুটসহ কল কার্ড | CRM, AI সহায়ক, শুধু পড়া, সব |
recordings:read |
কথোপকথনের রেকর্ডিংয়ের লিংক (10 মিনিট) ও প্রতিলিপি | CRM, AI সহায়ক, শুধু পড়া, সব |
calls:dial |
ক্লিক-টু-কল: প্রথমে কর্মীর ফোন বাজে, উত্তর দেওয়ার পর PBX নম্বর ডায়াল করে | CRM, AI সহায়ক, সব |
extensions:read |
এক্সটেনশন, গ্রুপ, ফরওয়ার্ডিং, «বিরক্ত করবেন না» | CRM, AI সহায়ক, শুধু পড়া, সব |
extensions:write |
ব্যক্তিগত ফরওয়ার্ডিং ও «বিরক্ত করবেন না» বদলানো | AI সহায়ক, সব |
presence:read |
কে ফ্রি, কে বাজছে, কে কথা বলছে | AI সহায়ক, শুধু পড়া, সব |
reports:read |
নির্দিষ্ট সময়ের কল সেন্টার মেট্রিক: সার্ভিস লেভেল, অপেক্ষা, পরিত্যক্ত, AHT, FCR, CSAT, কোথায় কল হারাচ্ছি, কিউ, লাইন, কর্মী অনুযায়ী বিভাজন | শুধু পড়া, সব |
routes:read |
নম্বর, ইনকামিং ও আউটগোয়িং নিয়ম, নিয়মের ইতিহাস | শুধু পড়া, সব |
routes:write |
কলের নিয়ম তৈরি, বদল, মুছে ফেলা ও পুনর্বিন্যাস, ইতিহাস থেকে রোলব্যাক | শুধু আলাদা চেকবক্সে |
config:export |
PBX সেটিংস ফাইল আকারে এক্সপোর্ট | শুধু আলাদা চেকবক্সে |
config:import |
টেবিল থেকে সেটিংস ইমপোর্ট: প্রিভিউ, তারপর প্রয়োগ | শুধু আলাদা চেকবক্সে |
webhooks:write |
কল ইভেন্টের ওয়েবহুক তৈরি, বদল, যাচাই ও মুছে ফেলা | শুধু আলাদা চেকবক্সে |
daynight:write |
দিনের শেষ পর্যন্ত বা নির্দিষ্ট তারিখ পর্যন্ত শাখা বন্ধ করা, খোলা — ফোন থেকে *28-এর মতোই |
শুধু আলাদা চেকবক্সে |
যে অনুমতিগুলো কিছু বদলায় বা মিনিট খরচ করে, সেগুলো উইন্ডোতে অ্যাম্বার রঙে চিহ্নিত। শেষ তিনটি অনুমতি কোনো সেটেই নেই, এমনকি «সব»-তেও না — সেগুলো শুধু সচেতনভাবে, আলাদা চেকবক্সে দেওয়া যায়।
ChatGPT, claude.ai, Perplexity, Cursor, VS Code: কী ছাড়া সংযোগ#
ক্লাউড সহায়করা হেডারে কী বসাতে পারে না — তারা OAuth দিয়ে MCP সার্ভার সংযুক্ত করে। কী তৈরি করার দরকার নেই।
claude.ai: সেটিংস → কানেক্টর → নিজের কানেক্টর যোগ করুন → https://api.cenaly.com/pbx-api/mcp পেস্ট করুন → সংযুক্ত করুন।
ChatGPT: সেটিংস → অ্যাপ ও কানেক্টর → অ্যাডভান্সড → ডেভেলপার মোড চালু করুন → তৈরি করুন → https://api.cenaly.com/pbx-api/mcp পেস্ট করুন, অথেন্টিকেশন — OAuth।
Perplexity: অ্যাকাউন্ট সেটিংস → কানেক্টর → «+ নিজের কানেক্টর» → রিমোট → https://api.cenaly.com/pbx-api/mcp পেস্ট করুন, অথেন্টিকেশন — OAuth।
Cursor ও VS Code: কী-এর হেডার ছাড়া https://api.cenaly.com/pbx-api/mcp ঠিকানার রিমোট (HTTP) MCP সার্ভার যোগ করুন — লগইন উইন্ডো ব্রাউজারে খুলবে। Cursor-এ: .cursor/mcp.json → {"mcpServers": {"cenaly-pbx": {"url": "https://api.cenaly.com/pbx-api/mcp"}}}; VS Code-এ: «MCP: Add Server» কমান্ড → HTTP।
এরপর সহায়ক Cenaly-র লগইন উইন্ডো খুলবে। লগইনের পর আপনি দেখবেন:
- কে অ্যাক্সেস চাইছে — অ্যাপের নাম হয় যে ঠিকানায় উত্তর ফিরবে তা দিয়ে: «যাচাইকৃত কানেক্টর · chatgpt.com» (একইভাবে — claude.ai, perplexity.ai, vscode.dev, Cursor), «এই কম্পিউটারের প্রোগ্রাম» বা সতর্কতা «অপরিচিত ঠিকানা»। অ্যাপ যে নাম পাঠিয়েছে তা ছোট করে দেখানো হয় — যে কেউ তা লিখতে পারে;
- অনুমতি — অ্যাপ যা চাইছে তা চিহ্নিত (যদি সে «সব কিছু» চায়, «AI সহায়ক» সেট চিহ্নিত হয়); «শুধু আলাদা চেকবক্সে» অনুমতিগুলো আগে থেকে কখনো চিহ্নিত হয় না;
- শাখা — সব বা নির্বাচিত।
«অনুমোদন করুন» আপনাকে সহায়কে ফিরিয়ে নেয়, এবং সে সাথে সাথেই PBX-এর টুল দেখতে পায়। সংযোগটি টেলিফোনি → API ও MCP → কী-তে OAuth লেবেল ও অ্যাপের ঠিকানাসহ একটি লাইন হিসেবে দেখা যায় — সেখানেই অনুমতি বদলানো ও অ্যাক্সেস প্রত্যাহার করা যায়। একই অ্যাপের পুনঃসংযোগ তার অনুমতি হালনাগাদ করে, দ্বিতীয় সংযোগ তৈরি করে না।
সংযোগ অনুমোদন করতে পারেন শুধু অ্যাকাউন্ট মালিক।
Claude Code, Claude Desktop, Cursor: কী দিয়ে সংযোগ#
Claude Code — একটি কমান্ডেই:
claude mcp add --transport http telephony https://api.cenaly.com/pbx-api/mcp --header "Authorization: Bearer cpx_…"
Claude Desktop, Cursor (.cursor/mcp.json) এবং সেটিংস ফাইলযুক্ত অন্যান্য ক্লায়েন্ট:
{
"mcpServers": {
"telephony": {
"type": "http",
"url": "https://api.cenaly.com/pbx-api/mcp",
"headers": { "Authorization": "Bearer cpx_…" }
}
}
}
আপনার কী দিয়ে তৈরি রেডিমেড স্নিপেট কী তৈরির সঙ্গে সঙ্গেই দেখানো হয়। AI সহায়ক কেবল কী দ্বারা অনুমোদিত টুলগুলোই দেখে এবং উত্তর দিতে পারে «আজ কে ফোন করেছিল এবং সংযোগ হয়নি», «আন্নার ফোন থেকে এই অতিথিকে আবার ফোন করুন», «আমার জন্য মোবাইলে ফরওয়ার্ডিং চালু করুন»।
REST API#
কী — Authorization: Bearer <কী> হেডারে (অথবা X-Api-Key)। কী-এর একটি শাখা থাকলে location প্যারামিটার পাঠানোর প্রয়োজন নেই; একাধিক থাকলে 400 location_required উত্তর সেগুলো তালিকাভুক্ত করবে।
| মেথড | পাথ | অনুমতি | কী করে |
|---|---|---|---|
| GET | /v1/me |
— | কী-এর অনুমতি, শাখা ও সীমা |
| GET | /v1/locations |
— | কী-এর শাখা ও তাদের পাবলিক সুইচড টেলিফোনি |
| GET | /v1/calls |
calls:read |
কল লগ: since, until, direction, status (answered, missed, ai), number, extension, limit 100 পর্যন্ত, cursor |
| GET | /v1/calls/{id} |
calls:read |
রুটসহ কল: কোন নিয়ম কাজ করেছে, কার ফোন বেজেছে, কে উত্তর দিয়েছে |
| GET | /v1/calls/{id}/recording |
recordings:read |
10 মিনিটের জন্য রেকর্ডিংয়ের লিংক |
| GET | /v1/calls/{id}/transcript |
recordings:read |
কথোপকথনের প্রতিলিপি ও সারসংক্ষেপ |
| POST | /v1/dial |
calls:dial |
এক ক্লিকে কল: { "extension": "101", "number": "+995555123456" } |
| GET | /v1/dial/{commandId} |
calls:dial |
এক ক্লিকে কল কেমন চলছে |
| GET | /v1/extensions |
extensions:read |
এক্সটেনশন, গ্রুপ, ফরওয়ার্ডিং, «বিরক্ত করবেন না» |
| PUT | /v1/extensions/{ext}/forwarding |
extensions:write |
এক্সটেনশনের ব্যক্তিগত ফরওয়ার্ডিং |
| PUT | /v1/extensions/{ext}/dnd |
extensions:write |
«বিরক্ত করবেন না»: { "on": true } |
| GET | /v1/presence |
presence:read |
এই মুহূর্তে কে ফাঁকা আছেন |
| GET | /v1/metrics |
reports:read |
নির্দিষ্ট সময়ের জন্য কল সেন্টারের মেট্রিক: from, to (শাখার স্থানীয় তারিখ YYYY-MM-DD, ডিফল্ট — শেষ 7 দিন), compare (prev, year, prev,year বা খালি), sections (metrics,loss,queues,lines,operators,directions,heatmap,daily), callbacks=true — আবার ফোন করার গতিও |
| GET | /v1/routes |
routes:read |
নম্বর, ইনকামিং ও আউটগোয়িং নিয়ম |
| GET | /v1/routes/history |
routes:read |
নিয়ম পরিবর্তনের ইতিহাস |
| POST, PUT, DELETE | /v1/routes/inbound…, /v1/routes/outbound… |
routes:write |
কলের নিয়ম এক এক করে: তৈরি, পাঠানো ফিল্ড পরিবর্তন, মুছে ফেলা, পুনর্বিন্যাস, রোলব্যাক |
| GET, POST | /v1/config/export, /v1/config/import |
config:export, config:import |
ফাইল ফরম্যাটে সেটিংস; আপলোড — প্রিভিউ, তারপর প্রয়োগ |
| GET | /v1/events |
calls:read |
শাখার 7 দিনের কল ইভেন্ট (2000 পর্যন্ত): since (ইভেন্ট আইডি বা সময়), types, limit (প্রতি উত্তরে 500 পর্যন্ত) |
| GET, POST, PATCH, DELETE | /v1/webhooks… |
webhooks:write |
ওয়েবহুক: তালিকা, তৈরি, পরিবর্তন, মুছে ফেলা; …/rotate-secret, …/test, …/deliveries |
| GET, PUT | /v1/open-closed |
routes:read, daynight:write |
বন্ধ কি না এবং কতক্ষণ পর্যন্ত; দিনের শেষ পর্যন্ত বন্ধ { "closed": true }, নির্দিষ্ট তারিখ পর্যন্ত { "closed": true, "until": "2026-10-05T09:00" } বা খোলা |
ফিল্ডের সম্পূর্ণ বিবরণ — ডকুমেন্টেশন পৃষ্ঠায় এবং OpenAPI-তে।
আজ কে ফোন করেছিল এবং সংযোগ হয়নি:
curl -H "Authorization: Bearer cpx_…" \
"https://api.cenaly.com/pbx-api/v1/calls?status=missed&since=$(date -u +%Y-%m-%dT00:00:00Z)"
এক্সটেনশন 101-এর ফোন থেকে গ্রাহককে আবার ফোন করুন:
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"
গত বছরের আগস্ট ও সেপ্টেম্বরের সঙ্গে তুলনাসহ সেপ্টেম্বরের মেট্রিক — নিজের BI প্যানেলের জন্য:
curl -H "Authorization: Bearer cpx_…" \
"https://api.cenaly.com/pbx-api/v1/metrics?from=2026-09-01&to=2026-09-30&compare=prev,year"
উত্তরে metrics — টেলিফোনি → কল লগ → অ্যানালিটিক্স স্ক্রিনের মতোই একই সংখ্যা: ইনকামিং, গৃহীত ও মিসড, সার্ভিস লেভেল (থ্রেশহোল্ড ও লক্ষ্য — কিউ সেটিংস থেকে), গড় ও সর্বোচ্চ অপেক্ষা, সংক্ষিপ্ত কল ছাড়া পরিত্যক্তের অনুপাত, AHT, FCR, ট্রান্সফার ও বটের অনুপাত, CSAT। compare.prev এবং compare.year — আগের সময়ের এবং এক বছর আগের একই সময়ের একই ফিল্ড। গত বছরের সঙ্গে তুলনা 400 দিন পর্যন্ত সময়ের জন্য গণনা করা হয়।
কর্মী 15 সেকেন্ডে উত্তর না দিলে মোবাইলে ফরওয়ার্ডিং চালু করুন:
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 টুল#
REST-এর মতো একই অপারেশন। ক্লায়েন্ট শুধু সেই টুলগুলোই দেখে, যেগুলো কী বা সংযোগে অনুমোদিত:
| টুল | অনুমতি |
|---|---|
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 |
সার্ভার সেশন ছাড়াই কাজ করে (streamable HTTP, JSON-RPC 2.0): initialize, tools/list, tools/call।
নিজের কানেক্টরের ডেভেলপারদের জন্য OAuth#
অথরাইজেশন সার্ভার MCP অথরাইজেশন স্পেসিফিকেশন মেনে চলে — যে কোনো ক্লায়েন্ট, যা এটি সমর্থন করে, কাজ করবে:
- টোকেন ছাড়া MCP-তে অনুরোধ করলে 401 পাওয়া যায়, হেডারসহ
WWW-Authenticate: Bearer resource_metadata="https://api.cenaly.com/.well-known/oauth-protected-resource/pbx-api/mcp"। - রিসোর্স মেটাডেটা (RFC 9728) অথরাইজেশন সার্ভারের নাম দেয় —
https://api.cenaly.com/pbx-api; তার মেটাডেটা (RFC 8414) — ঠিকানায়https://api.cenaly.com/.well-known/oauth-authorization-server/pbx-api(এবং…/pbx-api/.well-known/openid-configuration)। - ক্লায়েন্টের ডাইনামিক রেজিস্ট্রেশন (RFC 7591):
POST /pbx-api/oauth/register. রিটার্ন ঠিকানা — শুধুlocalhost/127.0.0.1(যেকোনো পোর্ট) বা পরিচিত কানেক্টরের ঠিকানা (claude.ai, claude.com, chatgpt.com, chat.openai.com, vscode.dev, www.perplexity.ai, enterprise.perplexity.ai; Cursor-এর ক্ষেত্রে — আরও ঠিকcursor://anysphere.cursor-mcp/oauth/callback)। ক্লায়েন্টের লগইন পদ্ধতি —none(পাবলিক ক্লায়েন্ট),client_secret_postবাclient_secret_basic। - PKCE-সহ অথরাইজেশন কোড (শুধু
S256):GET /pbx-api/oauth/authorize→ মালিকের লগইন ও সম্মতির উইন্ডো → আপনার ঠিকানায়code,stateএবংissসহ ফেরত।resourceপ্যারামিটার — MCP সার্ভারের ঠিকানা। - টোকেন:
POST /pbx-api/oauth/token. কোড একবারই ব্যবহারযোগ্য এবং 2 মিনিট টেকে (ভুলcode_verifierএটি বাতিল করে); অ্যাক্সেস টোকেন — 1 ঘণ্টা; রিফ্রেশ টোকেন — 90 দিন, প্রতিবার রিফ্রেশে নতুনটি দেওয়া হয়, আগেরটি কাজ করা বন্ধ করে। - রিভোক:
POST /pbx-api/oauth/revoke(RFC 7009) সংযোগটি সম্পূর্ণ বাতিল করে — যেমন «API এবং MCP» উইন্ডোতে «প্রত্যাহার»।
অ্যাক্সেস টোকেন যেখানেই কী কাজ করে, সেখানেই গৃহীত হয়: MCP-তে এবং REST-এ, মালিক যে অনুমতি ও শাখা অনুমোদন করেছেন সেগুলোসহ।
সীমা ও ত্রুটি#
- প্রতি কী বা সংযোগে: মিনিটে 120 অনুরোধ এবং দিনে 20 000 (REST ও MCP একসাথে)।
- ক্লিক-টু-কল — আলাদাভাবে: মিনিটে 10 এবং দিনে 300।
- জার্নাল — প্রতি অনুরোধে 100 কল পর্যন্ত; PBX-এর শাখার জার্নালে — শেষ 400 কল, 90 দিনের মধ্যে।
| কোড | ত্রুটি | কী করবেন |
|---|---|---|
| 401 | api_key_missing, api_key_invalid |
কী নেই, প্রত্যাহৃত বা মেয়াদোত্তীর্ণ; OAuth টোকেনের মেয়াদ শেষ — রিফ্রেশ করুন |
| 403 | scope_required |
কী-তে অনুমতি নেই — «অনুমতি»-তে যোগ করুন |
| 400 | location_required |
কী-তে একাধিক শাখা — location পাঠান |
| 404 | location_not_found |
শাখা নেই বা কী অন্য শাখায় সীমাবদ্ধ |
| 429 | rate_limited |
সীমা শেষ, Retry-After সেকেন্ড পরে আবার চেষ্টা করুন |
কল ইভেন্ট#
রিয়েল টাইমে — PBX ওয়েবহুক: টেলিফোনি → API এবং MCP → ওয়েবহুক অথবা webhooks:write অনুমতিসহ কী দিয়ে POST /v1/webhooks। আপনার https-ঠিকানায় সেকেন্ডের মধ্যে প্রতিটি ইভেন্টের জন্য POST আসে: call.started (শুরু হয়েছে: দিক, কে, কোথায়, লাইন), call.ringing (কার কাছে বাজছে — প্রতিটি ফোনের জন্য একটি করে), call.answered (কে উত্তর দিয়েছে), call.transferred (কে এবং কাকে স্থানান্তর করেছে), call.ended (ফলাফল, সময়কাল, কথোপকথন, কে উত্তর দিয়েছে)। ওয়েবহুক শাখা এবং ইভেন্টের ধরন দ্বারা সীমাবদ্ধ করা যায়।
{ "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": "Анна" } } }
স্বাক্ষর — হেডার X-Cenaly-Signature: t=<ইউনিক্স সময়>,v1=<"t.বডি"-এর HMAC-SHA256 ওয়েবহুকের সিক্রেট দিয়ে>। পুনরায় গণনা করুন, ধ্রুবক সময়ে তুলনা করুন এবং ৫ মিনিটের বেশি পুরনো t প্রত্যাখ্যান করুন। সিক্রেট whsec_… একবারই দেখানো হয়; «নতুন সিক্রেট» আগেরটি সাথে সাথে বাতিল করে।
ডেলিভারি — ১০ সেকেন্ডের মধ্যে 2xx উত্তর দিন। অন্যথায় ১০ সেকেন্ড, ৩০ সেকেন্ড, ২, ৫, ১০, ১৫ এবং ১৫ মিনিট বিরতিতে পুনরায় পাঠাই (৮টি চেষ্টা, প্রায় এক ঘণ্টা); পুনঃপ্রেরণে একই id থাকে — এটি দিয়ে ডুপ্লিকেট বাদ দিন। ডেলিভারি লগ (প্রতিক্রিয়া কোড, সময়, চেষ্টা) — ওয়েবহুক উইন্ডোতে এবং GET /v1/webhooks/{id}/deliveries-এ; «পরীক্ষা করুন» একটি পরিষেবা webhook.ping পাঠায়। ঠিকানা টানা ৩ দিন কোনো ডেলিভারি গ্রহণ না করলে — ওয়েবহুক নিজে থেকে বন্ধ হয়ে যায়: মালিকের কাছে ইমেইল আসে, «ওয়েবহুক» উইন্ডোতে — «স্বয়ংক্রিয়ভাবে বন্ধ» চিহ্ন এবং «চালু করুন» বোতাম (অথবা { "enabled": true } সহ PATCH /v1/webhooks/{id})।
নিজের সার্ভার ছাড়া — একই ফিড পোলিং করে: GET /v1/events?since=<শেষ ইভেন্টের id> অথবা MCP টুল get_call_events (শাখার ইভেন্ট গত ৭ দিনের, সর্বোচ্চ ২০০০; প্রতি উত্তরে — সর্বোচ্চ ৫০০, more: true — একই since দিয়ে আরও পাতা দেখুন)।
রেকর্ডিং প্রক্রিয়াকরণের পরে — ট্রান্সক্রিপশন ও বিশ্লেষণসহ কল «ওয়েবহুক» সোর্সের ওয়েবহুক দিয়ে «কল» বিভাগে আসে।
«খোলা / বন্ধ» — { "closed": true } সহ PUT /v1/open-closed শাখাটি দিনের শেষ পর্যন্ত বন্ধ করে (ফোন থেকে *28-এর মতো: কল «ঘণ্টার বাইরে» নিয়মে চলে), false — খোলে; GET দেখায় বন্ধ কি না এবং কে করেছে। "until" সহ — সেই মুহূর্ত পর্যন্ত বন্ধ (সর্বোচ্চ ৩০ দিন), তারপর নিজে থেকে খুলে যাবে: অফসেট ছাড়া সময় (2026-10-05T09:00) শাখার টাইমজোনে পড়া হয়; false এটিও বাতিল করে। রাউটিংয়ে «*28 কোড দিয়ে বন্ধ করুন» চেকবক্স চালু থাকা প্রয়োজন (অন্যথায় 409)।
নিরাপত্তা#
- কী একবারই দেখানো হয় এবং আমাদের কাছে শুধু ফিঙ্গারপ্রিন্ট হিসেবে সংরক্ষিত থাকে; ফাঁস হওয়া কী একটি বোতামে প্রত্যাহার করা যায়।
- OAuth সংযোগ শুধু মালিক অনুমোদন করতে পারেন, এবং কোন ঠিকানায় অ্যাক্সেস যাচ্ছে তা দেখা যায়; অনুমোদিত সংযোগ অনুমতি ও শাখা দ্বারা সীমাবদ্ধ করা যায় এবং যেকোনো সময় প্রত্যাহার করা যায়।
- ফোন নম্বর — আপনার ক্লায়েন্টদের ব্যক্তিগত ডেটা: শুধু সেই ইন্টিগ্রেশনগুলিকে জার্নাল ও রেকর্ডিংয়ের অনুমতি দিন, যাদের সত্যিই প্রয়োজন।
- কী বা সংযোগের মাধ্যমে সব পরিবর্তন — PBX-এর অ্যাকশন লগে কী বা অ্যাপের নামসহ লিপিবদ্ধ হয়।