कैसे विवेक रोबोट ग्राहकों के साथ संवाद करता है

हम आपको बताएंगे कि QIWI फिनटेक प्रोजेक्ट - कॉन्शियस इंटरेस्ट-फ्री किस्त प्लान कार्ड - ने किस तरह के कॉन्टैक्ट सेंटर की कुछ बातचीत को एक रोबोट में ट्रांसफर किया, जो न केवल सवालों के जवाब देता है, बल्कि उन्हें आउटगोइंग कॉल के साथ पूछता है। यह लेख HTTP अनुरोधों, भाषण संश्लेषण और आवाज मान्यता को व्यवहार में लाने के बारे में है।



चरण 1: बुद्धिमान आईवीआर


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

// ,       require(Modules.ASR); ​ let call; ​ // ,       let data = {}; ​ const PHRASES = { hello: "http://some_url_to_mp3_sound_for_start_question" }; ​ //    dtmf,    Qiwi const dtmf = { operator: { name: "", digit: "0" }, balance: { name: "", digit: "1" }, pin_code: { name: "-", digit: "3" } }; 

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

 //     «»,      VoxEngine.addEventListener(AppEvents.CallAlerting, e => { //       call = e.call;​ //        data.phone = e.callerid;​ //     SIP         . //    «»       X-CID //     data.xcid = e.headers["X-CID"];​ //    call.answer();​ //        call.addEventListener(CallEvents.Connected, HandleConnected);​ //     call.addEventListener(CallEvents.RecordStarted, record => { //  URL     data.record_url = record.url; }); //     call.addEventListener(CallEvents.Disconnected, HandleDisconnected); });​ async function HandleConnected(e) { //    call.record(true);​ //    await startPlayback(call, PHRASES.hello);​ //     startASR(); }  //     «»,      VoxEngine.addEventListener(AppEvents.CallAlerting, e => { //       call = e.call;​ //        data.phone = e.callerid;​ //     SIP         . //    «»       X-CID //     data.xcid = e.headers["X-CID"];​ //    call.answer();​ //        call.addEventListener(CallEvents.Connected, HandleConnected);​ //     call.addEventListener(CallEvents.RecordStarted, record => { //  URL     data.record_url = record.url; }); //     call.addEventListener(CallEvents.Disconnected, HandleDisconnected); });​ async function HandleConnected(e) { //    call.record(true);​ //    await startPlayback(call, PHRASES.hello);​ //     startASR(); }  //     «»,      VoxEngine.addEventListener(AppEvents.CallAlerting, e => { //       call = e.call;​ //        data.phone = e.callerid;​ //     SIP         . //    «»       X-CID //     data.xcid = e.headers["X-CID"];​ //    call.answer();​ //        call.addEventListener(CallEvents.Connected, HandleConnected);​ //     call.addEventListener(CallEvents.RecordStarted, record => { //  URL     data.record_url = record.url; }); //     call.addEventListener(CallEvents.Disconnected, HandleDisconnected); });​ async function HandleConnected(e) { //    call.record(true);​ //    await startPlayback(call, PHRASES.hello);​ //     startASR(); }  //     «»,      VoxEngine.addEventListener(AppEvents.CallAlerting, e => { //       call = e.call;​ //        data.phone = e.callerid;​ //     SIP         . //    «»       X-CID //     data.xcid = e.headers["X-CID"];​ //    call.answer();​ //        call.addEventListener(CallEvents.Connected, HandleConnected);​ //     call.addEventListener(CallEvents.RecordStarted, record => { //  URL     data.record_url = record.url; }); //     call.addEventListener(CallEvents.Disconnected, HandleDisconnected); });​ async function HandleConnected(e) { //    call.record(true);​ //    await startPlayback(call, PHRASES.hello);​ //     startASR(); }  //     «»,      VoxEngine.addEventListener(AppEvents.CallAlerting, e => { //       call = e.call;​ //        data.phone = e.callerid;​ //     SIP         . //    «»       X-CID //     data.xcid = e.headers["X-CID"];​ //    call.answer();​ //        call.addEventListener(CallEvents.Connected, HandleConnected);​ //     call.addEventListener(CallEvents.RecordStarted, record => { //  URL     data.record_url = record.url; }); //     call.addEventListener(CallEvents.Disconnected, HandleDisconnected); });​ async function HandleConnected(e) { //    call.record(true);​ //    await startPlayback(call, PHRASES.hello);​ //     startASR(); }  //     «»,      VoxEngine.addEventListener(AppEvents.CallAlerting, e => { //       call = e.call;​ //        data.phone = e.callerid;​ //     SIP         . //    «»       X-CID //     data.xcid = e.headers["X-CID"];​ //    call.answer();​ //        call.addEventListener(CallEvents.Connected, HandleConnected);​ //     call.addEventListener(CallEvents.RecordStarted, record => { //  URL     data.record_url = record.url; }); //     call.addEventListener(CallEvents.Disconnected, HandleDisconnected); });​ async function HandleConnected(e) { //    call.record(true);​ //    await startPlayback(call, PHRASES.hello);​ //     startASR(); }  //     «»,      VoxEngine.addEventListener(AppEvents.CallAlerting, e => { //       call = e.call;​ //        data.phone = e.callerid;​ //     SIP         . //    «»       X-CID //     data.xcid = e.headers["X-CID"];​ //    call.answer();​ //        call.addEventListener(CallEvents.Connected, HandleConnected);​ //     call.addEventListener(CallEvents.RecordStarted, record => { //  URL     data.record_url = record.url; }); //     call.addEventListener(CallEvents.Disconnected, HandleDisconnected); });​ async function HandleConnected(e) { //    call.record(true);​ //    await startPlayback(call, PHRASES.hello);​ //     startASR(); }  //     «»,      VoxEngine.addEventListener(AppEvents.CallAlerting, e => { //       call = e.call;​ //        data.phone = e.callerid;​ //     SIP         . //    «»       X-CID //     data.xcid = e.headers["X-CID"];​ //    call.answer();​ //        call.addEventListener(CallEvents.Connected, HandleConnected);​ //     call.addEventListener(CallEvents.RecordStarted, record => { //  URL     data.record_url = record.url; }); //     call.addEventListener(CallEvents.Disconnected, HandleDisconnected); });​ async function HandleConnected(e) { //    call.record(true);​ //    await startPlayback(call, PHRASES.hello);​ //     startASR(); }  //     «»,      VoxEngine.addEventListener(AppEvents.CallAlerting, e => { //       call = e.call;​ //        data.phone = e.callerid;​ //     SIP         . //    «»       X-CID //     data.xcid = e.headers["X-CID"];​ //    call.answer();​ //        call.addEventListener(CallEvents.Connected, HandleConnected);​ //     call.addEventListener(CallEvents.RecordStarted, record => { //  URL     data.record_url = record.url; }); //     call.addEventListener(CallEvents.Disconnected, HandleDisconnected); });​ async function HandleConnected(e) { //    call.record(true);​ //    await startPlayback(call, PHRASES.hello);​ //     startASR(); } 

यदि उपभोक्ता सामान्य निर्देशों में रुचि रखता है - उदाहरण के लिए, एक कार्ड को सक्रिय करना, इसे फिर से भरने के तरीके, पिन कोड बदलना, और इसी तरह, वह चरण-दर-चरण स्पष्टीकरण के साथ एक रिकॉर्ड की गई ऑडियो क्लिप सुनता है।

 // ,    mp3-  function startPlayback(call, url, loop = false) { return new Promise(resolve => { call.startPlayback(url, loop); call.addEventListener(CallEvents.PlaybackFinished, function callback() { resolve(call.removeEventListener(CallEvents.PlaybackFinished, callback)); }); }); } 

इस प्रकार, कॉल सेंटर का पहला कार्य जो स्वचालित करना आसान होता है, वह सामान्य प्रश्नों का उत्तर और सामान्य प्रश्नों का उत्तर देता है।

अपील का दूसरा समूह, जिसके समापन के लिए किसी व्यक्ति की आवश्यकता नहीं है, वर्तमान शेष राशि, ऋण की राशि, अगले भुगतान की राशि के बारे में सूचित कर रहा है।

सूचना सुरक्षा के दृष्टिकोण से, पूरी प्रक्रिया को रूसी कानून और उद्योग मानकों की आवश्यकताओं के अनुरूप लाया गया है: Voximplant के पास ग्राहकों के व्यक्तिगत डेटा तक पहुंच नहीं है। निर्णय विषय वस्तु को निर्धारित करता है और कॉल प्रोसेसिंग को अंतरात्मा आईवीआर में स्थानांतरित करता है, जहां, भाषण संश्लेषण का उपयोग करते हुए, ग्राहक के कार्ड से जानकारी की आवाज़ उठाई जाती है, प्राधिकरण QIWI की ओर से होता है। वॉयस प्रोसेसिंग परिदृश्य व्यक्तिगत डेटा से संबंधित सामान्य प्रश्न और प्रश्न साझा करते हैं।

कोड दिखाएं
 //    ASR      ,    function startASR() { const asr = VoxEngine.createASR({ lang: ASRLanguage.RUSSIAN_RU });​ //     asr.addEventListener(ASREvents.Result, asrevent => { asr.stop();​ speech_processing(asrevent.text); }); }​ //     function speech_processing(text) { /*   /,      */​ /*   if -       .        ,    .       includes   && */ if ( text.includes("") && text.includes("") && text.includes("") ) { //        data.category = dtmf.balance.name;​ //      «» sendDigits(dtmf.balance.digit); } else if ( text.includes("") && text.includes("") && text.includes("") ) { data.category = dtmf.pin_code.name;​ sendDigits(dtmf.pin_code.digit); } else { //    ,    - ​ data.category = dtmf.operator.name;​ sendDigits(dtmf.operator.digit); } }​ //      IVR «», //  «»     ,   ,     . //    IVR   «»    sendDigits,​ /*    ""  ,  «»    ,  ,  dtmf - 1, IVR «»    ,   dtmf - 3,     “  -” */​ function sendDigits(digit) { //   call.sendDigits(digit);​ //     1.5 ,     DTMF. setTimeout(call.hangup, 1500); }​ //   ,     . async function HandleDisconnected(e) { //    Disconnected          . data.duration = e.duration;​ //         ,     .      CRM. await sendToCrm(data);​ //   .             ,       60 .      ,   . VoxEngine.terminate(); }​ async function sendToCrm(data) { //    -       .​ Logger.write(JSON.stringify(data));​ //    -        http -     Net.httpRequestAsync }  //    ASR      ,    function startASR() { const asr = VoxEngine.createASR({ lang: ASRLanguage.RUSSIAN_RU });​ //     asr.addEventListener(ASREvents.Result, asrevent => { asr.stop();​ speech_processing(asrevent.text); }); }​ //     function speech_processing(text) { /*   /,      */​ /*   if -       .        ,    .       includes   && */ if ( text.includes("") && text.includes("") && text.includes("") ) { //        data.category = dtmf.balance.name;​ //      «» sendDigits(dtmf.balance.digit); } else if ( text.includes("") && text.includes("") && text.includes("") ) { data.category = dtmf.pin_code.name;​ sendDigits(dtmf.pin_code.digit); } else { //    ,    - ​ data.category = dtmf.operator.name;​ sendDigits(dtmf.operator.digit); } }​ //      IVR «», //  «»     ,   ,     . //    IVR   «»    sendDigits,​ /*    ""  ,  «»    ,  ,  dtmf - 1, IVR «»    ,   dtmf - 3,     “  -” */​ function sendDigits(digit) { //   call.sendDigits(digit);​ //     1.5 ,     DTMF. setTimeout(call.hangup, 1500); }​ //   ,     . async function HandleDisconnected(e) { //    Disconnected          . data.duration = e.duration;​ //         ,     .      CRM. await sendToCrm(data);​ //   .             ,       60 .      ,   . VoxEngine.terminate(); }​ async function sendToCrm(data) { //    -       .​ Logger.write(JSON.stringify(data));​ //    -        http -     Net.httpRequestAsync }  //    ASR      ,    function startASR() { const asr = VoxEngine.createASR({ lang: ASRLanguage.RUSSIAN_RU });​ //     asr.addEventListener(ASREvents.Result, asrevent => { asr.stop();​ speech_processing(asrevent.text); }); }​ //     function speech_processing(text) { /*   /,      */​ /*   if -       .        ,    .       includes   && */ if ( text.includes("") && text.includes("") && text.includes("") ) { //        data.category = dtmf.balance.name;​ //      «» sendDigits(dtmf.balance.digit); } else if ( text.includes("") && text.includes("") && text.includes("") ) { data.category = dtmf.pin_code.name;​ sendDigits(dtmf.pin_code.digit); } else { //    ,    - ​ data.category = dtmf.operator.name;​ sendDigits(dtmf.operator.digit); } }​ //      IVR «», //  «»     ,   ,     . //    IVR   «»    sendDigits,​ /*    ""  ,  «»    ,  ,  dtmf - 1, IVR «»    ,   dtmf - 3,     “  -” */​ function sendDigits(digit) { //   call.sendDigits(digit);​ //     1.5 ,     DTMF. setTimeout(call.hangup, 1500); }​ //   ,     . async function HandleDisconnected(e) { //    Disconnected          . data.duration = e.duration;​ //         ,     .      CRM. await sendToCrm(data);​ //   .             ,       60 .      ,   . VoxEngine.terminate(); }​ async function sendToCrm(data) { //    -       .​ Logger.write(JSON.stringify(data));​ //    -        http -     Net.httpRequestAsync }  //    ASR      ,    function startASR() { const asr = VoxEngine.createASR({ lang: ASRLanguage.RUSSIAN_RU });​ //     asr.addEventListener(ASREvents.Result, asrevent => { asr.stop();​ speech_processing(asrevent.text); }); }​ //     function speech_processing(text) { /*   /,      */​ /*   if -       .        ,    .       includes   && */ if ( text.includes("") && text.includes("") && text.includes("") ) { //        data.category = dtmf.balance.name;​ //      «» sendDigits(dtmf.balance.digit); } else if ( text.includes("") && text.includes("") && text.includes("") ) { data.category = dtmf.pin_code.name;​ sendDigits(dtmf.pin_code.digit); } else { //    ,    - ​ data.category = dtmf.operator.name;​ sendDigits(dtmf.operator.digit); } }​ //      IVR «», //  «»     ,   ,     . //    IVR   «»    sendDigits,​ /*    ""  ,  «»    ,  ,  dtmf - 1, IVR «»    ,   dtmf - 3,     “  -” */​ function sendDigits(digit) { //   call.sendDigits(digit);​ //     1.5 ,     DTMF. setTimeout(call.hangup, 1500); }​ //   ,     . async function HandleDisconnected(e) { //    Disconnected          . data.duration = e.duration;​ //         ,     .      CRM. await sendToCrm(data);​ //   .             ,       60 .      ,   . VoxEngine.terminate(); }​ async function sendToCrm(data) { //    -       .​ Logger.write(JSON.stringify(data));​ //    -        http -     Net.httpRequestAsync }  //    ASR      ,    function startASR() { const asr = VoxEngine.createASR({ lang: ASRLanguage.RUSSIAN_RU });​ //     asr.addEventListener(ASREvents.Result, asrevent => { asr.stop();​ speech_processing(asrevent.text); }); }​ //     function speech_processing(text) { /*   /,      */​ /*   if -       .        ,    .       includes   && */ if ( text.includes("") && text.includes("") && text.includes("") ) { //        data.category = dtmf.balance.name;​ //      «» sendDigits(dtmf.balance.digit); } else if ( text.includes("") && text.includes("") && text.includes("") ) { data.category = dtmf.pin_code.name;​ sendDigits(dtmf.pin_code.digit); } else { //    ,    - ​ data.category = dtmf.operator.name;​ sendDigits(dtmf.operator.digit); } }​ //      IVR «», //  «»     ,   ,     . //    IVR   «»    sendDigits,​ /*    ""  ,  «»    ,  ,  dtmf - 1, IVR «»    ,   dtmf - 3,     “  -” */​ function sendDigits(digit) { //   call.sendDigits(digit);​ //     1.5 ,     DTMF. setTimeout(call.hangup, 1500); }​ //   ,     . async function HandleDisconnected(e) { //    Disconnected          . data.duration = e.duration;​ //         ,     .      CRM. await sendToCrm(data);​ //   .             ,       60 .      ,   . VoxEngine.terminate(); }​ async function sendToCrm(data) { //    -       .​ Logger.write(JSON.stringify(data));​ //    -        http -     Net.httpRequestAsync }  //    ASR      ,    function startASR() { const asr = VoxEngine.createASR({ lang: ASRLanguage.RUSSIAN_RU });​ //     asr.addEventListener(ASREvents.Result, asrevent => { asr.stop();​ speech_processing(asrevent.text); }); }​ //     function speech_processing(text) { /*   /,      */​ /*   if -       .        ,    .       includes   && */ if ( text.includes("") && text.includes("") && text.includes("") ) { //        data.category = dtmf.balance.name;​ //      «» sendDigits(dtmf.balance.digit); } else if ( text.includes("") && text.includes("") && text.includes("") ) { data.category = dtmf.pin_code.name;​ sendDigits(dtmf.pin_code.digit); } else { //    ,    - ​ data.category = dtmf.operator.name;​ sendDigits(dtmf.operator.digit); } }​ //      IVR «», //  «»     ,   ,     . //    IVR   «»    sendDigits,​ /*    ""  ,  «»    ,  ,  dtmf - 1, IVR «»    ,   dtmf - 3,     “  -” */​ function sendDigits(digit) { //   call.sendDigits(digit);​ //     1.5 ,     DTMF. setTimeout(call.hangup, 1500); }​ //   ,     . async function HandleDisconnected(e) { //    Disconnected          . data.duration = e.duration;​ //         ,     .      CRM. await sendToCrm(data);​ //   .             ,       60 .      ,   . VoxEngine.terminate(); }​ async function sendToCrm(data) { //    -       .​ Logger.write(JSON.stringify(data));​ //    -        http -     Net.httpRequestAsync }  //    ASR      ,    function startASR() { const asr = VoxEngine.createASR({ lang: ASRLanguage.RUSSIAN_RU });​ //     asr.addEventListener(ASREvents.Result, asrevent => { asr.stop();​ speech_processing(asrevent.text); }); }​ //     function speech_processing(text) { /*   /,      */​ /*   if -       .        ,    .       includes   && */ if ( text.includes("") && text.includes("") && text.includes("") ) { //        data.category = dtmf.balance.name;​ //      «» sendDigits(dtmf.balance.digit); } else if ( text.includes("") && text.includes("") && text.includes("") ) { data.category = dtmf.pin_code.name;​ sendDigits(dtmf.pin_code.digit); } else { //    ,    - ​ data.category = dtmf.operator.name;​ sendDigits(dtmf.operator.digit); } }​ //      IVR «», //  «»     ,   ,     . //    IVR   «»    sendDigits,​ /*    ""  ,  «»    ,  ,  dtmf - 1, IVR «»    ,   dtmf - 3,     “  -” */​ function sendDigits(digit) { //   call.sendDigits(digit);​ //     1.5 ,     DTMF. setTimeout(call.hangup, 1500); }​ //   ,     . async function HandleDisconnected(e) { //    Disconnected          . data.duration = e.duration;​ //         ,     .      CRM. await sendToCrm(data);​ //   .             ,       60 .      ,   . VoxEngine.terminate(); }​ async function sendToCrm(data) { //    -       .​ Logger.write(JSON.stringify(data));​ //    -        http -     Net.httpRequestAsync }  //    ASR      ,    function startASR() { const asr = VoxEngine.createASR({ lang: ASRLanguage.RUSSIAN_RU });​ //     asr.addEventListener(ASREvents.Result, asrevent => { asr.stop();​ speech_processing(asrevent.text); }); }​ //     function speech_processing(text) { /*   /,      */​ /*   if -       .        ,    .       includes   && */ if ( text.includes("") && text.includes("") && text.includes("") ) { //        data.category = dtmf.balance.name;​ //      «» sendDigits(dtmf.balance.digit); } else if ( text.includes("") && text.includes("") && text.includes("") ) { data.category = dtmf.pin_code.name;​ sendDigits(dtmf.pin_code.digit); } else { //    ,    - ​ data.category = dtmf.operator.name;​ sendDigits(dtmf.operator.digit); } }​ //      IVR «», //  «»     ,   ,     . //    IVR   «»    sendDigits,​ /*    ""  ,  «»    ,  ,  dtmf - 1, IVR «»    ,   dtmf - 3,     “  -” */​ function sendDigits(digit) { //   call.sendDigits(digit);​ //     1.5 ,     DTMF. setTimeout(call.hangup, 1500); }​ //   ,     . async function HandleDisconnected(e) { //    Disconnected          . data.duration = e.duration;​ //         ,     .      CRM. await sendToCrm(data);​ //   .             ,       60 .      ,   . VoxEngine.terminate(); }​ async function sendToCrm(data) { //    -       .​ Logger.write(JSON.stringify(data));​ //    -        http -     Net.httpRequestAsync }  //    ASR      ,    function startASR() { const asr = VoxEngine.createASR({ lang: ASRLanguage.RUSSIAN_RU });​ //     asr.addEventListener(ASREvents.Result, asrevent => { asr.stop();​ speech_processing(asrevent.text); }); }​ //     function speech_processing(text) { /*   /,      */​ /*   if -       .        ,    .       includes   && */ if ( text.includes("") && text.includes("") && text.includes("") ) { //        data.category = dtmf.balance.name;​ //      «» sendDigits(dtmf.balance.digit); } else if ( text.includes("") && text.includes("") && text.includes("") ) { data.category = dtmf.pin_code.name;​ sendDigits(dtmf.pin_code.digit); } else { //    ,    - ​ data.category = dtmf.operator.name;​ sendDigits(dtmf.operator.digit); } }​ //      IVR «», //  «»     ,   ,     . //    IVR   «»    sendDigits,​ /*    ""  ,  «»    ,  ,  dtmf - 1, IVR «»    ,   dtmf - 3,     “  -” */​ function sendDigits(digit) { //   call.sendDigits(digit);​ //     1.5 ,     DTMF. setTimeout(call.hangup, 1500); }​ //   ,     . async function HandleDisconnected(e) { //    Disconnected          . data.duration = e.duration;​ //         ,     .      CRM. await sendToCrm(data);​ //   .             ,       60 .      ,   . VoxEngine.terminate(); }​ async function sendToCrm(data) { //    -       .​ Logger.write(JSON.stringify(data));​ //    -        http -     Net.httpRequestAsync }  //    ASR      ,    function startASR() { const asr = VoxEngine.createASR({ lang: ASRLanguage.RUSSIAN_RU });​ //     asr.addEventListener(ASREvents.Result, asrevent => { asr.stop();​ speech_processing(asrevent.text); }); }​ //     function speech_processing(text) { /*   /,      */​ /*   if -       .        ,    .       includes   && */ if ( text.includes("") && text.includes("") && text.includes("") ) { //        data.category = dtmf.balance.name;​ //      «» sendDigits(dtmf.balance.digit); } else if ( text.includes("") && text.includes("") && text.includes("") ) { data.category = dtmf.pin_code.name;​ sendDigits(dtmf.pin_code.digit); } else { //    ,    - ​ data.category = dtmf.operator.name;​ sendDigits(dtmf.operator.digit); } }​ //      IVR «», //  «»     ,   ,     . //    IVR   «»    sendDigits,​ /*    ""  ,  «»    ,  ,  dtmf - 1, IVR «»    ,   dtmf - 3,     “  -” */​ function sendDigits(digit) { //   call.sendDigits(digit);​ //     1.5 ,     DTMF. setTimeout(call.hangup, 1500); }​ //   ,     . async function HandleDisconnected(e) { //    Disconnected          . data.duration = e.duration;​ //         ,     .      CRM. await sendToCrm(data);​ //   .             ,       60 .      ,   . VoxEngine.terminate(); }​ async function sendToCrm(data) { //    -       .​ Logger.write(JSON.stringify(data));​ //    -        http -     Net.httpRequestAsync }  //    ASR      ,    function startASR() { const asr = VoxEngine.createASR({ lang: ASRLanguage.RUSSIAN_RU });​ //     asr.addEventListener(ASREvents.Result, asrevent => { asr.stop();​ speech_processing(asrevent.text); }); }​ //     function speech_processing(text) { /*   /,      */​ /*   if -       .        ,    .       includes   && */ if ( text.includes("") && text.includes("") && text.includes("") ) { //        data.category = dtmf.balance.name;​ //      «» sendDigits(dtmf.balance.digit); } else if ( text.includes("") && text.includes("") && text.includes("") ) { data.category = dtmf.pin_code.name;​ sendDigits(dtmf.pin_code.digit); } else { //    ,    - ​ data.category = dtmf.operator.name;​ sendDigits(dtmf.operator.digit); } }​ //      IVR «», //  «»     ,   ,     . //    IVR   «»    sendDigits,​ /*    ""  ,  «»    ,  ,  dtmf - 1, IVR «»    ,   dtmf - 3,     “  -” */​ function sendDigits(digit) { //   call.sendDigits(digit);​ //     1.5 ,     DTMF. setTimeout(call.hangup, 1500); }​ //   ,     . async function HandleDisconnected(e) { //    Disconnected          . data.duration = e.duration;​ //         ,     .      CRM. await sendToCrm(data);​ //   .             ,       60 .      ,   . VoxEngine.terminate(); }​ async function sendToCrm(data) { //    -       .​ Logger.write(JSON.stringify(data));​ //    -        http -     Net.httpRequestAsync }  //    ASR      ,    function startASR() { const asr = VoxEngine.createASR({ lang: ASRLanguage.RUSSIAN_RU });​ //     asr.addEventListener(ASREvents.Result, asrevent => { asr.stop();​ speech_processing(asrevent.text); }); }​ //     function speech_processing(text) { /*   /,      */​ /*   if -       .        ,    .       includes   && */ if ( text.includes("") && text.includes("") && text.includes("") ) { //        data.category = dtmf.balance.name;​ //      «» sendDigits(dtmf.balance.digit); } else if ( text.includes("") && text.includes("") && text.includes("") ) { data.category = dtmf.pin_code.name;​ sendDigits(dtmf.pin_code.digit); } else { //    ,    - ​ data.category = dtmf.operator.name;​ sendDigits(dtmf.operator.digit); } }​ //      IVR «», //  «»     ,   ,     . //    IVR   «»    sendDigits,​ /*    ""  ,  «»    ,  ,  dtmf - 1, IVR «»    ,   dtmf - 3,     “  -” */​ function sendDigits(digit) { //   call.sendDigits(digit);​ //     1.5 ,     DTMF. setTimeout(call.hangup, 1500); }​ //   ,     . async function HandleDisconnected(e) { //    Disconnected          . data.duration = e.duration;​ //         ,     .      CRM. await sendToCrm(data);​ //   .             ,       60 .      ,   . VoxEngine.terminate(); }​ async function sendToCrm(data) { //    -       .​ Logger.write(JSON.stringify(data));​ //    -        http -     Net.httpRequestAsync }  //    ASR      ,    function startASR() { const asr = VoxEngine.createASR({ lang: ASRLanguage.RUSSIAN_RU });​ //     asr.addEventListener(ASREvents.Result, asrevent => { asr.stop();​ speech_processing(asrevent.text); }); }​ //     function speech_processing(text) { /*   /,      */​ /*   if -       .        ,    .       includes   && */ if ( text.includes("") && text.includes("") && text.includes("") ) { //        data.category = dtmf.balance.name;​ //      «» sendDigits(dtmf.balance.digit); } else if ( text.includes("") && text.includes("") && text.includes("") ) { data.category = dtmf.pin_code.name;​ sendDigits(dtmf.pin_code.digit); } else { //    ,    - ​ data.category = dtmf.operator.name;​ sendDigits(dtmf.operator.digit); } }​ //      IVR «», //  «»     ,   ,     . //    IVR   «»    sendDigits,​ /*    ""  ,  «»    ,  ,  dtmf - 1, IVR «»    ,   dtmf - 3,     “  -” */​ function sendDigits(digit) { //   call.sendDigits(digit);​ //     1.5 ,     DTMF. setTimeout(call.hangup, 1500); }​ //   ,     . async function HandleDisconnected(e) { //    Disconnected          . data.duration = e.duration;​ //         ,     .      CRM. await sendToCrm(data);​ //   .             ,       60 .      ,   . VoxEngine.terminate(); }​ async function sendToCrm(data) { //    -       .​ Logger.write(JSON.stringify(data));​ //    -        http -     Net.httpRequestAsync }  //    ASR      ,    function startASR() { const asr = VoxEngine.createASR({ lang: ASRLanguage.RUSSIAN_RU });​ //     asr.addEventListener(ASREvents.Result, asrevent => { asr.stop();​ speech_processing(asrevent.text); }); }​ //     function speech_processing(text) { /*   /,      */​ /*   if -       .        ,    .       includes   && */ if ( text.includes("") && text.includes("") && text.includes("") ) { //        data.category = dtmf.balance.name;​ //      «» sendDigits(dtmf.balance.digit); } else if ( text.includes("") && text.includes("") && text.includes("") ) { data.category = dtmf.pin_code.name;​ sendDigits(dtmf.pin_code.digit); } else { //    ,    - ​ data.category = dtmf.operator.name;​ sendDigits(dtmf.operator.digit); } }​ //      IVR «», //  «»     ,   ,     . //    IVR   «»    sendDigits,​ /*    ""  ,  «»    ,  ,  dtmf - 1, IVR «»    ,   dtmf - 3,     “  -” */​ function sendDigits(digit) { //   call.sendDigits(digit);​ //     1.5 ,     DTMF. setTimeout(call.hangup, 1500); }​ //   ,     . async function HandleDisconnected(e) { //    Disconnected          . data.duration = e.duration;​ //         ,     .      CRM. await sendToCrm(data);​ //   .             ,       60 .      ,   . VoxEngine.terminate(); }​ async function sendToCrm(data) { //    -       .​ Logger.write(JSON.stringify(data));​ //    -        http -     Net.httpRequestAsync }  //    ASR      ,    function startASR() { const asr = VoxEngine.createASR({ lang: ASRLanguage.RUSSIAN_RU });​ //     asr.addEventListener(ASREvents.Result, asrevent => { asr.stop();​ speech_processing(asrevent.text); }); }​ //     function speech_processing(text) { /*   /,      */​ /*   if -       .        ,    .       includes   && */ if ( text.includes("") && text.includes("") && text.includes("") ) { //        data.category = dtmf.balance.name;​ //      «» sendDigits(dtmf.balance.digit); } else if ( text.includes("") && text.includes("") && text.includes("") ) { data.category = dtmf.pin_code.name;​ sendDigits(dtmf.pin_code.digit); } else { //    ,    - ​ data.category = dtmf.operator.name;​ sendDigits(dtmf.operator.digit); } }​ //      IVR «», //  «»     ,   ,     . //    IVR   «»    sendDigits,​ /*    ""  ,  «»    ,  ,  dtmf - 1, IVR «»    ,   dtmf - 3,     “  -” */​ function sendDigits(digit) { //   call.sendDigits(digit);​ //     1.5 ,     DTMF. setTimeout(call.hangup, 1500); }​ //   ,     . async function HandleDisconnected(e) { //    Disconnected          . data.duration = e.duration;​ //         ,     .      CRM. await sendToCrm(data);​ //   .             ,       60 .      ,   . VoxEngine.terminate(); }​ async function sendToCrm(data) { //    -       .​ Logger.write(JSON.stringify(data));​ //    -        http -     Net.httpRequestAsync }  //    ASR      ,    function startASR() { const asr = VoxEngine.createASR({ lang: ASRLanguage.RUSSIAN_RU });​ //     asr.addEventListener(ASREvents.Result, asrevent => { asr.stop();​ speech_processing(asrevent.text); }); }​ //     function speech_processing(text) { /*   /,      */​ /*   if -       .        ,    .       includes   && */ if ( text.includes("") && text.includes("") && text.includes("") ) { //        data.category = dtmf.balance.name;​ //      «» sendDigits(dtmf.balance.digit); } else if ( text.includes("") && text.includes("") && text.includes("") ) { data.category = dtmf.pin_code.name;​ sendDigits(dtmf.pin_code.digit); } else { //    ,    - ​ data.category = dtmf.operator.name;​ sendDigits(dtmf.operator.digit); } }​ //      IVR «», //  «»     ,   ,     . //    IVR   «»    sendDigits,​ /*    ""  ,  «»    ,  ,  dtmf - 1, IVR «»    ,   dtmf - 3,     “  -” */​ function sendDigits(digit) { //   call.sendDigits(digit);​ //     1.5 ,     DTMF. setTimeout(call.hangup, 1500); }​ //   ,     . async function HandleDisconnected(e) { //    Disconnected          . data.duration = e.duration;​ //         ,     .      CRM. await sendToCrm(data);​ //   .             ,       60 .      ,   . VoxEngine.terminate(); }​ async function sendToCrm(data) { //    -       .​ Logger.write(JSON.stringify(data));​ //    -        http -     Net.httpRequestAsync }  //    ASR      ,    function startASR() { const asr = VoxEngine.createASR({ lang: ASRLanguage.RUSSIAN_RU });​ //     asr.addEventListener(ASREvents.Result, asrevent => { asr.stop();​ speech_processing(asrevent.text); }); }​ //     function speech_processing(text) { /*   /,      */​ /*   if -       .        ,    .       includes   && */ if ( text.includes("") && text.includes("") && text.includes("") ) { //        data.category = dtmf.balance.name;​ //      «» sendDigits(dtmf.balance.digit); } else if ( text.includes("") && text.includes("") && text.includes("") ) { data.category = dtmf.pin_code.name;​ sendDigits(dtmf.pin_code.digit); } else { //    ,    - ​ data.category = dtmf.operator.name;​ sendDigits(dtmf.operator.digit); } }​ //      IVR «», //  «»     ,   ,     . //    IVR   «»    sendDigits,​ /*    ""  ,  «»    ,  ,  dtmf - 1, IVR «»    ,   dtmf - 3,     “  -” */​ function sendDigits(digit) { //   call.sendDigits(digit);​ //     1.5 ,     DTMF. setTimeout(call.hangup, 1500); }​ //   ,     . async function HandleDisconnected(e) { //    Disconnected          . data.duration = e.duration;​ //         ,     .      CRM. await sendToCrm(data);​ //   .             ,       60 .      ,   . VoxEngine.terminate(); }​ async function sendToCrm(data) { //    -       .​ Logger.write(JSON.stringify(data));​ //    -        http -     Net.httpRequestAsync }  //    ASR      ,    function startASR() { const asr = VoxEngine.createASR({ lang: ASRLanguage.RUSSIAN_RU });​ //     asr.addEventListener(ASREvents.Result, asrevent => { asr.stop();​ speech_processing(asrevent.text); }); }​ //     function speech_processing(text) { /*   /,      */​ /*   if -       .        ,    .       includes   && */ if ( text.includes("") && text.includes("") && text.includes("") ) { //        data.category = dtmf.balance.name;​ //      «» sendDigits(dtmf.balance.digit); } else if ( text.includes("") && text.includes("") && text.includes("") ) { data.category = dtmf.pin_code.name;​ sendDigits(dtmf.pin_code.digit); } else { //    ,    - ​ data.category = dtmf.operator.name;​ sendDigits(dtmf.operator.digit); } }​ //      IVR «», //  «»     ,   ,     . //    IVR   «»    sendDigits,​ /*    ""  ,  «»    ,  ,  dtmf - 1, IVR «»    ,   dtmf - 3,     “  -” */​ function sendDigits(digit) { //   call.sendDigits(digit);​ //     1.5 ,     DTMF. setTimeout(call.hangup, 1500); }​ //   ,     . async function HandleDisconnected(e) { //    Disconnected          . data.duration = e.duration;​ //         ,     .      CRM. await sendToCrm(data);​ //   .             ,       60 .      ,   . VoxEngine.terminate(); }​ async function sendToCrm(data) { //    -       .​ Logger.write(JSON.stringify(data));​ //    -        http -     Net.httpRequestAsync }  //    ASR      ,    function startASR() { const asr = VoxEngine.createASR({ lang: ASRLanguage.RUSSIAN_RU });​ //     asr.addEventListener(ASREvents.Result, asrevent => { asr.stop();​ speech_processing(asrevent.text); }); }​ //     function speech_processing(text) { /*   /,      */​ /*   if -       .        ,    .       includes   && */ if ( text.includes("") && text.includes("") && text.includes("") ) { //        data.category = dtmf.balance.name;​ //      «» sendDigits(dtmf.balance.digit); } else if ( text.includes("") && text.includes("") && text.includes("") ) { data.category = dtmf.pin_code.name;​ sendDigits(dtmf.pin_code.digit); } else { //    ,    - ​ data.category = dtmf.operator.name;​ sendDigits(dtmf.operator.digit); } }​ //      IVR «», //  «»     ,   ,     . //    IVR   «»    sendDigits,​ /*    ""  ,  «»    ,  ,  dtmf - 1, IVR «»    ,   dtmf - 3,     “  -” */​ function sendDigits(digit) { //   call.sendDigits(digit);​ //     1.5 ,     DTMF. setTimeout(call.hangup, 1500); }​ //   ,     . async function HandleDisconnected(e) { //    Disconnected          . data.duration = e.duration;​ //         ,     .      CRM. await sendToCrm(data);​ //   .             ,       60 .      ,   . VoxEngine.terminate(); }​ async function sendToCrm(data) { //    -       .​ Logger.write(JSON.stringify(data));​ //    -        http -     Net.httpRequestAsync } 


इसके लिए धन्यवाद, न केवल ग्राहक सेवा की गति और गुणवत्ता में वृद्धि करना संभव था, बल्कि ऑपरेटरों पर बोझ को काफी कम कर सकता था। अब प्रति माह सौ हजार से अधिक कॉल रोबोट द्वारा संसाधित किए जाते हैं। यदि समस्या को हल करने के लिए ऑपरेटर को अभी भी प्रत्यक्ष भागीदारी की आवश्यकता है, तो आईवीआर कॉल को सही विशेषज्ञ पर स्विच करता है, जो क्लाइंट के साथ बॉट की पूरी प्रारंभिक बातचीत का लिखित प्रतिलेखन प्राप्त करता है: डेटा एपीआई के माध्यम से कॉन्सेंस सीआरएम सिस्टम में जाता है।


चरण 2: ध्वनि सूचनाएं


आने वाली लाइन की सर्विसिंग की लागत को कम करने के लिए, हम समझ गए, आउटगोइंग पर जाएं। ऑपरेटर द्वारा कार्डधारक को मासिक भुगतान करने के बारे में याद रखने वाले विशिष्ट कारणों में से एक मासिक भुगतान करने के बारे में एक अनुस्मारक है: यह फोन द्वारा किया जाना चाहिए, क्योंकि संदेश या धक्का अधिसूचना याद हो सकती है। इसी समय, इस प्रक्रिया पर ऑपरेटरों का समय बिताना आवश्यक नहीं है। Smartcalls सेवा की मदद से, "विवेक" ग्राहक को डायल करता है - कुल में, रोबोट तीन प्रयास करता है - और भाषण संश्लेषण के माध्यम से बोलता है कि कब और कितना खाते में डाला जाना चाहिए।


अधिसूचना स्क्रिप्ट

आउटगोइंग कॉल की संख्या दो हजार प्रति मिनट तक पहुंच सकती है, और यदि आवश्यक हो तो ऑपरेटिंग मोड आपको इसका उपयोग करने की अनुमति देता है 24/7। यह कर्मचारियों और पेरोल को बढ़ाने की आवश्यकता से बचने के साथ-साथ ऑपरेटरों के नियमित काम को महत्वपूर्ण रूप से अनुकूलित करता है, और विशेष रूप से संपर्क केंद्र के महत्वपूर्ण और संवेदनशील कार्यों को हल करने के लिए विशेषज्ञों के उपयोग की अनुमति देता है।



चरण 3: प्रतिक्रिया इकट्ठा करें


अंतिम बिंदु अनुसंधान के लिए सूचना का स्वचालित संग्रह है। Smartcalls का उपयोग करने से पहले, परियोजना प्रति माह 3,000 से 5,000 लोगों के नमूने का प्रबंधन करने में सफल रही। अब रोबोट हर महीने 40,000 आउटगोइंग कॉल करता है, जबकि पहले डायल करने में लगे सभी कर्मचारियों को दूसरे कार्यात्मक में स्थानांतरित कर दिया गया था। सेवा की मदद से, सेवा की गुणवत्ता की निगरानी की जाती है, ग्राहक सेवा प्रभावशीलता (सीईएस) माप, ग्राहक निष्ठा और संतुष्टि (एनपीएस और सीएसआई) को मापा जाता है।


एनपीएस स्क्रिप्ट

यह कैसे काम करता है? बॉट ग्राहक को परियोजना के मापदंडों में से एक दस-बिंदु पैमाने पर मूल्यांकन करने के लिए कहता है, और आगे का परिदृश्य रेटिंग पर निर्भर करता है। यदि यह "आठ" और ऊपर है, तो रोबोट वार्ताकार का धन्यवाद करता है और बातचीत समाप्त करता है। यदि "सात" और नीचे - असंतोष के कारणों का संकेत देते हुए एक विस्तृत टिप्पणी छोड़ने के लिए कहता है। आगे के विश्लेषण के लिए भाषण लिखित रूप में प्रेषित और अपलोड किया जाता है।


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

Source: https://habr.com/ru/post/hi467021/


All Articles