कंटेंट पर जाएँ
गाइड

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 सीधे आपको बिल करता है, बिना किसी मार्कअप के।

लेखक · प्रकाशित · अपडेट

समय
लगभग 30 मिनट
इंजन
classic
इंजन टाइम
$0.0867 प्रति कनेक्टेड मिनट

शुरू करने से पहले आपको क्या चाहिए?

  • Elastic SIP Trunking वाला Twilio अकाउंट, और एक Twilio फ़ोन नंबर।
  • Wixzel Voice API की (wv_live_…) और अकाउंट पर क्रेडिट। न्यूनतम रिचार्ज $5 है।
  • Node.js 20 या उसके बाद का वर्शन।

इसे Wixzel Voice पर स्टेप-बाय-स्टेप कैसे बनाएँ?

  1. 01Twilio पर Elastic SIP ट्रंक बनाएँ

    Twilio कंसोल में Elastic SIP Trunking खोलें और एक ट्रंक बनाएँ। Termination में एक Termination SIP URI चुनें, जैसे your-clinic.pstn.twilio.com। यही hostname उस ट्रंक का host है जिसे आप अगले स्टेप में कनेक्ट करेंगे।

    Twilio कंसोल खुला रखें। API से दो पते मिलने के बाद आपको उन्हें भरने के लिए यहाँ वापस आना है।

  2. 02SDK इंस्टॉल करें और ट्रंक कनेक्ट करें

    SDK इंस्टॉल करें और अपनी API की एनवायरनमेंट में रखें:

    shell
    npm install wixzel-voice
    export WIXZEL_API_KEY="wv_live_..."
    trunk.mjs
    import { 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 उसे फिर कभी नहीं लौटाता।

  3. 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 नंबर इस ट्रंक से जोड़ें।

  4. 04रिसेप्शनिस्ट बनाएँ

    एजेंट यानी निर्देश (prompt), एक शुरुआती लाइन और एक वॉइस इंजन। appointment_booking_enabled उसे कॉल के दौरान अपॉइंटमेंट देखने, बुक करने और कैंसल करने देता है; निर्देश उसे बताते हैं कि वह कौन-से दिन, घंटे और कितनी लंबाई के स्लॉट ऑफ़र कर सकता है।

    agent.mjs
    import { 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') बताता है कि यह कौन-सी आवाज़ें इस्तेमाल कर सकता है।

    शुरुआती लाइन बताती है कि कॉलर एक ऑटोमेटेड असिस्टेंट से बात कर रहा है। जहाँ कानून इसकी, या कॉल रिकॉर्ड होने की सूचना की, माँग करता है, वहाँ इसकी सही जगह शुरुआती लाइन ही है।

  5. 05अपना नंबर रिसेप्शनिस्ट तक रूट करें

    नंबर को ट्रंक पर रजिस्टर करें, और उस एजेंट को सेट करें जो इसका जवाब देगा:

    number.mjs
    import { 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 बनाएँ।

  6. 06कॉल करें, फिर कॉल और बुकिंग पढ़ें

    किसी मोबाइल से अपने Twilio नंबर पर कॉल करें और एक स्लॉट बुक करें। फ़ोन रखते ही कॉल और अपॉइंटमेंट दोनों API में होते हैं:

    results.mjs
    import { 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 में होता है। हर बुकिंग पर appointmentBooked webhook भी चलता है, जिससे आप बुकिंग होते ही उसे अपने कैलेंडर में कॉपी कर सकते हैं।

Wixzel Voice पर इस बिल्ड की लागत कितनी है?

$0.0867 प्रति कनेक्टेड मिनट पर classic इंजन पर 3 मिनट की कॉल का इंजन टाइम: हर कॉल पर लगभग $0.26। टेलीफ़ोनी आपका अपना ट्रंक है, आपके कैरियर की दर पर, और यह इसमें शामिल नहीं है।

इस गाइड के बिल्ड का मासिक इंजन खर्च
हर महीने की कॉलकनेक्टेड मिनटहर महीने का इंजन खर्च
200600$52.02
1,0003,000$260
3,0009,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 रिसेप्शनिस्ट बनाया जा सकता है?

हाँ। अपना Twilio Elastic SIP ट्रंक Wixzel Voice से कनेक्ट करें, Termination में प्लेटफ़ॉर्म IP को allowlist करें, Origination SIP URI सेट करें, और अपना Twilio नंबर inbound_agent_id के साथ रजिस्टर करें। इसके बाद उस नंबर पर आने वाली कॉल का जवाब आपका एजेंट देता है, और ट्रंक का बिल Twilio सीधे आपको देता रहता है।

क्या मुझे अपना नंबर Twilio से हटाना होगा?

नहीं। नंबर आपके Twilio अकाउंट में ही रहता है, आपके Elastic SIP ट्रंक से जुड़ा हुआ। Wixzel Voice नंबर न बेचता है, न पोर्ट करता है, न रखता है।

मेरा Twilio नंबर एजेंट तक क्यों नहीं पहुँचता?

आमतौर पर Origination SIP URI नहीं होता, या नंबर ट्रंक से जुड़ा नहीं होता। इनकमिंग डिलीवरी आउटगोइंग से अलग कॉन्फ़िगर होती है, और इसके बिना Twilio के पास कॉल भेजने की कोई जगह नहीं होती, इसलिए किसी भी लॉग में कुछ नहीं दिखता। URI ट्रंक के origination_uri से मेल खाना चाहिए, और नंबर पर inbound_agent_id होना चाहिए।

AI रिसेप्शनिस्ट की एक कॉल का खर्च कितना है?

classic इंजन पर $0.0867 प्रति कनेक्टेड मिनट, तीन मिनट की कॉल के लिए लगभग $0.26, प्रीपेड क्रेडिट से प्रति सेकंड बिल। Twilio के ट्रंक मिनट Twilio आपके रेट पर बिल करता है।

क्या JavaScript के अलावा दूसरी भाषाओं के लिए SDK है?

दो आधिकारिक SDK हैं: TypeScript और JavaScript के लिए npm पर wixzel-voice, और Dart और Flutter के लिए pub.dev पर wixzel_voice। दूसरी भाषाएँ वही HTTP API सीधे कॉल करती हैं, जिसका विवरण https://docs.voice.wixzel.com/api-reference पर OpenAPI डॉक्यूमेंट में है।

और कहाँ पढ़ें

  • SIP ट्रंकडॉक्स

    Twilio वाला हिस्सा: IP ACL, Termination URI, कॉलर ID और Origination URI।

  • एजेंटडॉक्स

    निर्देश, शुरुआती लाइन, हर फ़ील्ड की वैल्यू कहाँ से आती है, और टेस्ट कॉल।

  • Webhookडॉक्स

    appointmentBooked, callCompleted, सिग्नेचर और रीट्राई।

  • SDKडॉक्स

    TypeScript और Dart SDK।

एजेंटिक टेलीफ़ोनी के लिए API

Wixzel Voice के बारे में

Wixzel Voice एक वॉइस AI API है, जिससे ऐसे AI एजेंट बनते हैं जो आपके अपने SIP ट्रंक पर असली फ़ोन कॉल करते और उनका जवाब देते हैं, या आपके वेब और मोबाइल ऐप में लोगों से बात करते हैं। एक API की और एक प्रीपेड बैलेंस हर वॉइस इंजन को कवर करते हैं, और बिल असली इस्तेमाल के हर सेकंड के हिसाब से बनता है।

Wixzel Voice MCP सर्वर से Claude को असली फ़ोन लाइन दें

Claude Code या claude.ai में Claude आपके SIP ट्रंक से असली कॉल करता है और ट्रांसक्रिप्ट पढ़कर बताता है, और कुछ भी डायल होने से पहले आपसे पुष्टि लेता है।

Wixzel Voice के sarvam इंजन पर हिंदी और मलयालम फ़ोन एजेंट

दो फ़ोन एजेंट, एक हिंदी और एक मलयालम बोलने वाला, Sarvam के भारतीय भाषा मॉडल पर, जो आपके SIP ट्रंक से कॉल का जवाब देते हैं या कॉल करते हैं।

Wixzel Voice के साथ WebSocket पर Flutter वॉइस एजेंट जोड़ें

एक Flutter ऐप जिसमें यूज़र WebSocket पर आपके वॉइस एजेंट से बात करते हैं, API की आपके सर्वर पर रहती है और कोई फ़ोन नंबर शामिल नहीं होता।

Wixzel Voice API से असली फ़ोन कॉल पर Gemini Live

चार cURL रिक्वेस्ट से आपके SIP ट्रंक पर असली फ़ोन को कॉल करता Gemini Live एजेंट, और ट्रांसक्रिप्ट और खर्च के साथ कॉल रिकॉर्ड।

Wixzel Voice के साथ AI लीड-क्वालिफ़िकेशन कैंपेन चलाएँ

लीड की एक लिस्ट, जिसे आपका एजेंट आपके SIP ट्रंक पर, एक साथ चलने वाली कॉल की आपकी सीमा के हिसाब से बैच में कॉल करता है, और हर कॉल का स्टेटस और ट्रांसक्रिप्ट वापस पढ़ा जाता है।

Wixzel Voice से अपनी वेबसाइट पर बोलने वाला AI मैस्कट लगाएँ

आपकी वेबसाइट के कोने में एक बोलने वाला मैस्कट, जिसे विज़िटर ब्राउज़र से कॉल करते हैं, आपके डोमेन और आपकी रोज़ की सीमाओं तक सीमित, और हर कॉलर की लिस्ट के साथ।

Wixzel Voice के साथ Flutter ऐप में अपने एजेंट का मैस्कट दिखाएँ

एक Flutter स्क्रीन, जिसमें आपके एजेंट का मैस्कट realtime कॉल के दौरान एजेंट की आवाज़ के साथ मुँह हिलाता है, और आपकी API की आपके सर्वर पर रहती है।

अपना पहला वॉइस एजेंट बनाएँ