本文将介绍如何将AICallKit SDK集成到您的iOS应用中
环境要求
Xcode 16.0 及以上版本,推荐使用最新正式版本
CocoaPods 1.9.3 及以上版本
准备 iOS 10.0 及以上版本的真机
集成SDK
target '你的Target' do
# 依赖实时音视频能力,引入AliVCSDK_ARTC或AliVCSDK_Standard或AliVCSDK_InteractiveLive
pod 'AliVCSDK_ARTC', '~> x.x.x'
# 引入AICallKit SDK
pod 'ARTCAICallKit', '~> 1.5.0'
...
end
ARTC SDK版本请到官网获取最新适配版本号。
工程配置
添加麦克风与摄像头权限,打开工程info.Plist,添加NSMicrophoneUsageDescription和NSCameraUsageDescription权限。
打开工程设置,在Signing & Capabilities中开启Background Modes,强烈推荐开启后台模式,否则在进入后台后无法继续通话,这时候在您的APP中需要调用结束通话接口。
SDK使用示例
// 引入SDK
import ARTCAICallKit
// 创建engine实例
var engine: ARTCAICallEngineInterface = {
return ARTCAICallEngineFactory.createEngine()
}()
// 设置回调
self.engine.delegate = self
// 启动智能体后,开始通话
let agentInfo = ARTCAICallAgentInfo(agentType: workflow_type, channelId: channel_id, uid: ai_agent_user_id, instanceId: agent_instance_id)
self.engine.call(userId: self.userId, token: rtc_auth_token, agentInfo: agentInfo) { [weak self] error in
if let error = error {
// 处理错误
}
else {
// 成功通话
}
}
// 结束通话
self.engine.handup()
// 其他功能调用示例,请参考API说明
// 回调处理(仅示例不分核心的回调操作)
public func onErrorOccurs(code: ARTCAICallErrorCode) {
// 发生了错误
self.engine.handup()
}
public func onCallBegin() {
// 通话开始
}
public func onCallEnd() {
// 通话结束
}
public func onAgentStateChanged(state: ARTCAICallAgentState) {
// 智能体状态改变
}
public func onUserSubtitleNotify(text: String, isSentenceEnd: Bool, sentenceId: Int) {
// 用户提问被智能体识别结果的通知
}
public func onVoiceAgentSubtitleNotify(text: String, isSentenceEnd: Bool, userAsrSentenceId: Int) {
// 智能体回答结果通知
}
public func onVoiceIdChanged(voiceId: String) {
// 当前通话的音色发生了改变
}
public func onVoiceInterrupted(enable: Bool) {
// 当前通话的语音打断是否启用
}
API说明
API概览
类/协议 | API | 说明 |
ARTCAICallEngineInterface 引擎接口定义 | 获取当前通话的UserId | |
是否通话中 | ||
获取当前智能体信息 | ||
获取当前智能体状态 | ||
设置和获取回调事件 | ||
开始通话 | ||
挂断 | ||
设置智能体渲染视图,及缩放模式 | ||
打断智能体讲话 | ||
开启/关闭智能打断 | ||
切换音色 | ||
开启/关闭扬声器 | ||
开启/关闭对讲机模式 | ||
对讲机模式下,开始讲话 | ||
对讲机模式下,结束讲话 | ||
对讲机模式下,取消这次讲话 | ||
静音/取消禁音麦克风 | ||
视觉理解通话参数配置 | ||
关闭/取消关闭摄像头。 | ||
切换前后摄像头 | ||
解析一个分享的智能体信息 | ||
启动一个分享的智能体通话 | ||
获取RTC引擎 | ||
释放资源 | ||
ARTCAICallEngineDelegate 引擎回调事件 | 发生了错误 | |
通话开始 | ||
通话结束 | ||
智能体视频是否可用 | ||
智能体音频是否可用 | ||
当前通话的对讲机模式是否启用 | ||
当前智能体即将离开(结束当前通话) | ||
收到当前智能体发过来的自定义消息 | ||
智能体状态改变 | ||
网络状态改变 | ||
音量变化 | ||
用户提问被智能体识别结果的通知 | ||
智能体回答结果通知 | ||
当前通话的音色发生了改变 | ||
当前通话的语音打断是否启用 | ||
智能体数字人首帧渲染 | ||
当真人即将接管当前智能体 | ||
当真人接管已经接通 | ||
ARTCAICallEngineFactory 引擎创建工厂 | 创建默认的引擎实例 |
ARTCAICallEngineInterface详情
userId
获取当前通话的UserId
var userId: String? {get}
isOnCall
是否通话中, 从接通后到挂断或出错前为true,其他为false
var isOnCall: Bool { get }
agentInfo
获取当前智能体信息,包括:类型、频道Id、智能体在频道中的uid、智能体运行实例ID
var agentInfo: ARTCAICallAgentInfo? { get }
agentState
获取当前智能体状态,包括:聆听中\思考中\讲话中
var agentState: ARTCAICallAgentState { get }
delegate
设置和获取回调事件
weak var delegate: ARTCAICallEngineDelegate? { get set }
call
开始通话
func call(userId: String, token: String, agentInfo: ARTCAICallAgentInfo, completed:((_ error: NSError?) -> Void)?)
参数详情:
参数 | 类型 | 含义 |
userId | String | 当前用户uid |
token | String | 入会Token |
agentInfo | ARTCAICallAgentInfo | 智能体信息 |
completed | ((_ error: NSError?) -> Void)? | 完成回调 |
handup
退出通话
func handup(_ stopAIAgent: Bool)
参数详情:
参数 | 类型 | 含义 |
stopAIAgent | Bool | 是否同事结束当前智能体任务 |
setAgentView
设置智能体渲染视图,及视图模式
func setAgentView(view: UIView?, mode: ARTCAICallAgentViewMode)
参数详情:
参数 | 类型 | 含义 |
view | UIView? | 数字人渲染视图 |
mode | ARTCAICallAgentViewMode | 视图模式,可以是裁剪、缩放、填充等 |
interruptSpeaking
打断智能体讲话
func interruptSpeaking() -> Bool
enableVoiceInterrupt
开启/关闭智能打断
func enableVoiceInterrupt(enable: Bool) -> Bool
参数详情:
参数 | 类型 | 含义 |
enable | Bool | 开启/关闭 |
switchVoiceId
切换音色
func switchVoiceId(voiceId: String) -> Bool
参数详情:
参数 | 类型 | 含义 |
voiceId | String | 音色id |
enableSpeaker
开启/关闭扬声器
func enableSpeaker(enable: Bool) -> Bool
参数详情:
参数 | 类型 | 含义 |
enable | Bool | 开启/关闭 |
enablePushToTalk
开启/关闭对讲机模式,对讲机模式下,只有在finishPushToTalk被调用后,智能体才会播报结果
func enablePushToTalk(enable: Bool) -> Bool
参数详情:
参数 | 类型 | 含义 |
enable | Bool | 关闭或启用 |
startPushToTalk
对讲机模式下,开始讲话
func startPushToTalk() -> Bool
finishPushToTalk
对讲机模式下,结束讲话
func finishPushToTalk() -> Bool
cancelPushToTalk
对讲机模式下,取消这次讲话
func cancelPushToTalk() -> Bool
muteMicrophone
静音/取消禁音麦克风
func muteMicrophone(mute: Bool) -> Bool
参数详情:
参数 | 类型 | 含义 |
mute | Bool | 静音/取消禁音 |
visionConfig
视觉配置,包括分辨率、帧率等,参考ARTCAICallVisionConfig的定义。使用视觉智能体时需要设置,且在通话前设置才能生效。
var visionConfig: ARTCAICallVisionConfig { set get }
参数详情:
参数 | 类型 | 含义 |
stopAIAgent | Bool | 是否同事结束当前智能体任务 |
muteLocalCamera
关闭/取消关闭摄像头。
func muteLocalCamera(mute: Bool) -> Bool
参数详情:
参数 | 类型 | 含义 |
mute | Bool | 关闭或启用 |
switchCamera
切换前后摄像头
func switchCamera() -> Bool
parseShareAgentCall
解析一个分享的智能体信息,解析成功则返回一个ARTCAICallAgentShareConfig类型的实例,可以通过该实例启动一个分享出来的智能体通话
func parseShareAgentCall(shareInfo: String) -> ARTCAICallAgentShareConfig?
参数详情:
参数 | 类型 | 含义 |
shareInfo | String | 分享出来的智能体信息,可以在控制台上生成 |
generateShareAgentCall
启动一个分享的智能体通话
func generateShareAgentCall(shareConfig: ARTCAICallAgentShareConfig, userId: String, completed: ((_ rsp: ARTCAICallAgentInfo?, _ token: String?, _ error: NSError?, _ reqId: String) -> Void)?)
参数详情:
参数 | 类型 | 含义 |
shareConfig | ARTCAICallAgentShareConfig | 分享智能体配置信息,包括分享id、智能体类型、过期时间、模板配置、区域等,可以到SDK查看定义 |
userId | String | 当前登录的用户Id |
completed | ((_ rsp: ARTCAICallAgentInfo?, _ token: String?, _ error: NSError?, _ reqId: String) -> Void)? | 操作完成事件 |
getRTCInstance
获取RTC引擎
func getRTCInstance() -> AnyObject?
destroy
释放资源
func destroy()
ARTCAICallEngineDelegate详情
onErrorOccurs
当前通话时发生了错误
@objc optional func onErrorOccurs(code: ARTCAICallErrorCode)
参数详情:
参数 | 类型 | 含义 |
code | ARTCAICallErrorCode | 错误类型 |
onCallBegin
通话开始
@objc optional func onCallBegin()
onCallEnd
通话结束
@objc optional func onCallEnd()
onAgentVideoAvailable
智能体视频是否可用
@objc optional func onAgentVideoAvailable(available: Bool)
参数详情:
参数 | 类型 | 含义 |
available | Bool | 是否可用 |
onAgentAudioAvailable
智能体音频是否可用
@objc optional func onAgentAudioAvailable(available: Bool)
参数详情:
参数 | 类型 | 含义 |
available | Bool | 是否可用 |
onPushToTalk
当前通话的对讲机模式是否启用
@objc optional func onPushToTalk(enable: Bool)
参数详情:
参数 | 类型 | 含义 |
enable | Bool | 是否启用 |
onAgentWillLeave
当前智能体即将离开(结束当前通话)
@objc optional func onAgentWillLeave(reason: Int32, message: String)
参数详情:
参数 | 类型 | 含义 |
reason | Int32 | 离开原因:2001(闲时退出) 0(其他) |
message | String | 离开原因的描述 |
onReceivedAgentCustomMessage
收到当前智能体发过来的自定义消息
@objc optional func onReceivedAgentCustomMessage(data: [String: Any]?)
参数详情:
参数 | 类型 | 含义 |
data | [String: Any]? | 消息内容 |
onAgentStateChanged
智能体状态改变
@objc optional func onAgentStateChanged(state: ARTCAICallAgentState)
参数详情:
参数 | 类型 | 含义 |
state | ARTCAICallAgentState | 当前智能体状态:聆听中\思考中\讲话中 |
onNetworkStatusChanged
网络状态改变
@objc optional func onNetworkStatusChanged(uid: String, quality: ARTCAICallNetworkQuality)
参数详情:
参数 | 类型 | 含义 |
uid | String | 当前讲话人的Id |
quality | ARTCAICallNetworkQuality | 网络质量,包括:极好/好/有点差/差/极差/中断/未知 |
onVoiceVolumeChanged
音量变化通知
@objc optional func onVoiceVolumeChanged(uid: String, volume: Int32)
参数详情:
参数 | 类型 | 含义 |
uid | String | 当前讲话人的uid |
volume | Int32 | 音量[0-255] |
onUserSubtitleNotify
用户提问被智能体识别结果的通知
@objc optional func onUserSubtitleNotify(text: String, isSentenceEnd: Bool, sentenceId: Int)
参数详情:
参数 | 类型 | 含义 |
text | String | 被智能体识别出的提问文本 |
isSentenceEnd | Bool | 当前文本是否为这句话的最终结果 |
sentenceId | Int | 当前文本属于的句子ID |
onVoiceAgentSubtitleNotify
智能体回答结果通知
@objc optional func onVoiceAgentSubtitleNotify(text: String, isSentenceEnd: Bool, userAsrSentenceId: Int)
参数详情:
参数 | 类型 | 含义 |
text | String | 智能体回答的文本 |
isSentenceEnd | Bool | 当前文本是否为此次回答的最后一句 |
userAsrSentenceId | Int | 回答用户问题的句子ID |
onVoiceIdChanged
当前通话的音色发生了改变
@objc optional func onVoiceIdChanged(voiceId: String)
参数详情:
参数 | 类型 | 含义 |
voiceId | String | 当前音色Id |
onVoiceInterrupted
当前通话的语音打断是否启用
@objc optional func onVoiceInterrupted(enable: Bool)
参数详情:
参数 | 类型 | 含义 |
enable | Bool | 是否启用 |
onAgentAvatarFirstFrameDrawn
智能体数字人首帧渲染
@objc optional func onAgentAvatarFirstFrameDrawn()
onHumanTakeoverWillStart
当真人即将接管当前智能体
@objc optional func onHumanTakeoverWillStart(takeoverUid: String, takeoverMode: Int)
参数详情:
参数 | 类型 | 含义 |
takeoverUid | String | 真人uid |
takeoverMode | Int | 1:表示使用真人音色输出;0:表示使用智能体音色输出 |
onHumanTakeoverConnected
当真人接管已经接通
@objc optional func onHumanTakeoverConnected(takeoverUid: String)
参数详情:
参数 | 类型 | 含义 |
takeoverUid | String | 真人uid |
ARTCAICallEngineFactory详情
createEngine
创建默认的引擎实例
public static func createEngine() -> ARTCAICallEngineInterface