发布到Microsoft Teams连接器Webhook时,消息的长度能有多长?

6

我正在将CI/CD系统的结果/日志发布到Microsoft Teams。在处理一些具有较长结果的失败构建时,我遇到了由Webhook URL返回的以下错误:https://outlook.office.com/webhook/bb6bfee7-1820-49fd-b9f9-f28f7cc679ff@<uuid1>/IncomingWebhook/<id>/<uuid2>

Webhook message delivery failed with error: Microsoft Teams endpoint returned HTTP error 413 with ContextId tcid=3626521845697697778,server=DB3PEPF0000009A,cv=BmkbJ1NdTkv1EDoqr7n/rg.0..

根据我的观察,这是由于发布到 Teams webhook URL 的负载过长所致。
当 JSON 负载超过 18000 个字符时,初始的复杂信息(包括部分、标题、子标题、格式化链接、<pre> 格式文本等)会失败。
通过对负载进行一些测试,我发现从原始 JSON 负载中删除的格式化内容越多,Teams 消息就可以越长。我能够发布的最长消息为(根据 cu cURL):Content-Length: 20711。此消息的 JSON 负载如下:
{"themeColor":"ED4B35","text":"a....a"}

JSON格式中的空格似乎不计算在内(即添加空格不会减少我可以发送到Teams Webhook的最大消息长度)。

供参考,初始消息看起来类似于这样:

{
    "themeColor": "ED4B35",
    "summary": "iris-shared-libs - shared-library-updates - failure",
    "sections": [
        {
            "activityTitle": "Job: [iris-shared-libs](https://my.concourse.net/teams/hsm/pipelines/iris-shared-libs) - [shared-library-updates #89](https://my.concourse.sccloudinfra.net/teams/hsm/pipelines/iris-shared-libs/jobs/shared-library-updates/builds/89) (FAILURE)",
            "activityImage": "https://via.placeholder.com/200.png/ED4B35/FFFFFF?text=F",
            "facts": [
                {
                    "name": "Failed step",
                    "value": "update-shared-libraries"
                }
            ]
        },
        {
            "text": "Trying a new strategy with gated versioned releases",
            "facts": [
                {
                    "name": "Repository",
                    "value": "[iris-concourse-resources](https://my.git.com/projects/IRIS/repos/iris-concourse-resources)"
                },
                {
                    "name": "Commit",
                    "value": "[2272145ddf9285c9933df398d63cbe680a62f2b7](https://my.git.com/projects/IRIS/repos/iris-concourse-resources/commits/2272145ddf9285c9933df398d63cbe680a62f2b7)"
                },
                {
                    "name": "Author",
                    "value": "me@company.com"
                }
            ]
        },
        {
            "activityTitle": "Job failed step logs part 1",
            "text": "<pre>...very long log text goes here ...</pre>"
        }
    ]
}

微软团队连接器Webhook发布的消息的实际最大长度是多少?

官方页面没有提到。在底部的反馈部分仍有一个关于“消息大小限制?”的未解决问题,反馈为:“我们目前正在调查此问题。”


这里的一个关键观察是Webhook端点返回状态码200,这些错误消息是响应正文的一部分。即使在速率限制的情况下也是如此(https://learn.microsoft.com/en-us/microsoftteams/platform/webhooks-and-connectors/how-to/connectors-using),在速率限制部分有一个代码片段,其中说我们需要检查内容正文。 - Devesh
1
也许这可以帮助 - https://stackoverflow.com/questions/51957658/incoming-webhook-request-size-limits - Shail
1个回答

6

从我目前所做的测试来看,一些观察到的限制(如果独立于服务器)大致上是基于JSON消息有效负载(结构和格式)在18000到40000之间(长度低于18000永远不会破坏,高于40000永远会破坏)。

  • 使用情况18000:一个长文本用于一个部分
  • 使用情况40000:600个非常简短名称和空字符串作为值的事实

而删除JSON有效负载的一个片段并在另一个JSON值中添加相同数量的字符将不能给您相同的最大限制。

我也观察到了最大节的软限制(消息被截断,但没有错误):10。从第11个开始的部分将被丢弃。


在安卓手机应用中,我们可以看到超过10个部分的消息而不会被截断。而在桌面应用中,我们曾经看到过截断的情况。 - Devesh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接