public async Task <GoogleResponseBody> ProcessActivity(Payload actionPayload, GoogleOptions googleOptions, BotCallbackHandler callback) { TurnContext context = null; try { Options = googleOptions; var activity = RequestToActivity(actionPayload, googleOptions); BotAssert.ActivityNotNull(activity); context = new TurnContext(this, activity); Responses = new Dictionary <string, List <Activity> >(); await base.RunPipelineAsync(context, callback, default(CancellationToken)).ConfigureAwait(false); var key = $"{activity.Conversation.Id}:{activity.Id}"; try { GoogleResponseBody response = null; var activities = Responses.ContainsKey(key) ? Responses[key] : new List <Activity>(); response = CreateResponseFromLastActivity(activities, context); return(response); } finally { if (Responses.ContainsKey(key)) { Responses.Remove(key); } } } catch (Exception ex) { await googleOptions.OnTurnError(context, ex); throw; } }
private static void AddSuggestionChipsToResponse(ITurnContext context, GoogleResponseBody response) { var suggestionChips = new List <Suggestion>(); if (context.TurnState.ContainsKey("GoogleSuggestionChips") && context.TurnState["GoogleSuggestionChips"] is List <Suggestion> ) { suggestionChips.AddRange(context.TurnState.Get <List <Suggestion> >("GoogleSuggestionChips")); } if (context.Activity.SuggestedActions != null && context.Activity.SuggestedActions.Actions.Any()) { foreach (var suggestion in context.Activity.SuggestedActions.Actions) { suggestionChips.Add(new Suggestion { Title = suggestion.Title }); } } if (suggestionChips.Any()) { response.Payload.Google.RichResponse.Suggestions = suggestionChips.ToArray(); } }
private GoogleResponseBody CreateResponseFromLastActivity(IEnumerable <Activity> activities, ITurnContext context) { var activity = activities.Last(); var response = new GoogleResponseBody() { Payload = new ResponsePayload() { Google = new PayloadContent() { RichResponse = new RichResponse(), ExpectUserResponse = !ShouldEndSessionByDefault } } }; if (!string.IsNullOrEmpty(activity.Text)) { var simpleResponse = new SimpleResponse { Content = new SimpleResponseContent { DisplayText = activity.Text, Ssml = activity.Speak, TextToSpeech = activity.Text } }; var responseItems = new List <Item> { simpleResponse }; // Add Google card to response if set AddCardToResponse(context, responseItems, activity); // Add Media response to response if set AddMediaResponseToResponse(context, responseItems, activity); response.Payload.Google.RichResponse.Items = responseItems.ToArray(); // If suggested actions have been added to outgoing activity // add these to the response as Google Suggestion Chips AddSuggestionChipsToResponse(context, response); if (context.TurnState.ContainsKey("systemIntent")) { var optionSystemIntent = context.TurnState.Get <ISystemIntent>("systemIntent"); response.Payload.Google.SystemIntent = optionSystemIntent; } // check if we should be listening for more input from the user switch (activity.InputHint) { case InputHints.IgnoringInput: response.Payload.Google.ExpectUserResponse = false; break; case InputHints.ExpectingInput: response.Payload.Google.ExpectUserResponse = true; break; case InputHints.AcceptingInput: default: break; } } else { response.Payload.Google.ExpectUserResponse = false; } return(response); }