Teams 匯出 API 允許你匯出 Microsoft Teams 的 1:1、群組聊天、會議聊天及頻道訊息。 如果您的組織需要匯出 Microsoft Teams 訊息,您可以使用 Teams 匯出 API 來擷取。 聊天訊息代表頻道或聊天室中的單一聊天訊息。 聊天訊息可以是根聊天訊息,也可以是由聊天訊息中 replyToId 屬性定義的回覆線程的一部分。
以下是一些使用這些匯出 API 的範例:
範例 1:如果你在組織中啟用了 Microsoft Teams,並想透過程式化的方式將所有 Microsoft Teams 訊息匯出至日期範圍,方法是傳遞特定使用者或團隊的日期範圍。
範例 2:如果你想每天透過提供日期範圍來程式化匯出所有使用者或團隊訊息。 匯出 API 可檢索在指定日期範圍內建立或更新的所有訊息。
範例三:如果你想用程式方式匯出某個會議組織者的 Teams 會議錄影連結,然後再下載實際的錄音。
範例 4:如果你想用程式化匯出某個會議組織者的 Teams 會議逐字稿連結,然後再下載實際的逐字稿。
Teams 匯出 API 支援哪些功能?
Teams 訊息的批量匯出: 請參考 Teams 匯出 API 的限速限制。 有了這些限制,你應該能夠批量匯出 Teams 訊息。
Teams 訊息上限: 建議將 Teams 訊息 API 的 TOP 過濾限制設為 250,作為效能受限的最大上限。
應用程式背景:要呼叫 Microsoft Graph,您的應用程式必須從 Microsoft 身分識別平台取得存取權杖。 存取權杖包含關於你應用程式的資訊,以及它對透過 Microsoft Graph 可用資源和 API 所擁有的權限。 要取得存取權杖,你的應用程式必須在 Microsoft 身分識別平台註冊。 使用者或管理員必須授權它才能存取所需的 Microsoft Graph 資源。 如果你已經熟悉將應用程式整合到 Microsoft 身分識別平台以取得令牌,請參閱「下一步」章節,裡面有 Microsoft Graph 專屬的資訊與範例。
混合環境: 匯出 API 支援在混合環境 (本地 Exchange 與 Teams) 配置的使用者所發送的訊息。 任何由設定為混合環境的使用者發送的訊息,皆可透過匯出 API 存取。
使用者刪除的訊息: 使用者從 Teams 用戶端刪除的訊息,可透過匯出 API 在刪除後最多 21 天內存取。
訊息附件: 匯出 API 包含作為訊息一部分傳送的附件連結。 你可以透過匯出 API,取得訊息中附帶的檔案。
反應: 匯出 API 支援使用者在 Teams 訊息中發起的反應。 目前支持的反應有心、生氣、喜歡、難過、驚訝和笑。 除了反應之外,匯出 API 也支援反應編輯歷史,包含對訊息反應所做的變更與更新。
備註
目前 Export API 不支援以顏色變更自訂的反應。
共享頻道訊息: 匯出 API 支援從共享通道擷取訊息。
被刪除的隊伍: 匯出 API 支援 從刪除的 Teams 以及刪除的標準、私人和共享頻道擷取訊息,最長可從刪除當天起 30 天內完成。 30 天後,Teams 和頻道會被硬刪除,訊息也無法恢復。
刪除使用者:匯出 API 支援從刪除使用者起計 30 天內擷取訊息。 要查詢已刪除使用者名單,請參閱 已刪除項目。
非活躍使用者:匯出 API 支援從使用者非活躍起計 30 天內擷取訊息。 要查詢非活躍信箱清單,請參閱 「非活躍信箱」。
聊天訊息屬性: 請參閱 Teams Export API 支援的完整屬性清單。
控制訊息: 匯出 API 支援擷取控制訊息,並支援使用者產生的訊息。 控制訊息是系統產生的訊息,會出現在 Teams 用戶端上。 它們會載有重要資訊,例如「使用者 A 加入群組並分享了所有聊天紀錄」以及時間戳記。 系統訊息讓來電者能洞察團隊、頻道或聊天中發生的事件。 請參閱 Export API 目前支援的 控制訊息清單 。
備註
匯出 API 目前不支援與會議相關的控制訊息。
編輯的歷史: 如果你的 租戶設定有 Teams 保留政策,匯出 API 支援擷取個人與群組聊天的編輯紀錄,以及公開與共享頻道中的貼文與留言。
欲了解更多 Teams 保留政策,請參閱 「管理 Microsoft Teams 保留政策 」以了解更多細節。
會議記錄: 取得指定用戶為組織者的線上會議中的所有逐字稿。 此 API 目前僅支援私人排定會議。
了解更多關於 匯出會議逐字稿的資訊。
會議錄音: 取得指定用戶為主辦人的所有線上會議錄影。 此 API 目前僅支援私人排定會議。
了解更多關於 匯出會議錄音的資訊。
如何存取 Teams 匯出 API
範例一 是一個簡單的查詢,用來檢索使用者或團隊的所有訊息,無需任何篩選:
GET https://graph.microsoft.com/v1.0/users/{id}/chats/getAllMessagesGET https://graph.microsoft.com/v1.0/teams/{id}/channels/getAllMessages範例 2 是一個範例查詢,透過指定日期時間篩選器和前 50 則訊息,取得使用者或團隊的所有訊息:
GET https://graph.microsoft.com/v1.0/users/{id}/chats/getAllMessages?$top=50&$filter=lastModifiedDateTime gt 2020-06-04T18:03:11.591Z and lastModifiedDateTime lt 2020-06-05T21:00:09.413ZGET https://graph.microsoft.com/v1.0/teams/{id}/channels/getAllMessages?$top=50&$filter=lastModifiedDateTime gt 2020-06-04T18:03:11.591Z and lastModifiedDateTime lt 2020-06-05T21:00:09.413Z範例 3 是一個範例查詢,用來取得所有可用 Teams 會議錄影的連結。 支援日期範圍過濾。 支援類似聊天訊息的 TOP n 濾波器:
GET https://graph.microsoft.com/v1.0/users/{id}/onlineMeetings/getAllRecordings?$filter=MeetingOrganizer/User/Id eq ‘{id}’GET https://graph.microsoft.com/v1.0/users/{id}/onlineMeetings/getAllRecordings(meetingOrganizerUserId='{userId}',startDateTime={startDateTime},endDateTime={endDateTime})範例 4 是一個範例查詢,用來取得使用者所有可用 Teams 會議的逐字稿連結。 支援日期範圍過濾。 支援類似聊天訊息的 TOP n 濾波器:
GET https://graph.microsoft.com/v1.0/users/{id}/onlineMeetings/getAllTranscripts?$filter=MeetingOrganizer/User/Id eq ‘{id}’GET https://graph.microsoft.com/v1.0/users/{id}/onlineMeetings/getAllTranscripts(meetingOrganizerUserId='{userId}',startDateTime={startDateTime},endDateTime={endDateTime})範例 5 是一個範例鏈式查詢,先取得使用者所有可轉錄的 Teams 會議,然後取得所有可用的 AI 見解:
GET https://graph.microsoft.com/v1.0/users/{id}/onlineMeetings/getAllTranscripts?$filter=MeetingOrganizer/User/Id eq '{id}'接著,為上述請求回傳的每個
meetingIdAI 見解取得。GET https://graph.microsoft.com/v1.0/copilot/users/{id}/onlineMeetings/{meetingId}/aiInsights備註
如果有多個結果,API 會回傳下一頁連結的回應。 要取得下一組結果,請對 URL @odata.nextlink呼叫 GET 。 如果 @odata.nextlink 不存在或為空,則所有訊息都會被檢索。
備註
回應中的訊息順序不保證會依照任何日期時間排序,例如 createdDateTime 或 lastModifiedDateTime。
存取 Teams 匯出 API 的前提條件
Microsoft Graph 中存取敏感資料的 Microsoft Teams API 被視為受保護的 API。 只要符合無需 使用者即可存取 的條件,你可以呼叫這些 API。
應用程式權限用於沒有登入使用者在場時執行的應用程式。 只有管理員能批准應用程式權限。 需要以下權限:
Chat.Read.All:可存取所有一對一、群組聊天及會議聊天訊息。
ChannelMessage.Read.All:可存取所有頻道訊息。
User.Read.All:允許租戶存取使用者清單。
OnlineMeetingTranscript.Read.All:允許存取所有 1:n 排定 Teams 會議的逐字稿。
OnlineMeetingRecording.Read.All:允許存取所有 1:n Teams 排程會議的錄影。
Teams 匯出 API 的授權要求
匯出 API 透過模型查詢參數支援安全性與合規 (S+C) 及一般使用情境。 S+C 情境 (Model A) 包含種子容量,需訂閱 E5 訂閱;一般使用情境 (Model B) 則適用於所有訂閱,僅供消費。 欲了解更多關於種子容量與消費費用的資訊,請參閱 Microsoft Graph Teams API 的授權與付款要求。
對於 Beta API 目前沒有 Model A 或 Model B 的授權或使用強制執行。 不過,未來可能會有執照或使用執法。
S+C/Model A 情境
這些情境僅限於執行安全及/或合規功能的應用程式。 使用者必須擁有特定的 E5 授權才能使用此功能並獲得種子容量。 種子容量是每位用戶計算,按月計算,並在租戶層級彙總。 超出種子容量的使用,應用程式擁有者需支付 API 使用費用。 Model A 只能存取擁有 E5 授權用戶的訊息。
| 合作夥伴名稱 | 合作夥伴解決方案 |
|---|---|
|
Microsoft Teams 歸檔與合規 |
|
Microsoft Teams 的 Proofpoint 內容擷取 |
一般使用/模型B情境
適用於所有非 S+C 相關情境,無需授權或種子容量限制。 當使用量表開放時,應用程式擁有者會對所有每月的 API 呼叫收費。
以下合作夥伴皆獲得認證。 您的公司可以選擇與這些合作夥伴的任何組合合作。
| 合作夥伴名稱 | 合作夥伴解決方案 |
|---|---|
|
Microsoft Teams 備份與恢復 |
|
Microsoft Teams 備份與恢復 |
後續步驟
如果您是想加入認證計畫的廠商,請填寫 此表 作為下一步。 如果你需要更多背景和細節,可以寄信給 MS Teams 生態系統團隊 (TeamsCategoryPartner@microsoft.com) 。
評估模式 (預設)
沒有任何模型宣告能限制每個申請應用程式對 API 的使用權限存取,以便評估。
JSON 表示法
以下範例是聊天資源的 JSON 表示:
命名空間:microsoft.graph
{ "id": "string (identifier)", "replyToId": "string (identifier)", "from": {"@odata.type": "microsoft.graph.identitySet"}, "etag": "string", "messageType": "string", "createdDateTime": "string (timestamp)", "lastModifiedDateTime": "string (timestamp)", "deletedDateTime": "string (timestamp)", "subject": "string", "from": { "application": null, "device": null, "conversation": null, "user": { "id": [{"@odata.type": "microsoft.graph.user"}], "displayName": "User Name", "userIdentityType": "aadUser" } }, "body": {"@odata.type": "microsoft.graph.itemBody"}, "summary": "string", "chatId": [{"@odata.type": "microsoft.graph.chat"}] "attachments": [{"@odata.type": "microsoft.graph.chatMessageAttachment"}], "mentions": [{"@odata.type": "microsoft.graph.chatMessageMention"}], "importance": "string", "locale": "string", }備註
欲了解更多 chatMessage 資源資訊,請參閱 chatMessage 資源類型 文章。
以下範例為記錄資源的 JSON 表示法:
命名空間:microsoft.graph
{ "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#Collection(meetingRecording)", "@odata.count": 2, "@odata.nextLink": "https://graph.microsoft.com/v1.0/users('{userId}')/onlineMeetings/getAllRecordings?$filter=MeetingOrganizer%2fUser%2fId+eq+%27{userId}%27&$skiptoken=MSMjMCMjTkNaYVNIQjVVbXRPYWxaV1dscGFWVGg1V2pOb1IxUXpRWGxrUm1oTFVrWmtTV1ZyYkhwUlZVWm9UMWR3VEdWWGRFTlJWVVpDVVZFOVBRPT0%3d", "value": [ { "@odata.type": "#microsoft.graph.meetingRecording", "id": "6263af16-b660-41d0-a17b-83fbd15a39c7", "meetingId": "MSoxMjczYTAxNi0yMDFkRLTmOTUtODA5My0xYjdmOTliM2VkZWIqMCoqMTk6bWVldGluZ19aR1F3WTJZNE9XTXROekppWlMwME1XWTRMVGc0TWpBdE1BBXdOV1kzWlRsak9UTXlAdGhyZWFkLnYy", "meetingOrganizerId": "{userId}", "createdDateTime": "2022-08-03T20:43:36.2573447Z", "recordingContentUrl": "https://graph.microsoft.com/v1.0/users/{userId}/onlineMeetings/MSoxMjczYTAxNi0yMDFkLTRmOTUtODA4My0xYjdmOTliM2VkZWIqMCoqMTk6bWVldGluZ19aR1F3WTJZNE9XTXROekppWlMwME1XWTRMVGc0TWpBdE1ERXdOV1kzWlRsak9UTXlAdGhyZWFkLnYy/recordings/MSMjMCMjMGFjNmUwZTgtYmZjYy00NDQxLTk2MGYtZjllNjVhNjI0NzBh/content" }, { "@odata.type": "#microsoft.graph.meetingRecording", "id": "{recordingId}", "meetingId": "{meetingId}", "meetingOrganizerId": "{userId}", "createdDateTime": "2022-08-03T20:44:11.2635254Z", "recordingContentUrl": " https://graph.microsoft.com/v1.0/users/{userId}/onlineMeetings/{meetingId}/recordings/{recordingId}/content" }, ] }其中:
<id>代表單一錄音。<meetingId>代表會議或通話識別碼。<meetingOrganizer/user/id>代表會議的組織者。<createdDateTime>表示會議開始時間。<recordingContentUrl>value 表示錄製內容的網址。錄音為MP4格式。
錄音內容本身在磁碟上的平均大小約為350 MB,這是根據我們看到的會議平均值,時間介於30分鐘到60分鐘之間。
結果不保證會依 。
createdDateTime然而,當單一會議同時有多個錄音時,它們的價值相同meetingId。 此外,多段錄音的條目也正確排序,適合該會議。結果保證僅在相關會議錄影公開後才會公布。 換句話說,來電者不需要其他輪詢來判斷可用性。
根據 Teams 匯出 API 中的現行模式,支援瀏覽結果頁碼。 分頁透過該屬性在回應中的存在
@oData.nextLink來支持。 nextLink 屬性包含一個skipToken值,如下表所示。 若不skipToken存在,表示目前批次中沒有更多結果可檢索:請求 回應 @nextLink 註解 /getAllRecordings計數:10 ?skipToken=ABC初始請求 skipToken/getAllRecordings?skipToken=ABC計數:10 ?skipToken=DEFSkipToken已退回,請求下一頁/getAllRecordings?skipToken=DEF計數:7 不 skipToken,沒有更多資料可用$top參數也依據 Teams 匯出 API 的現行模式支援。DeltaToken支援變更追蹤與同步情境。 如需現有 delta 查詢的概述與範例,請參見 「Use delta query to tracking in Microsoft Graph Data 的變更」。以下 API 可用於取得所選
userId、meetingId、 的實際記錄內容,並recordingId可在 GETgetAllRecordingsAPI 的回應中取得。 它會回傳錄音內容:GET users('{userId}')/onlineMeetings('{meetingId}')/recordings('{recordingId}')/content
以下範例為逐字稿資源的 JSON 表示法:
命名空間:microsoft.graph
{ "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#Collection(callTranscript)", "@odata.count": 2, "@odata.nextLink": "https://graph.microsoft.com/v1.0/users('{userId}')/onlineMeetings/getAllTranscripts?$filter=MeetingOrganizer%2fUser%2fId+eq+%27{userId}%27&$skiptoken=MSMjMCMjTkNaYVNIQjVVbXRPYWxaV1dscGFWVGg1V2pOb1IxUXpRWGxrUm1oTFVrWmtTV1ZyYkhwUlZVWm9UMWR3VEdWWGRFTlJWVVpDVVZFOVBRPT0%3d", "value": [ { "@odata.type": "#microsoft.graph.callTranscript", "id": "MSMjMCMjMGFjNmUwZTgtYmZjYy00NDQxLTk2MGYtZjllNjVhNjI0NzBh", "meetingId": "MSoxMjczYTAxNi0yMDFkLTRmOTUtODA4My0xYjdmOTliM2VkZWIqMCoqMTk6bWVldGluZ19aR1F3WTJZNE9XTXROekppWlMwME1XWTRMVGc0TWpBdE1ERXdOV1kzWlRsak9UTXlAdGhyZWFkLnYy", "meetingOrganizerId": "{userId}", "transcriptContentUrl": "https://graph.microsoft.com/v1.0/users/{userId}/onlineMeetings/MSoxMjczYTAxNi0yMDFkLTRmOTUtODA4My0xYjdmOTliM2VkZWIqMCoqMTk6bWVldGluZ19aR1F3WTJZNE9XTXROekppWlMwME1XWTRMVGc0TWpBdE1ERXdOV1kzWlRsak9UTXlAdGhyZWFkLnYy/transcripts/MSMjMCMjMGFjNmUwZTgtYmZjYy00NDQxLTk2MGYtZjllNjVhNjI0NzBh/content", "createdDateTime": "2022-08-03T20:43:36.6248355Z" }, { "@odata.type": "#microsoft.graph.callTranscript", "id": "{transcriptId}", "meetingId": "{meetingId}", "meetingOrganizerId": "{userId}", "transcriptContentUrl": "https://graph.microsoft.com/v1.0/users/{userId}/onlineMeetings/{meetingId}/transcripts/{transcriptId}/content", }, ] }其中:
<id>代表單一錄音。<meetingId>代表會議或通話識別碼。<meetingOrganizer/user/id>代表會議的組織者。<createdDateTime>表示會議開始時間。<transcriptContentUrl>value 表示逐字稿內容的網址。文字稿內容預設為VTT格式。 但使用 Accept 標頭值
application/vnd.openxmlformats-officedocument.wordprocessingml.document,也可以取得 DOCX 格式。JSON/VTT 格式的逐字稿內容平均大小約為 300 KB,這是根據我們看到的會議平均值,時間介於 30 分鐘到 60 分鐘之間。
結果不保證會依 。
createdDateTime然而,當單一會議同時有多個錄音時,它們的價值相同meetingId。 此外,多段錄音的條目也正確排序,適合該會議。結果保證僅在相關會議錄影公開後才會公布。 換句話說,來電者不需要其他輪詢來判斷可用性。
依照 Teams 匯出 API 中的現行模式,支援分頁瀏覽結果。 分頁透過回應中屬性
@oData.nextLink的存在來支持。 該nextLink屬性包含一個skipToken值,如下表所示。 若不skipToken存在,表示目前批次中沒有更多結果可檢索:請求 回應 @nextLink 註解 /getAllTranscripts計數:10 ?skipToken=ABC初始請求 skipToken/getAllTranscripts?skipToken=ABC計數:10 ?skipToken=DEFSkipToken已退回,請求下一頁/getAllTranscripts?skipToken=DEF計數:7 不 skipToken,沒有更多資料可用$top參數也依據 Teams 匯出 API 的現行模式支援。DeltaToken支援變更追蹤與同步情境。 如需現有 delta 查詢的概述與範例,請參見 「Use delta query to tracking in Microsoft Graph Data 的變更」。以下 API 可用來取得 GET getAllTranscripts API 回應中所選 userId、meetingId 及 transcriptID 的實際逐字稿內容。 它會回傳錄音內容。
GET users('{userId}')/onlineMeetings('{meetingId}')/transcripts('{transcriptId}')/content
欲了解更多資訊,請參閱 使用 Graph API 取得逐字稿。
匯出 API 過濾器
Teams Graph Service 託管的匯出 API 會透過 users/{userId}/chats/getAllMessages從 Substrate 使用者信箱接收所有使用者訊息。 匯出 API 會擷取使用者已發送與接收的訊息,導致在呼叫該 API 時,為聊天串中所有使用者匯出重複訊息。
Export API 有篩選參數,有助於優化聊天串回傳的訊息。 API GET 支援新的過濾參數,允許根據發送的使用者、機器人以及應用程式和系統事件訊息提取訊息。 過濾器參數支援以下訊息:
使用者 (多個支援於同一請求) 的使用者 ID。
應用程式 (機器人、連接器等等) 。
除了 emailUser 和 unknownFutureValue 之外,所有 userIdentityTypes 都不在。
系統事件訊息 (控制訊息) 。
這些參數是請求 $filter. 的一部分。 如果請求中沒有這些參數,則會回傳來自指定使用者聊天中所有使用者的訊息。
支援的過濾情境如下:
$filter=from/application/applicationIdentityType eq '<appType>' (bots/tenantBots/connectors, etc.)
$filter=from/user/id eq '<oid>' (any number of id filters)
$filter=from/user/userIdentityType eq '<userIdentityType>'
$filter=from/application/applicationIdentityType eq '<appType>' or from/user/id eq '<oid>' (sent by app or userid)
$filter=from/application/applicationIdentityType eq '<appType>' or from/user/userIdentityType eq 'anonymousGuest' (sent by app or anonymous)
$filter=from/application/applicationIdentityType eq '<appType>' or from/user/userIdentityType eq 'federatedUser' (sent by app or federated)
$filter=from/application/applicationIdentityType eq '<appType>' or from/user/userIdentityType eq 'anonymousGuest' or from/user/userIdentityType eq 'federatedUser' (sent by app, anonymous or federated)
$filter=from/user/id eq '<oid>' or from/user/userIdentityType eq 'anonymousGuest' (sent by any number of userid or anonymous)
$filter=from/user/id eq '<oid>' or from/user/userIdentityType eq 'federatedUser' (sent by any number of userid or federated)
$filter=from/application/applicationIdentityType eq '<appType>' or from/user/id eq '<oid>' or from/user/userIdentityType eq 'anonymousGuest' or from/user/userIdentityType eq 'federatedUser' (sent by any number of userid or federated or anonymous)
$filter=from/application/applicationIdentityType eq '<appType>' or from/user/id eq '<oid>' or from/user/userIdentityType eq 'anonymousGuest' or from/user/userIdentityType eq 'federatedUser' (sent by any number of userid or federated or anonymous) or messsageType eq 'systemEventMessage'
(<any of the previous filters>) and (lastModifiedDateTime+gt+<date>+and+lastModifiedDateTime+lt+<date>)
若
from/user/id eq ‘{oid}’存在,查詢會回傳指定使用者所發送的訊息。查詢會回傳由參與用戶聊天的聯邦用戶發送的訊息(如果
from/user/userIdentityType eq ‘federatedUser’存在)。若
from/application/applicationIdenitytyType eq '{appType}'存在,查詢會回傳指定應用程式類型所發送的訊息。若
messageType eq 'systemEventMessage'存在,則查詢會回傳系統發送的訊息。
這些參數可以透過 OR 運算子或與參數結合 lastModifiedDateTime$filter 來組合。
Teams 匯出保留訊息的 API
如果你的 租戶設定了 Teams 保留政策,Export API 支援從保留資料夾擷取訊息,用於 個別 & 群組聊天,以及 在公開 & 共享頻道中發表、留言。
如何存取保留訊息 API
範例一 是一個簡單的查詢,用以取得使用者所有保留的訊息:
GET https://graph.microsoft.com/v1.0/users/8b081ef6-4792-4def-b2c9-c363a1bf41d5/chats/getAllRetainedMessages範例二 是一個簡單的查詢,用來取得團隊中所有保留的訊息:
GET https://graph.microsoft.com/v1.0/teams/8b081ef6-4792-4def-b2c9-c363a1bf41d5/channels/getAllRetainedMessages
getAllRetainedMessages API 支援什麼
- 訊息會被聊天室或頻道中的使用者軟刪除若使用者處於等待狀態,刪除期限超過 21 天後,訊息可透過 API 匯出。
- 訊息會被聊天室或頻道中的使用者軟刪除如果有有效的保留政策設定,刪除期限超過 21 天後,訊息可以透過 API 匯出。
- 訊息由使用者在聊天室或頻道中編輯 如果有有效的保留政策設定,之前編輯過的訊息版本可以被匯出。
備註
/getAllRetainedMessages API 允許從刪除當天起最多 30 天內擷取已刪除的通道訊息。 30 天後,團隊和頻道會被硬刪除,訊息也無法被取回。
Microsoft 365 Copilot 互動
了解更多關於 aiInteractionHistory:getAllEnterpriseInteractions 可匯 出副駕駛互動。