Skip to the content.

发送ActivityFeed的隐藏功能

前两篇文章介绍了如何发送 activity notification,这篇文章主要介绍两个隐藏功能,实际上所谓的隐藏功能是指大家在阅读官方文档是会忽略的两个点,但是实际上也是很实用的两个功能点。

text 类型的 topic

之前文章中提到我们的 activity notification 支持三种类型,他们分别的url是:

POST https://graph.microsoft.com/beta/chats/{chat-id}/sendActivityNotification
POST https://graph.microsoft.com/beta/teams/{teamId}/sendActivityNotification
POST https://graph.microsoft.com/beta/users/{userId}/teamwork/sendActivityNotification

他们的http request body基本类似:

{
    "topic": {
        "source": "entityUrl",
        "value": "https://graph.microsoft.com/beta/users/{user-id}/teamwork/installedApps/{installation-id}"
    },
    "activityType": "taskCreated",
    "previewText": {
        "content": "New Task Created"
    },
    "templateParameters": [
        {
            "name": "taskId",
            "value": "Task 342342"
        }
    ]
}

区别在于不同的类型,他们对应的topic里的value的格式不同。实际上 Teams 的 Graph API 还给我们提供了一种通用的 topic 类型:text,如下:

{
    "topic": {
        "source": "text",
        "value": "Deployment Approvals Channel",
        "webUrl": "https://teams.microsoft.com/l/message/19:448cfd2ac2a7490a9084a9ed14cttr78c@thread.skype/1605223780000?tenantId=c8b1bf45-3834-4ecf-971a-b4c755ee677d&groupId=d4c2a937-f097-435a-bc91-5c1683ca7245&parentMessageId=1605223771864&teamName=Approvals&channelName=Azure%20DevOps&createdTime=1605223780000"
    },
    ...
}

可以看到,在 source 字段指定 text,然后在 value 里填入你想要的任何文字内容,再加一个 webUrl 就可以了。需要注意的是,在这种模式下, webUrl 是必须的。

有了这种类型,实际上你就可以推送任何内容了,不再局限于 team 里的某个 resource。

Activity Notification的修改

在一个推送的请求里,实际上还有一个隐藏的属性 chainId

{
    "topic": { ... },
    "activityType": "...",
    "previewText": { ... },
    "templateParameters": [ ... ],
    "chainId": 3279238
}

chainId 是一个64位的整数,来唯一的指定你这次推送的id,如果你需要修改你之前推送的notification内容,可以再次调用 graph api,只要传入一样的 chainId 就可以了,就可以将之前的notificaiton更新。

也就是说如果你的 app 需要更新之前发的 notification 内容,那你在发推送的时候需要生成一个唯一的64位整数,并且保存下来,下次要更新的时候再查询到那个id,并用它再发送新的 notification 内容即可。

Written on June 16, 2021