前兩篇文章介紹了如何發送 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 內容即可。