예제 #1
0
        private Task OnRecognizeCompleted(RecognizeOutcomeEvent recognizeOutcomeEvent)
        {
            System.Diagnostics.Trace.TraceInformation("We zitten in OnRecognizeCompleted");
            var callState = this.callStateMap[recognizeOutcomeEvent.ConversationResult.Id];

            return(Task.FromResult(true));
        }
예제 #2
0
        private Task OnRecognizeCompleted(RecognizeOutcomeEvent recognizeOutcomeEvent)
        {
            var callState = this.callStateMap[recognizeOutcomeEvent.ConversationResult.Id];


            return(Task.FromResult(true));
        }
예제 #3
0
        private static void ProcessMainMenuSelection(RecognizeOutcomeEvent outcome, CallState callStateForClient)
        {
            if (outcome.RecognizeOutcome.Outcome != Outcome.Success)
            {
                if (outcome.RecognizeOutcome.FailureReason == RecognitionCompletionReason.IncorrectDtmf.ToString())
                {
                    SetupInitialMenuWithErrorMessage(outcome.ResultingWorkflow);
                }
                else
                {
                    SetupInitialMenu(outcome.ResultingWorkflow);
                }

                return;
            }

            switch (outcome.RecognizeOutcome.ChoiceOutcome.ChoiceName)
            {
            case Support:
                callStateForClient.ChosenMenuOption = Support;
                SetupRecording(outcome.ResultingWorkflow);
                break;

            default:
                SetupInitialMenu(outcome.ResultingWorkflow);
                break;
            }
        }
예제 #4
0
        private Task <Workflow> HandleRecognizeOutcome(ConversationResult conversationResult, RecognizeOutcome recognizeOutcome)
        {
            var outcomeEvent = new RecognizeOutcomeEvent(conversationResult, CreateInitialWorkflow(), recognizeOutcome);
            var eventHandler = OnRecognizeCompleted;

            return(InvokeHandlerIfSet(eventHandler, outcomeEvent));
        }
예제 #5
0
        private Task OnRecognizeCompleted(RecognizeOutcomeEvent recognizeOutcomeEvent)
        {
            var callStateForClient = _callStateMap[recognizeOutcomeEvent.ConversationResult.Id];

            switch (callStateForClient.InitiallyChosenMenuOption)
            {
            case null:
                ProcessMainMenuSelection(recognizeOutcomeEvent, callStateForClient);
                break;

            case NewClient:
                ProcessNewClientSelection(recognizeOutcomeEvent, callStateForClient);
                break;

            case Support:
                ProcessSupportSelection(recognizeOutcomeEvent, callStateForClient);
                break;

            case Payments:
                ProcessPaymentsSelection(recognizeOutcomeEvent, callStateForClient);
                break;

            default:
                SetupInitialMenu(recognizeOutcomeEvent.ResultingWorkflow);
                break;
            }
            return(Task.FromResult(true));
        }
예제 #6
0
파일: IVRBot.cs 프로젝트: jacswork/VoiceBot
        private void ProcessMainMenuSelection(RecognizeOutcomeEvent outcome, CallState callStateForClient)
        {
            if (outcome.RecognizeOutcome.Outcome != Outcome.Success)
            {
                SetupInitialMenu(outcome.ResultingWorkflow);
                return;
            }

            switch (outcome.RecognizeOutcome.ChoiceOutcome.ChoiceName)
            {
            case Emergency:
                callStateForClient.InitiallyChosenMenuOption = Emergency;
                outcome.ResultingWorkflow = null;
                break;

            case Support:
                callStateForClient.InitiallyChosenMenuOption = Support;
                SetupRecording(outcome.ResultingWorkflow);
                break;

            default:
                SetupInitialMenu(outcome.ResultingWorkflow);
                break;
            }
        }
예제 #7
0
        private void ProcessPaymentsSelection(RecognizeOutcomeEvent outcome, CallState callStateForClient)
        {
            if (outcome.RecognizeOutcome.Outcome != Outcome.Success)
            {
                outcome.ResultingWorkflow.Actions = new List <ActionBase> {
                    CreatePaymentsMenu()
                };
                return;
            }
            switch (outcome.RecognizeOutcome.ChoiceOutcome.ChoiceName)
            {
            case PaymentDetails:
                outcome.ResultingWorkflow.Actions = new List <ActionBase>
                {
                    GetPromptForText(IvrOptions.PaymentDetailsMessage),
                    CreatePaymentsMenu()
                };
                break;

            case PaymentNotVisible:
                SetupRecording(outcome.ResultingWorkflow);
                break;

            default:
                callStateForClient.InitiallyChosenMenuOption = null;
                SetupInitialMenu(outcome.ResultingWorkflow);
                break;
            }
        }
예제 #8
0
        private void ProcessSupportSelection(RecognizeOutcomeEvent outcome, CallState callStateForClient)
        {
            if (outcome.RecognizeOutcome.Outcome != Outcome.Success)
            {
                outcome.ResultingWorkflow.Actions = new List <ActionBase> {
                    CreateSupportMenu()
                };
                return;
            }
            switch (outcome.RecognizeOutcome.ChoiceOutcome.ChoiceName)
            {
            case SupportOutages:
                outcome.ResultingWorkflow.Actions = new List <ActionBase>
                {
                    GetPromptForText(IvrOptions.CurrentOutages),
                    CreateSupportMenu()
                };
                break;

            case SupportConsultant:
                SetupRecording(outcome.ResultingWorkflow);
                break;

            default:
                callStateForClient.InitiallyChosenMenuOption = null;
                SetupInitialMenu(outcome.ResultingWorkflow);
                break;
            }
        }
예제 #9
0
        private Task OnRecognizeCompleted(RecognizeOutcomeEvent recognizeOutcomeEvent)
        {
            var callState = this.callStateMap[recognizeOutcomeEvent.ConversationResult.Id];

            ProcessMainMenuSelection(recognizeOutcomeEvent, callState);

            return(Task.FromResult(true));
        }
예제 #10
0
파일: IVR.cs 프로젝트: DawsyB/Bots.POC
        private async Task <bool> OnRecognizeCompleted(RecognizeOutcomeEvent recognizeOutcomeEvent)
        {
            var  text         = string.Empty;
            var  callState    = this.callStateMap[recognizeOutcomeEvent.ConversationResult.Id];
            bool calledHangUp = false;

            switch (recognizeOutcomeEvent.RecognizeOutcome.ChoiceOutcome.ChoiceName)
            {
            case "Yes":
                AddToTranscript(botUser, "yes");
                text = "Current weather is sunny. I hope you have a wonderful day. Goodbye!";
                recognizeOutcomeEvent.ResultingWorkflow.Actions = new List <ActionBase>
                {
                    GetPromptForText(text),
                    new Hangup {
                        OperationId = Guid.NewGuid().ToString()
                    }
                };
                calledHangUp = true;
                break;

            case "No":
                AddToTranscript(botUser, "No");
                text = "ok. That is all I can do for now. Goodbye!";
                recognizeOutcomeEvent.ResultingWorkflow.Actions = new List <ActionBase>
                {
                    GetPromptForText(text),
                    new Hangup {
                        OperationId = Guid.NewGuid().ToString()
                    }
                };
                calledHangUp = true;
                break;

            default:
                text = "I didn't understand. Say 'Yes' if you want to know weather conditions, otherwise say 'No'";
                recognizeOutcomeEvent.ResultingWorkflow.Actions = new List <ActionBase>
                {
                    CreateIvrOptions(text, 2, false)
                };
                break;
            }
            AddToTranscript(botName, text);
            if (calledHangUp)
            {
                await this.SendTranscriptToUser(ConversationLogs.ToString(), callState.Participants);
            }
            //return Task.FromResult(true);
            return(true);
        }
예제 #11
0
        private Task OnRecognizeCompleted(RecognizeOutcomeEvent recognizeOutcomeEvent)
        {
            switch (recognizeOutcomeEvent.RecognizeOutcome.ChoiceOutcome.ChoiceName)
            {
            case "1":
                var id = Guid.NewGuid().ToString();

                var prompt = GetPromptForText("Record your message with the new published app!");
                var record = new Record
                {
                    OperationId                    = id,
                    PlayPrompt                     = prompt,
                    MaxDurationInSeconds           = 10,
                    InitialSilenceTimeoutInSeconds = 5,
                    MaxSilenceTimeoutInSeconds     = 2,
                    PlayBeep  = true,
                    StopTones = new List <char> {
                        '#'
                    }
                };
                recognizeOutcomeEvent.ResultingWorkflow.Actions = new List <ActionBase> {
                    record
                };
                break;

            case "2":
                recognizeOutcomeEvent.ResultingWorkflow.Actions = new List <ActionBase>
                {
                    GetPromptForText("Goodbye!"),
                    new Hangup {
                        OperationId = Guid.NewGuid().ToString()
                    }
                };
                break;

            default:
                recognizeOutcomeEvent.ResultingWorkflow.Actions = new List <ActionBase>
                {
                    CreateIvrOptions("Press 1 to record your voice, Press 2 to hangup.", 2, false)
                };
                break;
            }
            return(Task.FromResult(true));
        }
예제 #12
0
        private void ProcessMainMenuSelection(RecognizeOutcomeEvent outcome, CallState callStateForClient)
        {
            if (outcome.RecognizeOutcome.Outcome != Outcome.Success)
            {
                SetupInitialMenu(outcome.ResultingWorkflow);
                return;
            }

            switch (outcome.RecognizeOutcome.ChoiceOutcome.ChoiceName)
            {
            case NewClient:
                callStateForClient.InitiallyChosenMenuOption = NewClient;
                outcome.ResultingWorkflow.Actions            = new List <ActionBase> {
                    CreateNewClientMenu()
                };
                break;

            case Support:
                callStateForClient.InitiallyChosenMenuOption = Support;
                outcome.ResultingWorkflow.Actions            = new List <ActionBase> {
                    CreateSupportMenu()
                };
                break;

            case Payments:
                callStateForClient.InitiallyChosenMenuOption = Payments;
                outcome.ResultingWorkflow.Actions            = new List <ActionBase> {
                    CreatePaymentsMenu()
                };
                break;

            case MoreInfo:
                callStateForClient.InitiallyChosenMenuOption = MoreInfo;
                outcome.ResultingWorkflow.Actions            = new List <ActionBase> {
                    GetPromptForText(IvrOptions.MoreInfoPrompt)
                };
                break;

            default:
                SetupInitialMenu(outcome.ResultingWorkflow);
                break;
            }
        }
        /// <summary>
        /// Called when [recognize completed].
        /// </summary>
        /// <param name="recognizeOutcomeEvent">The recognize outcome event.</param>
        /// <returns></returns>
        private Task OnRecognizeCompleted(RecognizeOutcomeEvent recognizeOutcomeEvent)
        {
            if (recognizeOutcomeEvent.RecognizeOutcome.Outcome != Outcome.Success)
            {
                telemetryClient.TrackTrace($"RecognizeFailed - {recognizeOutcomeEvent.ConversationResult.Id}");
                var unsupported = GetPromptForText(IVROptions.OptionMenuNotSupportedMessage);
                var recognize   = SetupInitialMenu();
                recognizeOutcomeEvent.ResultingWorkflow.Actions = new List <ActionBase> {
                    unsupported, recognize
                };
                return(Task.FromResult(true));
            }

            // outcome success
            telemetryClient.TrackTrace($"RecognizeCompleted - {recognizeOutcomeEvent.ConversationResult.Id}");
            var prompt = GetPromptForText(IVROptions.RecordMessage);
            var record = new Record
            {
                OperationId                    = Guid.NewGuid().ToString(),
                PlayPrompt                     = prompt,
                MaxDurationInSeconds           = 180,
                InitialSilenceTimeoutInSeconds = 5,
                MaxSilenceTimeoutInSeconds     = 10,
                RecordingFormat                = RecordingFormat.Wav,
                PlayBeep  = true,
                StopTones = new List <char> {
                    '#'
                }
            };

            this.callStateMap[recognizeOutcomeEvent.ConversationResult.Id].ChosenMenuOption = recognizeOutcomeEvent.RecognizeOutcome.ChoiceOutcome.ChoiceName.ToString();
            this.callStateMap[recognizeOutcomeEvent.ConversationResult.Id].Id = recognizeOutcomeEvent.ConversationResult.Id;
            recognizeOutcomeEvent.ResultingWorkflow.Actions = new List <ActionBase> {
                record
            };
            return(Task.FromResult(true));
        }
예제 #14
0
파일: IVRBot.cs 프로젝트: jacswork/VoiceBot
 private void ProcessEmergency(RecognizeOutcomeEvent outcome, CallState callStateForClient)
 {
     SetupRecording(outcome.ResultingWorkflow);
 }