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

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

इस गाइड के अंत तक लीड की एक लिस्ट अपलोड हो चुकी होगी, आपके लिखे एजेंट ने आपके अपने SIP ट्रंक पर आपके क्वालिफ़ाइंग सवालों के साथ हर लीड को कॉल किया होगा, और हर कॉल का स्टेटस और ट्रांसक्रिप्ट आपके पास होगा। Node.js में wixzel-voice SDK के साथ बिल्ड में लगभग 30 मिनट लगते हैं, और फिर कॉल में जितना समय लगे। छोटी, स्क्रिप्ट वाली कॉल सबसे सस्ता काम है: classic इंजन पर, $0.0867 प्रति कनेक्टेड मिनट, दो मिनट की 1,000 कॉल का इंजन टाइम लगभग $173 आता है, जो प्रीपेड बैलेंस से प्रति सेकंड बिल होता है, साथ में आपके कैरियर का रेट। जिस कॉल का कोई जवाब नहीं देता, उसका कोई खर्च नहीं।

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

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

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

  • एक SIP ट्रंक और उस पर रजिस्टर किया हुआ आउटगोइंग नंबर। Twilio गाइड और SIP ट्रंक docs दोनों बताते हैं।
  • क्रेडिट वाली Wixzel Voice API की, और npm install wixzel-voice के साथ Node.js 20 या बाद का वर्शन।
  • लिस्ट की हर लीड को कॉल करने की सहमति, जहाँ कानून इसकी माँग करता है। नीचे का नियमों वाला स्टेप बताता है कि स्वीकार्य उपयोग नीति (Acceptable Use Policy) क्या माँगती है।

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

  1. 01कॉल करने वाला एजेंट लिखें

    एजेंट ही स्क्रिप्ट है। मर्ज फ़ील्ड हर कॉल को व्यक्तिगत बनाते हैं:

    agent.mjs
    import { WixzelVoice } from 'wixzel-voice';
    
    const client = new WixzelVoice({ apiKey: process.env.WIXZEL_API_KEY });
    
    const agent = await client.agents.create({
      name: 'Demo follow-up',
      outbound_phone_number_id: process.env.NUMBER_ID,
      system_prompt: [
        'You are calling {{name}} from {{company}}, who asked for a demo of Acme Scheduling.',
        'Ask three questions, one at a time: how many staff take bookings,',
        'what they use for bookings today, and when they would want to switch.',
        'Keep replies short. If they are not interested, thank them and end the call.',
        'If they ask not to be called again, confirm that you have noted it and end the call.',
        'Finish by thanking them and saying a person will follow up by email.',
      ].join('\n'),
      opening_message: 'Hi {{name}}, this is an automated assistant calling for Acme about the demo you requested. Is now a good time?',
      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);

    {{name}} लीड से भरता है, और लीड के fields की हर key भी एक मर्ज फ़ील्ड बन जाती है, इसलिए {{company}} नीचे के अपलोड से आता है। शुरुआती लाइन बताती है कि कॉल करने वाला ऑटोमेटेड है; जहाँ कानून यह बताना ज़रूरी करता है, वहाँ इसकी सही जगह यही है। कैंपेन के लिए outbound_phone_number_id ज़रूरी है: यही वह कॉलर ID है जो हर कॉल पर दिखता है।

  2. 02लीड अपलोड करें

    बाकी बिल्ड एक ही स्क्रिप्ट, campaign.mjs, है। यह अपलोड से शुरू होती है:

    campaign.mjs, part 1
    import { WixzelVoice } from 'wixzel-voice';
    
    const client = new WixzelVoice({ apiKey: process.env.WIXZEL_API_KEY });
    
    // From your CRM or a CSV: only people you have consent to call.
    const rows = [
      { name: 'Priya Nair', phone_number: '+14155550111', fields: { company: 'Northside Physio' } },
      { name: 'Sam Carter', phone_number: '+14155550112', fields: { company: 'Carter Auto' } },
    ];
    
    const upload = await client.leads.bulkCreate({ leads: rows });
    console.log('created', upload.created_count, 'failed', upload.failed_count);
    for (const e of upload.errors) console.log('row', e.index, e.phone_number, e.error);
    
    const leadIds = upload.data.map((lead) => lead.id);

    एक रिक्वेस्ट में 1,000 तक लीड जा सकती हैं। हर पंक्ति अलग से जाँची जाती है, इसलिए यह मानने के बजाय कि पूरी लिस्ट पहुँच गई, failed_count और errors देखें। बल्क अपलोड पर कोई webhook नहीं चलता।

  3. 03एक साथ चलने वाली कॉल की सीमा के हिसाब से कैंपेन चलाएँ

    एक कैंपेन यानी एक एजेंट और लीड की एक लिस्ट। कैंपेन बनाने से कोई डायल नहीं होता; start से होता है, और हर कॉल कनेक्ट होने पर क्रेडिट खर्च होता है।

    अभी कैंपेन अपनी कॉल कतार में रखने के बजाय तेज़ी से एक के बाद एक करता है, और हर कॉल अकाउंट की एक साथ चलने वाली कॉल की सीमा में गिनी जाती है, जो डिफ़ॉल्ट रूप से पाँच है। सीमा से ऊपर की लीड अपनी बारी का इंतज़ार करने के बजाय फ़ेल कॉल के रूप में दर्ज होती है। इसलिए लिस्ट को ऐसे बैच में चलाएँ जो आपकी सीमा से बड़े न हों, और पिछला बैच खत्म होने पर अगला शुरू करें:

    campaign.mjs, part 2
    const LIMIT = 5; // your account's concurrent-call limit, minus any calls you expect meanwhile
    const DONE = new Set(['completed', 'failed', 'busy', 'no-answer', 'canceled']);
    const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
    
    async function finishedCalls(campaignId) {
      let finished = 0;
      for await (const call of await client.calls.list({ campaign_id: campaignId, limit: 100 })) {
        if (DONE.has(call.status)) finished++;
      }
      return finished;
    }
    
    const campaignIds = [];
    for (let i = 0; i < leadIds.length; i += LIMIT) {
      const batch = leadIds.slice(i, i + LIMIT);
      const campaign = await client.campaigns.create({
        name: 'Demo follow-up ' + (i / LIMIT + 1),
        agent_id: process.env.AGENT_ID,
        lead_ids: batch,
      });
      await client.campaigns.start(campaign.id);
      campaignIds.push(campaign.id);
    
      const giveUpAt = Date.now() + 30 * 60 * 1000;
      while ((await finishedCalls(campaign.id)) < batch.length && Date.now() < giveUpAt) {
        await sleep(15000);
      }
    }

    start कैंपेन को status: "running" के साथ लौटाता है। किसी बैच को जल्दी रोकने के लिए client.campaigns.pause(campaign.id) उसे रोकता है और चल रही कॉल काट देता है, जिसके बाद कैंपेन status: "stopped" दिखाता है। रुके हुए कैंपेन को फिर से शुरू करने पर उसकी हर लीड दोबारा डायल होती है, जिन्हें पहले कॉल हो चुकी है वे भी, इसलिए आगे बढ़ने के लिए उन लीड से नया कैंपेन बनाएँ जिन तक अभी नहीं पहुँचे। create पर scheduled_at देने से कैंपेन start के बजाय तय समय पर शुरू होता है।

  4. 04हर कॉल वापस पढ़ें

    हर कॉल एक रिकॉर्ड है, जिसमें स्टेटस, खर्च और ट्रांसक्रिप्ट है, और lead_id से अपनी लीड से जुड़ा है:

    campaign.mjs, part 3
    for (const campaignId of campaignIds) {
      for await (const call of await client.calls.list({ campaign_id: campaignId, limit: 100 })) {
        const detail = await client.calls.retrieve(call.id);
        const answers = detail.transcript
          .filter((line) => line.role === 'user')
          .map((line) => line.content)
          .join(' / ');
        console.log(call.lead_id, call.status, call.duration_seconds, call.failure_code, answers);
      }
    }

    status बताता है कि कॉल कनेक्ट हुई या नहीं, failure_code बताता है कि क्यों नहीं हुई (17 बिज़ी, 19 जवाब नहीं मिला, 21 कैरियर ने रिजेक्ट किया) और cost_micros बताता है कि खर्च कितना हुआ। जो लीड डायल होने से पहले ही रिजेक्ट हुई, एक साथ चलने वाली कॉल की सीमा या क्रेडिट की कमी की वजह से, वह बिना failure_code के failed दिखती है।

    क्वालिफ़िकेशन का फ़ैसला आपका है। Wixzel Voice बातचीत रिकॉर्ड करता है; ट्रांसक्रिप्ट में आपके तीनों सवालों के जवाब होते हैं, इसलिए उसे अपने नियमों या अपने मॉडल से स्कोर करें और नतीजा अपने CRM में लिखें। summary फ़ील्ड खाली हो सकती है, इसलिए उस पर निर्भर न रहें। पोलिंग के बजाय कॉल खत्म होते ही प्रतिक्रिया देने के लिए callCompleted webhook सब्सक्राइब करें, जिसमें कॉल के स्टेटस और अवधि के साथ लीड और कैंपेन की ids होती हैं।

  5. 05कॉलिंग के नियमों के भीतर रहें

    स्वीकार्य उपयोग नीति ये ज़िम्मेदारियाँ कॉल करने वाले पर डालती है, यानी आप पर। यह उसका सारांश है, कानूनी सलाह नहीं।

    सिर्फ़ उन लोगों को कॉल करें जिनकी सहमति आपके पास है, जहाँ कानून इसकी माँग करता है। अमेरिका में इसका आम तौर पर मतलब है TCPA के तहत मोबाइल नंबरों पर मार्केटिंग कॉल के लिए पहले से ली गई स्पष्ट लिखित सहमति; भारत में TRAI के customer preference नियम; UK और EU में PECR और GDPR।

    हर अपलोड से पहले राष्ट्रीय और राज्य स्तर की do-not-call रजिस्ट्री और अपनी suppression list जाँचें। जब कोई दोबारा कॉल न करने को कहे, तो उसे तुरंत और हमेशा के लिए हटा दें: एजेंट विनम्रता से कॉल खत्म कर सकता है, लेकिन लीड हटाना आपके कोड का काम है।

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

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

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

इस गाइड के बिल्ड का मासिक इंजन खर्च
हर महीने की कॉलकनेक्टेड मिनटहर महीने का इंजन खर्च
1,0002,000$173
5,00010,000$867
20,00040,000$3,468

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

प्रीपेड, बिना सब्सक्रिप्शन और बिना फ़्री टियर: $5 से क्रेडिट जोड़ें और इस्तेमाल उसी से कटता है। अपने इस्तेमाल का अनुमान लगाएँ।

इस बिल्ड पर Wixzel Voice की कौन-सी सीमाएँ लागू होती हैं?

  • कैंपेन अपनी लीड को तेज़ी से एक के बाद एक डायल करता है और एक साथ चलने वाली कॉल की सीमा (डिफ़ॉल्ट रूप से हर अकाउंट पर पाँच) के पीछे कतार नहीं लगाता; उससे ऊपर की लीड फ़ेल दर्ज होती हैं। अपनी सीमा के हिसाब से बैच बनाएँ, या ज़्यादा सीमा माँगें।
  • रुके हुए कैंपेन को फिर से शुरू करने पर उसकी हर लीड दोबारा डायल होती है। जिन लीड तक अभी नहीं पहुँचे, उनसे नया कैंपेन बनाकर आगे बढ़ें।
  • हर कैंपेन में 10,000 तक लीड हो सकती हैं, और एक अकाउंट में डिफ़ॉल्ट रूप से 500 तक कैंपेन, जो माँगने पर बढ़ाए जाते हैं।
  • Wixzel Voice कॉल और उसका ट्रांसक्रिप्ट रिकॉर्ड करता है। कौन क्वालिफ़ाई हुआ यह तय करना, और अपनी do-not-call लिस्ट रखना, आपके कोड का काम है।
  • Wixzel Voice के व्यवहार में बदलाव तारीख वाले Wixzel-Version हेडर के पीछे आते हैं।

अक्सर पूछे जाने वाले सवाल

Wixzel Voice पर आउटगोइंग AI कॉलिंग कैंपेन कैसे चलाएँ?

POST /v1/leads/bulk से लीड अपलोड करें, एक एजेंट और उन लीड के साथ कैंपेन बनाएँ, और POST /v1/campaigns/{id}/start से एजेंट आपके अपने SIP ट्रंक पर हर लीड को एक के बाद एक कॉल करता है। हर कैंपेन को एक साथ चलने वाली कॉल की अपनी सीमा से बड़ा न रखें, क्योंकि उससे ऊपर की लीड कतार में लगने के बजाय फ़ेल मार्क होती है। हर कॉल एक रिकॉर्ड है जिसमें स्टेटस, ट्रांसक्रिप्ट और खर्च है, और lead_id से लीड से जुड़ा है। अकेली कॉल POST /v1/calls से होती हैं।

एक साथ कितनी आउटगोइंग कॉल चल सकती हैं?

डिफ़ॉल्ट रूप से हर अकाउंट पर पाँच, जिसमें हर लाइव कॉल और वेब सेशन गिना जाता है। माँगने पर यह सीमा बढ़ाई जाती है: जितने वॉल्यूम की उम्मीद है, वह लिखकर aqeel@wixzel.com पर भेजें।

कैंपेन इस्तेमाल करें या अकेली कॉल?

कैंपेन उस लिस्ट के लिए ठीक है जिसे आप एक बार में कॉल करते हैं। जब आप अपनी रफ़्तार और रीट्राई खुद तय करना चाहें, तो अपनी कतार से हर लीड के लिए POST /v1/calls ज़्यादा बारीक कंट्रोल देता है: हर कॉल एक lead_id और एक idempotency key लेती है, और अगली कॉल कब शुरू हो यह आप तय करते हैं।

क्या AI से आउटगोइंग कॉलिंग कानूनी है?

यह इस पर निर्भर है कि जिन्हें आप कॉल करते हैं वे कहाँ हैं और उनकी सहमति है या नहीं। स्वीकार्य उपयोग नीति माँगती है कि जहाँ कानून कहे वहाँ सहमति हो, do-not-call रजिस्ट्री और opt-out का पालन हो, और जहाँ ज़रूरी हो वहाँ बताया जाए कि कॉल करने वाला ऑटोमेटेड है। Wixzel Voice टूल देता है, कानूनी आधार नहीं।

और कहाँ पढ़ें

  • क्विकस्टार्टडॉक्स

    एक ट्रंक, एक नंबर, एक एजेंट और एक कॉल।

  • एजेंटडॉक्स

    निर्देश, शुरुआती लाइन और कॉलर ID।

  • Webhookडॉक्स

    callCompleted, campaignCompleted और सिग्नेचर।

  • API रेफ़रेंसडॉक्स

    लीड, कैंपेन और कॉल, हर फ़ील्ड के साथ।

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

Wixzel Voice के बारे में

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

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

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

Wixzel Voice के साथ Node.js में Twilio AI रिसेप्शनिस्ट बनाएँ

आपके मौजूदा Twilio नंबर पर एक AI रिसेप्शनिस्ट जवाब देता है और API में अपॉइंटमेंट बुक करता है, Node.js में बना हुआ।

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

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

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

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

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

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

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

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

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

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

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