コード例 #1
0
        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;
            }
        }
コード例 #2
0
        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();
            }
        }
コード例 #3
0
        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);
        }