BotFramework:通过ModifyedActions

时间:2018-08-16 12:54:28

标签: botframework

我目前正在使用一个对话框(BotFramework 3.x),该对话框要求用户输入两个数字。如果用户不在乎它或它是开放式的,则应该选择说“无所谓”。

因此,我的方法是提出各种建议的措施以及“无所谓”的价值。 ActionButton应该在聊天窗口中显示并写“无差异”,但将特定的int值传递给后端:

if (actions != null)
    message.SuggestedActions = new SuggestedActions()
    {
        Actions = new List<CardAction>(actions)
    };
    message.AttachmentLayout = AttachmentLayoutTypes.Carousel;

这就是我如何组合动作的方式:

                CardActions = new List<CardAction>();

            for (int i = fromTo.from ?? MinValue; i <= MaxValue; i++)
            {
                CardActions.Add(new CardAction()
                {
                    Title = i.ToString(),
                    Value = complexObject,
                    Text = i.ToString(),
                    DisplayText = i.ToString(),
                    Type = ActionTypes.PostBack

                });
            }
        cardActions.Add(new CardAction()
        {
            Title = "indifferent",
            Value = indifferentValue,
            Text = "indifferent",
            DisplayText = "indifferent"
            Type = ActionTypes.PostBack,
        });

我能够在后端获取值-这不是问题。但是,问题是没有向用户显示答案。我希望他看到他在聊天记录中点击了“ 5”或“无所谓”。对于ActionTypes.PostBack,此功能无效。如果我使用ActionTypes.ImBack,那么我将无法使用复杂的JSON对象作为值-点击“ suggestedAction”时,后端根本不会得到响应。如果我使用纯值,则仅适用于ActionTypes.ImBack。但是随后的聊天记录会显示操作的值,而不是文本或displayText,这会更有意义。

我在这里监视什么?

1 个答案:

答案 0 :(得分:1)

  

如果我使用ActionTypes.ImBack,那么我将无法使用复杂的JSON对象作为值-轻敲“ suggestedAction”,后端根本不会得到响应。

要满足您的要求:在聊天窗口中显示用户选择,您可以指定ActionTypes.ImBack并将指定的对象序列化为JSON字符串,如下所示。

CardActions.Add(new CardAction()
{
    Title = i.ToString(),

    //serializes to a JSON string
    Value = JsonConvert.SerializeObject(complexObject),
    Text = i.ToString(),
    DisplayText = i.ToString(),
    Type = ActionTypes.ImBack

});

此外,要显示用户可以点击以提供输入的按钮/选项,还可以使用rich cardsPromptDialog.Choice

PromptDialog.Choice(
    context: context,
    resume: ChoiceReceivedAsync,
    options: myoptions,
    prompt: "Hi. Please Select an option:",
    retry: "Selected option not avilabel . Please try again.",
    promptStyle: PromptStyle.Auto,
    descriptions: desforchoices
    );

测试结果:

enter image description here