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