首页 > 解决方案 > Bot Framework - 为什么 Choice 持有 CardAction,每个角色的作用是什么?

问题描述

我使用Bot Framework v4,并尝试ChoicePrompt用于菜单。

我正在尝试创建一个Choice对象,我看到它包含一个CardAction对象。

因为CardAction有更多的选项,比如 avalue是一个object类型而不是一个string类型,所以我想使用它。

但是即使我为该CardAction value字段分配了一个值,我也会得到一个错误,因为Choice必须在它的 中获取一个值value,这是最后获得的

那么为什么Choice包含一个CardAction对象呢?每个人的工作是什么?

标签: c#botframework

解决方案


CardAction目的

实际上并没有任何关于使用CardActiona 的文档,ChoicePrompt因为ChoicePrompts并不是真的“打算”以这种方式使用。这是可能的,但不是真正的首选。

这是CardActionClass的参考:

DisplayText
获取或设置(可选)单击按钮时在聊天提要中显示的文本

Image
获取或设置将出现在按钮上,文本标签旁边的图像 URL

Text
获取或设置此操作的文本

Title
获取或设置显示在按钮上的文本描述

Type
获取或设置此按钮实现的操作类型。可能的值包括:“openUrl”、“imBack”、“postBack”、“playAudio”、“playVideo”、“showImage”、“downloadFile”、“signin”、“call”、“payment”、“messageBack”。更多关于动作类型

注意:ChoicePrompt 需要一个imBackActivityType,因此使用其他类型可能会产生一些奇怪的结果。

Value
获取或设置动作的补充参数。该属性的内容取决于 ActionType

标题与文本

鉴于CardAction

new Choice()
    {
        Action = new CardAction()
        {
            Type = "messageBack",
            Value = "ACTION VALUE",
            Title = "TITLE",
            Text = "TEXT",
        },
        Value = "CARD VALUE",
    });

这将产生:

在此处输入图像描述

点击时:

在此处输入图像描述

所以,Title是按钮上显示的文本。Text是作为消息发送回机器人的文本。如果Value存在于 中CardAction,它将作为活动的value.

错误

我看到你也向 GitHub 提交了这个问题。我将在这里复制响应。

问题不在于您不能有一个空值Choice.Value,而是从 s 中提取ChoicesCardAction并尝试确定要为 Choice 显示的文本的最大长度时,在它为空ChoiceFactory时错误地查看Choice.Value而不是查看Choice.Action.Title. 有关修复,请参阅PR


推荐阅读