Facebook 频道中缺少 Bot Framework From.Id & Conversation.Id
Bot Framework Missing From.Id & Conversation.Id from Facebook Channels
我在 GitHub 上针对 C# Bot Builder 项目提出了 raised a bug 项,但老实说,我无法真正弄清楚这是框架的错误还是Facebook 端的零星问题。
我们已经构建该机器人几个月了,并且一直在开发和暂存环境中广泛使用,一次都没有遇到过这个问题。
所以我们开始与我们的第一位客户一起生活和繁荣。此问题开始出现。
Value cannot be null. Parameter name: invalid activity-missing From.Id
还有:
Value cannot be null. Parameter name: invalid activity-missing
Conversation.Id
产生此问题的聊天是由用户通过 Messenger 网页和 Web Chat Plugin 开始的。
两个实例中的用户都使用了 "Get Started" 按钮,因此选择加入聊天。此选择允许机器人访问用户的基本个人资料信息。
可以理解这很奇怪,我完全无法在我们的任何环境(我们有 Dev、Staging 和 Live)的任何测试中重现这个问题。
有没有其他人遇到过类似的问题?
你做了什么来解决这个问题?
目前,由于我无法在任何地方重现它,所以我无法真正关闭该错误,甚至对它不会再次发生有模糊的信心。
如果您的机器人设计有 Activity 处理程序,如 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 的机器人。但是,我们最近修改了我们的连接器服务以包括这些:应该在接下来的几周内发布。
我在 GitHub 上针对 C# Bot Builder 项目提出了 raised a bug 项,但老实说,我无法真正弄清楚这是框架的错误还是Facebook 端的零星问题。
我们已经构建该机器人几个月了,并且一直在开发和暂存环境中广泛使用,一次都没有遇到过这个问题。
所以我们开始与我们的第一位客户一起生活和繁荣。此问题开始出现。
Value cannot be null. Parameter name: invalid activity-missing From.Id
还有:
Value cannot be null. Parameter name: invalid activity-missing Conversation.Id
产生此问题的聊天是由用户通过 Messenger 网页和 Web Chat Plugin 开始的。
两个实例中的用户都使用了 "Get Started" 按钮,因此选择加入聊天。此选择允许机器人访问用户的基本个人资料信息。
可以理解这很奇怪,我完全无法在我们的任何环境(我们有 Dev、Staging 和 Live)的任何测试中重现这个问题。
有没有其他人遇到过类似的问题?
你做了什么来解决这个问题?
目前,由于我无法在任何地方重现它,所以我无法真正关闭该错误,甚至对它不会再次发生有模糊的信心。
如果您的机器人设计有 Activity 处理程序,如 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 的机器人。但是,我们最近修改了我们的连接器服务以包括这些:应该在接下来的几周内发布。