Example #1
0
        protected override async Task OnMessageActivityAsync(ITurnContext <IMessageActivity> turnContext, CancellationToken cancellationToken)
        {
            IntentRequest intentRequest = turnContext.GetAlexaRequestBody().Request as IntentRequest;

            var handler = _handlers.FirstOrDefault(intent => intent.IsValid(intentRequest.Intent.Name));
            await handler.Handle(turnContext, cancellationToken);
        }
        public static async Task <FullAddress> AlexaGetUserAddress(this ITurnContext context)
        {
            var profileClient = new CustomerProfileClient(context.GetAlexaRequestBody());

            return(await profileClient.FullAddress());
        }
 public static Dictionary <string, object> AlexaSessionAttributes(this ITurnContext context)
 {
     return(context.GetAlexaRequestBody().Session.Attributes);
 }
 public static CustomerProfileClient AlexaGetCustomerProfileClient(this ITurnContext context)
 {
     return(new CustomerProfileClient(context.GetAlexaRequestBody()));
 }
 public static async Task AlexaSendProgressiveResponse(this ITurnContext context, string content)
 {
     var progressiveResponse = new ProgressiveResponse(context.GetAlexaRequestBody());
     await progressiveResponse.SendSpeech(content);
 }
Example #6
0
        private AlexaResponseBody CreateResponseFromLastActivity(IEnumerable <Activity> activities, ITurnContext context)
        {
            var response = new AlexaResponseBody()
            {
                Version  = "1.0",
                Response = new AlexaResponse()
                {
                    ShouldEndSession = context.GetAlexaRequestBody().Request.Type ==
                                       AlexaRequestTypes.SessionEndedRequest ||
                                       ShouldEndSessionByDefault
                }
            };

            if (context.GetAlexaRequestBody().Request.Type == AlexaRequestTypes.SessionEndedRequest &&
                (activities == null || !activities.Any()))
            {
                response.Response.OutputSpeech = new AlexaOutputSpeech()
                {
                    Type = AlexaOutputSpeechType.PlainText,
                    Text = string.Empty
                };
                return(response);
            }

            var activity = activities.First();

            // https://github.com/alexa/alexa-skills-kit-sdk-for-nodejs/issues/25
            // https://stackoverflow.com/questions/53019696/special-characters-not-supported-by-aws-polly/53020501#53020501
            // Fixed the above issues
            if (!SecurityElement.IsValidText(activity.Text))
            {
                activity.Text = SecurityElement.Escape(activity.Text);
            }

            if (activity.Type == ActivityTypes.EndOfConversation)
            {
                response.Response.ShouldEndSession = true;
            }

            if (!string.IsNullOrEmpty(activity.Speak))
            {
                response.Response.OutputSpeech = new AlexaOutputSpeech()
                {
                    Type = AlexaOutputSpeechType.SSML,
                    Ssml = activity.Speak.Contains("<speak>")
                        ? activity.Speak
                        : $"<speak>{activity.Speak}</speak>",
                };

                if (!string.IsNullOrEmpty(activity.Text))
                {
                    response.Response.OutputSpeech.Text = $"{activity.Text} ";
                }
            }
            else if (!string.IsNullOrEmpty(activity.Text))
            {
                if (response.Response.OutputSpeech == null)
                {
                    response.Response.OutputSpeech = new AlexaOutputSpeech()
                    {
                        Type = AlexaOutputSpeechType.PlainText,
                        Text = activity.Text
                    };
                }
            }

            if (context.TurnState.ContainsKey("AlexaReprompt"))
            {
                var repromptSpeech = context.TurnState.Get <string>("AlexaReprompt");

                response.Response.Reprompt = new Reprompt()
                {
                    OutputSpeech = new AlexaOutputSpeech()
                    {
                        Type = AlexaOutputSpeechType.SSML,
                        Ssml = repromptSpeech.Contains("<speak>")
                        ? repromptSpeech
                        : $"<speak>{repromptSpeech}</speak>"
                    }
                };
            }

            AddDirectivesToResponse(context, response);

            AddCardToResponse(context, response, activity);

            switch (activity.InputHint)
            {
            case InputHints.IgnoringInput:
                response.Response.ShouldEndSession = true;
                break;

            case InputHints.ExpectingInput:
                response.Response.ShouldEndSession = false;
                break;

            case InputHints.AcceptingInput:
            default:
                break;
            }

            return(response);
        }
        private AlexaResponseBody CreateResponseFromLastActivity(IEnumerable <Activity> activities, ITurnContext context)
        {
            var response = new AlexaResponseBody()
            {
                Version  = "1.0",
                Response = new AlexaResponse()
                {
                    ShouldEndSession = context.GetAlexaRequestBody().Request.Type ==
                                       AlexaRequestTypes.SessionEndedRequest ||
                                       ShouldEndSessionByDefault
                }
            };

            if (context.GetAlexaRequestBody().Request.Type == AlexaRequestTypes.SessionEndedRequest ||
                activities == null || !activities.Any())
            {
                response.Response.OutputSpeech = new AlexaOutputSpeech()
                {
                    Type = AlexaOutputSpeechType.PlainText,
                    Text = string.Empty
                };
                return(response);
            }

            var activity = activities.First();

            if (activity.Type == ActivityTypes.EndOfConversation)
            {
                response.Response.ShouldEndSession = true;
            }

            if (!string.IsNullOrEmpty(activity.Speak))
            {
                response.Response.OutputSpeech = new AlexaOutputSpeech()
                {
                    Type = AlexaOutputSpeechType.SSML,
                    Ssml = activity.Speak.Contains("<speak>")
                        ? activity.Speak
                        : $"<speak>{activity.Speak}</speak>",
                };

                if (!string.IsNullOrEmpty(activity.Text))
                {
                    response.Response.OutputSpeech.Text = $"{activity.Text} ";
                }
            }
            else if (!string.IsNullOrEmpty(activity.Text))
            {
                if (response.Response.OutputSpeech == null)
                {
                    response.Response.OutputSpeech = new AlexaOutputSpeech()
                    {
                        Type = AlexaOutputSpeechType.PlainText,
                        Text = activity.Text
                    };
                }
            }

            if (context.TurnState.ContainsKey("AlexaReprompt"))
            {
                var repromptSpeech = context.TurnState.Get <string>("AlexaReprompt");

                response.Response.Reprompt = new Reprompt()
                {
                    OutputSpeech = new AlexaOutputSpeech()
                    {
                        Type = AlexaOutputSpeechType.SSML,
                        Ssml = repromptSpeech.Contains("<speak>")
                        ? repromptSpeech
                        : $"<speak>{repromptSpeech}</speak>"
                    }
                };
            }

            AddDirectivesToResponse(context, response);

            AddCardToResponse(context, response, activity);

            switch (activity.InputHint)
            {
            case InputHints.IgnoringInput:
                response.Response.ShouldEndSession = true;
                break;

            case InputHints.ExpectingInput:
                response.Response.ShouldEndSession = false;
                break;

            case InputHints.AcceptingInput:
            default:
                break;
            }

            return(response);
        }