使用 ngrok 在 Teams 中测试机器人功能

Test a bot functionality in Teams using ngrok

我正在使用 Bot Framework 和 Azure 为 Microsoft Teams 开发一个机器人,我将使用 ngrok 直接在 MS Teams 中开发和测试我的代码。在机器人的设置中,我将消息端点设置为从 ngrok 获取的 URL 并添加了 /api/messages.

但每次我想从 Teams 发送消息时,都会收到 401 未经授权的响应。

如何授权 ngrok 发送消息?

更新: 形成@Hilton Giesenow 的答案我已经检查了appSettings.json 文件,那里的一切都是正确的。他还说有一个小的变化,问题出在HttpAdapter。所以这是我的代码:

public class AdapterWithErrorHandler : BotFrameworkHttpAdapter
{
    public AdapterWithErrorHandler(IConfiguration configuration, ILogger<BotFrameworkHttpAdapter> logger) : base(configuration, logger)
    {
        OnTurnError = OnTurnErrorHandler;
    }

    private async Task OnTurnErrorHandler(ITurnContext turnContext, Exception exception)
    {
        string replyText = "An error occured while sending a message. If this error stays, please contact the service desk.";

        await turnContext.SendActivityAsync(MessageFactory.Text(replyText, replyText));
    }
}

ConfigureServices 方法中启动文件中的代码:

services.AddSingleton<IBotFrameworkHttpAdapter, AdapterWithErrorHandler>();
services.AddTransient<ILogger<BotFrameworkHttpAdapter>, BotFrameworkHttpAdapterLogger>();

所以,如果您已经走到这一步,那么您已经迈出了正确的第一步。只是一个无关的提示,您甚至可以通过查看 http://localhost:4040.

来查看流量

除此之外,您的实际错误很可能是由于您的机器人配置中的机器人应用 ID 和应用密码不正确或缺失(例如,您的 appSettings.json 用于 C# 项目,或等效于节点项目). Here's an example 对于 C# 项目。

您可以在 Azure 门户中获取该信息。最简单的方法是使用您的机器人本身,转到左侧菜单中的 "Settings" 部分,然后选择 "Microsoft App Id" 部分上方的 "Manage" link(App Id出现的是您需要的那个,"manage" link 是您获取应用程序密码的地方)。查看“设置”屏幕的屏幕截图 here

如果仍然无法正常工作,则可能是配置设置本身的问题。本质上,在默认情况下,HttpAdapter 将尝试实例化一个 ConfigurationCredentialProvider, which is looking very specifically for the configuration items named "MicrosoftAppId" and "MicrosoftAppPassword" (see here for more).

因此,您需要确保您的设置名称与配置文件中的名称正确匹配。如果您 仍然 有问题,那么您至少可以通过在 "AdapterWithErrorHandler" 文件中替换实例化基础的行来验证这是一个配置问题。修改为:

: base(new Bot.Connector.Authentication.SimpleCredentialProvider("[your app id]", "[your add password"), logger: logger)