Skip to main content
डिफ़ॉल्ट रूप से हर फ़ोन नंबर और publishable key को एक स्थिर एजेंट असाइन किया जाता है। जब आपको हर कॉलर के लिए या हर विज़िटर के लिए कस्टमाइज़ेशन चाहिए — VIP रूटिंग, लॉग-इन किए हुए यूज़र का कॉन्टेक्स्ट, A/B प्रॉम्प्ट टेस्ट — तो webhook-mode पर स्विच करें और अपने सर्वर को निर्णय लेने दें।

यह कैसे काम करता है

  1. आप telephony.incoming (फ़ोन) या web.incoming (विजेट) इवेंट को सब्सक्राइब करते हैं। दोनों ब्लॉकिंग वेबहुक हैं: ThunderPhone कॉल जारी रखने से पहले आपके रिस्पॉन्स के लिए 10 सेकंड तक इंतज़ार करता है।
  2. ThunderPhone आपको {call_id, from_number, to_number} भेजता है (विजेट सेशन में नंबरों के बजाय विजेट-विशिष्ट फ़ील्ड होते हैं — रिक्वेस्ट स्कीमा देखें)।
  3. आपका सर्वर एजेंट कॉन्फ़िगरेशन (प्रॉम्प्ट, वॉइस, प्रोडक्ट, टूल्स) के साथ रिस्पॉन्ड करता है। ThunderPhone उस कॉन्फ़िगरेशन का इस्तेमाल कॉल के लिए करता है।
  4. अगर आप {} रिटर्न करते हैं, टाइम आउट होते हैं या एरर होता है, तो स्थिर रूप से असाइन किया गया एजेंट फ़ॉलबैक के तौर पर इस्तेमाल होता है। सुरक्षित डिफ़ॉल्ट।
फ़ोन कॉल (telephony.incoming) और विजेट सेशन (web.incoming) के लिए यह एक समान रूप से काम करता है, चाहे इसे वेबहुक एंडपॉइंट पर या लेगेसी सिंगल-URL वेबहुक पर डिलीवर किया जाए।

1. वेबहुक डेस्टिनेशन कॉन्फ़िगर करें

फ़ोन नंबरों के लिए, अपने एंडपॉइंट को telephony.incoming के लिए सब्सक्राइब करें:
रिस्पॉन्स में एक one-shot secret शामिल होता है — इसे सेव करें; आप इसका उपयोग सिग्नेचर वेरिफ़िकेशन के लिए करेंगे।

2. हैंडलर इम्प्लीमेंट करें

तीन व्यावहारिक नियम:
  • हर रिक्वेस्ट पर सिग्नेचर वेरिफ़ाई करें (देखें वेबहुक सिग्नेचर वेरिफ़ाई करें)। इसे dev में स्किप न करें — एक बार सही करें और दोबारा इस्तेमाल करें।
  • तेज़ी से रिस्पॉन्ड करें। दस सेकंड की हार्ड लिमिट है, और हर सेकंड कॉलर के लिए खामोशी है। ज़रूरत हो तो डेटाबेस लुकअप करें, लेकिन डाउनस्ट्रीम LLMs को सिंक्रोनस रूप से कॉल न करें — डायनेमिक प्रॉम्प्ट जनरेशन चाहिए, तो पहले से कंप्यूट करें और कैश करें।
  • साफ़ तरीके से फॉल बैक करें। किसी भी अप्रत्याशित स्थिति में {} रिटर्न होना चाहिए, ताकि स्टैटिक रूप से असाइन किया गया एजेंट कॉल संभाल सके।

3. रिस्पॉन्स स्कीमा

रिस्पॉन्स बॉडी इनकमिंग-कॉल रिस्पॉन्स स्कीमा से बिल्कुल मेल खाती है। आम तौर पर इस्तेमाल होने वाले फ़ील्ड:
प्रति-कॉल स्पीक-ऑर्डर और max_hold_seconds वेबहुक रिस्पॉन्स में उपलब्ध नहीं हैं। इन्हें उस एजेंट पर सेट करें जिसका आप रेफ़रेंस करते हैं।

पैटर्न

लॉग-इन उपयोगकर्ता संदर्भ

वेबहुक-मोड विजेट्स में, विज़िटर के पेज को पहले से पता होता है कि वे कौन हैं। अपने वेबहुक को एक क्वेरी स्ट्रिंग पैरामीटर के साथ कॉल करें, जिसे विजेट SDK फॉरवर्ड करता है (?customer_id=123), और सर्वर-साइड पर ग्राहक को लुक अप करें।

A/B प्रॉम्प्ट रोलआउट

इसे खुद बनाने से पहले, ध्यान दें कि ThunderPhone में एक नेटिव एक्सपेरिमेंट्स फीचर (/dashboard/experiments और एजेंट बिल्डर का A/B टैब) है, जो वेरिएंट्स परिभाषित करता है, ट्रैफ़िक विभाजित करता है, और प्रति वेरिएंट परिणामों की तुलना करता है — किसी वेबहुक की आवश्यकता नहीं। अगर फिर भी आपको वेबहुक-साइड नियंत्रण चाहिए: call_id को हैश करें → बकेट; 0..49 के लिए प्रॉम्प्ट A और 50..99 के लिए प्रॉम्प्ट B सर्व करें। चुने गए बकेट को अपने DB में रिकॉर्ड करें और बाद में उसे पूर्ण कॉल के ग्रेड से कोरिलेट करें।

समय-आधारित रूटिंग

व्यावसायिक समय → “लाइव सपोर्ट” एजेंट; काम के घंटों के बाद → “संदेश लें” एजेंट। अपने हैंडलर में new Date().getUTCHours() पर आधारित साधारण स्विच।

अगले चरण

इनकमिंग-कॉल वेबहुक रेफरेंस

हर कॉन्फ़िगरेशन कुंजी सहित सटीक रिक्वेस्ट + रिस्पॉन्स स्कीमा।

वेबहुक सिग्नेचर सत्यापित करें

HMAC को एक बार सही करें; हर जगह पुनः उपयोग करें।

टूल इंटीग्रेशन बनाएं

डायनेमिक रूटिंग को प्रति-एजेंट टूल्स के साथ संयोजित करें।

डिलीवरी सेमांटिक्स

रिट्राइज़, क्रम, टाइमआउट्स।