问题描述
我通过this tutorial构建了我的第一个机器人(PlanetBot)。因为我可以访问AWS,所以我将其构建在一个可在Web上访问的EC2实例(Ubuntu 20)上。我在上面安装了APACHE以及一个SSL证书,所以我是HTTPS
。我有一个完全限定的域,目前,所有端口都是打开的。
在本教程中,对于那些在locahost
上构建其机器人的人,大多数示例使用ngrok
,而我没有。
我有点困惑的是,当使用ngrok
时,它说要在根项目目录中启动它。这就是我不确定是在整个根项目文件夹/learn-msteams-msgext
还是/learn-msteams-msgext/src/server/plantBot
中启动它的位置。
ngrok
,并且我有自己的域,所以我到底应该将消息传递终结点指向哪里。例如,我构建了项目的根文件夹https://test.example.com/learn-msteams-msgext
,因此基本上我将项目文件夹放在/var/www/html/
中我的项目中我的bot
的路径是/var/www/html/learn-msteams-msgext/src/server/planetBot
。
当我在团队中安装我的Package.Zip应用程序并在机器人启动时添加它时,它会显示Unable to reach app. Please try again.
,因此我怀疑我的消息终结点在Azure机器人配置中没有指向正确的方向。
我做得完全错了吗?哈哈,任何帮助或见解都是很棒的。
MANIFEST.JSON
{
"$schema": "https://developer.microsoft.com/en-us/json-schemas/teams/v1.8/MicrosoftTeams.schema.json",
"manifestVersion": "1.8",
"id": "**********",
"version": "1.0.0",
"packageName": "planetBot",
"developer": {
"name": "Contoso",
"websiteUrl": "https://www.example.com",
"privacyUrl": "https://www.example.com/privacypolicy/",
"termsOfUseUrl": "https://www.example.com/terms/"
},
"name": {
"short": "Planet Messaging",
"full": "Planet Messaging"
},
"description": {
"short": "TODO: add short description here",
"full": "TODO: add full description here"
},
"icons": {
"outline": "icon-outline.png",
"color": "icon-color.png"
},
"accentColor": "#D85028",
"configurableTabs": [],
"staticTabs": [],
"bots": [],
"connectors": [],
"composeExtensions": [
{
"botId": "**********",
"canUpdateConfiguration": false,
"commands": [
{
"id": "planetExpanderAction",
"type": "action",
"title": "Planet Expander",
"description": "Lookup the details of a planet.",
"context": [
"compose",
"message"
],
"fetchTask": true
}
]
}
],
"permissions": [
"identity",
"messageTeamMembers"
],
"validDomains": [
"example.com"
],
"showLoadingIndicator": false
}
更新%1
因此,在查看我的配置时,我意识到在教程中ngrok
的终结点添加了/api/messages
,根据我的理解,这只是ngrok
的事情。由于我没有使用ngrok
,而且我在网络上是可公开的,所以我需要编辑此内容。因此,我将端点更改为https://test.example.com/learn-msteams-msgext
,并将POST路径更改为/src/server/planetBot
。遗憾的是,这仍然不起作用。// run the bot when messages are received on the specified path
const bot = new PlanetBot();
express.post("/src/server/planetBot", (request, response) => {
botAdapter.processActivity(request, response, async (context) => {
await bot.run(context);
});
});
更新2
只是为了澄清一下,当我使用ngrok
运行我的机器人时,它工作得很好。我正在尝试使用我自己的URL,这就是我遇到问题的地方。
仍然卡住了,但学到了更多。首先,我没有意识到我仍然必须运行gulp
,以便机器人能够监听传入的请求。由于我没有使用ngrok
获取URL,而是使用我自己的URL,所以我运行的是gulp serve
,而不是gulp ngrok-serve
。我现在遇到的问题是,如果我用ngrok
运行机器人,并导航到我从ngrok
获得的临时URL,我可以用https
很好地访问机器人。如果我只使用gulp serve
(没有ngrok)运行机器人,并导航到我的URL,则连接被认为是不安全的。我正在尝试弄清楚ngrok
如何通过端口3007
到达我的邮箱,但仍保持安全。这就是我被困的地方。
推荐答案
所以‘/api/Messages’实际上只是bot的约定。它不是必需的,但如果你正在运行它,那么你需要配置你的Azure机器人配置来指向它。在您的例子中,它听起来好像没有被使用,因为您已经更改了(从示例中)这一行:
express.post("/api/messages", (request, response) => {
我建议将其重新设置为以上内容,并使用约定。然后,您的bot终结点将类似于:
https://www.whateveryourdomainis.com/api/messages
在这种情况下,您将部署/learn-msteams-msgext/src/server
的内容,该内容将是服务器的";base";位置
这篇关于在bot配置中而不是在本地主机上指向消息传递终结点的位置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!