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 उसका परिणाम रिपोर्ट करता है। INVITE स्वीकार करने के बाद Bird अस्वीकार हुई कॉल भी status: "failed" और sip_response_code: 503 के साथ voice_call.ended भेजती है।
इवेंट 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आपके उपकरण द्वारा की गई कॉल के लिए 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 पर डिडुप्लिकेट करें। Bird कम से कम एक बार डिलीवर करता है, और सिग्नलिंग फिर से प्रयास करना रीप्ले होने पर किसी कॉल का initiated इवेंट एक से अधिक बार प्रकाशित हो सकता है। वही कॉल, वही चरण, वही webhook-id, इसलिए इस पर key करने से डुप्लिकेट समाप्त हो जाता है।
  • क्रम पर निर्भर न रहें। डिलीवरी क्रमबद्ध नहीं होतीं, इसलिए answered आपके पास ended के बाद पहुँच सकता है। timestamp से सॉर्ट करें, और बाद में आने वाले लेकिन पहले के टाइमस्टैम्प वाले इवेंट को छोड़ दें।
  • ended को एकमात्र विश्वसनीय परिणाम मानें। यही वह इवेंट है जो स्टेटस और अवधि लेकर आता है, और इसी पर अपने रिकॉर्ड की key रखें।
  • कॉल रिकॉर्ड से मिलान करें। इवेंट समय पर अपडेट देते हैं, जबकि call log कॉल रिकॉर्ड रखता है। मिलान के लिए कॉल CSV के रूप में एक्सपोर्ट करें।

अगले कदम

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

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

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

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