如何使用ImBack类型将值传递给机器人,但无需在聊天窗口中显示文本

时间:2018-02-18 20:03:03

标签: botframework

我使用这种结构定义了一个ThumbnailCard:

private static Attachment GetThumbnailCard()
{
  var thumbnailCard= new ThumbnailCard
  {
    Title = "title",
    Subtitle = "subtitle",
    Text = "text",
    Images = new List<CardImage>() { new CardImage(url: "http://example.com/image.jpg")},
    Buttons = new List<CardAction>() { new CardAction(type: ActionTypes.ImBack, title: "Product 1", value: "Product 01") },
  };

  return thumbnailCard.ToAttachment();
}

一切正常,按钮显示&#34;产品1&#34;当用户使用你在聊天窗口中看到的按钮时,在这种情况下的价值内容&#34;产品01&#34;。

但我需要更多功能,因此我查看文档并找到cardAction类的其他参数,例如textdisplayText

因此,当用户使用聊天按钮时,您将看到&#34;我想购买产品01&#34;,并且机器人将获得该产品的ID,以便它可以在数据库上进行检查。

我根据文档完成了这个:

new CardAction(type: ActionTypes.ImBack, title: "Product 1", value: "IdOfProduct01", text: "Product 01", displayText: "I Want to buy Product 01")

我正在接受这种方法的价值:

private async Task ReceivingButtonClick(IDialogContext context, IAwaitable<object> result)
    {
      var rpta = await result as Activity;
    }

但是当我尝试访问rpta.value时,它始终为空,聊天窗口仍显示value而不是displayTexttext

有谁知道这个功能是否还没有,我使用的是Microsoft.Bot.Builder 3.13.1,我在模拟器上测试了这个,或者我可能会收到这个结果作为活动和我应该接收它作为其他东西。

提前感谢您的答案。

2 个答案:

答案 0 :(得分:1)

这是BOT Framework中的当前行为。 ImBack类似于只输入一条消息,它会发回“&#39;值”中设置的内容。我猜你不想在用户点击产品按钮时向用户显示ID。您可以使用 ActionTypes.PostBack 作为类型,并将消息发送回BOT,但不会在聊天时显示。

试试这个:

new CardAction(type: ActionTypes.PostBack, title: "Product 1", value: "IdOfProduct01", text: "Product 01", displayText: "I Want to buy Product 01")

使用PostBack的问题是并非所有渠道都支持它。因此,请务必检查您正在实施机器人的频道。

答案 1 :(得分:0)

  

有没有人知道这个功能是否可用,我正在使用Microsoft.Bot.Builder 3.13.1,我在模拟器上测试这个,或者我可能会收到一个活动的结果,我应该接收它作为别的东西。

{3}}的displayTextText属性是在v3 SDK中新添加的,问题是尚未修改CardAction以支持这些属性。您可以参考directLine.ts的源代码来查看该问题。

我们的模拟器使用WebChatDirectLineJS使用WebChat,因此DirectLine会导致问题。

您可以在Github BotFramework-WebChat上提交问题,我们可以方便地监控此问题。谢谢。