【问题标题】:How to retrieve the form data posted by AdaptiveCard in Microsoft Bot Framework?如何在 Microsoft Bot Framework 中检索 AdaptiveCard 发布的表单数据?
【发布时间】:2017-11-20 05:23:00
【问题描述】:

我创建了一个 Bot Framework 项目,并正在使用 LUIS 意图和实体来填充 AdaptiveCard 的字段,然后将其附加到一个 Activity 并发布给用户。我在卡片里面放了一个SubmitAction,相关代码如下:

        [LuisIntent("Query GPN")]
    public async Task QueryGPN(IDialogContext context, IAwaitable<IMessageActivity> activity, LuisResult result)
    {
        EntityRecommendation GPN;

        AdaptiveCard gpnCard = new AdaptiveCard();

        gpnCard.Body.Add(new TextBlock()
        {
            Text = "GPN Lookup Form",
            Size = TextSize.Large,
            Weight = TextWeight.Bolder
        });

        gpnCard.Body.Add(new TextBlock()
        {
            Text = "GPN",
            Weight = TextWeight.Bolder
        });

        TextInput gpnInput = new TextInput()
        {
            Id = "GPN",
            IsMultiline = false
        };

        gpnCard.Body.Add(gpnInput);

        gpnCard.Actions.Add(new SubmitAction()
        {
            Title = "Submit"
        });

        if (result.TryFindEntity("GPN", out GPN))
        {
            await context.PostAsync($"You want to know about a GPN {GPN.Entity}? Prepopulating form.");
            gpnInput.Value = GPN.Entity;
        }
        else
        {
            await context.PostAsync("It seems like you wanted to know about a GPN, but I couldn't find a GPN in your request.");
        }

        Attachment gpnCardAttachment = new Attachment()
        {
            ContentType = AdaptiveCard.ContentType,
            Content = gpnCard
        };

        IMessageActivity gpnFormMessage = context.MakeMessage();
        gpnFormMessage.Attachments = new List<Attachment>();
        gpnFormMessage.Attachments.Add(gpnCardAttachment);

        await context.PostAsync(gpnFormMessage);

        context.Done<IMessageActivity>(null);
    }

当用户单击提交按钮时,我正在尝试检索此表单的内容,这似乎向我的 MessagesController 中的 Post 方法发送了一条消息 Activity。但是,此消息活动的内容为空。如何从此消息活动中检索与提交操作关联的有效负载?在上面的示例中,我将如何检索“GPN”键的值?我试过查看附件,但它似乎也不存在:

        private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> result)
    {
        try
        {
            IMessageActivity message = await result;

            if(message.Text == null)
            {
                await context.PostAsync("Received null message.");
                if (message.Attachments != null)
                {
                    await context.PostAsync($"Attachments: {message.Attachments.Count}");
                }
                else
                {
                    await context.PostAsync($"No attachments.");
                }

                if(message.ChannelData != null)
                {
                    await context.PostAsync("ChannelData contains something");
                }
                else
                {
                    await context.PostAsync($"No channel data.");
                }

                context.Wait(MessageReceivedAsync);
            }
            else
            {
                await context.Forward(new IntentDialog(), IntentDialogAfter, message, CancellationToken.None);
            }
        }
        catch (Exception e)
        {
            await context.PostAsync(e.Message);
        }
    }

【问题讨论】:

    标签: c# botframework adaptive-cards


    【解决方案1】:

    单击Submit 按钮后,尝试检查MessageReceivedAsync 上消息的Value 属性。

    Here 是一个使用提交按钮并读取值的示例。

    【讨论】:

      猜你喜欢
      • 2018-04-14
      • 1970-01-01
      • 1970-01-01
      • 2019-10-12
      • 2021-01-18
      • 2020-11-28
      • 2017-12-30
      • 1970-01-01
      相关资源
      最近更新 更多