全部產品
Search
文件中心

Intelligent Media Services:如何擷取歷史聊天記錄

更新時間:Oct 30, 2025

本文將介紹如何擷取訊息對話的歷史聊天記錄,以及如何在訊息對話中擷取音視訊通話的歷史聊天記錄。

功能說明

在AI即時互動中,SessionID用於標識使用者與智能體之間的對話關係,從而確保每一次互動均能被系統完整記錄與追溯。藉助這一獨特標識,系統能夠精準識別並整理同一使用者在不同時間發起的多輪對話,形成連貫且清晰的聊天脈絡。此外,您也可以通過SessionID關聯使用者與通話類型智能體以及對話類型智能體之間的所有聊天記錄。

擷取訊息對話歷史聊天記錄

商務程序

當一個使用者與智能體啟動新的對話時,即使該使用者在不同時間段或不同裝置上與智能體進行對話,仍將通過同一個SessionID進行關聯。SessionID的產生及其與使用者之間的對應關係由業務方自我維護。

代碼實現

阿里雲為您提供了通過調用AICallKit SDK介面實現以及通過OpenAPI兩種方式擷取歷史聊天記錄。

通過AICallKit SDK介面擷取

  1. 業務方自行產生SessionID,在調用ARTCAIChatEngine.startChat()方法時將SessionId傳入。

  2. 建立ARTCAIChatMessageListRequest請求對象,設定擷取聊天記錄的相關參數,比如開始/結束時間、分頁大小、分頁數、升降序等。

  3. 調用ARTCAIChatEngine.queryMessageList()方法,擷取聊天記錄,其調用範例程式碼如下:

Android
1.建立ARTCAIChatEngine對象,設定SessionID
//SessionID業務方自行產生,如果為空白,則使用userId_agentId作為唯一標識
String mSessionId = "XXX";
//使用者ID,業務系統使用者唯一標識ID  
String mUserId = "XXX";
//訊息對話的智能體ID,在AI即時互動好控制台查看
String mAgentId = "XXX"
ARTCAIChatEngine mChatEngine = new ARTCAIChatEngineImpl(currentContext);
mChatEngine.startChat(
                new ARTCAIChatEngine.ARTCAIChatUserInfo(mUserId, ""),
                new ARTCAIChatEngine.ARTCAIChatAgentInfo(mAgentId), mSessionId);

2.建立ARTCAIChatMessageListRequest請求對象,設定擷取聊天記錄的相關參數
long endTime = System.currentTimeMillis() / 1000;
ARTCAIChatEngine.ARTCAIChatMessageListRequest messageListRequest =
                    new ARTCAIChatEngine.ARTCAIChatMessageListRequest(0, endTime, 1, 10, true);

3.調用ARTCAIChatEngine的queryMessageList方法,擷取聊天記錄
mChatEngine.queryMessageList(messageListRequest, new ARTCAIChatEngine.IARTCAIChatHistoryMessageCallback() {
      @Override
      public void onSuccess(List<ARTCAIChatEngine.ARTCAIChatMessage> data) {
        //擷取成功,處理訊息
                   
      }
      @Override
      public void onFailed(ARTCAIChatEngine.ARTCAIChatError error) {
          //擷取失敗
      }
 });  

  
iOS
1.建立ARTCAIChatEngine對象,
// 建立engine執行個體
let engine: ARTCAIChatEngineInterface = {
    return ARTCAICallEngineFactory.createChatEngine()
}()

// 設定回調
self.engine.delegate = self


2、開始對話時設定SessionID
// userId推薦使用你的App登入後的使用者id
let userId = "xxx"
// 設定deviceId
let deviceId = UIDevice.current.identifierForVendor?.uuidString
let userInfo = ARTCAIChatUserInfo(userId, deviceId)
// 設定智能體,智能體Id不能為nil
let agentInfo = ARTCAIChatAgentInfo(agentId: "xxx")
let sessionId = "\(userInfo.userId)_\(agentInfo.agentId)"
self.engine.startChat(userInfo: userInfo, agentInfo: agentInfo, sessionId: self.sessionId)


3.建立ARTCAIChatMessageListRequest請求對象,設定擷取聊天記錄的相關參數
var endTime = Date().timeIntervalSince1970
if let sendTime = self.listMessage.first?.message.sendTime {
    endTime = sendTime - 0.1
}
let req = ARTCAIChatMessageListRequest(startTime: 0, endTime: endTime, pageNumber: 1, pageSize: 10, isDesc: true)

4.調用ARTCAIChatEngine的queryMessageList方法,擷取聊天記錄
self.engine.queryMessageList(request: req) { msgList, error in
    if let error = error {
        //擷取失敗
    }
    else {
        //擷取成功,處理訊息
    }
}
  
Web
// 1.建立AIChatEngine對象
const engine = new AIChatEngine();

// 2.開始對話時設定SessionID
// userId推薦使用你的App登入後的使用者id
const userId = 'xxx';
// 設定deviceId
const deviceId = '';
const userInfo = new AIChatUserInfo(userId, deviceId);
// 設定智能體,智能體Id不可為空
let agentInfo = new AIChatAgentInfo('xxx');
let sessionId = `${userInfo.userId}_${agentInfo.agentId}`;
await engine.startChat(userInfo, agentInfo, sessionId);

// 3.建立ARTCAIChatMessageListRequest請求對象,設定擷取聊天記錄的相關參數
const endTime = Date.now();

// 4.調用ARTCAIChatEngine的queryMessageList方法,擷取聊天記錄
try {
  const msgList = await engine.queryMessageList({
    startTime: 0,
    endTime: endTime,
    pageNumber: 1,
    pageSize: 10,
    isDesc: true,
  });
  //擷取成功,處理訊息
} catch (error) {
  //擷取失敗
}

通過OpenAPI介面擷取

您可以通過調用ListAIAgentDialogues - 查詢對話記錄介面,來擷取使用者與智能體產生的聊天記錄。

// This file is auto-generated, don't edit it. Thanks.
package com.aliyun.rtc;

import java.util.Arrays;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.aliyun.ice20201109.models.StartAIAgentInstanceResponse;
import com.aliyun.tea.*;

public class Sample {

    /**
     * <b>description</b> :
     * <p>使用AK&amp;SK初始化帳號Client</p>
     * @return Client
     * 
     * @throws Exception
     */
    public static com.aliyun.ice20201109.Client createClient() throws Exception {
        // 工程代碼泄露可能會導致 AccessKey 泄露,並威脅帳號下所有資源的安全性。以下程式碼範例僅供參考。
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                // 必填,請確保代碼運行環境設定了環境變數 ALIBABA_CLOUD_ACCESS_KEY_ID。
                .setAccessKeyId("yourak")
                // 必填,請確保代碼運行環境設定了環境變數 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
                .setAccessKeySecret("yoursk");
        // Endpoint 請參考 https://api.aliyun.com/product/ICE
        config.endpoint = "ice.cn-shanghai.aliyuncs.com";
        return new com.aliyun.ice20201109.Client(config);
    }


    private static void listAIAgentDialogues() throws Exception {
        com.aliyun.ice20201109.Client client =  createClient();

        com.aliyun.ice20201109.models.ListAIAgentDialoguesRequest request = new com.aliyun.ice20201109.models.ListAIAgentDialoguesRequest()
            .setSessionId("test")
            .setStartTime(0L)
            .setEndTime(100000000L);

            try {
                com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
                
                client.listAIAgentDialoguesWithOptions(request, runtime);
            } catch (TeaException error) {
                System.out.println(error.getMessage());
                com.aliyun.teautil.Common.assertAsString(error.message);
            } catch (Exception _error) {
                TeaException error = new TeaException(_error.getMessage(), _error);
                System.out.println(error.getMessage());
                com.aliyun.teautil.Common.assertAsString(error.message);
            }   
    }

    
    public static void main(String[] args) throws Exception {
        listAIAgentDialogues();
    }
}