由于该项目在本地运行,因此机器人在消息扩展中没有响应的原因很可能是由于部署 Azure 应用程序的项目配置错误。我不确定如何将项目正确编译为开发版本。每次我在 Azure 上启动开发版本的项目时,都会出现错误“无法连接到应用程序。请重试。” - 标头跟踪中的内部错误是:“
错误代码:1008
消息:“
我的项目结构如下:
|-- .vscode/
|-- appPackage/
|-- env/
|-- infra/
|--public/
|-- bot/ <!--message extension source code-->
| |-- index.ts
| |-- config.ts
| |-- teamsBot.ts
| |-- package.json
| |-- tsconfig.json
| |-- web.config
| |-- .webappignore
|-- tab/ <!--your current source code-->
|-- src/ <!--your current source code-->
|-- app.jsx
|-- static/
|-- views/
|-- package.json
|-- tsconfig.json
|-- teamsapp.local.yml
|-- teamsapp.yml
teamsapp.yml 配置:
version: v1.2
additionalMetadata:
sampleTag: msg-ext-with-tab
environmentFolderPath: ./env
provision:
- uses: teamsApp/create
with:
name: MS_TEAMS_TAB_MSGEXT_dev
writeToEnvironmentFile:
teamsAppId: TEAMS_APP_ID
- uses: aadApp/create
with:
name: 'MS_TEAMS_TAB_MSGEXT_dev'
generateClientSecret: true
signInAudience: 'AzureADMyOrg'
writeToEnvironmentFile:
clientId: AAD_APP_CLIENT_ID
clientSecret: SECRET_AAD_APP_CLIENT_SECRET
objectId: AAD_APP_OBJECT_ID
tenantId: AAD_APP_TENANT_ID
authority: AAD_APP_OAUTH_AUTHORITY
authorityHost: AAD_APP_OAUTH_AUTHORITY_HOST
- uses: aadApp/update
with:
manifestPath: './aad.manifest.json'
outputFilePath: ./build/aad.manifest.${{TEAMSFX_ENV}}.json
- uses: botAadApp/create
with:
name: BOT-${{TEAMSFX_ENV}}
writeToEnvironmentFile:
botId: BOT_ID
botPassword: SECRET_BOT_PASSWORD
- uses: arm/deploy
with:
subscriptionId: ${{AZURE_SUBSCRIPTION_ID}}
resourceGroupName: ${{AZURE_RESOURCE_GROUP_NAME}}
templates:
- path: ./infra/azure.bicep
parameters: ./infra/azure.parameters.json
deploymentName: Create-resources-for-tab
bicepCliVersion: v0.9.1
- uses: teamsApp/validateManifest
with:
manifestPath: ./appPackage/manifest.json
- uses: teamsApp/zipAppPackage
with:
manifestPath: ./appPackage/manifest.json
outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip
outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json
- uses: teamsApp/validateAppPackage
with:
appPackagePath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip
- uses: teamsApp/update
with:
appPackagePath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip
- uses: azureStorage/enableStaticWebsite
with:
storageResourceId: ${{TAB_AZURE_STORAGE_RESOURCE_ID}}
indexPage: index.html
errorPage: error.html
deploy:
- uses: cli/runNpmCommand
name: install dependencies
with:
args: install
- uses: cli/runNpmCommand
name: build app
with:
args: run build
- uses: azureStorage/deploy
with:
workingDirectory: tab
artifactFolder: build
resourceId: ${{TAB_AZURE_STORAGE_RESOURCE_ID}}
- uses: azureAppService/zipDeploy
with:
workingDirectory: bot
artifactFolder: .
ignoreFile: .webappignore
resourceId: ${{BOT_AZURE_APP_SERVICE_RESOURCE_ID}}
publish:
- uses: teamsApp/validateManifest
with:
manifestPath: ./appPackage/manifest.json
- uses: teamsApp/zipAppPackage
with:
manifestPath: ./appPackage/manifest.json
outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip
outputJsonPath: ./appPackage/build/manifest.${{TEAMSFX_ENV}}.json
- uses: teamsApp/validateAppPackage
with:
appPackagePath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip
- uses: teamsApp/update
with:
appPackagePath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip
- uses: teamsApp/publishAppPackage
with:
appPackagePath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip
writeToEnvironmentFile:
publishedAppId: TEAMS_APP_PUBLISHED_APP_ID
projectId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
bot 文件夹中的 tsconfig.json 文件:
{
"compilerOptions":{
"incremental":true,
"tsBuildInfoFile":"./lib/.tsbuildinfo",
"target":"ES2019",
"module":"ESNext",
"rootDir":"./",
"moduleResolution":"Node",
"resolveJsonModule":true,
"declaration":true,
"sourceMap":true,
"allowJs":true,
"outDir":"./lib",
"esModuleInterop":true,
"noImplicitAny":false,
"skipLibCheck":true
},
"ts-node":{
"compilerOptions":{
"module":"commonjs"
}
}
}
机器人的package.json:
{
"name": "---------",
"version": "1.0.0",
"msteams": {
"teamsAppId": null
},
"description": "Microsoft Teams Toolkit hello world Bot sample",
"engines": {
"node": "16 || 18"
},
"author": "Microsoft",
"license": "MIT",
"main": "./lib/index.js",
"scripts": {
"dev:teamsfx": "env-cmd --silent -f .localConfigs npm run dev",
"dev": "nodemon --exec node --inspect=9239 --signal SIGINT -r ts-node/register ./index.ts",
"build": "tsc && shx cp -r ./adaptiveCards ./lib/ && shx cp -r ./api ./lib/",
"start": "node ./lib/index.js",
"watch": "nodemon --exec \"npm run start\"",
"test": "echo \"Error: no test specified\" && exit 1"
},
"dependencies": {
"@microsoft/adaptivecards-tools": "^1.0.0",
"@microsoft/microsoft-graph-client": "^3.0.7",
"@microsoft/teams-js": "^2.17.0",
"adaptive-expressions": "^4.20.0",
"adaptivecards": "2.11.1",
"adaptivecards-templating": "^2.3.1",
"botbuilder": "^4.20.0",
"botbuilder-teams": "^0.2.9",
"node-localstorage": "^3.0.5",
"restify": "^10.0.0",
"storage": "^0.2.0",
"swiper": "^11.0.5"
},
"devDependencies": {
"@types/node": "^16.18.79",
"@types/restify": "^8.5.10",
"env-cmd": "^10.1.0",
"nodemon": "^2.0.7",
"shx": "^0.3.4",
"ts-node": "^10.9.2",
"tsconfig-paths": "^4.2.0",
"typescript": "^5.3.3"
}
}
该项目仅适用于前端,即,对于“Tab”,文件配置正确,在 Azure 上运行部署后,您可以看到预期的结果。
对于机器人,TypeScript 是编译项目到 /lib 文件夹,但我已经包含到项目“bot”api 文件夹中,它是用 JavaScript ES6 编写的。该 API 的编写目的是为了从外部私人提供商下载数据。 Api 文件导入到 teamBot.ts 文件中。
正如我所指出的,项目在本地运行没有错误,机器人会响应,但在开发版本中机器人不会响应并返回错误。
我不知道如何配置它,以便 Azure 端不会出现错误,在 Azure 日志中的某个位置我遇到了如下错误:
SyntaxError: Cannot use import statement outside a module
- 这适用于“restify”或配置更改后,对于导入到teamBot中的“js”文件....
由于我是这方面的初学者,所以请您理解,因为微软方面的描述通常过于笼统,无法使其功能适应项目的需求......有人可以帮助我吗?
NodeJS 默认不支持 ES 模块。您必须将
"module":"ESNext"
文件夹中的 "module": "commonjs"
中的 tsconfig.json
更改为 bot
。
如果您想使用
ESNext
作为您的TS输出模块类型。您应该将 --experimental-modules
添加到启动命令中,如下所示 package.json
所示。 (忽略其他选项)
{
"scripts": {
"start": "node --experimental-modules ./lib/index.js"
}
}
您可以通过运行类似命令来测试您的项目
cd /your_project_root/bot
npm install
npm run build
npm run start
更改的结果将决定您是否看到错误输出或服务器启动。