Example #1
0
        public Activity RequestToActivity(DialogFlowRequest request)
        {
            var payload = request.OriginalDetectIntentRequest.Payload;

            var activity = new Activity();

            activity = SetGeneralActivityProperties(activity, payload);
            var actionIntent = payload.Inputs.FirstOrDefault(i => i.Intent.ToLowerInvariant().StartsWith("actions.intent"))?.Intent;
            var queryText    = StripInvocation(payload.Inputs[0]?.RawInputs[0]?.Query, Options.ActionInvocationName);

            if (request.QueryResult.Intent.IsFallback || request.QueryResult.Intent.DisplayName.ToLowerInvariant() == "launch")
            {
                if (string.IsNullOrEmpty(queryText) || request.QueryResult.Intent.DisplayName.ToLowerInvariant() == "launch")
                {
                    activity.Type         = ActivityTypes.ConversationUpdate;
                    activity.MembersAdded = new List <ChannelAccount>()
                    {
                        new ChannelAccount()
                        {
                            Id = activity.From?.Id ?? "anonymous"
                        }
                    };
                    return(activity);
                }
                activity.Type = ActivityTypes.Message;
                activity.Text = queryText;
                return(activity);
            }

            switch (actionIntent?.ToLowerInvariant())
            {
            case "actions.intent.sign_in":
                activity.Type = ActivityTypes.Event;
                activity.Name = request.QueryResult.Intent.DisplayName;
                var signinStatusArgument = request.OriginalDetectIntentRequest.Payload.Inputs.First()?.Arguments?.Where(a => a.Name == "SIGN_IN").FirstOrDefault();
                var argumentExtension    = signinStatusArgument?.Extension;
                activity.Value = argumentExtension?["status"];
                return(activity);

            case "actions.intent.option":
            case "actions.intent.text":
                activity.Type = ActivityTypes.Message;
                activity.Text = queryText;
                return(activity);

            case "actions.intent.permission":
            case "actions.intent.datetime":
            case "ask_for_sign_in_confirmation":
            case "actions.intent.place":
            case "actions.intent.confirmation":
            default:
                activity.Type  = ActivityTypes.Event;
                activity.Name  = request.QueryResult.Intent.DisplayName;
                activity.Value = request;
                return(activity);
            }
        }
Example #2
0
        public DialogFlowResponse ActivityToResponse(Activity activity, DialogFlowRequest dialogFlowRequest)
        {
            var response = new DialogFlowResponse()
            {
                Payload = new ResponsePayload()
                {
                    Google = new PayloadContent()
                    {
                        ExpectUserResponse = !Options.ShouldEndSessionByDefault,
                        UserStorage        = dialogFlowRequest.OriginalDetectIntentRequest.Payload.User.UserStorage
                    }
                }
            };

            // Send default empty response if no activity or invalid activity type sent
            if (activity == null || activity.Type != ActivityTypes.Message)
            {
                response.Payload.Google.ExpectUserResponse = false;
                return(response);
            }

            activity.ConvertAttachmentContent();

            var simpleResponse = new SimpleResponse
            {
                Content = new SimpleResponseContent
                {
                    DisplayText  = activity.Text,
                    Ssml         = activity.Speak,
                    TextToSpeech = activity.Text
                }
            };

            var processedIntentStatus = ProcessHelperIntentAttachments(activity);

            // If we have a system intent to send - send it - with or without additional simple prompt
            if (processedIntentStatus.Intent != null)
            {
                response.Payload.Google.ExpectUserResponse = true;
                response.Payload.Google.SystemIntent       = GetDialogFlowSystemIntentFromSystemIntent(processedIntentStatus);

                if (processedIntentStatus.AllowAdditionalInputPrompt)
                {
                    response.Payload.Google.RichResponse = new RichResponse()
                    {
                        Items = new ResponseItem[] { simpleResponse }
                    };
                }

                return(response);
            }

            var responseItems = new List <ResponseItem> {
                simpleResponse
            };

            responseItems.AddRange(GetResponseItemsFromActivityAttachments(activity));

            response.Payload.Google.RichResponse = new RichResponse()
            {
                Items = responseItems.ToArray()
            };

            // ensure InputHint is set as required for response
            if (activity.InputHint == null || activity.InputHint == InputHints.AcceptingInput)
            {
                activity.InputHint =
                    Options.ShouldEndSessionByDefault ? InputHints.IgnoringInput : InputHints.ExpectingInput;
            }

            // 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;

                var suggestionChips = ConvertSuggestedActionsToSuggestionChips(activity);
                if (suggestionChips.Any())
                {
                    response.Payload.Google.RichResponse.Suggestions = suggestionChips.ToArray();
                }
                break;
            }

            return(response);
        }
 public async Task <JsonResult> Post([FromBody] DialogFlowRequest request)
 {
     return(new JsonResult(DialogFlowResponse.GetFulfillmentTextResponse("The status is CLOSED!")));
 }
Example #4
0
        public DialogFlowResponse Post(int eventId, [FromBody] DialogFlowRequest request)
        {
            var bot = BotFactory.Create(eventId);

            return(bot.GetResponse(request));
        }
Example #5
0
        public DialogFlowResponse GetResponse(DialogFlowRequest request)
        {
            var action = EventActionFactory.Create(request.result, companyEvent);

            return(action.GetResponse());
        }