【问题标题】:Is there a way to test the locally-hosted bot without Ngrok?有没有办法在没有 Ngrok 的情况下测试本地托管的机器人?
【发布时间】:2020-04-28 12:18:20
【问题描述】:

我开发了一个 Microsoft Bot Framework 机器人,我想在不使用 ngrok 的情况下在本地在 Bot Framework Emulator 中对其进行测试。有什么办法吗?

在当前环境中,我面临代理相关问题,由于公司政策,我无法在笔记本电脑上运行“ngrok”

感谢您提供任何线索!

【问题讨论】:

  • 你能告诉我们你为什么不想使用 ngrok 吗?

标签: botframework


【解决方案1】:

虽然模拟器是测试本地机器人的绝佳工具,但它作为自己的通道,因此无法可靠地重现特定于通道的行为。使用 ngrok,您可以在任何通道上调试本地运行的机器人。如果您想要另一个提供相同功能的隧道服务,请查看 Azure Relays 和 Service Bus Relay Util:https://blog.botframework.com/2019/04/16/debugging-your-locally-hosted-v4-bot-using-azure-relays/

根据您更新的问题,我认为服务总线不会解决您的问题。你可能想在模拟器中bypass ngrok for local addresses

【讨论】:

    【解决方案2】:

    我猜您可能已经在使用 Bot Framework Emulator,它会为您提供很多警告和设置来配置 ngrok。但这不是本地测试所必需的! ngrok 将您的本地机器人暴露在互联网上。除非您的 bot 组件无法在本地访问您的 bot,或者您无法通过代理发出请求,否则没有 ngrok 的测试可以正常工作。

    当您在本地进行测试时,您只需要在模拟器中使用 Endpoint URL = http://localhost:3978/api/messages 的通用端点。我将我的命名为“本地机器人”,因为我对所有机器人测试使用相同的配置。 请勿输入应用程序 ID 或密码。这让我绊倒了一段时间;当您在本地时,您不需要这样做,如果您不使用 ngrok,它实际上会导致您的机器人无法工作。

    现在您可以像往常一样在本地启动您的机器人(例如,node index.js 用于 nodejs 机器人)。如果您使用代理,您可能还需要考虑这些设置。您的控制台中的代理设置将不起作用。如果可以的话,我建议将其设置在 .env 文件中,这样您的代码就不会受到影响。我不确定如何为 C# 做到这一点,但对于 nodejs,它是HTTPS_PROXY=http://proxy.company.com:port。我发现设置 HTTP 代理不是必需的,实际上会破坏我的机器人。

    【讨论】:

    • 太好了,它对你有用吗?如果您遇到其他问题,请告诉我,或者如果它对您有用,请接受此答案!
    • 我应该把 .env 文件放在哪里?我不确定机器人模拟器在哪里寻找。
    • @ccnokes 模拟器本身不需要 .env 文件。但是,如果您将一个用于您的机器人代码,您可以将它放在您的根文件夹中,即 index.js 所在的位置。我使用 dotenv 模块来导入文件。您可以指定路径,因此从技术上讲,它可以去任何地方。 const path = require('path'); const ENV_FILE = path.join(__dirname, '.env'); require('dotenv').config({ path: ENV_FILE });
    【解决方案3】:

    看看Bot Framework Emulator

    Bot Framework Emulator 是一个桌面应用程序,允许机器人开发人员测试和调试使用 Bot Framework SDK 构建的机器人。您可以使用 Bot Framework Emulator 来测试在您的机器上本地运行的机器人或通过隧道连接到远程运行的机器人。

    【讨论】:

    • 谢谢你,米克。我忘了在我的问题中提到 Bot Framework Emulator。我已经在使用它了。我修改了我的问题并添加了必要的信息。
    【解决方案4】:

    我将具体回答你的这部分问题。

    我正面临代理相关问题,由于公司政策,我无法在笔记本电脑上运行“ngrok”

    所以,如果他们正在阻止代理,不幸的是,这包括 ngrok 提供的代理级设施,那么,

    答案很简单。你不能,用最简单的形式。

    我的解决方案(不是技术解决方案,而是务实解决方案,想象一下我会在你的情况下做什么)是与 IT 部门取得联系并要求他们解除限制。

    或者,另一种解决方案是在另一台计算机上运行机器人,只是为了测试,同时将代码和开发保留在公司计算机上。

    再次强调,这不是技术解决方案,而是务实的解决方案。

    【讨论】:

      猜你喜欢
      • 2020-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-20
      • 1970-01-01
      • 2017-01-10
      • 1970-01-01
      相关资源
      最近更新 更多