mirror of
https://github.com/jambonz/jambonz-echo-test.git
synced 2025-12-19 05:17:49 +00:00
105 lines
2.6 KiB
JavaScript
105 lines
2.6 KiB
JavaScript
const service = ({logger, makeService}) => {
|
|
const svc = makeService({path: '/echo'});
|
|
|
|
svc.on('session:new', (session) => {
|
|
session.locals = {logger: logger.child({call_sid: session.call_sid})};
|
|
logger.info({session}, `new incoming call: ${session.call_sid}`);
|
|
|
|
session
|
|
.on('close', onClose.bind(null, session))
|
|
.on('error', onError.bind(null, session))
|
|
.on('/interimTranscript', onInterim.bind(null, session))
|
|
.on('/echo', onSpeechEvent.bind(null, session));
|
|
|
|
session
|
|
.pause({length: 1.5})
|
|
.gather({
|
|
say: {text: 'Please say something and we will echo it back to you.'},
|
|
input: ['speech'],
|
|
actionHook: '/echo',
|
|
partialResultHook: '/interimTranscript',
|
|
timeout: 15,
|
|
recognizer: {
|
|
vendor: 'nuance',
|
|
language: 'en-US',
|
|
nuanceOptions: {
|
|
kryptonEndpoint: '34.199.234.49:7021'
|
|
}
|
|
}
|
|
})
|
|
.send();
|
|
});
|
|
};
|
|
|
|
const onSpeechEvent = async(session, evt) => {
|
|
const {logger} = session.locals;
|
|
logger.info(`got speech evt: ${JSON.stringify(evt)}`);
|
|
|
|
switch (evt.reason) {
|
|
case 'speechDetected':
|
|
echoSpeech(session, evt);
|
|
break;
|
|
case 'timeout':
|
|
reprompt(session);
|
|
break;
|
|
default:
|
|
session.reply();
|
|
break;
|
|
}
|
|
};
|
|
|
|
const echoSpeech = async(session, evt) => {
|
|
const {transcript, confidence} = evt.speech.alternatives[0];
|
|
|
|
session
|
|
.say({text: `You said: ${transcript}. The confident score was ${confidence.toFixed(2)}`})
|
|
.gather({
|
|
say: {text: 'Say something else.'},
|
|
input: ['speech'],
|
|
actionHook: '/echo',
|
|
recognizer: {
|
|
vendor: 'nuance',
|
|
language: 'en-US',
|
|
nuanceOptions: {
|
|
kryptonEndpoint: '34.199.234.49:7021'
|
|
}
|
|
}
|
|
})
|
|
.reply();
|
|
};
|
|
|
|
const reprompt = async(session, evt) => {
|
|
session
|
|
.gather({
|
|
say: {text: 'Are you still there? I didn\'t hear anything.'},
|
|
input: ['speech'],
|
|
actionHook: '/echo',
|
|
recognizer: {
|
|
vendor: 'nuance',
|
|
language: 'en-US',
|
|
nuanceOptions: {
|
|
kryptonEndpoint: '34.199.234.49:7021'
|
|
}
|
|
}
|
|
})
|
|
.reply();
|
|
};
|
|
|
|
const onInterim = async(session, evt) => {
|
|
const {logger} = session.locals;
|
|
logger.info(`got interim transcript: ${JSON.stringify(evt)}`);
|
|
session.reply();
|
|
};
|
|
|
|
const onClose = (session, code, reason) => {
|
|
const {logger} = session.locals;
|
|
logger.info({session, code, reason}, `session ${session.call_sid} closed`);
|
|
};
|
|
|
|
const onError = (session, err) => {
|
|
const {logger} = session.locals;
|
|
logger.info({err}, `session ${session.call_sid} received error`);
|
|
};
|
|
|
|
module.exports = service;
|