【问题标题】:Microsoft Teams Bot-task module with arbitrary iframe-able web content?具有任意 iframe 网络内容的 Microsoft Teams 机器人任务模块?
【发布时间】:2019-12-10 22:11:29
【问题描述】:

我有一个 C# 机器人,它已经使用 SDK 使用自适应卡创建任务模块,但我想尝试使用任意 Web 内容。我已经创建了这样的继续响应(只是将可访问 Internet 的 IIS 页面作为 URL 进行测试):

 {
    "Status": 200,
    "Body": {
        "task": {
            "value": {
                "title": "webTest",
                "url": "https://icechris.computertalkrnd.com/iisstart.htm",
                "card": null,
                "fallbackUrl": "https://icechris.computertalkrnd.com/iisstart.htm",
                "completionBotId": "BOT_ID"
            },
            "type": "continue"
        }
    }
}

如果我返回一张自适应卡片,我的回复如下所示:

{
    "Status": 200,
    "Body": {
        "task": {
            "value": {
                "title": null,
                "height": null,
                "width": null,
                "url": null,
                "card": {
                    "contentType": "application/vnd.microsoft.card.adaptive",
                    "contentUrl": null,
                    "content": {
                        "type": "AdaptiveCard",
                        "version": "1.0",
                        "body": [CARD BODY]
                    },
                    "name": null,
                    "thumbnailUrl": null
                },
                "fallbackUrl": null,
                "completionBotId": null
            },
            "type": "continue"
        }
    }
}

渲染效果很好(为简洁起见,我剪掉了卡片 json)。

我的机器人清单中有以下有效域:

"validDomains": [ "*.computertalkrnd.com", "icechris.computertalkrnd.com", "computertalkrnd.com", "computer-talk.com" ]

是否不可能让任务模块显示像这样的任意 Web 内容,或者我在响应中还缺少其他内容?我注意到没有为自适应卡设置completionBotID,但是对于网络案例,无论我设置与否都没有区别。

我确实在 Teams 中调出了开发工具,并在测试调用时注意到了这一点:

2019-11-28T21:32:51.245Z AppsService: getInstalledAppForUser - Invalid appId specified
(anonymous) @ angular.min.js:113
e.logMessage @ msteams-web-ng1-services.min.js:1
e.error @ msteams-web-ng1-services.min.js:1
t.getInstalledAppForUser @ msteams-web-ng1-services.min.js:1
t.getAppDefinitionFromCurrentContext @ msteams-web-ng1-services.min.js:1
t.getAppDefinitionFromCurrentContext @ msteams-web-ng1-services.min.js:1
t @ msteams-web-ng1.min.js:1
t @ msteams-web-ng1.min.js:1
invoke @ angular.min.js:36
R.instance @ angular.min.js:84
n @ angular.min.js:59
g @ angular.min.js:53
g @ angular.min.js:53
g @ angular.min.js:53
(anonymous) @ angular.min.js:52
(anonymous) @ 2-vendor.min-40cd418b.js:138
(anonymous) @ angular.min.js:154
e @ angular.min.js:40
(anonymous) @ angular.min.js:43
setTimeout (async)
Zf.k.defer @ angular.min.js:43
f @ angular.min.js:154
(anonymous) @ 2-vendor.min-40cd418b.js:138
f @ angular.min.js:126
(anonymous) @ angular.min.js:126
$eval @ angular.min.js:141
$digest @ angular.min.js:138
f.$digest @ msteams-web-ng1-services.min.js:1
$apply @ angular.min.js:141
(anonymous) @ angular.min.js:92
x @ angular.min.js:96
w.onload @ angular.min.js:97
load (async)
(anonymous) @ angular.min.js:97
r @ angular.min.js:93
g @ angular.min.js:90
f @ angular.min.js:126
(anonymous) @ angular.min.js:126
$eval @ angular.min.js:141
$digest @ angular.min.js:138
f.$digest @ msteams-web-ng1-services.min.js:1
(anonymous) @ angular.min.js:141
e @ angular.min.js:40
(anonymous) @ angular.min.js:43
setTimeout (async)
Zf.k.defer @ angular.min.js:43
$evalAsync @ angular.min.js:141
(anonymous) @ angular.min.js:125
g @ angular.min.js:126
then @ angular.min.js:127
t.markConversationAsRead @ msteams-web-ng1.min.js:1
(anonymous) @ msteams-web-ng1.min.js:1
$emit @ angular.min.js:143
n.$emit @ eventingService.min.js:1
a.invokeAppInUseEventIfNeeded @ appStateService.min.js:1
a.setPageVisible @ appStateService.min.js:1
(anonymous) @ appStateService.min.js:1
$emit @ angular.min.js:143
n.$emit @ eventingService.min.js:1
(anonymous) @ desktopEventsService.min.js:1
listenerWrapper @ C:\Users\cbardon\AppData\Local\Microsoft\Teams\current\resources\app.asar\lib\renderer\ipcRenderer.js:335
emit @ events.js:182
angular.min.js:113 TypeError: Cannot read property 'validDomains' of undefined

不过,看看自适应卡的响应,我看不出两者之间有什么明显不同。

【问题讨论】:

  • 是的,您可以在任务模块中嵌入任意 Web 内容,但 url 应该是 Iframe-able。通过 BOT 打开任务模块时需要提供 Bot ID。请查看Task Module with BotTask Module C# sample Code。如果您遇到任何问题,请告诉我
  • 感谢您的评论。我确实验证了内容可以被 iframed,并且我确实在响应中设置了 completionBotId。响应负载是否需要设置其他内容?
  • 获取/任务和任务/提交操作需要完成机器人 ID。如果您在任务模块中进行链接,则需要传递您定义的操作,以便实现链接。

标签: microsoft-teams


【解决方案1】:

所以我在我的机器人中完全没有改变,但这开始工作了。第一篇文章中的代码是相同的(带有机器人 ID)。唯一不同的是 Teams 客户端更新,所以可能在应用程序中修复了一些问题?

您拥有 Microsoft Teams 版本 1.2.00.34111(64 位)-E。最后更新于 2019 年 12 月 9 日。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-22
    • 2021-06-08
    • 1970-01-01
    • 1970-01-01
    • 2021-03-23
    • 1970-01-01
    • 2021-01-02
    相关资源
    最近更新 更多