如何使用“选项卡”扩展和“消息扩展”准备项目编译到 Azure for MS Teams?

问题描述 投票:0回答:1

由于该项目在本地运行,因此机器人在消息扩展中没有响应的原因很可能是由于部署 Azure 应用程序的项目配置错误。我不确定如何将项目正确编译为开发版本。每次我在 Azure 上启动开发版本的项目时,都会出现错误“无法连接到应用程序。请重试。” - 标头跟踪中的内部错误是:“

  1. 错误代码:1008

  2. 消息:“代理返回不成功状态代码InternalServerError”

我的项目结构如下:

|-- .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”文件....

由于我是这方面的初学者,所以请您理解,因为微软方面的描述通常过于笼统,无法使其功能适应项目的需求......有人可以帮助我吗?

node.js typescript azure botframework microsoft-teams
1个回答
0
投票

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

更改的结果将决定您是否看到错误输出或服务器启动。

© www.soinside.com 2019 - 2024. All rights reserved.