in Node/calling/lib/dialogs/Prompts.js [40:212]
Prompts.prototype.replyReceived = function (session) {
var args = session.dialogData;
var results = session.message;
if (results.operationOutcome) {
var state = PromptResponseState.completed;
var retryPrompt;
var response;
switch (args.promptType) {
case PromptType.action:
response = results.operationOutcome;
break;
case PromptType.choice:
var recognizeOutcome = results.operationOutcome;
var choiceOutcome = (recognizeOutcome.choiceOutcome || {});
switch (choiceOutcome.completionReason) {
case recognize.RecognitionCompletionReason.dtmfOptionMatched:
case recognize.RecognitionCompletionReason.speechOptionMatched:
response = { entity: choiceOutcome.choiceName, score: 1.0 };
break;
case recognize.RecognitionCompletionReason.callTerminated:
state = PromptResponseState.terminated;
break;
case recognize.RecognitionCompletionReason.temporarySystemFailure:
state = PromptResponseState.failed;
break;
case recognize.RecognitionCompletionReason.incorrectDtmf:
state = PromptResponseState.retry;
retryPrompt = Prompts.settings.invalidDtmfPrompt;
break;
case recognize.RecognitionCompletionReason.initialSilenceTimeout:
state = PromptResponseState.retry;
retryPrompt = Prompts.settings.recognizeSilencePrompt;
break;
default:
state = PromptResponseState.retry;
retryPrompt = Prompts.settings.invalidRecognizePrompt;
break;
}
break;
case PromptType.confirm:
var recognizeOutcome = results.operationOutcome;
var choiceOutcome = (recognizeOutcome.choiceOutcome || {});
switch (choiceOutcome.completionReason) {
case recognize.RecognitionCompletionReason.dtmfOptionMatched:
case recognize.RecognitionCompletionReason.speechOptionMatched:
switch (choiceOutcome.choiceName) {
case 'yes':
response = true;
break;
case 'no':
default:
response = false;
break;
case 'cancel':
state = PromptResponseState.canceled;
break;
}
break;
case recognize.RecognitionCompletionReason.callTerminated:
state = PromptResponseState.terminated;
break;
case recognize.RecognitionCompletionReason.temporarySystemFailure:
state = PromptResponseState.failed;
break;
case recognize.RecognitionCompletionReason.incorrectDtmf:
state = PromptResponseState.retry;
retryPrompt = Prompts.settings.invalidDtmfPrompt;
break;
case recognize.RecognitionCompletionReason.initialSilenceTimeout:
state = PromptResponseState.retry;
retryPrompt = Prompts.settings.recognizeSilencePrompt;
break;
default:
state = PromptResponseState.retry;
retryPrompt = Prompts.settings.invalidRecognizePrompt;
break;
}
break;
case PromptType.digits:
var recognizeOutcome = results.operationOutcome;
var digitsOutcome = (recognizeOutcome.collectDigitsOutcome || {});
switch (digitsOutcome.completionReason) {
case recognize.DigitCollectionCompletionReason.completedStopToneDetected:
response = digitsOutcome.digits;
break;
case recognize.DigitCollectionCompletionReason.interdigitTimeout:
var stopTones = args.action.collectDigits.stopTones;
if (stopTones && stopTones.length > 0) {
state = PromptResponseState.retry;
retryPrompt = Prompts.settings.invalidRecognizePrompt;
}
else {
response = digitsOutcome.digits;
}
break;
case recognize.DigitCollectionCompletionReason.callTerminated:
state = PromptResponseState.terminated;
break;
case recognize.DigitCollectionCompletionReason.temporarySystemFailure:
state = PromptResponseState.failed;
break;
case recognize.DigitCollectionCompletionReason.initialSilenceTimeout:
state = PromptResponseState.retry;
retryPrompt = Prompts.settings.recognizeSilencePrompt;
break;
default:
state = PromptResponseState.retry;
retryPrompt = Prompts.settings.invalidRecognizePrompt;
break;
}
break;
case PromptType.record:
var recordOutcome = results.operationOutcome;
switch (recordOutcome.completionReason) {
case record.RecordingCompletionReason.completedSilenceDetected:
case record.RecordingCompletionReason.completedStopToneDetected:
response = {
recordedAudio: results.recordedAudio,
lengthOfRecordingInSecs: recordOutcome.lengthOfRecordingInSecs
};
break;
case record.RecordingCompletionReason.callTerminated:
state = PromptResponseState.terminated;
break;
case record.RecordingCompletionReason.temporarySystemFailure:
state = PromptResponseState.failed;
break;
case record.RecordingCompletionReason.initialSilenceTimeout:
state = PromptResponseState.retry;
retryPrompt = Prompts.settings.recordSilencePrompt;
break;
case record.RecordingCompletionReason.maxRecordingTimeout:
state = PromptResponseState.retry;
retryPrompt = Prompts.settings.maxRecordingPrompt;
break;
default:
state = PromptResponseState.retry;
retryPrompt = Prompts.settings.invalidRecordingPrompt;
break;
}
break;
}
switch (state) {
case PromptResponseState.canceled:
session.endDialogWithResult({ resumed: dlg.ResumeReason.canceled });
break;
case PromptResponseState.completed:
session.endDialogWithResult({ resumed: dlg.ResumeReason.completed, response: response });
break;
case PromptResponseState.failed:
session.endDialogWithResult({ resumed: dlg.ResumeReason.notCompleted, error: new Error('prompt error: service encountered a temporary failure'), promptType: args.promptType });
break;
case PromptResponseState.retry:
if (args.maxRetries > 0) {
args.maxRetries--;
session.send(retryPrompt);
session.send(args.action);
session.sendBatch();
}
else {
session.endDialogWithResult({ resumed: dlg.ResumeReason.notCompleted });
}
break;
case PromptResponseState.terminated:
session.endConversation();
break;
}
}
else {
var msg = results.operationOutcome ? results.operationOutcome.failureReason : 'Message missing operationOutcome.';
session.endDialogWithResult({ resumed: dlg.ResumeReason.notCompleted, error: new Error('prompt error: ' + msg), promptType: args.promptType });
}
};