iOS使用指南
本文將介紹如何將AICallKit SDK集成到您的iOS應(yīng)用中
環(huán)境要求
Xcode 16.0 及以上版本,推薦使用最新正式版本
CocoaPods 1.9.3 及以上版本
準(zhǔn)備 iOS 10.0 及以上版本的真機(jī)
集成SDK
target '你的Target' do
# 依賴(lài)實(shí)時(shí)音視頻能力,引入AliVCSDK_ARTC或AliVCSDK_Standard或AliVCSDK_InteractiveLive
pod 'AliVCSDK_ARTC', '~> x.x.x'
# 引入AICallKit SDK
pod 'ARTCAICallKit', '~> 1.5.0'
...
end
ARTC SDK版本請(qǐng)到官網(wǎng)獲取最新適配版本號(hào)。
工程配置
添加麥克風(fēng)與攝像頭權(quán)限,打開(kāi)工程info.Plist,添加NSMicrophoneUsageDescription和NSCameraUsageDescription權(quán)限。
打開(kāi)工程設(shè)置,在Signing & Capabilities中開(kāi)啟Background Modes,強(qiáng)烈推薦開(kāi)啟后臺(tái)模式,否則在進(jìn)入后臺(tái)后無(wú)法繼續(xù)通話(huà),這時(shí)候在您的APP中需要調(diào)用結(jié)束通話(huà)接口。
SDK使用示例
// 引入SDK
import ARTCAICallKit
// 創(chuàng)建engine實(shí)例
var engine: ARTCAICallEngineInterface = {
return ARTCAICallEngineFactory.createEngine()
}()
// 設(shè)置回調(diào)
self.engine.delegate = self
// 啟動(dòng)智能體后,開(kāi)始通話(huà)
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 {
// 處理錯(cuò)誤
}
else {
// 成功通話(huà)
}
}
// 結(jié)束通話(huà)
self.engine.handup()
// 其他功能調(diào)用示例,請(qǐng)參考API說(shuō)明
// 回調(diào)處理(僅示例不分核心的回調(diào)操作)
public func onErrorOccurs(code: ARTCAICallErrorCode) {
// 發(fā)生了錯(cuò)誤
self.engine.handup()
}
public func onCallBegin() {
// 通話(huà)開(kāi)始
}
public func onCallEnd() {
// 通話(huà)結(jié)束
}
public func onAgentStateChanged(state: ARTCAICallAgentState) {
// 智能體狀態(tài)改變
}
public func onUserSubtitleNotify(text: String, isSentenceEnd: Bool, sentenceId: Int) {
// 用戶(hù)提問(wèn)被智能體識(shí)別結(jié)果的通知
}
public func onVoiceAgentSubtitleNotify(text: String, isSentenceEnd: Bool, userAsrSentenceId: Int) {
// 智能體回答結(jié)果通知
}
public func onVoiceIdChanged(voiceId: String) {
// 當(dāng)前通話(huà)的音色發(fā)生了改變
}
public func onVoiceInterrupted(enable: Bool) {
// 當(dāng)前通話(huà)的語(yǔ)音打斷是否啟用
}
API說(shuō)明
API概覽
類(lèi)/協(xié)議 | API | 說(shuō)明 |
ARTCAICallEngineInterface 引擎接口定義 | 獲取當(dāng)前通話(huà)的UserId | |
是否通話(huà)中 | ||
獲取當(dāng)前智能體信息 | ||
獲取當(dāng)前智能體狀態(tài) | ||
設(shè)置和獲取回調(diào)事件 | ||
開(kāi)始通話(huà) | ||
掛斷 | ||
設(shè)置智能體渲染視圖,及縮放模式 | ||
打斷智能體講話(huà) | ||
開(kāi)啟/關(guān)閉智能打斷 | ||
切換音色 | ||
開(kāi)啟/關(guān)閉揚(yáng)聲器 | ||
開(kāi)啟/關(guān)閉對(duì)講機(jī)模式 | ||
對(duì)講機(jī)模式下,開(kāi)始講話(huà) | ||
對(duì)講機(jī)模式下,結(jié)束講話(huà) | ||
對(duì)講機(jī)模式下,取消這次講話(huà) | ||
靜音/取消禁音麥克風(fēng) | ||
視覺(jué)理解通話(huà)參數(shù)配置 | ||
關(guān)閉/取消關(guān)閉攝像頭。 | ||
切換前后攝像頭 | ||
解析一個(gè)分享的智能體信息 | ||
啟動(dòng)一個(gè)分享的智能體通話(huà) | ||
獲取RTC引擎 | ||
釋放資源 | ||
ARTCAICallEngineDelegate 引擎回調(diào)事件 | 發(fā)生了錯(cuò)誤 | |
通話(huà)開(kāi)始 | ||
通話(huà)結(jié)束 | ||
智能體視頻是否可用 | ||
智能體音頻是否可用 | ||
當(dāng)前通話(huà)的對(duì)講機(jī)模式是否啟用 | ||
當(dāng)前智能體即將離開(kāi)(結(jié)束當(dāng)前通話(huà)) | ||
收到當(dāng)前智能體發(fā)過(guò)來(lái)的自定義消息 | ||
智能體狀態(tài)改變 | ||
網(wǎng)絡(luò)狀態(tài)改變 | ||
音量變化 | ||
用戶(hù)提問(wèn)被智能體識(shí)別結(jié)果的通知 | ||
智能體回答結(jié)果通知 | ||
當(dāng)前通話(huà)的音色發(fā)生了改變 | ||
當(dāng)前通話(huà)的語(yǔ)音打斷是否啟用 | ||
智能體數(shù)字人首幀渲染 | ||
當(dāng)真人即將接管當(dāng)前智能體 | ||
當(dāng)真人接管已經(jīng)接通 | ||
ARTCAICallEngineFactory 引擎創(chuàng)建工廠(chǎng) | 創(chuàng)建默認(rèn)的引擎實(shí)例 |
ARTCAICallEngineInterface詳情
userId
獲取當(dāng)前通話(huà)的UserId
var userId: String? {get}
isOnCall
是否通話(huà)中, 從接通后到掛斷或出錯(cuò)前為true,其他為false
var isOnCall: Bool { get }
agentInfo
獲取當(dāng)前智能體信息,包括:類(lèi)型、頻道Id、智能體在頻道中的uid、智能體運(yùn)行實(shí)例ID
var agentInfo: ARTCAICallAgentInfo? { get }
agentState
獲取當(dāng)前智能體狀態(tài),包括:聆聽(tīng)中\(zhòng)思考中\(zhòng)講話(huà)中
var agentState: ARTCAICallAgentState { get }
delegate
設(shè)置和獲取回調(diào)事件
weak var delegate: ARTCAICallEngineDelegate? { get set }
call
開(kāi)始通話(huà)
func call(userId: String, token: String, agentInfo: ARTCAICallAgentInfo, completed:((_ error: NSError?) -> Void)?)
參數(shù)詳情:
參數(shù) | 類(lèi)型 | 含義 |
userId | String | 當(dāng)前用戶(hù)uid |
token | String | 入會(huì)Token |
agentInfo | ARTCAICallAgentInfo | 智能體信息 |
completed | ((_ error: NSError?) -> Void)? | 完成回調(diào) |
handup
退出通話(huà)
func handup(_ stopAIAgent: Bool)
參數(shù)詳情:
參數(shù) | 類(lèi)型 | 含義 |
stopAIAgent | Bool | 是否同事結(jié)束當(dāng)前智能體任務(wù) |
setAgentView
設(shè)置智能體渲染視圖,及視圖模式
func setAgentView(view: UIView?, mode: ARTCAICallAgentViewMode)
參數(shù)詳情:
參數(shù) | 類(lèi)型 | 含義 |
view | UIView? | 數(shù)字人渲染視圖 |
mode | ARTCAICallAgentViewMode | 視圖模式,可以是裁剪、縮放、填充等 |
interruptSpeaking
打斷智能體講話(huà)
func interruptSpeaking() -> Bool
enableVoiceInterrupt
開(kāi)啟/關(guān)閉智能打斷
func enableVoiceInterrupt(enable: Bool) -> Bool
參數(shù)詳情:
參數(shù) | 類(lèi)型 | 含義 |
enable | Bool | 開(kāi)啟/關(guān)閉 |
switchVoiceId
切換音色
func switchVoiceId(voiceId: String) -> Bool
參數(shù)詳情:
參數(shù) | 類(lèi)型 | 含義 |
voiceId | String | 音色id |
enableSpeaker
開(kāi)啟/關(guān)閉揚(yáng)聲器
func enableSpeaker(enable: Bool) -> Bool
參數(shù)詳情:
參數(shù) | 類(lèi)型 | 含義 |
enable | Bool | 開(kāi)啟/關(guān)閉 |
enablePushToTalk
開(kāi)啟/關(guān)閉對(duì)講機(jī)模式,對(duì)講機(jī)模式下,只有在finishPushToTalk被調(diào)用后,智能體才會(huì)播報(bào)結(jié)果
func enablePushToTalk(enable: Bool) -> Bool
參數(shù)詳情:
參數(shù) | 類(lèi)型 | 含義 |
enable | Bool | 關(guān)閉或啟用 |
startPushToTalk
對(duì)講機(jī)模式下,開(kāi)始講話(huà)
func startPushToTalk() -> Bool
finishPushToTalk
對(duì)講機(jī)模式下,結(jié)束講話(huà)
func finishPushToTalk() -> Bool
cancelPushToTalk
對(duì)講機(jī)模式下,取消這次講話(huà)
func cancelPushToTalk() -> Bool
muteMicrophone
靜音/取消禁音麥克風(fēng)
func muteMicrophone(mute: Bool) -> Bool
參數(shù)詳情:
參數(shù) | 類(lèi)型 | 含義 |
mute | Bool | 靜音/取消禁音 |
visionConfig
視覺(jué)配置,包括分辨率、幀率等,參考ARTCAICallVisionConfig的定義。使用視覺(jué)智能體時(shí)需要設(shè)置,且在通話(huà)前設(shè)置才能生效。
var visionConfig: ARTCAICallVisionConfig { set get }
參數(shù)詳情:
參數(shù) | 類(lèi)型 | 含義 |
stopAIAgent | Bool | 是否同事結(jié)束當(dāng)前智能體任務(wù) |
muteLocalCamera
關(guān)閉/取消關(guān)閉攝像頭。
func muteLocalCamera(mute: Bool) -> Bool
參數(shù)詳情:
參數(shù) | 類(lèi)型 | 含義 |
mute | Bool | 關(guān)閉或啟用 |
switchCamera
切換前后攝像頭
func switchCamera() -> Bool
parseShareAgentCall
解析一個(gè)分享的智能體信息,解析成功則返回一個(gè)ARTCAICallAgentShareConfig類(lèi)型的實(shí)例,可以通過(guò)該實(shí)例啟動(dòng)一個(gè)分享出來(lái)的智能體通話(huà)
func parseShareAgentCall(shareInfo: String) -> ARTCAICallAgentShareConfig?
參數(shù)詳情:
參數(shù) | 類(lèi)型 | 含義 |
shareInfo | String | 分享出來(lái)的智能體信息,可以在控制臺(tái)上生成 |
generateShareAgentCall
啟動(dòng)一個(gè)分享的智能體通話(huà)
func generateShareAgentCall(shareConfig: ARTCAICallAgentShareConfig, userId: String, completed: ((_ rsp: ARTCAICallAgentInfo?, _ token: String?, _ error: NSError?, _ reqId: String) -> Void)?)
參數(shù)詳情:
參數(shù) | 類(lèi)型 | 含義 |
shareConfig | ARTCAICallAgentShareConfig | 分享智能體配置信息,包括分享id、智能體類(lèi)型、過(guò)期時(shí)間、模板配置、區(qū)域等,可以到SDK查看定義 |
userId | String | 當(dāng)前登錄的用戶(hù)Id |
completed | ((_ rsp: ARTCAICallAgentInfo?, _ token: String?, _ error: NSError?, _ reqId: String) -> Void)? | 操作完成事件 |
getRTCInstance
獲取RTC引擎
func getRTCInstance() -> AnyObject?
destroy
釋放資源
func destroy()
ARTCAICallEngineDelegate詳情
onErrorOccurs
當(dāng)前通話(huà)時(shí)發(fā)生了錯(cuò)誤
@objc optional func onErrorOccurs(code: ARTCAICallErrorCode)
參數(shù)詳情:
參數(shù) | 類(lèi)型 | 含義 |
code | ARTCAICallErrorCode | 錯(cuò)誤類(lèi)型 |
onCallBegin
通話(huà)開(kāi)始
@objc optional func onCallBegin()
onCallEnd
通話(huà)結(jié)束
@objc optional func onCallEnd()
onAgentVideoAvailable
智能體視頻是否可用
@objc optional func onAgentVideoAvailable(available: Bool)
參數(shù)詳情:
參數(shù) | 類(lèi)型 | 含義 |
available | Bool | 是否可用 |
onAgentAudioAvailable
智能體音頻是否可用
@objc optional func onAgentAudioAvailable(available: Bool)
參數(shù)詳情:
參數(shù) | 類(lèi)型 | 含義 |
available | Bool | 是否可用 |
onPushToTalk
當(dāng)前通話(huà)的對(duì)講機(jī)模式是否啟用
@objc optional func onPushToTalk(enable: Bool)
參數(shù)詳情:
參數(shù) | 類(lèi)型 | 含義 |
enable | Bool | 是否啟用 |
onAgentWillLeave
當(dāng)前智能體即將離開(kāi)(結(jié)束當(dāng)前通話(huà))
@objc optional func onAgentWillLeave(reason: Int32, message: String)
參數(shù)詳情:
參數(shù) | 類(lèi)型 | 含義 |
reason | Int32 | 離開(kāi)原因:2001(閑時(shí)退出) 0(其他) |
message | String | 離開(kāi)原因的描述 |
onReceivedAgentCustomMessage
收到當(dāng)前智能體發(fā)過(guò)來(lái)的自定義消息
@objc optional func onReceivedAgentCustomMessage(data: [String: Any]?)
參數(shù)詳情:
參數(shù) | 類(lèi)型 | 含義 |
data | [String: Any]? | 消息內(nèi)容 |
onAgentStateChanged
智能體狀態(tài)改變
@objc optional func onAgentStateChanged(state: ARTCAICallAgentState)
參數(shù)詳情:
參數(shù) | 類(lèi)型 | 含義 |
state | ARTCAICallAgentState | 當(dāng)前智能體狀態(tài):聆聽(tīng)中\(zhòng)思考中\(zhòng)講話(huà)中 |
onNetworkStatusChanged
網(wǎng)絡(luò)狀態(tài)改變
@objc optional func onNetworkStatusChanged(uid: String, quality: ARTCAICallNetworkQuality)
參數(shù)詳情:
參數(shù) | 類(lèi)型 | 含義 |
uid | String | 當(dāng)前講話(huà)人的Id |
quality | ARTCAICallNetworkQuality | 網(wǎng)絡(luò)質(zhì)量,包括:極好/好/有點(diǎn)差/差/極差/中斷/未知 |
onVoiceVolumeChanged
音量變化通知
@objc optional func onVoiceVolumeChanged(uid: String, volume: Int32)
參數(shù)詳情:
參數(shù) | 類(lèi)型 | 含義 |
uid | String | 當(dāng)前講話(huà)人的uid |
volume | Int32 | 音量[0-255] |
onUserSubtitleNotify
用戶(hù)提問(wèn)被智能體識(shí)別結(jié)果的通知
@objc optional func onUserSubtitleNotify(text: String, isSentenceEnd: Bool, sentenceId: Int)
參數(shù)詳情:
參數(shù) | 類(lèi)型 | 含義 |
text | String | 被智能體識(shí)別出的提問(wèn)文本 |
isSentenceEnd | Bool | 當(dāng)前文本是否為這句話(huà)的最終結(jié)果 |
sentenceId | Int | 當(dāng)前文本屬于的句子ID |
onVoiceAgentSubtitleNotify
智能體回答結(jié)果通知
@objc optional func onVoiceAgentSubtitleNotify(text: String, isSentenceEnd: Bool, userAsrSentenceId: Int)
參數(shù)詳情:
參數(shù) | 類(lèi)型 | 含義 |
text | String | 智能體回答的文本 |
isSentenceEnd | Bool | 當(dāng)前文本是否為此次回答的最后一句 |
userAsrSentenceId | Int | 回答用戶(hù)問(wèn)題的句子ID |
onVoiceIdChanged
當(dāng)前通話(huà)的音色發(fā)生了改變
@objc optional func onVoiceIdChanged(voiceId: String)
參數(shù)詳情:
參數(shù) | 類(lèi)型 | 含義 |
voiceId | String | 當(dāng)前音色I(xiàn)d |
onVoiceInterrupted
當(dāng)前通話(huà)的語(yǔ)音打斷是否啟用
@objc optional func onVoiceInterrupted(enable: Bool)
參數(shù)詳情:
參數(shù) | 類(lèi)型 | 含義 |
enable | Bool | 是否啟用 |
onAgentAvatarFirstFrameDrawn
智能體數(shù)字人首幀渲染
@objc optional func onAgentAvatarFirstFrameDrawn()
onHumanTakeoverWillStart
當(dāng)真人即將接管當(dāng)前智能體
@objc optional func onHumanTakeoverWillStart(takeoverUid: String, takeoverMode: Int)
參數(shù)詳情:
參數(shù) | 類(lèi)型 | 含義 |
takeoverUid | String | 真人uid |
takeoverMode | Int | 1:表示使用真人音色輸出;0:表示使用智能體音色輸出 |
onHumanTakeoverConnected
當(dāng)真人接管已經(jīng)接通
@objc optional func onHumanTakeoverConnected(takeoverUid: String)
參數(shù)詳情:
參數(shù) | 類(lèi)型 | 含義 |
takeoverUid | String | 真人uid |
ARTCAICallEngineFactory詳情
createEngine
創(chuàng)建默認(rèn)的引擎實(shí)例
public static func createEngine() -> ARTCAICallEngineInterface