实现云呼叫流程

更新时间: 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 方式引入:

    jsimport 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()
此文档是否对你有帮助?
有帮助
去反馈
  • 前提条件
  • 实现云呼叫
  • 1. 引用文件
  • 2. 创建UA对象
  • 3. UA登陆
  • 4. 注销
  • 5. 销毁实例