与 Bot 框架的独白
Monolog with Bot Framework
我们正在为我们的聊天机器人使用 Microsoft Bot Framework。我们的消息控制器是标准的:
public async Task<HttpResponseMessage> Post([FromBody] Activity activity)
{
HttpResponseMessage response;
try
{
if (activity.Type == ActivityTypes.Message)
{
//do some stuff
await Conversation.SendAsync(activity, () => new RootDialog());
}
else
{
HandleSystemMessage(activity);
}
response = this.Request.CreateResponse(HttpStatusCode.OK);
}
catch (Exception ex)
{
//do some catching
}
return response;
}
有时候,机器人需要有很长的独白。如果花费的时间太长,我们会收到 502 Bad Gateway 错误。
有什么解决办法吗?
Bot Framework 调用在 15 秒后超时。您的机器人必须在 15 秒内 return 一个成功的 HTTP 状态代码,Direct Line 才能认为消息已成功发送。
如果您的机器人执行大量离线工作或发送多条消息,您应该将这些工作移至后台线程,以便传入请求在 15 秒内完成。
这是正确处理 ASP.Net 和其他托管环境中托管的负载的代码段。
if (HostingEnvironment.IsHosted)
{
HostingEnvironment.QueueBackgroundWorkItem(c => DoWorkAsync());
}
else
{
Task.Run(() => DoWorkAsync());
}
...
private async Task DoWorkAsync()
{
// do some stuff
}
Task.Run 更简单,但 HostingEnvironment.QueueBackgroundWorkItem 阻止 ASP.Net 在这项工作完成之前拆除您的流程。
我们正在为我们的聊天机器人使用 Microsoft Bot Framework。我们的消息控制器是标准的:
public async Task<HttpResponseMessage> Post([FromBody] Activity activity)
{
HttpResponseMessage response;
try
{
if (activity.Type == ActivityTypes.Message)
{
//do some stuff
await Conversation.SendAsync(activity, () => new RootDialog());
}
else
{
HandleSystemMessage(activity);
}
response = this.Request.CreateResponse(HttpStatusCode.OK);
}
catch (Exception ex)
{
//do some catching
}
return response;
}
有时候,机器人需要有很长的独白。如果花费的时间太长,我们会收到 502 Bad Gateway 错误。
有什么解决办法吗?
Bot Framework 调用在 15 秒后超时。您的机器人必须在 15 秒内 return 一个成功的 HTTP 状态代码,Direct Line 才能认为消息已成功发送。
如果您的机器人执行大量离线工作或发送多条消息,您应该将这些工作移至后台线程,以便传入请求在 15 秒内完成。
这是正确处理 ASP.Net 和其他托管环境中托管的负载的代码段。
if (HostingEnvironment.IsHosted)
{
HostingEnvironment.QueueBackgroundWorkItem(c => DoWorkAsync());
}
else
{
Task.Run(() => DoWorkAsync());
}
...
private async Task DoWorkAsync()
{
// do some stuff
}
Task.Run 更简单,但 HostingEnvironment.QueueBackgroundWorkItem 阻止 ASP.Net 在这项工作完成之前拆除您的流程。