Wixzel Voice के साथ Node.js में Twilio AI रिसेप्शनिस्ट बनाएँ
इस गाइड के अंत तक आपके मौजूदा Twilio नंबर पर आने वाली कॉल का जवाब आपका बनाया AI रिसेप्शनिस्ट देगा: वह कॉलर का स्वागत करता है, आपके निर्देशों के आधार पर जवाब देता है और अपॉइंटमेंट बुक करता है, जिन्हें आप API से वापस पढ़ सकते हैं। Node.js में इसमें लगभग 30 मिनट लगते हैं, TypeScript और JavaScript के लिए wixzel-voice SDK और एक Twilio Elastic SIP ट्रंक के साथ। classic इंजन पर इंजन टाइम $0.0867 प्रति कनेक्टेड मिनट है, तीन मिनट की कॉल के लिए लगभग $0.26, जो प्रीपेड बैलेंस से प्रति सेकंड बिल होता है। ट्रंक के मिनट Twilio सीधे आपको बिल करता है, बिना किसी मार्कअप के।
लेखक Aqeel Shamsudheen · प्रकाशित · अपडेट
- समय
- लगभग 30 मिनट
- इंजन
- classic
- इंजन टाइम
- $0.0867 प्रति कनेक्टेड मिनट
शुरू करने से पहले आपको क्या चाहिए?
- Elastic SIP Trunking वाला Twilio अकाउंट, और एक Twilio फ़ोन नंबर।
- Wixzel Voice API की (
wv_live_…) और अकाउंट पर क्रेडिट। न्यूनतम रिचार्ज $5 है। - Node.js 20 या उसके बाद का वर्शन।
इसे Wixzel Voice पर स्टेप-बाय-स्टेप कैसे बनाएँ?
01Twilio पर Elastic SIP ट्रंक बनाएँ
Twilio कंसोल में Elastic SIP Trunking खोलें और एक ट्रंक बनाएँ। Termination में एक Termination SIP URI चुनें, जैसे
your-clinic.pstn.twilio.com। यही hostname उस ट्रंक काhostहै जिसे आप अगले स्टेप में कनेक्ट करेंगे।Twilio कंसोल खुला रखें। API से दो पते मिलने के बाद आपको उन्हें भरने के लिए यहाँ वापस आना है।
02SDK इंस्टॉल करें और ट्रंक कनेक्ट करें
SDK इंस्टॉल करें और अपनी API की एनवायरनमेंट में रखें:
shellnpm install wixzel-voice export WIXZEL_API_KEY="wv_live_..."trunk.mjsimport { WixzelVoice } from 'wixzel-voice'; const client = new WixzelVoice({ apiKey: process.env.WIXZEL_API_KEY }); const trunk = await client.sipTrunks.create({ name: 'Twilio', host: 'your-clinic.pstn.twilio.com', // your Termination SIP URI port: 5060, transport: 'udp', }); console.log('TRUNK_ID', trunk.id); console.log('Allowlist at Twilio:', trunk.platform_ip); console.log('Origination URI:', trunk.origination_uri);यहाँ कोई username या password नहीं है, क्योंकि Twilio सोर्स IP से ऑथराइज़ करता है, जो अगला स्टेप है। इसके बजाय Twilio Credential List इस्तेमाल करने के लिए उसका
usernameऔरpasswordदें। पासवर्ड एन्क्रिप्ट करके रखा जाता है और API उसे फिर कभी नहीं लौटाता।03Twilio को Wixzel Voice की ओर पॉइंट करें, दोनों दिशाओं में
Twilio आउटगोइंग और इनकमिंग को अलग-अलग कॉन्फ़िगर करता है, और कोई भी हिस्सा छूट जाए तो वह बिना कुछ बताए फ़ेल होता है।
Termination में, फिर Authentication में, ऊपर प्रिंट हुआ
platform_ipएक IP Access Control List में जोड़ें। इसके बिना Twilio लगभग एक सेकंड में hangup cause 21 के साथ कॉल रिजेक्ट कर देता है।Origination में एक Origination SIP URI जोड़ें, जो ऊपर प्रिंट हुए
origination_uriपर सेट हो। इसके बिना आपका नंबर कभी एजेंट तक नहीं पहुँचता और किसी भी लॉग में कुछ नहीं दिखता, क्योंकि कॉल Twilio से बाहर ही नहीं निकलती।आखिर में, Numbers में अपना Twilio नंबर इस ट्रंक से जोड़ें।
04रिसेप्शनिस्ट बनाएँ
एजेंट यानी निर्देश (prompt), एक शुरुआती लाइन और एक वॉइस इंजन।
appointment_booking_enabledउसे कॉल के दौरान अपॉइंटमेंट देखने, बुक करने और कैंसल करने देता है; निर्देश उसे बताते हैं कि वह कौन-से दिन, घंटे और कितनी लंबाई के स्लॉट ऑफ़र कर सकता है।agent.mjsimport { WixzelVoice } from 'wixzel-voice'; const client = new WixzelVoice({ apiKey: process.env.WIXZEL_API_KEY }); const agent = await client.agents.create({ name: 'Reception', system_prompt: [ 'You are the receptionist for Riverside Dental, answering the phone.', 'Keep every reply to one or two short sentences, and never read out lists.', 'You can book, move and cancel check-ups and cleanings.', 'Offer appointments Monday to Friday, 09:00 to 17:00, 30 minutes each.', 'Before booking, ask for the full name of the caller and repeat the day and time back.', 'For a dental emergency, tell the caller to hang up and ring the emergency number.', 'If you cannot help, take a message and promise a callback.', ].join('\n'), opening_message: 'Riverside Dental, this is the automated assistant. How can I help?', appointment_booking_enabled: true, voice: { stt: { model: 'deepgram/nova-3', language: 'en-US' }, llm: { model: 'openrouter/gpt-4o-mini' }, tts: { model: 'elevenlabs/eleven_flash_v2_5' }, }, }); console.log('AGENT_ID', agent.id);यह classic इंजन है: Deepgram Nova-3, GPT-4o-mini और ElevenLabs Flash v2.5, अंग्रेज़ी के लिए सबसे सस्ती भरोसेमंद जोड़ी, $0.0867 प्रति मिनट। बोलने वाली आवाज़ चुनने के लिए
ttsब्लॉक में एकvoiceजोड़ें;client.engines.voices('classic')बताता है कि यह कौन-सी आवाज़ें इस्तेमाल कर सकता है।शुरुआती लाइन बताती है कि कॉलर एक ऑटोमेटेड असिस्टेंट से बात कर रहा है। जहाँ कानून इसकी, या कॉल रिकॉर्ड होने की सूचना की, माँग करता है, वहाँ इसकी सही जगह शुरुआती लाइन ही है।
05अपना नंबर रिसेप्शनिस्ट तक रूट करें
नंबर को ट्रंक पर रजिस्टर करें, और उस एजेंट को सेट करें जो इसका जवाब देगा:
number.mjsimport { WixzelVoice } from 'wixzel-voice'; const client = new WixzelVoice({ apiKey: process.env.WIXZEL_API_KEY }); const number = await client.phoneNumbers.create({ phone_number: '+14155550100', // your Twilio number, in E.164 sip_trunk_id: process.env.TRUNK_ID, inbound_agent_id: process.env.AGENT_ID, }); console.log('NUMBER_ID', number.id);जिस नंबर पर
inbound_agent_idनहीं है, उस पर आने वाली कॉल रिजेक्ट हो जाती हैं। उसी एजेंट से कॉल भी करवाने के लिए, जैसे रिमाइंडर या टेस्ट कॉल,client.agents.update(agentId, { outbound_phone_number_id: number.id })से इस नंबर को उसका कॉलर ID बनाएँ।06कॉल करें, फिर कॉल और बुकिंग पढ़ें
किसी मोबाइल से अपने Twilio नंबर पर कॉल करें और एक स्लॉट बुक करें। फ़ोन रखते ही कॉल और अपॉइंटमेंट दोनों API में होते हैं:
results.mjsimport { WixzelVoice } from 'wixzel-voice'; const client = new WixzelVoice({ apiKey: process.env.WIXZEL_API_KEY }); // Lists are newest first. const calls = await client.calls.list({ direction: 'inbound', limit: 1 }); const latest = calls.data[0]; if (latest) { const call = await client.calls.retrieve(latest.id); console.log(call.status, call.duration_seconds + 's', (call.cost_micros ?? 0) / 1e6, 'USD'); for (const line of call.transcript) console.log(line.role + ': ' + line.content); } const appointments = await client.appointments.list({ limit: 5 }); for (const a of appointments.data) { console.log(a.date_time, a.client_name, a.phone_number, a.status); }date_timeहमेशा UTC में होता है। हर बुकिंग परappointmentBookedwebhook भी चलता है, जिससे आप बुकिंग होते ही उसे अपने कैलेंडर में कॉपी कर सकते हैं।
Wixzel Voice पर इस बिल्ड की लागत कितनी है?
$0.0867 प्रति कनेक्टेड मिनट पर classic इंजन पर 3 मिनट की कॉल का इंजन टाइम: हर कॉल पर लगभग $0.26। टेलीफ़ोनी आपका अपना ट्रंक है, आपके कैरियर की दर पर, और यह इसमें शामिल नहीं है।
| हर महीने की कॉल | कनेक्टेड मिनट | हर महीने का इंजन खर्च |
|---|---|---|
| 200 | 600 | $52.02 |
| 1,000 | 3,000 | $260 |
| 3,000 | 9,000 | $780 |
Wixzel Voice सिर्फ़ इंजन टाइम बिल करता है, कॉल के हर सेकंड के हिसाब से, प्रीपेड बैलेंस से। Elastic SIP Trunking के मिनट Twilio आपके Twilio अकाउंट पर आपके Twilio रेट से बिल करता है; Wixzel Voice वह चार्ज न देखता है, न उस पर मार्कअप लगाता है।
प्रीपेड, बिना सब्सक्रिप्शन और बिना फ़्री टियर: $5 से क्रेडिट जोड़ें और इस्तेमाल उसी से कटता है। अपने इस्तेमाल का अनुमान लगाएँ।
इस बिल्ड पर Wixzel Voice की कौन-सी सीमाएँ लागू होती हैं?
- रिसेप्शनिस्ट आपके कामकाज के घंटे अपने निर्देशों से जानता है। v1 API में availability endpoint नहीं है, इसलिए वह आपका असली कैलेंडर नहीं देख सकता: API से पहले से बुक किया गया समय रिजेक्ट होता है, लेकिन जो अपॉइंटमेंट आप कहीं और रखते हैं वे उसे नहीं दिखते।
- बुकिंग अकाउंट के टाइम ज़ोन में पढ़ी जाती हैं, जो बदला न गया हो तो UTC है, और v1 API अभी इसे बदल नहीं सकता। भरोसा करने से पहले अपनी पहली बुकिंग का
date_timeजाँचें, और अगर आपका बिज़नेस UTC पर नहीं है तो aqeel@wixzel.com पर लिखें। - डिफ़ॉल्ट रूप से एक अकाउंट पर एक साथ पाँच कॉल लाइव हो सकती हैं। किसी कॉल के खत्म होने तक आगे की कॉल रिजेक्ट होती हैं, और माँगने पर यह सीमा बढ़ाई जाती है।
- आपका नंबर Twilio पर ही रहता है। Wixzel Voice नंबर न बेचता है, न पोर्ट करता है, न रखता है।
- Wixzel Voice के व्यवहार में बदलाव तारीख वाले
Wixzel-Versionहेडर के पीछे आते हैं।
अक्सर पूछे जाने वाले सवाल
क्या Twilio पर AI रिसेप्शनिस्ट बनाया जा सकता है?
inbound_agent_id के साथ रजिस्टर करें। इसके बाद उस नंबर पर आने वाली कॉल का जवाब आपका एजेंट देता है, और ट्रंक का बिल Twilio सीधे आपको देता रहता है।क्या मुझे अपना नंबर Twilio से हटाना होगा?
मेरा Twilio नंबर एजेंट तक क्यों नहीं पहुँचता?
origination_uri से मेल खाना चाहिए, और नंबर पर inbound_agent_id होना चाहिए।AI रिसेप्शनिस्ट की एक कॉल का खर्च कितना है?
क्या JavaScript के अलावा दूसरी भाषाओं के लिए SDK है?
wixzel-voice, और Dart और Flutter के लिए pub.dev पर wixzel_voice। दूसरी भाषाएँ वही HTTP API सीधे कॉल करती हैं, जिसका विवरण https://docs.voice.wixzel.com/api-reference पर OpenAPI डॉक्यूमेंट में है।और कहाँ पढ़ें
Wixzel Voice के बारे में
Wixzel Voice एक वॉइस AI API है, जिससे ऐसे AI एजेंट बनते हैं जो आपके अपने SIP ट्रंक पर असली फ़ोन कॉल करते और उनका जवाब देते हैं, या आपके वेब और मोबाइल ऐप में लोगों से बात करते हैं। एक API की और एक प्रीपेड बैलेंस हर वॉइस इंजन को कवर करते हैं, और बिल असली इस्तेमाल के हर सेकंड के हिसाब से बनता है।
और गाइड
Claude Code या claude.ai में Claude आपके SIP ट्रंक से असली कॉल करता है और ट्रांसक्रिप्ट पढ़कर बताता है, और कुछ भी डायल होने से पहले आपसे पुष्टि लेता है।
दो फ़ोन एजेंट, एक हिंदी और एक मलयालम बोलने वाला, Sarvam के भारतीय भाषा मॉडल पर, जो आपके SIP ट्रंक से कॉल का जवाब देते हैं या कॉल करते हैं।
एक Flutter ऐप जिसमें यूज़र WebSocket पर आपके वॉइस एजेंट से बात करते हैं, API की आपके सर्वर पर रहती है और कोई फ़ोन नंबर शामिल नहीं होता।
चार cURL रिक्वेस्ट से आपके SIP ट्रंक पर असली फ़ोन को कॉल करता Gemini Live एजेंट, और ट्रांसक्रिप्ट और खर्च के साथ कॉल रिकॉर्ड।
लीड की एक लिस्ट, जिसे आपका एजेंट आपके SIP ट्रंक पर, एक साथ चलने वाली कॉल की आपकी सीमा के हिसाब से बैच में कॉल करता है, और हर कॉल का स्टेटस और ट्रांसक्रिप्ट वापस पढ़ा जाता है।
आपकी वेबसाइट के कोने में एक बोलने वाला मैस्कट, जिसे विज़िटर ब्राउज़र से कॉल करते हैं, आपके डोमेन और आपकी रोज़ की सीमाओं तक सीमित, और हर कॉलर की लिस्ट के साथ।
एक Flutter स्क्रीन, जिसमें आपके एजेंट का मैस्कट realtime कॉल के दौरान एजेंट की आवाज़ के साथ मुँह हिलाता है, और आपकी API की आपके सर्वर पर रहती है।
अपना पहला वॉइस एजेंट बनाएँ

