客户可通过接入Web SDK快速实现浏览器上的音频通话及视频通话等功能,依托阿里的研发资源,我们为客户提供安全、可靠、弹性、低成本的实时通信服务。

功能特性

提供浏览器端VoIP to PSTN,PSTN to VoIP, VoIP to VoIP通话场景的服务,接入方可根据需求选择对应的应用场景。

开发准备

客户端需要从阿里云申请融合通信账号后才能接入,为了保证安全性,融合通信SDK通过服务端下发的临时token作为身份标识与服务进行交互。临时token可通过融合通信服务pop接口从阿里云获得(详见服务端接入文档),并且具有时效性。SDK在token即将失效或其他需求而需要更新token时,会通过回调通知接入方,接入方需自行实现接口获取最新token并传递给SDK。

npm地址

1.7.0版本

使用环境

使用环境如下:

  • 融合通信服务仅支持在https环境使用。
  • 请保证在音频设备完好且允许麦克风使用的情况下此可以使用融合通信服务。
  • 浏览器限制:
    浏览器 版本
    Chrome 不低于65版本
    Safari 不低于11版本
    Firefox 不低于65版本
    说明 为保证稳定性,建议使用最新版chrome使用该功能。

快速开始

web快速开始
  1. 开发环境配置
    npm install aliyun-voip-web-sdk -S
  2. 导入SDK
    import AlicomRTC from 'aliyun-voip-web-sdk';

创建实例

创建AlicomRTC实例
初始化实例
const rtc = new AlicomRTC();
设置AlicomRTC的参数与回调(可选)
/**
 * 设置服务监听
 */
rtc.setServiceListener({
  /**
   * 服务连接成功,当前处于可用状态
   */
  onServiceAvailable: function () {
    // 此时可以开始呼叫操作
  },

  /**
   * 服务连接失败、或者连接断开了,当前处于不可用状态,服务正在销毁。
   * @param errCode {number} 错误码
   * @param errMsg {string} 错误描述
   */
  onServiceUnavailable: function (errCode, errMsg) {
  },

  /**
   * 服务闲时
   * @param errCode {number} 错误码
   * @param errMsg {string} 错误描述
   */
  onServiceIdle: function (errCode, errMsg) {
  },

  /**
   * 作为被叫,收到点对点音频来电
   * @param call {Call} 表示这通来电的call实例
   */
  onReceivingAudioCall: function(call) {
    // todo: 已有通话的情况下拒绝新呼入,或是挂断当前通话接听
  },
})
回调函数说明
  • onServiceAvailable

    服务连接成功回调,表示当前处于可用状态。可在回调函数中开始呼叫操作。

  • onServiceUnavailable

    服务连接失败回调,表示当前处于不可用状态,服务正在销毁。

  • onServiceIdle

    服务闲时,表示当前服务出于空闲状态。可在回调函数中设置服务未初始化空闲状态。

  • onReceivingAudioCall

    作为被叫,收到点对点音频来电。可在回调函数中进行 已有通话的情况下拒绝新呼入,或是挂断当前通话接听的操作。

回调函数的参数说明
  • onReceivingAudioCall:参数call 表示这通来电的call实例。
  • onServiceUnavailable onServiceIdle参数 errCode错误码 errMsg 错误描述。
连接服务
/**
 * 使用rtcId初始化AlicomRTC实例
 * @param rtcId 融合通信账号ID 账号由服务端的AddRtcAccount接口生成(Module字段)
 */
rtc.initWithRtcId(rtcId, {
  updateToken: function (tokenHandler) {
    var token = {} // todo: 通过服务端接口获取Token
    tokenHandler.setToken(token)
  }
})
参数数名
  • rtcId:融合通信账号ID 账号由服务端的AddRtcAccount接口生成(Module字段)
  • updateToken: 通知客户更新token的回调事件

在此回调事件中,客户可向客户服务端获取token(即GetRtcToken接口的出参Module字段 详见服务端文档),并通过 tokenHandler.setToken(token)回传至sdk。

初始初化通话实例

当ServiceListener中的onServiceAvailable回调被唤起时,表示服务已经连接成功,此时可以开始创建通话实例,设置并开始通话

/**
 * 创建VoIP2Pstn的Call实例,每一次通话都需要生成一个Call实例
 */
const pstnCall = rtc.createVoIP2PstnCall(calleeShowNumber, calleePhoneNumber)

/**
 * 创建VoIP2VoIP的Call实例,每一次通话都需要生成一个Call实例
 */
const voipCall = rtc.createVoIP2VoIPCall(calleeRtcId)
参数说明
  • calleeShowNumber 被叫号显 被叫收到电话时显示的来电号码
  • calleePhoneNumber 被叫号码
  • calleeRtcId 被叫的rtcId 即被叫的融合通信账号ID

通话相关回调设置

/**
 * 通话相关回调设置
 */
pstnCall.setCallListener({
  /**
   * 电话已通知到被叫方,被叫振铃中
   * @param talk 通话对象
   */
  onCalleeRinging(talk: Talk): void;

  /**
   * 被叫已接听电话,正在连接中。(拨打类型为PSTN与呼叫中心的电话时无此回调)
   * @param talk 通话对象
   */
  onCalleeConnecting(talk: Talk): void;

  /**
   * 电话拨通了可以正常通话了。主叫中代表被叫已接听,被叫中表示电话已接听
   * @param talk 通话对象
   */
  onActive(talk: Talk): void;

  /**
   * 对端传来DTMF信息,每次回调只传入一个字符,如果是一连串输入的话则会多次回调,需要接入方自行根据时间戳处理
   * @param dtmf 对端传入的DTMF信息
   * @param timestamp 时间戳
   * @param talk 通话对象
   */
  onDtmfData(dtmf: string, timestamp: number, talk: Talk): void;
   /**
   * 通话成功连接到媒体服务器
   * @param talk
   */
  onConnected(talk: Talk): void;

  /**
   * 通话正在断开
   * @param errCode 错误码
   * @param errMsg 错误消息
   * @param talk 通话对象
   */
  onStopping(errCode: number, errMsg: String, talk: Talk): void;

  /**
   * 通话已结束
   * @param errCode 错误码
   * @param errMsg 错误消息
   * @param talk 通话对象
   */
  onStopped(errCode: number, errMsg: string, talk: Talk): void;

  /**
   * 通话中网络质量消息
   * @param quality 质量
   * @param talk 通话对象
   */
  onNetworkQuality(quality: NetworkQuality, talk: Talk): void;

  /**
   * 通话中的监控数据回调
   * @param monitorStats 监控数据
   * @param talk 通话对象
   */
  onMediaStatistics(monitorStats: any, talk: Talk): void;
})
参数说明
  • onCalleeRinging 电话已通知到被叫方,被叫振铃中;
  • onCalleeConnecting 被叫已接听电话,正在连接中;
  • onActive 电话拨通了可以正常通话了。被叫已接听;
  • onDtmfData 对端传来DTMF信息每次回调只传入一个字符,如果是一连串输入的话则会多次回调,需要接入方自行根据时间戳处理;
  • onConnected 通话成功连接到媒体服务器;
  • onStopping 通话正在断开;
  • onStopped 通话已结束;
  • onNetworkQuality 通话中网络质量消息;
  • onMediaStatistics 通话中的监控数据回调。

主叫开始呼叫 / 被叫开始接听

pstnCall.start()

停止呼叫/通话

pstnCall.stop()

销毁实例

rtc.destroy()