我目前正在使用一个对话框(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,这会更有意义。
我在这里监视什么?
答案 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 cards或PromptDialog.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
);
测试结果: