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

2023-12-22

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

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

我如何授权 ngrok 发送消息?

Update:形成@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 method:

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

所以,如果能走到这一步,你就迈出了正确的第一步。只是一个无关的提示,您甚至可以通过查看来查看流量http://本地主机:4040 http://localhost:4040.

除此之外,您的实际错误很可能是由于机器人配置中的机器人应用程序 ID 和应用程序密码不正确或丢失造成的(例如,C# 项目的 appSettings.json 或节点项目的等效项)。这是一个例子 https://github.com/Wajeed-msft/MessagingExtensionWithoutTaskModule/blob/master/appsettings.json对于 C# 项目。

您可以在 Azure 门户中获取该信息。最简单的方法是转到您的机器人本身,转到左侧菜单上的“设置”部分,然后选择“Microsoft App Id”部分上方的“管理”链接(出现的应用程序 ID 是您需要的, “管理”链接是您获取应用程序密码的地方)。查看“设置”屏幕的屏幕截图here https://learn.microsoft.com/en-us/azure/bot-service/bot-service-manage-settings?view=azure-bot-service-4.0.

如果仍然不起作用,则可能是配置设置本身的问题。本质上,在默认情况下,HttpAdapter 将尝试实例化一个配置凭证提供者 https://github.com/microsoft/botbuilder-dotnet/blob/f8c3955dc3c4f1c03fa14a961cb16788f846383f/libraries/integration/Microsoft.Bot.Builder.Integration.AspNet.WebApi/ConfigurationCredentialProvider.cs,它正在专门查找名为“MicrosoftAppId”和“MicrosoftAppPassword”的配置项(请参阅here https://github.com/microsoft/botbuilder-dotnet/blob/461df3c76cf74d00d001cee93bc383f544c89473/libraries/Microsoft.Bot.Connector/Authentication/MicrosoftAppCredentials.cs了解更多)。

因此,您需要确保您的设置名称与配置文件中的名称正确匹配。如果你是still如果出现问题,那么您至少可以通过替换“AdapterWithErrorHandler”文件中的实例化基础行来验证它是配置问题。将其修改为:

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 ngrok 在 Teams 中测试机器人功能 的相关文章

  • 使用 gcc 在 Linux 上运行线程构建块 (Intel TBB)

    我正在尝试为线程构建块构建一些测试 不幸的是 我无法配置 tbb 库 链接器找不到库 tbb 我尝试在 bin 目录中运行脚本 但这没有帮助 我什至尝试将库文件移动到 usr local lib 但这又失败了 任何的意见都将会有帮助 确定您
  • 结构化绑定中缺少类型信息

    我刚刚了解了 C 中的结构化绑定 但有一件事我不喜欢 auto x y some func is that auto正在隐藏类型x and y 我得抬头看看some func的声明来了解类型x and y 或者 我可以写 T1 x T2 y
  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • C++ 多行字符串原始文字[重复]

    这个问题在这里已经有答案了 我们可以像这样定义一个多行字符串 const char text1 part 1 part 2 part 3 part 4 const char text2 part 1 part 2 part 3 part 4
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • 结构体的内存大小不同?

    为什么第一种情况不是12 测试环境 最新版本的 gcc 和 clang 64 位 Linux struct desc int parts int nr sizeof desc Output 16 struct desc int parts
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • C 编程:带有数组的函数

    我正在尝试编写一个函数 该函数查找行为 4 列为 4 的二维数组中的最大值 其中二维数组填充有用户输入 我知道我的主要错误是函数中的数组 但我不确定它是什么 如果有人能够找到我出错的地方而不是编写新代码 我将不胜感激 除非我刚去南方 我的尝
  • LINQ:使用 INNER JOIN、Group 和 SUM

    我正在尝试使用 LINQ 执行以下 SQL 最接近的是执行交叉联接和总和计算 我知道必须有更好的方法来编写它 所以我向堆栈团队寻求帮助 SELECT T1 Column1 T1 Column2 SUM T3 Column1 AS Amoun
  • C# 动态/expando 对象的深度/嵌套/递归合并

    我需要在 C 中 合并 2 个动态对象 我在 stackexchange 上找到的所有内容仅涵盖非递归合并 但我正在寻找能够进行递归或深度合并的东西 非常类似于jQuery 的 extend obj1 obj2 http api jquer
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • 复制目录下所有文件

    如何将一个目录中的所有内容复制到另一个目录而不循环遍历每个文件 你不能 两者都不Directory http msdn microsoft com en us library system io directory aspx nor Dir
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • 当文件流没有新数据时如何防止fgets阻塞

    我有一个popen 执行的函数tail f sometextfile 只要文件流中有数据显然我就可以通过fgets 现在 如果没有新数据来自尾部 fgets 挂起 我试过ferror and feof 无济于事 我怎样才能确定fgets 当
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • 如何确定 CultureInfo 实例是否支持拉丁字符

    是否可以确定是否CultureInfo http msdn microsoft com en us library system globalization cultureinfo aspx我正在使用的实例是否基于拉丁字符集 我相信你可以使

随机推荐