अपनी 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: बिना कुंजी कनेक्शन#
क्लाउड सहायक हेडर में कुंजी नहीं डाल सकते — वे MCP सर्वर को OAuth से जोड़ते हैं। कुंजी बनाने की ज़रूरत नहीं।
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 |
— | कुंजी की शाखाएँ और उनके PBX |
| 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 (घटना id या समय), 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 के जर्नल में — पिछले 90 दिनों की अंतिम 400 कॉल।
| कोड | त्रुटि | क्या करें |
|---|---|---|
| 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=<unix समय>,v1=<"t.बॉडी" का वेबहुक सीक्रेट से HMAC-SHA256>। दोबारा गणना करें, स्थिर समय में तुलना करें और 5 मिनट से पुराने t को अस्वीकार करें। सीक्रेट whsec_… एक बार दिखाया जाता है; «नया सीक्रेट» पुराने को तुरंत रद्द कर देता है।
डिलीवरी — 10 सेकंड में 2xx जवाब दें। वरना हम 10 सेकंड, 30 सेकंड, 2, 5, 10, 15 और 15 मिनट के अंतराल पर दोबारा भेजते हैं (8 प्रयास, लगभग एक घंटा); दोबारा भेजे गए अनुरोध में वही id होता है — उसी से डुप्लिकेट हटाएँ। डिलीवरी लॉग (जवाब कोड, समय, प्रयास) वेबहुक विंडो में और GET /v1/webhooks/{id}/deliveries से मिलता है; «जाँचें» एक सेवा संदेश webhook.ping भेजता है। पता लगातार 3 दिन तक एक भी डिलीवरी स्वीकार नहीं करता — वेबहुक अपने आप बंद हो जाता है: मालिक को ईमेल आता है, «वेबहुक» विंडो में «स्वतः बंद» का निशान और «चालू करें» बटन दिखता है (या { "enabled": true } के साथ PATCH /v1/webhooks/{id})।
अपने सर्वर के बिना — वही फ़ीड पोलिंग से: GET /v1/events?since=<अंतिम घटना की id> या MCP टूल get_call_events (शाखा की पिछले 7 दिनों की घटनाएँ, अधिकतम 2000; एक जवाब में अधिकतम 500, more: true — उसी since से आगे बढ़ें)।
रिकॉर्डिंग संसाधित होने के बाद — ट्रांसक्रिप्ट और विश्लेषण वाला कॉल «कॉल» अनुभाग में «वेबहुक» स्रोत के वेबहुक से आता है।
«खुला / बंद» — { "closed": true } के साथ PUT /v1/open-closed शाखा को दिन के अंत तक बंद कर देता है (फ़ोन से *28 की तरह: कॉल «घंटों के बाहर» के नियमों से जाते हैं), false — खोल देता है; GET दिखाता है कि बंद है या नहीं और किसने किया। "until" के साथ — उस क्षण तक बंद (30 दिन से अधिक नहीं), फिर अपने आप खुल जाएगा: बिना ऑफ़सेट वाला समय (2026-10-05T09:00) शाखा के टाइमज़ोन में पढ़ा जाता है; false उसे भी हटा देता है। रूटिंग में «*28 कोड से बंद करें» का चेकबॉक्स चालू होना चाहिए (वरना 409)।
सुरक्षा#
- कुंजी एक बार दिखाई जाती है और हमारे पास केवल उसके फ़िंगरप्रिंट के रूप में रहती है; लीक हुई कुंजी एक बटन से रद्द हो जाती है।
- OAuth कनेक्शन की अनुमति केवल मालिक दे सकता है, और दिखता है कि पहुँच किस पते को जा रही है; अनुमत कनेक्शन को अधिकारों और शाखाओं तक सीमित किया जा सकता है और कभी भी रद्द किया जा सकता है।
- फ़ोन नंबर आपके ग्राहकों का व्यक्तिगत डेटा हैं: जर्नल और रिकॉर्डिंग के अधिकार केवल उन्हीं एकीकरणों को दें जिन्हें वे वाकई चाहिए।
- कुंजी या कनेक्शन से जुड़ा हर बदलाव PBX के कार्रवाई लॉग में कुंजी या ऐप के नाम के साथ दर्ज होता है।