このトピックでは、AICallKit SDK を使用してチャットエージェントを iOS アプリケーションに統合する方法について説明します。
動作環境
Xcode 16.0 以降。 最新の安定バージョンを推奨します。
CocoaPods 1.9.3 以降。
iOS 11.0 以降を実行する物理デバイス。
SDK の統合
target 'YourTarget' 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説明
Alibaba Real-Time Communication (ARTC) SDK の最小互換バージョンは 7.1.0 です。 最新バージョンは 7.8.0 です。
AICallKit SDK の最新バージョンは 2.9.0 です。
AliVCInteractionMessage の最新バージョンは 1.8.0 です。
プロジェクト構成
マイクとカメラの権限を追加します。 プロジェクトの info.plist ファイルを開き、NSMicrophoneUsageDescription と NSCameraUsageDescription の権限を追加します。
プロジェクト設定を開き、[署名 & 機能] タブで [バックグラウンドモード] を有効にします。この設定は強く推奨されます。そうしないと、アプリケーションがバックグラウンドに移行したときに通話を継続できず、アプリケーションは API を呼び出して通話を終了する必要があります。
SDK の使用例
// SDK をインポート
import ARTCAICallKit
// エンジンインスタンスを作成
let engine: ARTCAIChatEngineInterface = {
return ARTCAICallEngineFactory.createChatEngine()
}()
// コールバックを設定
self.engine.delegate = self
// チャットを開始
// userId には、ログイン後のアプリのユーザー ID を使用します。
let userId = "xxx"
// deviceId を設定
let deviceId = UIDevice.current.identifierForVendor?.uuidString
let userInfo = ARTCAIChatUserInfo(userId, deviceId)
// エージェントを設定します。 agentId は 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 呼び出しの例については、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) {
// チャットエージェントの接続状態が変化します。
}
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) {
// チャットエージェントから返信が受信されます。 このコールバックは、新しい返信があった場合、または返信プロセス中にメッセージのステータスが変更された場合にトリガーされます。
}
public func onAgentResponeStateChange(state: ARTCAIChatAgentResponseState, requestId: String?) {
// チャットエージェントからの応答が変化します。
}
public func onMessagePlayStateChange(message: ARTCAIChatMessage, state: ARTCAIChatMessagePlayState) {
// チャットエージェントのメッセージの再生状態が変化します。
}