C# Bot 框架 - 找不到资源错误

C# Bot framework - Resource not found Error

我已经使用机器人框架构建了一个小型的基本网络机器人应用程序,并希望将其部署在 Azure 上。我已经按照所有步骤进行操作,它在 Azure 门户的 "Test in Web Chat" 下也能正常工作,但是当我打开我的机器人端点时

https://optlbot.azurewebsites.net/api/messages

我收到一条错误消息

The requested resource does not support http method 'GET'

有人可以帮助我吗,我根本无法调试我的应用程序。我也在模拟器上测试过,它也工作正常。

是的,URL https://optlbot.azurewebsites.net/api/messages 仅适用于 POST 请求,不适用于 GET 请求,因为你 post 从用户到机器人的消息而不是获取,你可以在 MessagesController 代码中看到。

也就是说,如果你想在本地测试你的机器人,你必须使用模拟器。你可以看看 Bot emulator 同样的。

现在,如果您想向全世界发布机器人,以便其他人可以看到并使用它,那么这就是渠道的用武之地。将渠道视为一种媒介,您可以通过它让您的机器人供其他人使用更好的用户体验。

有多个频道可用于发布机器人,是的,您可以在所有频道中发布同一个机器人。webchat只是一个频道,默认情况下启用的频道和查看它的方式是:

  1. 在 Azure 门户中打开您的机器人,然后单击 Channels 边栏选项卡。
  2. 单击编辑 网络聊天 频道
  3. Secret keys 下,单击 Show 获取第一个密钥
  4. 复制密钥嵌入代码
  5. 单击完成

所以嵌入代码实际上是一个 iframe,您可以将其放置在您的网站中或与想要使用您的机器人的其他人共享。或者您也可以使用 iFrame 的 src 直接访问机器人。

同样,这只是一个频道。您可以查看 Configure channels 文档,了解在 Skype、Microsoft Teams、电子邮件、Facebook、Slack、Telegram 等更多渠道中启用机器人的步骤。

如果您检查 MessagesController 的代码,您会发现控制器中定义了以下操作,它只接受 POST 请求并读取请求正文中 activity 的值,它不支持 http 方法 'GET'.

/// <summary>
/// POST: api/Messages
/// Receive a message from a user and reply to it
/// </summary>
public async Task<HttpResponseMessage> Post([FromBody]Activity activity)
{
    if (activity.Type == ActivityTypes.Message)
    {
        await Conversation.SendAsync(activity, () => new Dialogs.RootDialog());
    }
    else
    {
        HandleSystemMessage(activity);
    }
    var response = Request.CreateResponse(HttpStatusCode.OK);
    return response;
}