本文将介绍如何获取消息对话的历史聊天记录,以及如何在消息对话中获取音视频通话的历史聊天记录。
功能说明
在AI实时互动中,SessionID用于标识用户与智能体之间的对话关系,从而确保每一次交互均能被系统完整记录与追溯。借助这一独特标识,系统能够精准识别并整理同一用户在不同时间发起的多轮对话,形成连贯且清晰的聊天脉络。此外,您也可以通过SessionID关联用户与通话类型智能体以及对话类型智能体之间的所有聊天记录。
获取消息对话历史聊天记录
业务流程
当一个用户与智能体启动新的对话时,即使该用户在不同时间段或不同设备上与智能体进行对话,仍将通过同一个SessionID进行关联。SessionID的生成及其与用户之间的对应关系由业务方自行维护。
代码实现
阿里云为您提供了通过调用AICallKit SDK接口实现以及通过OpenAPI两种方式获取历史聊天记录。
通过AICallKit SDK接口获取
业务方自行生成SessionID,在调用
ARTCAIChatEngine.startChat()
方法时将SessionId传入。创建
ARTCAIChatMessageListRequest
请求对象,设置获取聊天记录的相关参数,比如开始/结束时间、分页大小、分页数、升降序等。调用
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&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();
}
}
该文章对您有帮助吗?