如果我使用Microsoft Bot Framework构建机器人,我是否需要将我的机器人部署到Azure才能注册机器人HERE以便为机器人配置通道? 或者我可以简单地将我的机器人部署到普通(例如)IIS服务器吗?
我无法找到关于此toppic的任何信息,我不想使用Azure。
答案 0 :(得分:41)
是的,应该可以在IIS上或任何其他托管服务(包括Azure之外的云托管)上运行您的机器人,如here所述。您必须确保您的机器人具有可通过Internet访问的端点和有效的HTTPS证书。
关于HTTPS证书的要求,我正在复制此thread的信息供您参考:
Bot Framework要求公开x.509v3证书 您的端点是最新且有效的。大多数检查“当前 有效的“是服务器证书的标准检查:CN必须匹配 hostname,它一定不能过期,它一定不能列在CRL中 必须有正确的EKU等等。
最重要的是,您的证书必须链接到根证书颁发机构 受微软信赖。这些CA的最新列表可用here。
此外,您可以注册机器人甚至启用频道,而无需部署到Azure或任何其他主机。您可以暂时使用ngrok to create a secure tunnel to your localhost environment并在电子邮件渠道中测试机器人,然后再将其暴露给其他用户。顺便说一句,您不需要在BotFramework门户中发布您的机器人,只需注册它。发布只适用于那些想要出现在Bot Directory中的机器人。
答案 1 :(得分:1)
是的,你的机器人就像一个由Facebook Messenger,Skype等聊天前端消费的API。查看这个媒体博客,解释如何在Heroku上托管https://medium.com/@chinnatiptaemkaeo/create-fb-bot-with-heroku-nodejs-microsoft-bot-framework-687bd2893238
答案 2 :(得分:1)
是的,在不使用Azure云门户的情况下完全开发机器人。
在Microsoft提供的bot模拟器上进行测试
但是要在渠道或网络应用程序上发布僵尸程序,您必须使用Azure bot服务注册Bot。 点击此处查看更多信息:https://thewebspark.com/2018/04/15/is-microsoft-bot-framework-without-azure-possible/
答案 3 :(得分:0)
您需要在Azure上拥有一个帐户,但是不需要直接在Azure上托管您的机器人。登录到Azure仪表板时有三个选项:Web App Bot,Functions Bot和Bot Channels Registration。选择Bot Channels Registration,然后在设置中输入您的机器人的https URL(部署它的位置)。
或者,如果您想直接从Messenger(而非仿真器)调试机器人,则可以下载ngrok,然后在命令行中输入
ngrok.exe http <your port> -host-header="localhost:<your port>
然后输入ngrok代理URL(无端口)到Bot Channels Registration设置。 在几个小时内,该临时地址将转发到您的本地主机。
答案 4 :(得分:0)
完全有可能。
我以两种方式运行它。 第一个-在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);
});
});
2nd-在具有无服务器框架的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;
}