【问题标题】:Can my bot server retrieve any information in the app manifest?我的机器人服务器可以检索应用清单中的任何信息吗?
【发布时间】:2022-01-05 15:59:09
【问题描述】:

我正在向现有团队应用程序添加一个新的静态选项卡。 其中一项新功能是聊天将发布到静态选项卡的深层链接。当我考虑部署时,这会造成两难境地。

显然我不能把我的整个应用程序放在这里,但我们可以假设这样的情况:

我在 App Store 中的生产清单如下所示:

{
    "$schema": "https://developer.microsoft.com/en-us/json-schemas/teams/v1.9/MicrosoftTeams.schema.json",
    "manifestVersion": "1.9",
    "version": "2.0.1",
    "id": "23232322-7676-4848-5555-44444444444",
    "packageName": "xxxxx",
    "developer": {
        "name": "xxxxx",
        "websiteUrl": "https://www.xxxx.com/",
        "privacyUrl": "https://www.xxxx.com/legal/privacy",
        "termsOfUseUrl": "https://www.xxxxx.com/legal/privacy"
    },
    "icons": {
        "color": "color.png",
        "outline": "outline.png"
    },
    "name": {
        "short": "abra",
        "full": "abra cadabra"
    },  
    "description": {
        "short": "short",
        "full": "full"
    },
    "accentColor": "#FFFFFF",
    "bots": [
        {
            "botId": "11111111-2222-3333-4444-555555555555",
            "scopes": [
                "personal"
            ],
            "commandLists": [
                {
                    "scopes": [
                        "personal"
                    ],
                    "commands": [
                        {
                            "title": "Test",
                            "description": "Test"
                        }
                    ]
                }
            ],
            "supportsFiles": false,
            "isNotificationOnly": false
        }
    ],
    "permissions": [
        "identity",
        "messageTeamMembers"
    ],
    "validDomains": [
        "token.botframework.com",
        "teams.microsoft.com",
        "*.ngroc.io"
    ]
}

在我的机器人中响应“测试”命令,我返回一条简单的文本消息,即

return await step.prompt('textPrompt', { prompt: 'In the next version we will have a test tab' })

现在正在开发中,我已将以下部分添加到清单中(在“bots”之后)

    "staticTabs": [
        {
            "entityId": "conversations",
            "scopes": [
                "personal"
            ]
        },
        {
            "entityId": "testtab”,
            "contentBotId": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
            "name": “Go To Test Tab",
            "scopes": [ "personal" ]
        },
        {
            "entityId": "about",
            "scopes": [
                "personal"
            ]
        }
    ],

并且我已经将版本的值从 2.0.1 更新为 2.1.0

现在,为了响应“测试”消息,我返回了一个如下所示的自适应卡片:

{
  type: 'AdaptiveCard',
  version: '1.3',
  body: [],
  actions: [
    {
      type: 'Action.OpenUrl',
      title: 'Go To Test Tab',
      url: ‘https://teams.microsoft.com/l/entity/23232322-7676-4848-5555-44444444444/testtab’
    }
  ]
}

这很好用,当我按下“转到测试选项卡”时,它会根据需要打开测试选项卡。

我的问题在于部署。 如果我将我的新清单提交到 App Store,而不更新我的生产服务器,那些测试新版本的人将继续收到消息“在下一个版本中,我们将有一个测试选项卡”并且缺少指向新选项卡的链接。

如果我现在更新我的生产服务器,在 App Store 中更新之前,我的当前用户将获得带有按钮的自适应卡,如果他们按下它将失败。

显然,这些选项都不好。

理想情况下,我的回答应该是这样的:

If tabExists() {
  Return {… the adaptive card }
Else {
   return await step.prompt('textPrompt', { prompt: 'In the next version we will have a ‘test tab })
}

但是,我不知道如何编写“tabExists()” - 我在想也许有某种方法可以从机器人清单或静态选项卡列表中访问版本号,并使用该信息,但是我很乐意提供其他建议。

【问题讨论】:

  • 能否请您详细说明您的要求并分享重现步骤,以便我们可以从头开始尝试。
  • 我想做的是这样的:
  • (我无法格式化评论所以我在上面添加了一些伪代码,我希望澄清)
  • @Ari Unikoski - 您能否详细说明您的要求并分享添加选项卡的正确复制步骤。“向现有团队应用程序添加新的静态选项卡,聊天将发布指向静态选项卡”。如果可能的话,你能分享一下截图吗?
  • @AriUnikoski - 请确认您的问题是否已解决或仍在寻求帮助?

标签: tabs bots microsoft-teams manifest adaptive-cards


【解决方案1】:

我们可以使用以下 Graph API 或 SDK 方法获取清单版本: https://docs.microsoft.com/en-us/graph/api/appcatalogs-list-teamsapps?view=graph-rest-1.0&tabs=http#example-4-list-applications-with-a-given-id-and-return-the-submission-review-state

因此,在发送自适应卡片或消息之前,您可以设置一个自定义条件来检查清单版本并相应地发送消息。

【讨论】:

    【解决方案2】:

    您可以按照 Chetan 的解释检查清单版本,我尝试了相同的方法并认为它实际上不是最好的主意。

    拥有“生产”和“测试”服务器或类似的东西总是最好的做法。

    让不同的清单版本指向同一个服务器并运行检查您所使用的版本很可能迟早会导致问题。 有时我什至会运行 3 个不同的实例(prod、staging、test)来尝试各种构建和事物。

    您可以在代码中检查这一点,但 imo 不建议这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-25
      • 2020-11-17
      • 1970-01-01
      • 2017-07-19
      • 2023-03-28
      • 1970-01-01
      • 2012-12-13
      • 1970-01-01
      相关资源
      最近更新 更多