【问题标题】:Bot Framework without Azure possible?没有 Azure 的 Bot Framework 可能吗?
【发布时间】:2017-04-14 18:48:22
【问题描述】:

如果我使用 Microsoft Bot Framework 构建机器人,我是否需要将我的机器人部署到 Azure 以注册我的机器人 HERE 以便为机器人配置通道? 或者我可以简单地将我的机器人部署到普通(例如)IIS 服务器吗?

我找不到有关此主题的任何信息,我不想使用 Azure。

【问题讨论】:

  • 您是在寻找在开发环境中运行机器人,还是想让您的机器人可供其他人使用,而不是为此使用 Azure?
  • 我希望其他人可以使用我的机器人(它应该是电子邮件机器人),而不是使用 Azure。

标签: azure bots botframework


【解决方案1】:

完全有可能。

我以两种方式运行它。 第一个 - 在 docker 容器中恢复服务 - 使用 ngrok 和 AWS 在本地运行

// Create HTTP server.
const server = restify.createServer();
server.listen(process.env.port || process.env.PORT || 3978, () => {
    console.log(`\n${server.name} listening to ${server.url}`);
});

async function main(req: WebRequest, context: TurnContext) {
    logger.json("Request ->", req.body);
    try {
        for (const bot of allBots) {
            await bot.run(context);
        }
    } catch (error) {
        logger.error("Error processing request[server.ts]");
        logger.error(error);
    }
}
// Listen for incoming requests.
server.post("/api/messages", (req: WebRequest, res: WebResponse) => {
    adapter.processActivity(req, res, async (context: TurnContext) => {
        await main(req, context);
    });
});

第 2 次 - 在 AWS Lambda 上使用无服务器框架运行。这是适配器。

export function lambda(bots: ActivityHandler[]) {
    const handler: Handler = async (event: any, _: Context, callback: Callback) => {
        logger.json("Event to bot framework: ", event);
        const reqWrapper: WebRequest = {
            body: event.body,
            headers: event.headers,
            method: event.method,
            query: event.query,
            on: (_1: string, ..._2: any[]): any => {
                // it needs to be empty
            },
        };
        let statusCode: number;
        const resWrapper: WebResponse = {
            status: (code: number) => {
                statusCode = code;
            },
            send: (body) => {
                callback(null, {statusCode, body});
            },
            end: () => {
                callback(null, { statusCode });
            },
        };

        const adapter = await getAdapter();

        adapter.processActivity(reqWrapper, resWrapper, async (context: TurnContext) => {
            await main(context, bots);
        });
    };
    return handler;
}

【讨论】:

  • 能不能多解释一下,尤其是微信上的配置部分
【解决方案2】:

您需要一个 Azure 帐户,但不需要直接在 Azure 上托管您的机器人。登录 Azure 仪表板时有三个选项:Web App Bot、Functions Bot 和 Bot Channels Registration。选择 Bot Channels Registration 并在设置中输入您的 bot 的 https URL(部署它的位置)。

或者如果你想直接从 messenger(不是模拟器)调试你的机器人,你可以下载 ngrok,然后输入命令行

ngrok.exe http <your port> -host-header="localhost:<your port>

然后在 Bot Channels Registration 设置中输入 ngrok 代理 URL(不带端口)。 在几个小时内,该临时地址将转发到您的本地主机。

【讨论】:

    【解决方案3】:

    是的,完全可以在不使用 Azure 云门户的情况下开发机器人。

    【讨论】:

    • 嗨 Sarhk,除了 Azure ot 服务,我们还有其他免费渠道来注册 Bot
    【解决方案4】:

    是的,你的机器人就像一个 API,被 Facebook Messenger、Skype 等聊天前端所使用。查看这个中型博客,解释如何在 Heroku https://medium.com/@chinnatiptaemkaeo/create-fb-bot-with-heroku-nodejs-microsoft-bot-framework-687bd2893238 上托管

    【讨论】:

      【解决方案5】:

      是的,应该可以在 IIS 或任何其他托管服务(包括 Azure 之外的云托管)上运行您的机器人,如 here 所述。您必须确保您的机器人具有可访问 Internet 的端点和有效的 HTTPS 证书。

      关于 HTTPS 证书的要求,我正在复制此 thread 的信息供您参考:

      Bot Framework 要求 x.509v3 证书由 您的端点是最新且有效的。大多数检查“当前 和有效”是服务器证书的标准检查:CN 必须匹配 主机名,它不能过期,不能在 CRL 中列出,它 必须具有正确的 EKU 集等。

      最重要的是,您的证书必须链接到根证书颁发机构 微软信任。这些 CA 的最新列表可在 here 获取。

      此外,您可以注册您的机器人,甚至启用频道,而无需部署到 Azure 或任何其他托管。您可以暂时使用ngrok to create a secure tunnel to your localhost environment 并在您的电子邮件频道中测试该机器人,然后再将其暴露给其他用户。顺便说一句,您无需在 BotFramework 门户中发布您的机器人,只需注册即可。发布仅适用于那些希望出现在Bot Directory 中的机器人。

      【讨论】:

      • 编辑:对于 IIS,我不是指一些云服务,我指的是普通的 Web 服务器。
      • 是的,我知道 IIS 是什么 :) 但我想在回答您的特定请求 (IIS) 以及潜在的其他类似类型的问题时保持通用性
      • 但现在注册机器人的唯一方法似乎是创建 Azure 服务。
      • 没关系。 botframework 不需要托管在 azure 上,但需要在 azure 中配置 bot 通道注册。没有办法摆脱它。对吗?
      • 我想将自己的托管机器人添加到 Skype 群聊中,我可以不使用 azure 吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多