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

Posted

技术标签:

【中文标题】使用 ngrok 在 Teams 中测试机器人功能【英文标题】:Test a bot functionality in Teams using ngrok 【发布时间】:2020-08-14 13:37:42 【问题描述】:

我正在使用 Bot Framework 和 Azure for 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>();

【问题讨论】:

尝试将 --host-header="localhost:3978" 添加到 ngrok 命令 @Chenna:我这样做了,但它不起作用 【参考方案1】:

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

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

您可以在 Azure 门户中获得该信息。最简单的方法是去你的机器人本身,转到左侧菜单上的“设置”部分,然后选择“Microsoft App Id”部分上方的“管理”链接(出现的 App Id 是您需要的, “管理”链接是您获取 apppassword 的地方)。查看设置屏幕截图here。

如果仍然无法正常工作,则可能是配置设置本身。本质上,在默认情况下,HttpAdapter 将尝试实例化一个ConfigurationCredentialProvider,它非常专门用于名为“MicrosoftAppId”和“MicrosoftAppPassword”的配置项(有关更多信息,请参阅here)。

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

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

【讨论】:

我检查了appSettings.json 文件,那里的一切都是正确的。所以可能是HttpAdapter 是错误的。 P.S.:我使用的是 C#。

以上是关于使用 ngrok 在 Teams 中测试机器人功能的主要内容,如果未能解决你的问题,请参考以下文章

将 Azure 托管的机器人添加到 Microsoft Teams 开发门户

如何通过 Bot Framework 向 Teams 中的用户发送通知?

有没有办法使用 Ngrok 将 Azure 机器人服务连接到本地托管的机器人?

使用 ngrok 侧载应用程序不起作用

如何在基于Bot framewok v4构建的团队聊天机器人中启用语音功能

Microsoft Teams 机器人在频道上发送图像