結果
サービスを試すのが待ちきれない人のために、すぐにリンクhttp://demos.zingaya.com/newyear/を提供します。インターフェイスには特別なコメントは必要ないと思います。 あなたの側を選択し、電話をかける/受信します。
オペレーターのアカウントを登録し、ログインし、ステータスを「通話の受信準備完了」に設定します
着信コールがオペレーターに配信されるとすぐに、メロディが再生され、コールに応答できるポップアップウィンドウが表示されます。
アプリケーション作成
VoxImplantコントロールパネル( https://manage.voximplant.com )にログインし、アプリケーションセクションで新年のアプリケーションを作成します。これは、ユーザーオペレーターをまとめる仮想エンティティであり、呼び出しを処理するためのルールも記述します(どのシナリオを処理する必要があります)呼び出し)。
VoxEngineスクリプトを作成する
ここで、着信コールを処理し、それらをオペレーターに分配するスクリプトを作成する必要があります。 VoxImplantのスクリプトはJSで記述されています。 次のようになります。
// ACD ( ) ASR ( ) require(Modules.ACD); require(Modules.ASR); var request, originalCall, callerid, statusInterval, asrTimeout, asr, queueName = 'MainQueue'; // VoxEngine.addEventListener(AppEvents.CallAlerting, handleInboundCall); // - function handleInboundCall(e) { originalCall = e.call; // callerid = e.callerid; // caller id // originalCall.addEventListener(CallEvents.Connected, handleCallConnected); originalCall.addEventListener(CallEvents.Failed, cleanup); originalCall.addEventListener(CallEvents.Disconnected, cleanup); // originalCall.answer(); } // function cleanup(e) { if (request) { // - request.cancel(); request = null; } // VoxEngine.terminate(); } // TTS function handlePlaybackFinished(e) { e.call.startPlayback("http://cdn.voximplant.com/newyear.mp3"); } // TTS function getNumEnding(iNumber, aEndings) { var sEnding, i; iNumber = iNumber % 100; if (iNumber >= 11 && iNumber <= 19) { sEnding = aEndings[2]; } else { i = iNumber % 10; switch (i) { case (1): sEnding = aEndings[0]; break; case (2): case (3): case (4): sEnding = aEndings[1]; break; default: sEnding = aEndings[2]; } } return sEnding; } // function handleCallConnected(e) { // e.call.say(" - !!! " + " ?", Language.RU_RUSSIAN_FEMALE); e.call.addEventListener(CallEvents.PlaybackFinished, handleIntroPlayed); } // function handleIntroPlayed(e) { e.call.removeEventListener(CallEvents.PlaybackFinished, handleIntroPlayed); // asr = VoxEngine.createASR(ASRLanguage.RUSSIAN_RU, [" ", "", "", " ", " ", " " ]); // asr.addEventListener(ASREvents.CaptureStarted, function (e) { clearTimeout(asrTimeout); }); // asr.addEventListener(ASREvents.Result, function (e) { // asr.stop(); // , SnegurQueue if ((e.text == ' ' || e.text == '' || e.text == '') && e.confidence >= 50) { originalCall.say("! .", Language.RU_RUSSIAN_FEMALE); queueName = 'SnegurQueue'; originalCall.addEventListener(CallEvents.PlaybackFinished, addToQueue); } else if ((e.text == ' ' || e.text == ' ' || e.text == ' ') && e.confidence >= 50) { // , - MorozQueue originalCall.say("! .", Language.RU_RUSSIAN_FEMALE); queueName = 'MorozQueue'; originalCall.addEventListener(CallEvents.PlaybackFinished, addToQueue); } else { // ( < 50%), - MainQueue originalCall.say(" .", Language.RU_RUSSIAN_FEMALE); originalCall.addEventListener(CallEvents.PlaybackFinished, addToQueue); } }); // ASR originalCall.sendMediaTo(asr); // 3 , asrTimeout = setTimeout(function () { asr.stop(); originalCall.say(" .", Language.RU_RUSSIAN_FEMALE); originalCall.addEventListener(CallEvents.PlaybackFinished, addToQueue); }, 3000); } // queueName function addToQueue(e) { Logger.write('Adding call to queue: '+queueName); originalCall.removeEventListener(CallEvents.PlaybackFinished, addToQueue); // TTS originalCall.addEventListener(CallEvents.PlaybackFinished, handlePlaybackFinished); // request = VoxEngine.enqueueACDRequest(queueName, callerid); // request.addEventListener(ACDEvents.Queued, function (acdevent) { request.getStatus(); }); // request.addEventListener(ACDEvents.Waiting, function (acdevent) { var minutesLeft = acdevent.ewt + 1, txt = ' '; if (queueName == 'SnegurQueue') txt = " "; else if (queueName == 'MorozQueue') txt = " "; originalCall.say(" " + acdevent.position + ". " + txt + " " + (acdevent.ewt + 1) + getNumEnding(minutesLeft, ['', '', '']), Language.RU_RUSSIAN_FEMALE); }); // - request.addEventListener(ACDEvents.OperatorReached, function (acdevent) { VoxEngine.sendMediaBetween(acdevent.operatorCall, originalCall); acdevent.operatorCall.sendMessage(JSON.stringify({ number: originalCall.callerid() })); acdevent.operatorCall.addEventListener(CallEvents.Disconnected, VoxEngine.terminate); clearInterval(statusInterval); }); // request.addEventListener(ACDEvents.Offline, function (acdevent) { clearInterval(statusInterval); // , if (queueName == 'SnegurQueue') { originalCall.say(" , . !", Language.RU_RUSSIAN_FEMALE); queueName = 'MainQueue'; originalCall.addEventListener(CallEvents.PlaybackFinished, addToQueue); } else if (queueName == 'MorozQueue') { originalCall.say(" , . !", Language.RU_RUSSIAN_FEMALE); queueName = 'MainQueue'; originalCall.addEventListener(CallEvents.PlaybackFinished, addToQueue); } else { // , originalCall.say(" , . " + " -! !", Language.RU_RUSSIAN_FEMALE); originalCall.addEventListener(CallEvents.PlaybackFinished, VoxEngine.Terminate); } }); // 30 statusInterval = setInterval(request.getStatus, 30000); }
処理ルールの作成
番号およびWeb SDKからの着信呼び出しは、処理のためにスクリプトに送信する必要があります。 発信通話用のWebアプリケーションでは、newyearcall番号を縫い付け、電話番号のセクションでは、番号74951330204をアプリケーションに接続しました。 2つのルールを作成します。
待ち行列
このプロジェクトのコンテキストでは、3つの異なるキュー([設定]-> [キュー])- MainQueue (すべて)、 MorozQueue (Santa Clausesのみ)、およびSnegurQueue (Snow Maidenのみ)を作成する必要があります。 呼び出し元は、話したい相手を選択するように招待されます-Snow MaidenまたはSanta Clausで、前述の辞書からVoxImplantで利用可能な音声認識システムを使用して選択します。 3秒以内に選択が表明されなかった場合、またはシステムが認識されたオプション(確率<50%)を確信していない場合、コールは一般的なキューにルーティングされます。 選択が正常に行われた場合、特定のキューに送信しています。 このキューにサービスを提供するオペレーターがいない場合、一般キューでコールを再定義し、オペレーターがいない場合、メッセージを失い、自分でオペレーターになることを申し出ます。
キューの作成に加えて、アプリケーションユーザー(オペレーター)のキューへのバインドはスキル(設定->スキル)によって行われるため、適切なスキルグループを作成する必要もあります。 NewYearSkillAll 、 NewYearSkillMorozおよびNewYearSkillSnegurの 3つのスキルを作成し、それぞれのスキル ( MainQueue 、 MorozQueueおよびSnegurQueue )に順番を設定します。 ユーザーオペレーターを作成する場合、NewYearSkillAll + NewYearSkillMoroz(Santa Clauses)またはNewYearSkillSnegur(snow Maidens)の2つのスキルグループにすぐにフックします。
オペレーターの場所
ウェブダイヤラーのようなオペレーターの場所は、 VoxImplant Web SDKを使用して作成されます 。 重要な点のうち、 setOperatorACDStatus関数を使用したオペレーターステータススイッチの実装に注意することができます。
vox.setOperatorACDStatus(VoxImplant.OperatorACDStatuses.Ready); // vox - VoxImplant.Client
コールは、エージェントが準備完了状態の場合にのみエージェントに配信されます。 他の状態にあることは、オペレーターの統計に反映されます。
一般に、これで十分です。残りのねじ込み(アプリケーションユーザーのリモート作成など)は、 HTTP API VoxImplantに基づいて既に行われています。
もう一度、結果へのリンクはhttp://demos.zingaya.com/newyear/になります。または、+ 74951330204をダイヤルするだけです。
PSトップオペレーターを完了
したがって、私たちの競争の勝者は、ログインを持つオペレーターでした:
フリザルザル
イボルデュレフ
ピズダグ
zoor4117
ThereIsNoSanta
フィエスタ
DedMorozZzZ
保安官
ベンターショット
joloweb6
みんな、賞品を受け取るために個人で書いてください。