【问题标题】:Bot Framework Missing From.Id & Conversation.Id from Facebook ChannelsFacebook 频道中缺少 From.Id 和 Conversation.Id 的 Bot 框架
【发布时间】:2019-04-11 07:37:00
【问题描述】:

我在 GitHub 上针对 C# Bot Builder 项目提出了 raised a bug 项目,但老实说,我无法真正弄清楚这是框架的错误还是源自 Facebook 方面的零星问题。

我们已经构建机器人几个月了,并且已经在开发和暂存环境中广泛使用,并且从未遇到过这个问题。

因此,我们与第一个客户一起上线并繁荣发展。开始出现此问题。

值不能为空。参数名称:无效的activity-missing From.Id

还有:

值不能为空。参数名称:无效活动缺失 对话.Id

产生此问题的聊天是由通过信使网页和网络聊天插件访问机器人的用户发起的。

这两种情况下的用户都使用了“开始”按钮,因此选择加入聊天。此选择为机器人提供了对用户基本个人资料信息的访问权限。

可以理解,这很奇怪,我完全无法在我们的任何环境(我们有 Dev、Staging 和 Live)的任何测试中重现这个问题。

有没有其他人遇到过类似的问题?

你做了什么来解决它?

目前,由于我无法在任何地方重现它,我无法真正关闭该错误,甚至对它不会再次发生有模糊的信心。

【问题讨论】:

    标签: c# botframework facebook-messenger


    【解决方案1】:

    如果您的机器人是使用 Activity Handler 设计的,如 Samples-work-in-progress 分支中所示,您可以向控制器添加一些代码来记录整个 Request.Body

      [Route("api/messages")]
        [ApiController]
        public class BotController : ControllerBase
        {
            private readonly IBotFrameworkHttpAdapter Adapter;
            private readonly IBot Bot;
    
            public BotController(IBotFrameworkHttpAdapter adapter, IBot bot)
            {
                Adapter = adapter;
                Bot = bot;
            }
    
            [HttpPost]
            public async Task PostAsync()
            {
                Request.EnableBuffering();
    
                using (var buffer = new MemoryStream())
                {
                    await Request.Body.CopyToAsync(buffer);
                    buffer.Position = 0L;
                    using (var bodyReader = new JsonTextReader(new StreamReader(buffer, Encoding.UTF8)))
                    {
                        Debug.Print(BotMessageSerializer.Deserialize(bodyReader).ToString());
                        buffer.Position = 0L;
                    }
                }
    
                Request.Body.Position = 0;
    
              await Adapter.ProcessAsync(Request, Response, Bot);
            }
        }
    

    这应该提供有关正在向机器人发送什么类型的消息的更多信息。我的猜测是它与您订阅的 Facebook Messenger 特定网络挂钩有关。例如,我不认为“message_echoes”当前是通过 .From 或 conversation.Id 发送到机器人的。但是,我们最近修改了我们的连接器服务以包含以下内容:发布应该在接下来的几周内。

    【讨论】:

    • 这真的很有趣。我没有在我的机器人中使用更传统的控制器方法,但我认为对于未来在机器人领域的冒险,这是要走的路。谢谢埃里克。我也会尝试在新的几周内整理您想要的其他东西。
    猜你喜欢
    • 1970-01-01
    • 2012-09-07
    • 1970-01-01
    • 2015-03-23
    • 2022-08-03
    • 2019-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多