वॉइस इवेंट
कॉल शुरू होने, उसका जवाब मिलने और उसके खत्म होने पर Bird वेबहुक इवेंट भेजता है। पोलिंग के बिना अपने सिस्टम अपडेट करने के लिए इनका इस्तेमाल करें। सब्सक्रिप्शन, सिग्नेचर, फिर से प्रयास और रीप्ले के लिए वेबहुक देखें।
इवेंट प्रकारों के ज़रिए किसी कॉल का क्रम:
voice_call.initiated: Bird ने कॉल सेटअप अनुरोध (एक SIPINVITE) स्वीकार किया और कॉल को रूट करना शुरू कियाvoice_call.answered: जिस नंबर पर आपने कॉल किया, उसने कॉल उठा ली। यह इवेंट केवल जवाब दी गई कॉल के लिए आता हैvoice_call.ended: कॉल खत्म हो गई है, और इवेंट में उसका परिणाम होता है
voice_call.initiated पुष्टि करता है कि कॉल मौजूद है, जबकि voice_call.ended उसका परिणाम बताता है। अस्वीकार की गई या विफल कॉल के लिए, रिपोर्ट की गई स्थिति और अंतिम SIP प्रतिक्रिया को कॉल रिकॉर्ड के साथ इस्तेमाल करें। केवल एक इवेंट मौजूद होने से पूरे जीवनकाल का अनुमान न लगाएँ।
इवेंट type एक ओपन enum है: Bird समय के साथ नए प्रकार जोड़ सकता है, इसलिए जिन प्रकारों को आप संभालते हैं उनका मिलान करें और बाकी को अनदेखा करें, किसी अपरिचित प्रकार को त्रुटि न मानें।
इवेंट एनवेलप
वॉइस इवेंट उसी नेस्टेड एनवेलप में आते हैं जिसमें हर दूसरा Bird इवेंट आता है, जिसका वर्णन वेबहुक गाइड में है: type, timestamp, और प्रकार के अनुसार एक data ऑब्जेक्ट। इवेंट की पहचान बॉडी में नहीं, बल्कि webhook-id HTTP हेडर में होती है।
| फ़ील्ड | विवरण |
|---|---|
type | इस पेज पर दिए गए तीन प्रकारों में से एक, उदाहरण के लिए voice_call.ended |
timestamp | इवेंट कब हुआ (RFC 3339)। इसी के आधार पर क्रम लगाएँ, पहुँचने के क्रम के आधार पर कभी नहीं |
data | इवेंट-विशिष्ट पेलोड, जिसमें हमेशा कॉल की पहचान वाले वही फ़ील्ड होते हैं |
हर वॉइस इवेंट के data में मिलान के लिए पहचान वाले वही फ़ील्ड होते हैं। दोनों नंबर E.164 फ़ॉर्मेट में होते हैं: शुरुआत में +, फिर देश कोड और राष्ट्रीय नंबर।
| फ़ील्ड | विवरण |
|---|---|
call_id | कॉल रिकॉर्ड की id (vcl_…), वही जो कॉल लॉग में दिखती है |
session_id | ट्रांसफ़र की गई या कई पक्षों वाली कॉल के हर लेग में एक जैसा (vcs_…)। जब कोई सेशन सहसंबंध लागू नहीं होता, तब null |
workspace_id | वह वर्कस्पेस जिससे कॉल संबंधित है |
direction | प्राप्त कॉल के लिए inbound; की गई कॉल के लिए outbound |
from | कॉल करने वाला नंबर |
to | वह नंबर जिस पर कॉल की गई |
इवेंट फ़ील्ड के नाम लेग API से अलग हैं: इवेंट का call_id लेग की पहचान करता है और लेग प्रतिक्रिया के id से मेल खाता है; इवेंट का session_id लेग प्रतिक्रिया के call_id से मेल खाता है। webhook अपडेट को API रिकॉर्ड से जोड़ते समय इसी मैपिंग का उपयोग करें।
ये लाइफ़साइकल इवेंट साझा webhook डिलीवरी और सिग्नेचर अनुबंध का उपयोग करते हैं। किसी सीक्वेंस का सिंक्रोनस webhook चरण एक अलग, बिना सिग्नेचर वाले रिसीवर प्रोटोकॉल का उपयोग करता है। इवेंट सब्सक्रिप्शन कॉन्फ़िगर करने से उस चरण से आने वाले अनुरोध प्रमाणित नहीं होते।
voice_call.initiated
Bird को INVITE मिला और उसने कॉल को रूट करना शुरू किया।
{
"type": "voice_call.initiated",
"timestamp": "2026-06-10T14:30:00Z",
"data": {
"call_id": "vcl_01krdgeqcxet5s7t44vh8rt9mg",
"session_id": "vcs_01krdgeqcxet5s7t44vh8rt9mh",
"workspace_id": "wsp_01krdgeqcxet5s7t44vh8rt9mj",
"direction": "outbound",
"from": "+14155551234",
"to": "+16505559876"
}
}voice_call.answered
प्राप्तकर्ता ने कॉल का जवाब दिया और बिल योग्य समय शुरू हो गया। जिस कॉल का जवाब नहीं दिया जाता, वह यह इवेंट नहीं भेजती।
पेलोड में वही कॉल पहचान फ़ील्ड होते हैं जो हर वॉइस इवेंट में होते हैं, और timestamp जवाब दिए जाने के क्षण पर सेट होता है।
voice_call.ended
कॉल समाप्त हो गई है। यह इवेंट परिणाम भी जोड़ता है:
| फ़ील्ड | विवरण |
|---|---|
status | कॉल कैसे समाप्त हुई: answered, no_answer, failed, rejected या unknown (देखें स्टेटस) |
sip_response_code | कॉल का अंतिम SIP कोड, उदाहरण के लिए 200 या 486। Bird द्वारा अस्वीकार की गई कॉल में 503 होता है; कोई अंतिम कोड दर्ज न होने पर null |
duration_ms | मिलीसेकंड में कॉल की कुल अवधि, Bird को कॉल मिलने के क्षण से कॉल कटने तक |
billable_ms | मिलीसेकंड में उत्तर दिए जाने के बाद का समय, इसलिए जिस कॉल का किसी ने उत्तर नहीं दिया, उसमें शून्य आता है |
{
"type": "voice_call.ended",
"timestamp": "2026-06-10T14:31:05Z",
"data": {
"call_id": "vcl_01krdgeqcxet5s7t44vh8rt9mg",
"session_id": "vcs_01krdgeqcxet5s7t44vh8rt9mh",
"workspace_id": "wsp_01krdgeqcxet5s7t44vh8rt9mj",
"direction": "outbound",
"from": "+14155551234",
"to": "+16505559876",
"status": "answered",
"sip_response_code": 200,
"duration_ms": 65000,
"billable_ms": 60000
}
}यह इवेंट नहीं बताता कि कॉल क्यों समाप्त हुई। जो कॉल प्लेटफ़ॉर्म की कॉल अवधि सीमा तक पहुँच गई, वह एक सामान्य answered समाप्ति के रूप में आती है, जिसका duration_ms लगभग 3 घंटे होता है।
कॉल रिकॉर्ड में दो ऐसी जानकारियाँ होती हैं जो यह इवेंट नहीं देता: अस्वीकृति का कारण और लागत। Bird द्वारा अस्वीकृति और कैरियर की विफलता में अंतर करने के लिए कॉल लॉग में कॉल खोलें। रेटिंग पूरी होने के बाद लागत दिखाई देती है।
इन्हें सुरक्षित रूप से उपयोग करना
webhook-idके आधार पर डुप्लिकेट हटाएँ। सिग्नलिंग या डिलीवरी का फिर से प्रयास किसी अपडेट को दोहरा सकता है। एक ही कॉल चरण दोबारा प्रकाशित होने पर उसकी डिलीवरी पहचान वही रहती है, इसलिए उसे कुंजी बनाने से डुप्लिकेट हट जाता है।- क्रम पर निर्भर न रहें। डिलीवरी क्रम में नहीं होतीं, इसलिए
answeredआपकोendedके बाद मिल सकता है।timestampके अनुसार क्रमबद्ध करें, और बाद में पहुँचे किंतु पहले के टाइमस्टैम्प वाले इवेंट को अनदेखा करें। - रिपोर्ट किए गए परिणाम के लिए
endedका उपयोग करें। इसमें स्थिति और अवधियाँ होती हैं। डिलीवरी कतार में लगने से पहले ही इवेंट का प्रकाशन विफल हो सकता है, इसलिए किसी इवेंट के न मिलने से यह सिद्ध नहीं होता कि कॉल अभी भी सक्रिय है। - कॉल रिकॉर्ड से मिलान करें। इवेंट समय पर अपडेट देते हैं, जबकि कॉल रिकॉर्ड कॉल लॉग में रहता है। मिलान के लिए कॉल को CSV के रूप में एक्सपोर्ट करें।
अगले कदम
| पेज | इसमें क्या शामिल है |
|---|---|
| वेबहुक और इवेंट | एंडपॉइंट सेटअप, सिग्नेचर सत्यापन, फिर से प्रयास और रीप्ले |
| कॉल लॉग | कॉल रिकॉर्ड का हर फ़ील्ड, और CSV एक्सपोर्ट |
संबंधित संसाधन
इस विषय के लिए दस्तावेज़, गाइड और उदाहरणों के साथ आगे बढ़ें।