Sign inGet started

Voice इवेंट

Bird कॉल शुरू होने, उत्तर मिलने और समाप्त होने पर webhook इवेंट भेजता है। इनका उपयोग अपने सिस्टम को बिना पोलिंग के अपडेट करने के लिए करें। सब्सक्रिप्शन, सिग्नेचर, फिर से प्रयास और रीप्ले के लिए Webhooks देखें।
इवेंट टाइप के ज़रिए एक कॉल का पथ:
  1. voice_call.initiated: Bird ने कॉल सेटअप अनुरोध (एक SIP INVITE) स्वीकार किया और कॉल रूट करना शुरू किया
  2. voice_call.answered: जिस नंबर पर आपने कॉल किया उसने उठाया। केवल उत्तर दी गई कॉल को यह इवेंट मिलता है
  3. voice_call.ended: कॉल समाप्त हो गई, और इवेंट परिणाम लेकर आता है
voice_call.initiated पुष्टि करता है कि कॉल मौजूद है, जबकि voice_call.ended उसका परिणाम बताता है। अस्वीकृत या विफल कॉल के लिए, रिपोर्ट की गई स्थिति और अंतिम SIP प्रतिक्रिया का उपयोग कॉल रिकॉर्ड के साथ करें। किसी एक इवेंट की उपस्थिति से पूर्ण जीवनचक्र का अनुमान न लगाएँ।
इवेंट type एक open enum है: Bird समय के साथ नए टाइप जोड़ सकता है, इसलिए जिन्हें आप हैंडल करते हैं उन्हें मैच करें और बाकी को अनदेखा करें, अपरिचित टाइप को त्रुटि न मानें।

इवेंट एनवेलप

Voice इवेंट उसी नेस्टेड एनवेलप में आते हैं जिसमें हर दूसरा Bird इवेंट आता है, जैसा Webhooks गाइड में बताया गया है: type, timestamp, और एक टाइप-विशिष्ट data ऑब्जेक्ट। इवेंट की पहचान बॉडी में नहीं बल्कि webhook-id HTTP हेडर में होती है।
फ़ील्डविवरण
typeइस पेज पर तीन टाइप में से एक, उदाहरण के लिए voice_call.ended
timestampइवेंट कब हुआ (RFC 3339)। इसी से सॉर्ट करें, आगमन क्रम से कभी नहीं
dataइवेंट-विशिष्ट पेलोड, जिसमें हमेशा वही कॉल पहचान फ़ील्ड होती हैं
हर voice इवेंट के data में सहसंबंध के लिए वही पहचान फ़ील्ड होती हैं। दोनों नंबर E.164 फ़ॉर्मैट में होते हैं: शुरू में +, कंट्री कोड, और राष्ट्रीय नंबर।
फ़ील्डविवरण
call_idकॉल रिकॉर्ड की id (vcl_…), वही जो Call log में दिखाई देती है
session_idट्रांसफ़र या मल्टी-पार्टी कॉल के हर लेग में साझा (vcs_…)। जब कोई सेशन सहसंबंध लागू नहीं होता तो null
workspace_idवह वर्कस्पेस जिससे कॉल संबंधित है
directionप्राप्त कॉल के लिए inbound; की गई कॉल के लिए outbound
fromकॉल करने वाला नंबर
toजिस नंबर पर कॉल किया गया

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

प्राप्तकर्ता ने उत्तर दिया, और बिल योग्य समय शुरू हुआ। अनुत्तरित कॉल यह इवेंट नहीं भेजती।
पेलोड वही कॉल पहचान फ़ील्ड है जो हर voice इवेंट में होती हैं, जिसमें timestamp उत्तर के क्षण पर सेट होता है।

voice_call.ended

कॉल समाप्त हो गई। यह इवेंट परिणाम जोड़ता है:
फ़ील्डविवरण
statusकैसे समाप्त हुई: answered, no_answer, failed, rejected, या unknown (देखें Statuses)
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
  }
}
कॉल रिकॉर्ड में दो विवरण होते हैं जो यह इवेंट नहीं देता: अस्वीकृति का कारण और लागत। Bird अस्वीकृति को कैरियर विफलता से अलग करने के लिए call log में कॉल खोलें। रेटिंग पूरी होने के बाद लागत दिखाई देती है।

सुरक्षित रूप से उपयोग करना

  • webhook-id पर डीडुप्लिकेट करें। सिग्नलिंग या डिलीवरी का फिर से प्रयास करना किसी अपडेट को दोहरा सकता है। एक ही कॉल चरण का दोबारा प्रकाशन अपनी डिलीवरी पहचान बनाए रखता है, इसलिए उस पर कुंजी लगाने से डुप्लिकेट समाप्त हो जाता है।
  • क्रम पर निर्भर न रहें। डिलीवरी क्रमबद्ध नहीं होतीं, इसलिए answered आपके पास ended के बाद पहुँच सकता है। timestamp से सॉर्ट करें, और बाद में आने वाले लेकिन पहले के टाइमस्टैम्प वाले इवेंट को छोड़ दें।
  • रिपोर्ट किए गए परिणाम के लिए ended का उपयोग करें। इसमें स्थिति और अवधियाँ होती हैं। डिलीवरी कतार में आने से पहले इवेंट प्रकाशन विफल हो सकता है, इसलिए किसी इवेंट का न मिलना यह साबित नहीं करता कि कॉल अभी भी सक्रिय है।
  • कॉल रिकॉर्ड से मिलान करें। इवेंट समय पर अपडेट देते हैं, जबकि call log कॉल रिकॉर्ड रखता है। मिलान के लिए कॉल CSV के रूप में एक्सपोर्ट करें।

अगले कदम

पेजकिसे कवर करता है
Webhooks और इवेंटएंडपॉइंट सेटअप, सिग्नेचर सत्यापन, फिर से प्रयास, और रीप्ले
Call logकॉल रिकॉर्ड की हर फ़ील्ड, और CSV एक्सपोर्ट

संबंधित संसाधन

इस विषय के लिए डॉक्यूमेंटेशन, गाइड और उदाहरणों के साथ आगे बढ़ें। संसाधन अंग्रेज़ी में हैं।

इम्प्लीमेंटेशन ब्रीफ़ पाएँ