本文将介绍如何通过AICallKit SDK集成消息对话智能体到您的iOS应用中。
环境要求
Xcode 16.0 及以上版本,推荐使用最新正式版本
CocoaPods 1.9.3 及以上版本
准备 iOS 11.0 及以上版本的真机
集成SDK
target '你的Target' do
# 依赖实时音视频能力,引入AliVCSDK_ARTC或AliVCSDK_Standard或AliVCSDK_InteractiveLive
pod 'AliVCSDK_ARTC', '~> x.x.x'
# 引入AICallKit SDK
pod 'ARTCAICallKit/Chatbot', '~> 2.2.0'
# 需要集成AliVCInteractionMessage,版本最低是1.6.0
pod 'AliVCInteractionMessage', '~> 1.6.0'
...
end
ARTC SDK最低适配版本为v7.1.0,最新版本请到官网获取。
工程配置
添加麦克风与摄像头权限,打开工程info.Plist,添加NSMicrophoneUsageDescription和NSCameraUsageDescription权限。
打开工程设置,在Signing & Capabilities中开启Background Modes,强烈推荐开启后台模式,否则在进入后台后无法继续通话,这时候在您的APP中需要调用结束通话接口。
SDK使用示例
// 引入SDK
import ARTCAICallKit
// 创建engine实例
let engine: ARTCAIChatEngineInterface = {
return ARTCAICallEngineFactory.createChatEngine()
}()
// 设置回调
self.engine.delegate = self
// 开始对话
// 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)
// 结束对话
// 如果有多个消息对话的智能体,那么在结束当前对话时,无需进行登出,把needLogout设置为false
self.engine.endChat(needLogout: false)
// 否则把needLogout设置为true并调用destroy释放资源
self.engine.endChat(needLogout: true)
self.engine.destroy()
// 其他功能调用示例,请参考API说明
// 回调处理(仅示例部分核心的回调操作)
public func onRequestAuthToken(userId: String, responseBlock: @escaping (ARTCAIChatAuthToken?, NSError?) -> Void) {
// 请求AuthToken,当ChatEngine需要执行IM登录或者IM登录AuthToken后过期时会触发
self.fetchAuthToken(userId: userId) { authToken, error in
responseBlock(authToken, error)
}
}
public func onEngineStateChange(state: ARTCAIChatEngineState) {
// Chat智能体连接改变
}
public func onErrorOccurs(error: NSError, requestId: String?) {
// requestId不为空,消息处理发生了错误
if let _ = requestId {
if error.aicall_code == .ChatTextMessageReceiveFailed {
// 处理文本消息出错
return
}
if error.aicall_code == .ChatVoiceMessageReceiveFailed {
// 处理语音消息出错
return
}
if error.aicall_code == .ChatPlayMessageReceiveFailed {
// 处理播放出错
return
}
return
}
// requestId为空,引擎发生了错误
if let code = error.aicall_code {
if code == .TokenExpired {
// 认证过期
}
else if code == .AgentNotFound {
// 智能体未能找到(智能体ID不存在)
}
else if code == .KickedBySystem {
// 被系统踢出导致对话无法进行
}
else if code == .KickedByUserReplace {
// 同名登录导致通话无法进行
}
}
// 处理其他错误
}
public func onUserMessageUpdated(message: ARTCAIChatMessage) {
// 用户发送的消息需要更新
}
public func onReceivedMessage(message: ARTCAIChatMessage) {
// 收到Chat智能体的回复消息,智能体新的回复或者当前回复过程中消息的状态发生了变化都会触发该回调
}
public func onAgentResponeStateChange(state: ARTCAIChatAgentResponseState, requestId: String?) {
// 收到Chat智能体响应改变
}
public func onMessagePlayStateChange(message: ARTCAIChatMessage, state: ARTCAIChatMessagePlayState) {
// 收到Chat智能体的消息播放状态改变
}
API说明
API概览
类/协议 | API | 说明 |
ARTCAIChatEngineInterface 消息对话引擎接口定义 | 获取引擎连接状态 | |
获取当前参与会话的用户信息 | ||
获取当前会话的唯一标识 | ||
获取当前参与会话的智能体信息 | ||
获取当前智能体响应状态 | ||
获取当前音色列表 | ||
设置和获取回调事件 | ||
设置和获取TemplateConfig | ||
用户自定义信息,该信息最终传给智能体 | ||
开始聊天会话 | ||
结束聊天会话 | ||
发送消息,发送前会打断当前的回复(如果在思考&回复中) | ||
请求历史消息列表 | ||
打断当前的消息回复 | ||
删除消息 | ||
开始播放消息内容 | ||
结束消息的播放 | ||
是否播放中 | ||
创建附件上传器对象,实现发消息带上图片/视频/文件 | ||
开始按键语音,按下去时开始录音并实时发送,需确保已经开启录音权限 | ||
结束按键语音,松开后时调用,表示当前语音消息发送完毕,等待智能体返回结果 | ||
取消按键语音,松开后时调用,表示取消当前语音消息的发送 | ||
释放资源 | ||
解析一个分享的智能体信息 | ||
启动一个分享的智能体通话 | ||
IARTCAIChatEngineCallback 消息对话引擎回调事件 | 发生了错误 | |
请求AuthToken,当ChatEngine需要执行IM登录或者IM登录AuthToken后过期时会触发 | ||
收到智能体连接状态改变 | ||
收到智能体的回复消息,智能体新的回复或者当前回复过程中消息的状态发生了变化都会触发该回调 | ||
收到自定义消息 | ||
用户发送的消息需要更新 | ||
收到智能体响应状态改变 | ||
收到Chat智能体的消息播放状态改变 | ||
ARTCAICallEngineFactory 引擎创建工厂 | 创建默认的Chat智能体引擎 |
ARTCAIChatEngineInterface详情
state
获取引擎连接状态
var state: ARTCAIChatEngineState { get }
userInfo
获取当前参与会话的用户信息
var userInfo: ARTCAIChatUserInfo? { get }
sessionId
获取当前会话的唯一标识
var sessionId: String? { get }
agentInfo
获取当前参与会话的智能体信息
var agentInfo: ARTCAIChatAgentInfo? { get }
agentResponeState
获取当前智能体响应状态
var agentResponeState: ARTCAIChatAgentResponseState { get }
voiceIdList
获取当前音色列表
var voiceIdList: [String] { get }
delegate
设置和获取回调事件
weak var delegate: ARTCAIChatEngineDelegate? { get set }
templateConfig
设置和获取TemplateConfig
var templateConfig: ARTCAIChatTemplateConfig? { get set }
userData
用户自定义信息,该信息最终传给智能体
var userData: [String: Any]? { get set }
startChat
开始聊天会话
func startChat(userInfo: ARTCAIChatUserInfo, agentInfo: ARTCAIChatAgentInfo, sessionId: String?)
参数详情:
参数 | 类型 | 含义 |
参数 | 类型 | 含义 |
userInfo | ARTCAIChatUserInfo | 当前开始会话的用户信息 |
agentInfo | ARTCAIChatAgentInfo | 当前开始会话的智能体消息 |
sessionId | String? | 当前会话的唯一标识,如果为空,则使用userId+agentId作为唯一标识 |
endChat
结束聊天会话
func endChat(needLogout: Bool)
参数详情:
参数 | 类型 | 含义 |
参数 | 类型 | 含义 |
needLogout | Bool | 当前用户实时要退出链接(设置为fals会在下次startChat较少链接耗时,当你后续都不再进行聊天时,可以设置为true) |
sendMessage
发送消息,发送前会打断当前的回复(如果在思考&回复中)
func sendMessage(request: ARTCAIChatSendMessageRequest, completed:((_ msg: ARTCAIChatMessage?, _ error: NSError?) -> Void)?)
参数详情:
参数 | 类型 | 含义 |
参数 | 类型 | 含义 |
request | ARTCAIChatSendMessageRequest | 要发送的消息内容 |
completed | (_ msg: ARTCAIChatMessage?, _ error: NSError?) -> Void | 发送结果回调 |
queryMessageList
请求历史消息列表
func queryMessageList(request: ARTCAIChatMessageListRequest, completed:((_ msgList: [ARTCAIChatMessage]?, _ error: NSError?) -> Void)?)
参数详情:
参数 | 类型 | 含义 |
参数 | 类型 | 含义 |
request | ARTCAIChatMessageListRequest | 请求model |
completed | (_ msgList: [ARTCAIChatMessage]?, _ error: NSError?) -> Void)? | 结果回调 |
interruptAgentResponse
打断当前的消息回复
func interruptAgentResponse()
deleteMessage
删除消息
func deleteMessage(dialogueId: String, completed:((_ error: NSError?) -> Void)?)
参数详情:
参数 | 类型 | 含义 |
参数 | 类型 | 含义 |
dialogueId | String | 消息Id |
completed | (_ error: NSError?) -> Void)? | 结果回调 |
startPlayMessage
开始播放消息内容
func startPlayMessage(message: ARTCAIChatMessage, voiceId: String?, completed: ((NSError?) -> Void)?)
参数详情:
参数 | 类型 | 含义 |
参数 | 类型 | 含义 |
message | ARTCAIChatMessage | 要播放的消息 |
voiceId | voiceId | 播放的音色 |
completed | (_ error: NSError?) -> Void)? | 结果回调 |
stopPlayMessage
结束消息的播放
func stopPlayMessage()
isPlayingMessage
是否播放中
func isPlayingMessage(dialogueId: String) -> Bool
createAttachmentUploader
创建附件上传器对象,发送消息时可以通过关联AttachmentUploader实现发消息带上图片/视频/文件
func createAttachmentUploader() -> ARTCAIChatAttachmentUploader?
startPushVoiceMessage
开始按键语音,按下去时开始录音并实时发送,需确保已经开启录音权限
返回true表示成功, 返回false表示失败(一般原因是:当前状态不对、录音权限未开启等)
func startPushVoiceMessage(request: ARTCAIChatSendMessageRequest) -> Bool
参数详情:
参数 | 类型 | 含义 |
参数 | 类型 | 含义 |
request | ARTCAIChatSendMessageRequest | 要发送的消息内容 |
finishPushVoiceMessage
结束按键语音,松开后时调用,表示当前语音消息发送完毕,等待智能体返回结果
func finishPushVoiceMessage(completed:((_ msg: ARTCAIChatMessage) -> Void)?)
参数详情:
参数 | 类型 | 含义 |
参数 | 类型 | 含义 |
completed | (_ msg: ARTCAIChatMessage) -> Void)? | 发送结果回调 |
cancelPushVoiceMessage
取消按键语音,松开后时调用,表示取消当前语音消息的发送
func cancelPushVoiceMessage()
destroy
释放资源
func destroy()
parseShareAgentChat
解析一个分享的智能体信息
func parseShareAgentChat(shareInfo: String) -> ARTCAIChatAgentShareConfig?
参数详情:
参数 | 类型 | 含义 |
参数 | 类型 | 含义 |
shareInfo | String | 分享信息 |
generateShareAgentChat
启动一个分享的智能体通话
func generateShareAgentChat(shareConfig: ARTCAIChatAgentShareConfig, userId: String, completed: ((_ agentInfo: ARTCAIChatAgentInfo?, _ authToken: ARTCAIChatAuthToken?, _ error: NSError?, _ reqId: String) -> Void)?)
参数详情:
参数 | 类型 | 含义 |
参数 | 类型 | 含义 |
shareConfig | ARTCAIChatAgentShareConfig | 分享信息 |
userId | String | 用户id |
completed | (_ agentInfo: ARTCAIChatAgentInfo?, _ authToken: ARTCAIChatAuthToken?, _ error: NSError?, _ reqId: String) -> Void)? | 结果回调 |
ARTCAIChatEngineDelegate详情
onErrorOccurs
发生了错误
@objc optional func onErrorOccurs(error: NSError, requestId: String?)
参数详情:
参数 | 类型 | 含义 |
参数 | 类型 | 含义 |
error | NSError | 错误信息 |
requestId | String? | 消息请求Id,当不为nil时,该错误属于消息错误 |
onRequestAuthToken
请求AuthToken,当ChatEngine需要执行IM登录或者IM登录AuthToken后过期时会触发
@objc optional func onRequestAuthToken(userId: String, responseBlock: @escaping (_ authToken: ARTCAIChatAuthToken?, _ error: NSError?)->Void)
参数详情:
参数 | 类型 | 含义 |
参数 | 类型 | 含义 |
userId | String | 用户Id |
responseBlock | (_ authToken: ARTCAIChatAuthToken?, _ error: NSError?)->Void | 回调Token |
onEngineStateChange
收到引擎连接状态改变
@objc optional func onEngineStateChange(state: ARTCAIChatEngineState)
参数详情:
参数 | 类型 | 含义 |
参数 | 类型 | 含义 |
state | ARTCAIChatEngineState | 当前智能体链接状态 |
onReceivedMessage
收到智能体的回复消息,智能体新的回复或者当前回复过程中消息的状态发生了变化都会触发该回调
@objc optional func onReceivedMessage(message: ARTCAIChatMessage)
参数详情:
参数 | 类型 | 含义 |
参数 | 类型 | 含义 |
message | ARTCAIChatMessage | 消息对象 |
onReceivedCustomMessage
收到自定义消息
@objc optional func onReceivedCustomMessage(text: String)
参数详情:
参数 | 类型 | 含义 |
参数 | 类型 | 含义 |
text | String | 消息内容 |
onUserMessageUpdated
用户发送的消息需要更新
@objc optional func onUserMessageUpdated(message: ARTCAIChatMessage)
参数详情:
参数 | 类型 | 含义 |
参数 | 类型 | 含义 |
message | ARTCAIChatMessage | 消息对象 |
onAgentResponeStateChange
收到智能体响应状态改变
@objc optional func onAgentResponeStateChange(state: ARTCAIChatAgentResponseState, requestId: String?)
参数详情:
参数 | 类型 | 含义 |
参数 | 类型 | 含义 |
state | ARTCAIChatAgentResponseState | 响应状态 |
requestId | String? | 当前的消息会话 |
onMessagePlayStateChange
收到智能体的消息播放状态改变
@objc optional func onMessagePlayStateChange(message: ARTCAIChatMessage, state: ARTCAIChatMessagePlayState)
参数详情:
参数 | 类型 | 含义 |
参数 | 类型 | 含义 |
message | ARTCAIChatMessage | 消息对象 |
state | ARTCAIChatMessagePlayState | 播放状态 |
ARTCAICallEngineFactory详情
createChatEngine
创建默认的Chat智能体引擎
public static func createChatEngine() -> ARTCAIChatEngineInterface
- 本页导读 (1)
- 环境要求
- 集成SDK
- 工程配置
- SDK使用示例
- API说明
- API概览
- ARTCAIChatEngineInterface详情
- ARTCAIChatEngineDelegate详情
- ARTCAICallEngineFactory详情