语音通话 VOICECALL-Node.js:“呼叫状态通知API”代码样例

时间:2024-09-25 15:29:01

“呼叫状态通知API”代码样例

/**
 * 呼叫事件通知
 * 客户平台收到RTC业务平台的呼叫事件通知的接口通知
 */
//呼叫事件通知样例
var jsonBody = JSON.stringify({
    'eventType': 'callout',
    'statusInfo': {
        'sessionId': '1201_612_4294967295_20190124030424@callenabler245.huaweicaas.com',
        'timestamp': '2019-01-24 03:04:24',
        'caller': '+8613800000022',
        'called': '+8613800000021'
    }
});
console.log('jsonBody:', jsonBody);
/**
 * 呼叫事件通知
 * @brief 详细内容以接口文档为准
 * @param jsonBody
 */
function onCallEvent(jsonBody) {
    var jsonObj = JSON.parse(jsonBody); //将通知消息解析为jsonObj
    var eventType = jsonObj.eventType; //通知事件类型

    if ('fee' === eventType) {
        console.log('EventType error:', eventType);
        return;
    }

    if (!jsonObj.hasOwnProperty('statusInfo')) {
        console.log('param error: no statusInfo.');
        return;
    }
    var statusInfo = jsonObj.statusInfo; //呼叫状态事件信息

    console.log('eventType:', eventType); //打印通知事件类型

    //callout:呼出事件
    if ('callout' === eventType) {
        /**
         * Example: 此处以解析sessionId为例,请按需解析所需参数并自行实现相关处理
         *
         * 'timestamp': 该呼叫事件发生时RTC业务平台的UNIX时间戳
         * 'userData': 用户附属信息
         * 'sessionId': 通话链路的标识ID
         * 'caller': 主叫号码
         * 'called': 被叫号码
         */
        if (statusInfo.hasOwnProperty('sessionId')) {
            console.log('sessionId:', statusInfo.sessionId);
        }
        return;
    }
    //alerting:振铃事件
    if ('alerting' === eventType) {
        /**
         * Example: 此处以解析sessionId为例,请按需解析所需参数并自行实现相关处理
         *
         * 'timestamp': 该呼叫事件发生时RTC业务平台的UNIX时间戳
         * 'userData': 用户附属信息
         * 'sessionId': 通话链路的标识ID
         * 'caller': 主叫号码
         * 'called': 被叫号码
         */
        if (statusInfo.hasOwnProperty('sessionId')) {
            console.log('sessionId:', statusInfo.sessionId);
        }
        return;
    }
    //answer:应答事件
    if ('answer' === eventType) {
        /**
         * Example: 此处以解析sessionId为例,请按需解析所需参数并自行实现相关处理
         *
         * 'timestamp': 该呼叫事件发生时RTC业务平台的UNIX时间戳
         * 'userData': 用户附属信息
         * 'sessionId': 通话链路的标识ID
         * 'caller': 主叫号码
         * 'called': 被叫号码
         */
        if (statusInfo.hasOwnProperty('sessionId')) {
            console.log('sessionId:', statusInfo.sessionId);
        }
        return;
    }
    //collectInfo:放音收号结果事件,仅应用于语音通知场景
    if ('collectInfo' === eventType) {
        /**
         * Example: 此处以解析digitInfo为例,请按需解析所需参数并自行实现相关处理
         *
         * 'timestamp': 该呼叫事件发生时RTC业务平台的UNIX时间戳
         * 'sessionId': 通话链路的标识ID
         * 'digitInfo': 放音收号场景中,RTC业务平台对开发者进行放音收号操作的结果描述
         */
        if (statusInfo.hasOwnProperty('digitInfo')) {
            console.log('digitInfo:', statusInfo.digitInfo);
        }
        return;
    }
    //disconnect:挂机事件
    if ('disconnect' === eventType) {
        /**
         * Example: 此处以解析sessionId为例,请按需解析所需参数并自行实现相关处理
         *
         * 'timestamp': 该呼叫事件发生时RTC业务平台的UNIX时间戳
         * 'userData': 用户附属信息
         * 'sessionId': 通话链路的标识ID
         * 'caller': 主叫号码
         * 'called': 被叫号码
         * 'partyType': 挂机的用户类型,仅在语音回呼场景携带
         * 'stateCode': 通话挂机的原因值
         * 'stateDesc': 通话挂机的原因值的描述
         */
        if (statusInfo.hasOwnProperty('sessionId')) {
            console.log('sessionId:', statusInfo.sessionId);
        }
        return;
    }
}
//呼叫事件处理
onCallEvent(jsonBody); 
support.huaweicloud.com/devg-VoiceCall/rtc_04_0025.html