كيف يتواصل الضمير روبوت مع العملاء

سنخبرك كيف قام مشروع QIWI fintech - بطاقة خطة الضمير بدون فوائد - بنقل بعض محادثات مركز الاتصال إلى روبوت لا يجيب على الأسئلة فحسب ، بل يسألهم أيضًا عن طريق المكالمات الصادرة. تتناول هذه المقالة وضع طلبات HTTP وتوليف الكلام والتعرف على الصوت موضع التنفيذ.



الخطوة 1: ذكي IVR


تعد مسألة الأموال واحدة من المشكلات القليلة التي لا يزال العملاء يفضلون حلها شفهياً ، لذلك لا يقع عبء العمل على مراكز اتصال البنوك بسبب ظهور الدردشات على مواقع الويب وفي تطبيقات الهاتف المحمول. يتلقى مشغلو الضمير أكثر من أربعة آلاف مكالمة يوميًا تتعلق بتسجيل واستخدام بطاقة التقسيط. نظرًا لأن معظم الطلبات نموذجية ولا تتطلب كفاءة خاصة لتقديم المشورة ، يمكن نقل معالجتها إلى الروبوت.

// ,       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(); } 

إذا كان المستهلك مهتمًا بالتعليمات العامة - على سبيل المثال ، تنشيط البطاقة ، وكيفية تجديدها ، وتغيير رمز PIN ، وما إلى ذلك ، فإنه يسمع مقطع الصوت المسجل مع شرح خطوة بخطوة.

 // ,    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)); }); }); } 

وبالتالي ، فإن الوظيفة الأولى لمركز الاتصال الذي يسهل التشغيل الآلي له هي استنساخ haouts القياسية والإجابات على الأسئلة الشائعة.

المجموعة الثانية من الطعون ، والتي لا يلزم إغلاق أي شخص ، هي الإبلاغ عن الرصيد الحالي ، ومبلغ الدين ، ومبلغ الدفعة التالية.

من وجهة نظر أمن المعلومات ، تمت مواءمة العملية برمتها مع متطلبات التشريعات ومعايير الصناعة الروسية: لا تتمتع Voximplant بالوصول إلى البيانات الشخصية للعملاء. يحدد القرار الموضوع وينقل معالجة المكالمة إلى Conscience IVR ، حيث يتم التعبير عن المعلومات من بطاقة العميل باستخدام التوليف الصوتي ، ويتم التفويض على جانب 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 } 


بفضل هذا ، كان من الممكن ليس فقط زيادة سرعة وجودة خدمة العملاء ، ولكن أيضًا تقليل العبء الواقع على المشغلين بشكل كبير. الآن تتم معالجة أكثر من مائة ألف مكالمة في الشهر عن طريق الروبوت. إذا كان المشغل لا يزال بحاجة إلى مشاركة مباشرة لحل المشكلة ، فإن IVR تحول المكالمة إلى المتخصص المناسب ، الذي يتلقى نسخة مكتوبة من المحادثة الأولية الكاملة للروبوت مع العميل: يتم نقل البيانات إلى نظام Conscience CRM عبر API.


الخطوة 2: الإخطارات الصوتية


كيفية تقليل تكلفة خدمة الخط الوارد ، اكتشفنا ، انتقل إلى المنتهية ولايته. أحد الأسباب النموذجية لقيام المشغل بالاتصال بحامل البطاقة هو تذكير بإجراء عملية دفع شهرية: يجب أن يتم ذلك عن طريق الهاتف ، فقد يتم تفويت رسالة أو إشعار دفع. في الوقت نفسه ، ليس من الضروري قضاء وقت المشغلين في هذه العملية. بمساعدة خدمة Smartcalls ، يقوم "Conscience" بالاتصال بالعميل - في المجموع ، يقوم الروبوت بإجراء ثلاث محاولات - ويتحدث من خلال توليف الكلام متى وكيف يجب وضع المبلغ في الحساب.


النصي الإخطار

يمكن أن يصل عدد المكالمات الصادرة إلى ألفين في الدقيقة ، ويسمح لك وضع التشغيل باستخدامها إذا لزم الأمر على مدار الساعة وطوال أيام الأسبوع. يعمل هذا على تحسين العمل الروتيني للمشغلين إلى حد كبير ، وتجنب الحاجة إلى تضخيم الموظفين وكشوف المرتبات ، كما يتيح استخدام المتخصصين حصريًا لحل المهام الحساسة والحساسة في مركز الاتصال.



الخطوة 3: جمع ردود الفعل


النقطة الأخيرة هي جمع المعلومات الآلي للبحث. قبل استخدام Smartcalls ، تمكن المشروع من رنين عينة من 3000 إلى 5000 شخص شهريًا. الآن يقوم الروبوت بإجراء 40،000 مكالمة صادرة كل شهر ، في حين تم نقل جميع الموظفين الذين شاركوا في الاتصال من قبل إلى وظيفة أخرى. بمساعدة الخدمة ، يتم مراقبة جودة الخدمة ، وقياس فعالية خدمة العملاء (CES) ، ولاء العملاء ورضاهم (NPS و CSI).


النصي NPS

كيف يعمل؟ يطلب الروبوت من العميل تقييم مقياس من عشر نقاط على أحد مقاييس المشروع ، ويعتمد السيناريو الإضافي على التقييم. إذا كان الرقم "ثمانية" أو أعلى ، فإن الروبوت يشكر المحاور وينهي المحادثة. إذا كانت الإجابة "سبعة" وتحت - تطلب ترك تعليق مفصل ، موضحًا أسباب عدم الرضا. يتم نسخ الكلام وتحميله في الكتابة لمزيد من التحليل.


اليوم ، التكنولوجيا تسمح لك بإنشاء الروبوت ودية حقا. تتحسن باستمرار قدرته على فهم الكلام البشري نتيجة للتدريب المستمر على العبارات الجديدة والكلمات المستخدمة بشكل متكرر. لا تتم إضافة أسماء العروض الترويجية أو خيارات البطاقات فقط إلى طراز اللغة ، ولكن أيضًا العديد من الخيارات لصياغة نفس الطلبات.

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


All Articles