VoxImplantを使用したコールセンターの構成については既に書いたので、この記事ではこの部分を繰り返さず、コールバック関数を実装するためにスクリプトで行う必要のある変更に焦点を当てます。 すぐに、この機能は、キューを操作するためにACDモジュールが接続されているシナリオでのみ使用できることに注意してください。 コールバック関数を考慮して、着信呼び出しを処理するスクリプトは次のようになります。
// ACD require(Modules.ACD); var request, // <-- ACDRequest originalCall, // <-- callerid, statusInterval, callback = false; // <-- - // VoxEngine.addEventListener(AppEvents.CallAlerting, handleInboundCall); // function handleInboundCall(e) { originalCall = e.call; callerid = e.callerid; // originalCall.addEventListener(CallEvents.Connected, handleCallConnected); originalCall.addEventListener(CallEvents.PlaybackFinished, handlePlaybackFinished); originalCall.addEventListener(CallEvents.Failed, cleanup); originalCall.addEventListener(CallEvents.Disconnected, cleanup); // originalCall.answer(); } // function cleanup(e) { if (request) { // - request.cancel(); request = null; } // if (!callback) VoxEngine.terminate(); } // function handlePlaybackFinished(e) { e.call.startPlayback("http://cdn.voximplant.com/toto.mp3"); } // function handleToneReceived(e) { if (e.tone == "#") { callback = true; originalCall.hangup(); // <-- } } // function handleCallConnected(e) { // originalCall.handleTones(true); originalCall.addEventListener(CallEvents.ToneReceived, handleToneReceived); // 'MainQueue', request = VoxEngine.enqueueACDRequest("MainQueue", callerid); // request.addEventListener(ACDEvents.Queued, function (acdevent) { request.getStatus(); }); // request.addEventListener(ACDEvents.Waiting, function (acdevent) { var minutesLeft = acdevent.ewt + 1; var minutesWord = " ."; if ((minutesLeft > 10 && minutesLeft < 20) || (minutesLeft % 10 > 4 || minutesLeft % 10 == 0)) { minutesWord = " ."; } else if (minutesLeft % 10 == 1) { minutesWord = " ."; } originalCall.say(" " + acdevent.position + ". " + (acdevent.ewt + 1) + minutesWord + " .", Language.RU_RUSSIAN_FEMALE); }); // request.addEventListener(ACDEvents.OperatorReached, function (acdevent) { if (callback) { // , , acdevent.operatorCall.say(", .", Language.RU_RUSSIAN_FEMALE); acdevent.operatorCall.addEventListener(CallEvents.Disconnected, VoxEngine.terminate); acdevent.operatorCall.addEventListener(CallEvents.PlaybackFinished, function (callevent) { // . caller id , Voximplant. const callerId = "+1234567890" originalCall = VoxEngine.callPSTN(callerid, callerId); originalCall.addEventListener(CallEvents.Connected, function (callevent) { VoxEngine.sendMediaBetween(acdevent.operatorCall, originalCall); clearInterval(statusInterval); }); originalCall.addEventListener(CallEvents.Failed, cleanup); originalCall.addEventListener(CallEvents.Disconnected, cleanup); }); } else { VoxEngine.sendMediaBetween(acdevent.operatorCall, originalCall); acdevent.operatorCall.addEventListener(CallEvents.Disconnected, VoxEngine.terminate); clearInterval(statusInterval); } }); // - request.addEventListener(ACDEvents.Offline, function (acdevent) { originalCall.say(" , . , .", Language.RU_RUSSIAN_FEMALE); originalCall.addEventListener(CallEvents.PlaybackFinished, function (e) { VoxEngine.terminate(); }); }); // 30 statusInterval = setInterval(request.getStatus, 30000); }
それだけです。 ACDについての前のチュートリアルのスクリプトをわずかに修正したため、コールバックキューを取得しました。 変更したベーススクリプトはgithub.com/voximplant/acdで入手でき、オペレーター向けの最も単純なWeb背景も入手できます。
HTTP APIを介してキューを操作する
前の例は、最初に着信があった場合に作成されましたが、実際には、クライアントがサイトですぐにコールバックを注文し、処理キューに入れる必要がある場合があります。 一般に、キューは抽象エンティティであり、呼び出しだけでなく、たとえば電子メール、メッセージなどもスローできます。 この状況では、スクリプトはStartScenarios HTTP APIメソッドを介して実行する必要があり、スクリプト自体はわずかに変換されます。
var displayName, callback = true; // StartScenarios VoxEngine.addEventListener(AppEvents.Started, function(e) { var data = VoxEngine.customData(); // script_custom_data : data = data.split(":"); callerid = data[0]; displayName = data[1]; Logger.write("Put "+displayName+" with number "+callerid+" in a queue"); // 'MainQueue' request = VoxEngine.enqueueACDRequest("MainQueue", callerid); // ... , });
PSもしも...
「コールセンターでVoxImplant Web SDKを使用して作成されたWeb電話の代わりにSIP電話を使用する場合はどうなりますか?」
「奇妙なことに、これは可能ですが、これについては別の記事で詳しく説明します。」