Skip to content

Instantly share code, notes, and snippets.

@aylarov
Last active March 1, 2018 11:18
Show Gist options
  • Save aylarov/90b53dae3cf9b1c1cd3008135649c6f5 to your computer and use it in GitHub Desktop.
Save aylarov/90b53dae3cf9b1c1cd3008135649c6f5 to your computer and use it in GitHub Desktop.
require(Modules.ASR);
let mycall = null;
VoxEngine.addEventListener(AppEvents.CallAlerting, (e) => {
mycall = e.call;
mycall.addEventListener(CallEvents.Connected, handleCallConnected);
mycall.answer();
});
function handleCallConnected() {
mycall.say("Hi, my dear friend! Ask me about the weather in San Francisco or other city.", Language.US_ENGLISH_FEMALE);
myasr = VoxEngine.createASR({
lang: ASRLanguage.ENGLISH_US
});
mycall.addEventListener(CallEvents.PlaybackFinished, function onWelcomeFinished() {
mycall.sendMediaTo(myasr);
mycall.removeEventListener(CallEvents.PlaybackFinished, onWelcomeFinished);
});
mycall.addEventListener(CallEvents.Disconnected, VoxEngine.terminate);
myasr.addEventListener(ASREvents.Result, (e) => {
recognitionEnded();
const userSpeech = e.text;
const sessionId = () => Math.floor(100000 * Math.random());
Net.httpRequest("https://api.dialogflow.com/v1/query?v=20170712&contexts=weather&query=" +
encodeURI(userSpeech) +
"&lang=ru&sessionId=" + sessionId() + "&timezone=Europe/Moscow", (e) => {
const res = JSON.parse(e.text);
if (!res.result || res.result.action !== "weather"){
mycall.say("Sorry, something went wrong, please try again", Language.US_ENGLISH_FEMALE);
mycall.addEventListener(CallEvents.PlaybackFinished, firstPlaybackFinished);
}
else if (!res.result.parameters || !res.result.parameters.location["city"] ){
mycall.say("Couldn't recognize your phrase", Language.US_ENGLISH_FEMALE);
mycall.addEventListener(CallEvents.PlaybackFinished, firstPlaybackFinished);
}
else {
const city = res.result.parameters.location["city"];
Net.httpRequest("https://api.openweathermap.org/data/2.5/weather?q=" +
city +
"&lang=en&appid=4e078747a16a1f2d9351e2419b65ec3a", (e) => {
const weather = e.text;
const weatherDescription = JSON.parse(weather);
mycall.say("It's " + weatherDescription.weather[0].description + " in " + city + " today.", Language.US_ENGLISH_FEMALE);
mycall.addEventListener(CallEvents.PlaybackFinished, () => {
VoxEngine.terminate();
});
});
}
},
{ headers: ["Authorization: bearer 1799227ce77f446fa8d64749f70527ca"]});
});
}
function recognitionEnded(){
myasr.stop();
}
function firstPlaybackFinished() {
mycall.removeEventListener(CallEvents.PlaybackFinished, firstPlaybackFinished);
handleCallConnected();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment