介绍Android端如何接入AI实时对话智能体。
简介
通过DingRTC的实时消息能力,可以接收AI实时对话智能体的服务状态、转录消息以及控制命令等。DingRTC的实时消息能力依托于会议,使用前需先成功入会。
相关概念
会话(Session):实时消息会话,由sessionId唯一标识。Session支持join/leave/close操作,收发智能体实时消息前,需先加入对应Session。
智能体ID:智能体用户ID。
转录消息:与智能体对话的转录信息。
自然对话/对讲机模式:通过OpenAPI创建的智能体的对话模式。
集成方法
入会前,先集成基础实时消息Android集成方法
同时,从DingRtmClient获取DingRtmAgentClient :
DingRtmAgentClient agentClient = rtmClient.getAgentClient();
给DingRtmAgentClient实例设置回调监听器:
agentClient.setListener(new DingRtmAgentEventListener() { @Override public void onAgentUserReady(String sessionId, String agentId) { } @Override public void onAgentStateChanged(String sessionId, String agentId, DingRtmAgentClient.AgentState state) { } @Override public void onTranscriptionMessage(String sessionId, String agentId, DingRtmAgentClient.TranscriptionData data) { } });
入会成功后,通过OpenAPI接口 StartAgent - 启动智能体入会并加入Session。
会中其他成员会收到onSessionCreate事件通知,然后加入相同Session:
rtmClient.joinSession(sessionId); // Session存在时调用joinSession直接加入
加入指定Session(如果Session有智能体)或者是中途有智能体加入Session,都会收到onAgentUserReady事件通知。需要应用层维护Session的智能体列表:
@Override public void onAgentUserReady(String sessionId, String agentId) { // 应用层需保留agentId,以便调用agent相关方法 }
用户通过onAgentStateChanged事件获取当前智能体的状态变更:
@Override public void onAgentStateChanged(String sessionId, String agentId, DingRtmAgentClient.AgentState state) { // 通过state获取当前智能体以下状态:Listening,Thinking,Responding。 }
SDK支持发送指定信令控制智能体行为,如让智能体回复开场白:
agentClient.sendGreetingReady(sessionId, agentId);
手动打断智能体:
agentClient.sendInterrupt(sessionId, agentId);
在对讲机模式下,发送控制信令,注意在发送DingAgentPushToTalkCmdSend前需先发送DingAgentPushToTalkCmdStart:
// 让智能体开始接收用户语音输入 agentClient.sendPushToTalk(sessionId, agentId, AgentPushToTalkCmd.Start); ... // 让智能体开始处理用户当前已输入的语音数据 agentClient.sendPushToTalk(sessionId, agentId, AgentPushToTalkCmd.Send); ... // 取消用户当前语音输入 agentClient.sendPushToTalk(sessionId, agentId, AgentPushToTalkCmd.Cancel);
如果本端不再使用智能体实时消息功能,可以离开Session:
rtmClient.leaveSession(sessionId);
注意事项
智能体创建及加入RTM Session由服务端OpenAPI StartAgent - 启动智能体接口决定。
有智能体的RTM Session请不要主动关闭,Session会由服务端智能体服务 OpenAPI 管理。
远端用户不调leaveSession直接leaveChannel,有可能收不到这个远端用户的onSessionRemoteUserLeave事件通知。应用层需要在收到他的onRemoteUserOffLineNotify事件通知后,主动将该用户从所有Session的成员列表里移除。
推荐在入会前给DingRtmAgentClient实例设置回调监听器,避免丢失回调消息。