iOS使用指南

本文将介绍如何将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

获取当前通话的UserId

isOnCall

是否通话中

agentInfo

获取当前智能体信息

agentState

获取当前智能体状态

delegate

设置和获取回调事件

call

开始通话

handup

挂断

setAgentView

设置智能体渲染视图,及缩放模式

interruptSpeaking

打断智能体讲话

enableVoiceInterrupt

开启/关闭智能打断

switchVoiceId

切换音色

enableSpeaker

开启/关闭扬声器

enablePushToTalk

开启/关闭对讲机模式

startPushToTalk

对讲机模式下,开始讲话

finishPushToTalk

对讲机模式下,结束讲话

cancelPushToTalk

对讲机模式下,取消这次讲话

muteMicrophone

静音/取消禁音麦克风

visionConfig

视觉理解通话参数配置

muteLocalCamera

关闭/取消关闭摄像头。

switchCamera

切换前后摄像头

parseShareAgentCall

解析一个分享的智能体信息

generateShareAgentCall

启动一个分享的智能体通话

getRTCInstance

获取RTC引擎

destroy

释放资源

ARTCAICallEngineDelegate

引擎回调事件

onErrorOccurs

发生了错误

onCallBegin

通话开始

onCallEnd

通话结束

onAgentVideoAvailable

智能体视频是否可用

onAgentAudioAvailable

智能体音频是否可用

onPushToTalk

当前通话的对讲机模式是否启用

onAgentWillLeave

当前智能体即将离开(结束当前通话)

onReceivedAgentCustomMessage

收到当前智能体发过来的自定义消息

onAgentStateChanged

智能体状态改变

onNetworkStatusChanged

网络状态改变

onVoiceVolumeChanged

音量变化

onUserSubtitleNotify

用户提问被智能体识别结果的通知

onVoiceAgentSubtitleNotify

智能体回答结果通知

onVoiceIdChanged

当前通话的音色发生了改变

onVoiceInterrupted

当前通话的语音打断是否启用

onAgentAvatarFirstFrameDrawn

智能体数字人首帧渲染

onHumanTakeoverWillStart

当真人即将接管当前智能体

onHumanTakeoverConnected

当真人接管已经接通

ARTCAICallEngineFactory

引擎创建工厂

createEngine

创建默认的引擎实例

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