没有得到 Team Bot Isback 的价值

Not getting value of Team Bot Isback

我一直在尝试通过点击我的机器人按钮向用户显示一些信息。

var card = new HeroCard
{
    Title = "Welcome to Covid-19 Tracker",
    Text = "Type 'help' to see what bot can do?",
    Subtitle = "Know more about Covid-19.",
    Buttons = new List<CardAction>
    { 
        new CardAction(ActionTypes.PostBack, "How it spreads?", value: "spread"),
        new CardAction(ActionTypes.MessageBack, "Symptoms" , value: "Symptom"),
        new CardAction(ActionTypes.MessageBack, "Prevention Guidelines" , value: "Prevention")
    },
};

当我从模拟器中单击这些按钮时,我能够读取 属性 的值,但是当我将其部署到 Teams 时,值以 {} 的形式出现。 我正在使用以下代码检索值。

turnContext.Activity.Value.ToString()

不同渠道的卡片行为不同,在某些情况下,卡片操作的值会回传给机器人,而在其他情况下,卡片操作的文本会被回发(注意到 webchat 和 msTeams 渠道之间的这种差异)。我会建议以下步骤之一,它对我有用

  1. 在卡片操作中添加文本 属性
  2. 或将 ActionTypes 更改为 ActionTypes.ImBack

Microsoft Teams 不支持 postBack 作为与 messageBack 不同的操作类型,因此它将以相同的方式解释 postBackmessageBack。您可以看到可以在 messageBack 操作中使用的四个属性 here.

你的操作在 Teams 中不起作用,因为你正在尝试使用字符串作为值 属性。如果您想继续使用字符串,那么您可以像 Sandeep 建议的那样使用文本 属性,然后您的机器人将不得不从传入的 activity 的文本 属性 中读取文本它的价值 属性。如果你想继续使用值 属性 那么你应该使用一个对象而不是像这样的字符串:

new CardAction(ActionTypes.MessageBack, "Prevention Guidelines", value: new { choice: "Prevention" })

这将使用同一对象填充传入 activity 的值 属性,因此您可以像这样访问用户的选择:

var selection = turnContext.Activity.Value is null ? null : (JToken.FromObject(turnContext.Activity.Value) as JObject)?["choice"];