文档

Web开发文档

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

推荐的交互流程如下:

二、获取SDK

npm安装:

npm install aliyun-voip-web-sdk -S
                        

开源Demo项目:

VoIP Web SDK的Demo项目已开源至Github社区,您可通过Demo演示快速进入开发,VoIP Web Demo

三、快速开始

1、创建实例

import AlicomRTC from 'aliyun-voip-web-sdk'
/**
 * 创始实例
 */
var rtc = new AlicomRTC()
                        

2、设置参数与回调(可选)

/**
 * 设置服务监听
 */
rtc.setServiceListener({
  /**
   * 服务连接成功,当前处于可用状态
   */
  onServiceAvailable: function () {
    // 此时可以开始呼叫操作
  },
  /**
   * 服务连接失败、或者连接断开了,当前处于不可用状态,服务正在销毁。
   * @param errCode {number} 错误码
   * @param errMsg {string} 错误描述
   */
  onServiceUnavailable: function (errCode, errMsg) {
  },
  /**
   * 服务闲时
   * @param errCode {number} 错误码
   * @param errMsg {string} 错误描述
   */
  onServiceIdle: function (errCode, errMsg) {
  },
})
/**
 * 可选,设置默认的呼叫超时时间
 */
rtc.setDefaultCallTimeout(30)
                        

3、连接服务

/**
 * 使用RtcId初始化AlicomRTC实例
 */
rtc.initWithRtcId('RTCID', {
  updateToken: function (tokenHandler) {
    var token = {} // todo: 通过服务端接口获取Token
    tokenHandler.setToken(token)
  }
})
                        

4、始初化通话实例

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

/**
 * 创建Call实例,每一次通话都需要生成一个Call实例
 */
var pstnCall = rtc.createVoIP2PstnCall('被叫号显', '被叫号码')
/**
 * 开启服务端录音(可选)
 */
pstnCall.setServerRecordEnabled(true)
/**
 * 本地禁音(可选)
 */
pstnCall.muteLocalAudio()
/**
 * 本地取消禁音(可选)
 */
pstnCall.unmuteLocalAudio()
                        

5、通话状态管理

/**
 * 设置Call状态监听
 */
pstnCall.setCallListener({
  /**
   * 电话已通知到被叫方,被叫振铃中
   * @param talk {Talk} 通话对象
   */
  onCalleeRinging: function (talk) {},
  /**
   * 被叫已接听电话,正在连接中
   * @param talk {Talk} 通话对象
   */
  onCalleeConnecting: function (talk) {},
  /**
   * 电话拨通了可以正常通话了。被叫已接听
   * @param talk {Talk} 通话对象
   */
  onActive: function (talk) {},
  /**
   * 对端传来DTMF信息,每次回调只传入一个字符,如果是一连串输入的话则会多次回调,需要接入方自行根据时间戳处理
   * @param dtmf {string} 对端传入的DTMF信息
   * @param timestamp {number} 时间戳
   * @param talk {Talk} 通话对象
   */
  onDtmfData: function (dtmf, timestamp, talk) {},
})
                        

6、开始呼叫

pstnCall.start()
                        

7、停止呼叫/通话

pstnCall.stop()
                        

8、销毁实例

rtc.destroy()
                        

四、类型定义

export = AlicomVoIP
export as namespace AlicomVoIP
declare namespace AlicomVoIP {
  /**
   * 网络质量
   */
  export enum NetworkQuality {
    /**
     * 好
     */
    HIGH,
    /**
     * 中
     */
    MEDIUM,
    /**
     * 差
     */
    LOW,
  }
  /**
   * RTC Token,由服务端返回
   */
  export type Token = {
    tokenData: string,
    cleansession: boolean,
    clientId: string,
    conferenceTopic: string,
    host: string,
    sdkClientPort: number,
    serverId: string,
    meetingEventKeepAliveInterval: number,
    phoneTopic: string,
    port: number,
    reconnectTimeout: number,
    registerTime: number,
    sgwServerTopic: string,
    tlsport: number,
    useTLS: boolean,
    username: string,
    password: string,
    vRtcId: string,
  }
  /**
   * 通话角色:被叫
   */
  export type Callee = {
    isPstn: boolean,
    phoneNumber: string,
    showNumber: string,
    uuid: string,
  }
  /**
   * 所有类型通话事件监听回调的基类,定义了所有通话的公共事件回调。。
   * @see CallListener
   */
  export interface TalkListener {
    /**
     * 通话成功连接到媒体服务器
     * @param talk
     */
    onConnected(talk: Talk): void
    /**
     * 通话正在断开
     * @param errCode 错误码
     * @param errMsg 错误消息
     * @param talk 通话对象
     */
    onStoppping(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
  }
  /**
   * 电话生命周期中的所有回调
   * @see Call
   */
  export interface CallListener extends TalkListener {
    /**
     * 电话已通知到被叫方,被叫振铃中
     * @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
  }
  export interface Talk {
    /**
     * 开始呼叫
     */
    start(): void
    /**
     * 终止呼叫
     */
    stop(): void
    /**
     * 禁音
     */
    muteLocalAudio(): void
    /**
     * 取消禁音
     */
    unmuteLocalAudio(): void
    /**
     * 本地是否禁音
     */
    isLocalAudioMuted(): boolean
        /**
     * 发送dtmf
     * @param dtmf dtmf信息,只能是0-9、*、#,最大长度不超过32位
     */
    sendDtmfData(dtmf: string): boolean
  }
  /**
   * 表示具体的一通点对点音频通话。
   * 生命周期从创建实例开始,至通话停止结束,不能重复使用。
   * 通话生命周期中的事件会在回调{@link CallListener}中体现
   * @see CallListener
   */
  export interface Call extends Talk {
    /**
     * 获取被叫信息
     */
    getCallee(): Callee
    /**
     * 设置通话状态Listener
     * @param callListener
     */
    setCallListener(callListener: CallListener): void
    setServerRecordEnabled(enabled: boolean): void
  }
  /**
   * 整个服务生命周期的回调。在服务连接成功或者断开时回调。
   */
  export interface ServiceListener {
    /**
     * 服务连接成功,当前处于可用状态
     */
    onServiceAvailable(): void
    /**
     * 服务连接失败、或者连接断开了,当前处于不可用状态,服务正在销毁,此时不能调用init操作。
     * @param errCode 错误码
     * @param errMsg 错误描述
     */
    onServiceUnavailable(errCode: number, errMsg: string): void
    /**
     * 服务闲时
     * @param errCode 错误码
     * @param errMsg 错误描述
     */
    onServiceIdle(errCode: number, errMsg: string): void
  }
  /**
   * 用户成功获取token后调用{@link TokenHandler#setToken(Token)}设置token
   * @see TokenUpdater
   */
  export interface TokenHandler {
    /**
     * 将已获取的token传入给alicomRTC
     * @param token token以及其他必要的初始化参数
     */
    setToken(token: Token): void
  }
  /**
   * 需要接入方实现的获取{@link Token}的具体实现
   * @see Token
   */
  export interface TokenUpdater {
    /**
     * 通知客户更新token
     * @param tokenHandler
     */
    updateToken(tokenHandler: TokenHandler): void
  }
  /**
   * AlicomRTC
   */
  export class AlicomRTC {
    /**
     * 设置监听回调。用于监听服务在整个生命周期中的事件通知。
     * @param listener
     */
    setServiceListener(listener: ServiceListener): void
    /**
     * 创建VoIP2PSTN呼叫
     * @param calleeShowNumber 被叫号显
     * @param calleePhoneNumber 被叫号码
     * @param extend
     */
    createVoIP2PstnCall(calleeShowNumber: string, calleePhoneNumber: string, extend?: string): Call
    /**
     * 使用云通信音视频账号模式初始化服务并开始连接。连接的结果会在回调{@link ServiceListener}中体现。使用结束后需调用{@link AlicomRTC#destroy()}释放资源
     * @param rtcId 云通信音视频账号id
     * @param tokenUpdater 接入方传入的获取token的具体实现
     */
    initWithRtcId(rtcId: string, tokenUpdater: TokenUpdater): void
    /**
     * 设置默认的呼叫超时时间,限制在30-90秒之间
     * @param seconds 呼叫超时时间,单位为秒
     */
    setDefaultCallTimeout(seconds: number): void
    /**
     * 停止服务并销毁
     */
    destroy(): void
  }
}
                        

四、错误码

错误码

数值

原因

ERROR_MQTT_CONNECT_FAIL

1000100

mqtt连接失败

ERROR_UPLOAD_TOKEN_FAIL

1000104

token上传失败

ERROR_LOCAL_STOP

2000000

本地主动挂断

ERROR_REMOTE_HANGUP

2000099

对端主动挂断

ERROR_CALL_SELF

2000100

拨打自己

ERROR_CALL_EMPTY

2000101

拨打电话为空

ERROR_REMOTE_REFUSE

2000106

主叫时,对端拒绝应答

ERROR_NO_ANSWER

2000108

被叫无人接听

ERROR_SERVICE_UNAVAILABLE

2000113

AlicomRTC服务不可用

ERROR_LOCAL_DESTROY

2000116

本地主动销毁服务

ERROR_TIME_OUT

2000102

joinChannel超时

ERROR_NETWORK_INVALID

2000121

网络异常

ERROR_MICROPHONE_NO_PERMISSION

2000131

麦克风无权限

ERROR_SERVER_BASE

3000000

服务端返回业务异常的错误基准

ERROR_SERVER_KICKED

3110000

账号被登录或被踢

ERROR_SERVER_UNAVAILABLE

3110001

服务异常

ERROR_MEDIA_BASE

4000000

媒体SDK返回异常的错误基准

  • 本页导读 (1)
文档反馈