实现云呼叫流程
更新时间: 2022/02/21 06:06:09
当您成功初始化 SDK 之后,您可以简单体验本产品的基本业务流程。本文档为您展示云呼叫的基本业务流程。
前提条件
请确认您已完成以下操作:
请勿使用 HTTP 协议在 localhost 之外访问项目,否则 Web 浏览器控制台会报错 NOT_SUPPORT 41001
。
实现云呼叫
本节主要介绍如何使用 SDK 实现云呼叫通话。主要流程如下图所示:
NECCC 中有两个重要类:
-
UA
代表一个云呼叫终端,UA是一个账号的载体,具备登陆、呼叫、接受呼叫的能力。
-
session
代表一个呼叫会话。session 类的方法用于定义和管理会话,控制会话的生命周期,比如接听、挂断等,控制会话的功能,比如:mute、hold等
1. 引用文件
在项目相应的前端页面文件中,对 NECC_Web_SDK_v1.0.0.js
文件进行引用。
-
import 方式引入:
js
import NECCC from '../../NECC_Web_SDK_v1.0.0.js'
-
script 标签引入:
js
<script src="./NECC_Web_SDK_v1.0.0.js"></script>
2. 创建UA对象
执行 UA
方法创建 UA 实例。接口为单例模式, 只有第一次调用会初始化一个实例,后续重复初始化时,永远返回同一份实例。
js //示例
//创建client实例
const ua = NECCC.UA({
debug: true, //是否开启调试日志
});
ua.on('connecting', ()=>{
console.warn('服务器连接中')
})
ua.on('connected', ()=>{
console.log('服务器连接成功')
})
ua.on('disconnected', {code, reason}=>{
console.log(`服务器连接断开, code: ${code}, reason: ${reason}`)
})
ua.on('registered', ()=>{
console.log('UA登陆成功')
})
ua.on('unregistered', data=>{
console.log('UA注销成功: ', data)
})
ua.on('registrationFailed', e=>{ //e是sdk自定义的Error对象,具体格式参考API文档
console.error('UA登陆失败: ', e.message) //message是string格式,融合了错误码和原因,如果想单独获取code或者reason,参考下面
console.error(`UA登陆失败,code: ${e.code_}, reason: ${e.reason_}`)
})
ua.on('kickout', ()=>{
console.log('UA被踢了') //原因:1、相同的账号在别的地方上登录了,你被顶掉了;2、调用服务器接口主动把该UA踢掉了
})
ua.on('error', (e)=>{ //e是sdk自定义的Error对象,具体格式参考API文档
console.error('sdk发生了未知错误: ', e.message) //message是string格式,融合了错误码和原因,如果想单独获取code或者reason,参考下面
console.error(`sdk发生了未知错误,code: ${e.code_}, reason: ${e.reason_}`)
})
ua.on('newRTCSession', {origination, originator, session}=>{
//无论是自己呼叫别人还是别人呼叫自己,UA都能收到该事件
//originator:呼叫方向描述,值为'local' | 'remote'。自己呼叫别人,该值为'local';别人呼叫自己,该值为'remote'
//session:会话对象,负责管理会话
if (origination === 'local') {
console.log('ua呼叫别人时,收到了newRTCSession事件通知,用户主动接听')
session.accept().then(res=>{
console.log('接听成功')
}).catch(e=>{
console.error('接听失败: ', e.message) //message是string格式,融合了错误码和原因,如果想单独获取code或者reason,参考下面
console.error(`接听失败: ${e.code_}, reason: ${e.reason_}`)
})
} else {
console.log('收到他人的呼叫,建议用户手动接听')
}
//监听sesson的一些事件
initSessionEvent()
})
ua.on('ringing', {caller, callee, origination, originator}=>{
console.warn('对端振铃 ringing事件通知: ', data)
//caller:主叫号码。自己呼叫别人,则是自己的account;别人呼叫自己,则是对端的号码
//callee:被叫号码。自己呼叫别人,则是自己要呼叫的号码;别人呼叫自己,则是自己的account
//origination:呼叫方向描述,值为'local' | 'remote'。自己呼叫别人,该值为'local';别人呼叫自己,该值为'remote'
//originator:呼叫方向,值为'outgoing' | 'incoming'。自己呼叫别人,该值为'outgoing';别人呼叫自己,该值为'incoming'
})
3. UA登陆
创建完成UA实例之后,需要发起登陆流程,只有登陆完成之后,才能使用sdk的呼叫功能,才能接收他人的呼叫通知。
js //ua初始化
//初始化依赖的参数信息
const appId = ''; //即云信服务的唯一标识appKey, 在云信管理后台应用信息中查看
const account = ''; //帐号, 应用内唯一
const sipPassword = ''; //该账号对于的密码
const appSecret = ''; //该应用对应的凭证,在云信管理后台应用信息中查看
const nonce = Math.ceil(Math.random() * 1e9); //用于生成token,可以是随机数
const curTime = Math.ceil(Date.now()); //用于生成token,当前时间戳
//生成该accout的认证token,采用sha1算法,参数是:appSecret、sipPassword、nonce、curTime组成的字符串
const token = sha1(`${appSecret}${sipPassword}${nonce}${curTime}`);
ua.init({
appId,
account,
token,
nonce,
curTime,
register: true, //初始化完成后是否主动登陆,该值如果设置为false,需要用户在ua.init({})之后,主动调用ua.register()接口
no_answer_timeout: 60 //接收呼叫时,自己应答的超时时间,sdk默认是60秒(即60s之内,ua不应答,sdk会主动挂断该呼叫)
}).then(()=>{
console.log('初始化成功')
}).catch(e=>{
console.error('UA 初始化登录失败: ', e.message) //message是string格式,融合了错误码和原因,如果想单独获取code或者reason,参考下面
console.error('UA 初始化登录失败的错误码code: ', e.code_)
console.error('UA 初始化登录失败的错误原因reason: ', e.reason_)
})
4. 注销
通过 unregister() 接口注销该账号。
js ua.unregister()
//用户自行处理上层业务应用
5. 销毁实例
当确定不再使用UA实例时,可以释放对应的对象资源。
js ua.destroy()
此文档是否对你有帮助?