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); }
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); }