选择卡片操作后,团队将 return 一个空字符串

Teams wil return a null string after a card action is selected

我将通过 2 个操作向用户发送一张自适应卡片,但是当我 select 一个操作时,将向服务器发送一个空字符串。因此,机器人无法理解用户想要什么。

作为额外的检查,我回显了用户发送给机器人的所有内容。存在空检查。

这是 Teams 中的对话:

这是模拟器中的对话:

这是我创建 activity:

的代码
Activity activity = new Activity()
{
    Attachments = new List<Attachment>()
    {
        new Attachment()
        {
            ContentType = AdaptiveCard.ContentType,
            Content = new AdaptiveCard("1.0")
            {
                Body = new List<AdaptiveElement>()
                {
                    new AdaptiveTextBlock()
                    {
                        Text = $"Lorem reminder",
                        Size = AdaptiveTextSize.Large
                    },
                    new AdaptiveTextBlock()
                    {
                        Text = $"Hi {userName},\r\nYou've missed some lorem ipsum dolor sit amet:\r\n- **consectetur:** Ut porttitor\r\nChoose an action from below to add them."
                   }
               },
               Actions = new List<AdaptiveAction>()
               {
                   CreateCardAction("First action"),
                   CreateCardAction("Second action")
               }
           }
       }
   },
   From = turnContext.Activity.Recipient,
   Recipient = turnContext.Activity.From,
   Type = "message",
   Conversation = turnContext.Activity.Conversation
};
private AdaptiveAction CreateCardAction(string text)
{
    return new AdaptiveSubmitAction()
    {
        Title = text,
        Data = text
    };
}

AdaptiveSubmitAction (如 使用类型 imBack 在这里不起作用。请参阅下面模拟器的屏幕截图。

如果您 运行 在本地使用 NGrok,则值得在 ngrok 检查器中查看有效负载,以便您了解发回的内容 (http://localhost:4040/)。

本质上,"Data" 只是一个 "object" 类型,因此您可以在那里提交您想要的任何内容。例如,假设您希望它发回一个 "id" 值 - 简单地将其附加为 "Data" 属性,例如:

private AdaptiveAction CreateCardAction(string text, string id)
{
    return new AdaptiveSubmitAction()
    {
        Title = text,
        Data = id
    };
}

或者,它可以是更复杂的对象,例如:

public class Foo {
   public string something { get; set; }
   public string id{ get; set; }
}

    private AdaptiveAction CreateCardAction(string text, Foo foo)
    {
        return new AdaptiveSubmitAction()
        {
            Title = text,
            Data = foo
        };
    }

然后当消息到达时,在您的 OnTurnAsync 上,您可以检查 Turncontext.Activity.Value 是否包含某些内容。

实际上,Teams 似乎剥离了纯字符串 "Data" 属性(在 DirectLine 通道上工作得很好)。 如果您能够用 JObject 替换纯字符串,问题就解决了。

如果 - 出于任何原因 - 你希望你的机器人充当 "bridge" 并转发到 Teams 频道,带有纯字符串的 AdaptiveCard "Data" 属性 来自不同的渠道(即 DirectLine),而不是将 "Data" 字符串内容包装在 JObject 中可以节省您的时间。