首页 > 解决方案 > 选择卡片操作后,团队将返回空字符串

问题描述

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

作为额外的检查,我会回显用户发送给机器人的所有内容。有一个空或空检查。

这里有 Teams 中的对话:

这是模拟器中的对话:

这是我创建活动的代码:

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
    };
}

使用类型imBackAdaptiveSubmitAction 建议的操作在这里不起作用。请参阅下面模拟器的屏幕截图。

标签: c#botframeworkmicrosoft-teams

解决方案


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

本质上,“数据”只是一种“对象”类型,因此您可以在那里提交您想要的任何内容。例如,假设您希望它发回一个“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 是否包含某些内容。


推荐阅读