通过阅读本文,您可以了解如何通过集成AICallKit SDK初始化引擎并启动通话以及通话结束后如何挂断。
使用说明
本示例主要旨在帮助您在不含UI集成的情况下,如何利用API实现该功能。
您需要提前集成AICallkit SDK。如何集成,请参见Android集成SDK、iOS集成SDK、Web集成SDK。
流程说明
在进入通话调用call()
方法前,需要通过调用generateAIAgentCall
接口启动一个通话实例。generateAIAgentCall接口详情,请参见GenerateAIAgentCall - 生成AI智能体通话实例。
在创建及初始化引擎时,具体操作流程如下:
创建引擎实例,并作为成员变量。
设置回调。
初始化配置,包括是否要禁麦、是否要启用听筒、是否要使用前置摄像头等。
通话设置:
如果是数字人智能体,为数字人设置渲染视图。
如果是视觉理解智能体,需要设置预览画面及模式。
示例代码
Android
// 定义成员变量
ARTCAICallEngine mARTCAICallEngine = null;
// 创建及初始化engine实例
void setupEngine(Context context) {
// 初始化
// context -> Android Context
// userId -> 进入rtc频道的用户id
mARTCAICallEngine = new ARTCAICallDepositEngineImpl(context, userId);
// 设置回调
mARTCAICallEngine.setEngineCallback(mCallEngineCallbackWrapper);
// 设置engine的启动参数
ARTCAICallEngine.ARTCAICallConfig artcaiCallConfig = new ARTCAICallEngine.ARTCAICallConfig();
// 如果有临时的智能体ID,可以配置
artcaiCallConfig.aiAgentId = aiAgentId;
mARTCAICallEngine.init(artcaiCallConfig);
// 指定智能体的类型:纯语音、数字人、视觉理解
mARTCAICallEngine.setAiAgentType(aiAgentType);
// 如果是数字人类型,则需要配置数字人显示的视图容器
if (aiAgentType == AvatarAgent) {
mARTCAICallEngine.setAvatarAgentView(
avatarlayer,
new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT)
);
}
// 如果是视觉理解类型,则需要配置本地视频预览显示的视图容器
else if (aiAgentType == VisionAgent) {
mARTCAICallEngine.setVisionPreviewView(previewLayer,
new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT)
);
}
}
// 启动智能体后,开始通话
void start() {
// 这里启动智能体,成功后调用call进行通话
// 通过OpenAPI获取到:channle_id, ai_agent_user_id, agent_instance_id, rtc_auth_token
// 开始通话
mARTCAICallEngine.call(rtc_auth_token, agent_instance_id,
ai_agent_user_id, channle_id);
}
// 结束通话,同时关闭智能体
void handup() {
mARTCAICallEngine.handup();
}
// 回调处理(仅示例不分核心的回调操作)
ARTCAICallEngine.IARTCAICallEngineCallback mCallEngineCallbackWrapper = new ARTCAICallEngine.IARTCAICallEngineCallback() {
@Override
public void onErrorOccurs(ARTCAICallEngine.AICallErrorCode errorCode) {
// 通过过程发生了错误,进行挂断
mARTCAICallEngine.handup();
}
@Override
public void onCallBegin() {
// 通话开始(入会)
}
@Override
public void onCallEnd() {
// 通话结束(离会)
}
};
iOS
// 引入SDK
import ARTCAICallKit
// 创建engine实例
let engine = ARTCAICallEngineFactory.createEngine()
let agentType: ARTCAICallAgentType
let userId: String
deinit {
// 释放engine
self.engine.destroy()
}
public func setup() {
// 设置回调
self.engine.delegate = self
// 如果是数字人类型,则需要配置数字人显示的视图配置
if self.agentType == .AvatarAgent {
let viewConfig = ARTCAICallViewConfig(view: self.avatarAgentView)
self.engine.setAgentViewConfig(viewConfig: viewConfig)
}
// 如果是视觉理解类型,则需要配置本地视频预览配置
else if self.agentType == .VisionAgent {
// 这里frameRate设置为5,需要根据控制台上的智能体的抽帧率(一般为2)进行调整,最大不建议超过15fps
// bitrate: frameRate超过10可以设置为512
let visionConfig = ARTCAICallVisionConfig(preview: self.visionCameraView, viewMode: .Auto, frameRate: 5, bitrate: 340)
self.engine.visionConfig = visionConfig
}
}
// 启动智能体后,开始通话
public func start() {
// 这里启动智能体,成功后调用call进行通话
// 通过OpenAPI获取到:channle_id, ai_agent_user_id, agent_instance_id, rtc_auth_token
// 开始通话
let agentInfo = ARTCAICallAgentInfo(agentType: self.agentType, 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 {
// 成功通话
}
}
}
// 结束通话,同时关闭智能体
public func handup() {
// true表示智能体立即结束通话
self.engine.handup(true)
}
// 回调处理
func onErrorOccurs(code: ARTCAICallErrorCode) {
// 通过过程发生了错误,进行挂断
self.engine.handup()
}
func onCallBegin() {
// 通话开始
}
func onCallEnd() {
// 通话结束
}
Web
import ARTCAICallEngine from 'aliyun-auikit-aicall';
let engine;
// 创建及初始化 Engine 实例
const setup = () => {
engine = new ARTCAICallEngine();
engine.on('errorOccurred', (errorCode) => {
// 通过过程发生了错误,进行挂断和其他处理
engine.handup();
console.error('AICallErrorOccurred', errorCode);
});
engine.on('callBegin', () => {
// 智能体开始通话
console.log('AICallBegin');
});
engine.on('callEnd', () => {
// 智能体通话结束
console.log('AICallEnd');
});
};
const start = async () => {
// 这里启动智能体,成功后调用call进行通话
try {
engine.call(
// 用户 Id
userId,
// 智能体信息
// agentInfo.agentType 智能体类型, 纯语音、数字人、视觉理解
// agentInfo.instanceId 智能体实例 Id,对应 OpenAPI 中的 agent_instance_id
// agentInfo.channelId 智能体通道 Id,对应 OpenAPI 中的 channel_id
// agentInfo.userId 智能体用户 Id,对应 OpenAPI 中的 ai_agent_user_id
// agentInfo.rtcToken 智能体 RTC 鉴权 Token,对应 OpenAPI 中的 rtc_auth_token
// agentInfo.reqId (可选)智能体请求 Id,对应 OpenAPI 中的 req_id
agentInfo,
// 智能体配置,可选,如果配置了,则覆盖 Engine 实例的配置
// config.muteMicrophone 是否静音麦克风,默认 false
// config.muteCamera 视理解模式默认是否关闭摄像头,默认 false
// config.previewElement 视觉理解模式本地预览元素
// config.cameraConfig 视觉理解模式本地摄像头配置 (width, height, frameRate, bitrate)
// config.templateConfig 参考:https://help.aliyun.com/zh/ims/developer-reference/api-ice-2020-11-09-generateaiagentcall
config
);
// 成功通话
} catch (error) {
// 处理错误
}
};
// 结束通话,同时关闭智能体
const handup = () => {
engine.handup();
};
文档内容是否对您有帮助?