Created
October 8, 2018 16:43
-
-
Save aylarov/d3d644a120ede537e8fab281fa6575a8 to your computer and use it in GitHub Desktop.
DialogflowConnector
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require(Modules.AI) | |
var dialogflow, call | |
// Inbound call processing | |
VoxEngine.addEventListener(AppEvents.CallAlerting, (e) => { | |
call = e.call | |
call.addEventListener(CallEvents.Connected, onCallConnected) | |
call.addEventListener(CallEvents.Disconnected, VoxEngine.terminate) | |
call.answer() | |
}) | |
function onCallConnected(e) { | |
// Create Dialogflow object | |
dialogflow = AI.createDialogflow({ | |
lang: DialogflowLanguage.ENGLISH_US | |
}) | |
dialogflow.addEventListener(AI.Events.DialogflowResponse, onDialogflowResponse) | |
// Sending WELCOME event to let the agent says a welcome message | |
dialogflow.sendQuery({event : {name: "WELCOME", language_code:"en"}}) | |
// Playback marker used for better user experience | |
dialogflow.addMarker(-300) | |
// Start sending media from Dialogflow to the call | |
dialogflow.sendMediaTo(call) | |
dialogflow.addEventListener(AI.Events.DialogflowPlaybackFinished, (e) => { | |
// Dialogflow TTS playback finished | |
}) | |
dialogflow.addEventListener(AI.Events.DialogflowPlaybackStarted, (e) => { | |
// Dialogflow TTS playback started | |
}) | |
dialogflow.addEventListener(AI.Events.DialogflowPlaybackMarkerReached, (e) => { | |
// Playback marker reached - start sending audio from the call to Dialogflow | |
call.sendMediaTo(dialogflow) | |
}) | |
} | |
// Handle Dialogflow responses | |
function onDialogflowResponse(e) { | |
// If DialogflowResponse with queryResult received - the call stops sending media to Dialogflow | |
// in case of response with queryResult but without responseId we can continue sending media to dialogflow | |
if (e.response.queryResult !== undefined && e.response.responseId === undefined) { | |
call.sendMediaTo(dialogflow) | |
} else if (e.response.queryResult !== undefined && e.response.responseId !== undefined) { | |
// Do whatever required with e.response.queryResult or e.response.webhookStatus | |
// Telephony messages arrive in fulfillmentMessages array | |
if (e.response.queryResult.fulfillmentMessages != undefined) { | |
e.response.queryResult.fulfillmentMessages.forEach((msg) => { | |
if (msg.platform !== undefined && msg.platform === "TELEPHONY") processTelephonyMessage(msg) | |
}) | |
} | |
} | |
} | |
// Process telephony messages from Dialogflow | |
function processTelephonyMessage(msg) { | |
// Transfer call to msg.telephonyTransferCall.phoneNumber | |
if (msg.telephonyTransferCall !== undefined) { | |
/** | |
* Example: | |
* dialogflow.stop() | |
* let newcall = VoxEngine.callPSTN(msg.telephonyTransferCall.phoneNumber, "put verified CALLER_ID here") | |
* VoxEngine.easyProcess(call, newcall) | |
*/ | |
} | |
// Synthesize speech from msg.telephonySynthesizeSpeech.text | |
if (msg.telephonySynthesizeSpeech !== undefined) { | |
// See the list of available TTS languages at https://voximplant.com/docs/references/voxengine/language | |
// Example: call.say(msg.telephonySynthesizeSpeech.text, Premium.US_ENGLISH_FEMALE) | |
} | |
// Play audio file located at msg.telephonyPlayAudio.audioUri | |
if (msg.telephonyPlayAudio !== undefined) { | |
// audioUri contains Google Storage URI (gs://), we need to transform it to URL (https://) | |
let url = msg.telephonyPlayAudio.audioUri.replace("gs://", "https://storage.cloud.google.com/") | |
// Example: call.startPlayback(url) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment