本文將介紹如何通過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', '~> x.x.x'
# 需要整合AliVCInteractionMessage,版本最低是1.7.0
pod 'AliVCInteractionMessage', '~> x.x.x'
...
end說明
ARTC SDK最低適配版本為7.1.0,最新版本:7.8.0。
AICallKit SDK最新版本:2.9.0。
AliVCInteractionMessage最新版本:1.8.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智能體的訊息播放狀態改變
}