このトピックでは、メッセージ会話のチャット履歴を取得する方法について説明します。
機能の説明
リアルタイム対話型 AI では、セッション ID によってユーザーとエージェント間の対話関係が識別され、すべてのやり取りが完全に記録され、追跡可能であることが保証されます。この一意の識別子を使用することで、システムは同じユーザーが異なる時間に開始した複数の対話を認識して整理し、一貫性のあるチャット履歴を作成できます。また、セッション ID を使用して、ユーザーと音声/ビデオ通話エージェントおよびチャットボットエージェントの両方との間のすべてのチャットレコードをリンクすることもできます。
メッセージ会話のチャット履歴の取得
ビジネスフロー
ユーザーがエージェントとの新しい会話を開始すると、ユーザーが異なる時間や異なるデバイスでエージェントとやり取りした場合でも、その会話は同じセッション ID に関連付けられます。セッション ID とユーザー間のマッピングの生成と管理は、ご利用のアプリケーションによって処理されます。
コード実装
Alibaba Cloud は、チャット履歴を取得するために、AICallKit SDK API の呼び出しと OpenAPI の使用という 2 つの方法を提供しています。
AICallKit SDK による取得
アプリケーションでセッション ID を生成し、
ARTCAIChatEngine.startChat()メソッドを呼び出すときに渡します。ARTCAIChatMessageListRequestオブジェクトを作成し、開始/終了時間、ページサイズ、ページ番号、ソート順 (昇順/降順) など、チャット履歴を取得するためのパラメーターを設定します。ARTCAIChatEngine.queryMessageList()メソッドを呼び出してチャット履歴を取得します。サンプルコード:
Android
1. ARTCAIChatEngine オブジェクトを作成し、SessionID を設定します
// SessionID はアプリケーションによって生成されます。空の場合、userId_agentId が一意の識別子として使用されます。
String mSessionId = "XXX";
// ユーザー 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 オブジェクトを作成します
// エンジンインスタンスを作成します
let engine: ARTCAIChatEngineInterface = {
return ARTCAICallEngineFactory.createChatEngine()
}()
// コールバックを設定します
self.engine.delegate = self
2. 会話を開始するときに SessionID を設定します。
// ログイン後のアプリのユーザー ID を使用することを推奨します。
let userId = "xxx"
// deviceId を設定します。
let deviceId = UIDevice.current.identifierForVendor?.uuidString
let userInfo = ARTCAIChatUserInfo(userId, deviceId)
// エージェントを設定します。agentId は 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 を設定します。
// ログイン後のアプリのユーザー ID を使用することを推奨します。
const userId = 'xxx';
// deviceId を設定します。
const deviceId = '';
const userInfo = new AIChatUserInfo(userId, deviceId);
// エージェントを設定します。agentId は空にできません。
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 API を呼び出して、ユーザーとエージェント間のチャット履歴を取得します。
// このファイルは自動生成されたものです。編集しないでください。
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 {
/**
* description :
* <p>AccessKey ペアを使用してクライアントを初期化します。</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");
// エンドポイントについては、https://api.alibabacloud.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();
}
}