云服务器内容精选
-
“呼叫状态通知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);
-
“语音通知场景API”代码样例 /*jshint esversion: 6 */ var https = require('https'); var data = require('./data.js'); var util = require('./reqUtil.js'); /** * voiceNotifyAPI * @param displayNbr * @param calleeNbr * @param playInfoList * @returns */ function voiceNotifyAPI(displayNbr, calleeNbr, playInfoList) { if(displayNbr === undefined || displayNbr === null || calleeNbr === undefined || calleeNbr === null) { return; } if(playInfoList === undefined || playInfoList === null) { return; } var method = 'POST'; var uri = '/rest/httpsessions/callnotify/v2.0'; //v1.0 or v2.0 var xaksk = util.buildAKSKHeader(data.data.callnotify_appid, data.data.callnotify_secret); var options = util.createOptions(method, uri, null, xaksk); var body = { /* 必填参数 */ 'displayNbr': displayNbr,//主叫用户手机终端的来电显示号码。 'calleeNbr': calleeNbr,//被叫用户终端的来电显示号码。 'playInfoList': playInfoList//播放信息列表,最大支持5个,每个播放信息携带的参数都可以不相同。 /* 选填参数 */ // 'bindNbr': '+86123456789', //CallEnabler业务号码,即绑定号码 // 'statusUrl': 'aHR0cDovLzIxOC40LjMzLjU1Ojg4ODgvdGVzdA==', //要获取通话状态需要在请求中加入statusUrl // 'feeUrl': 'aHR0cDovLzIxOC40LjMzLjU1Ojg4ODgvdGVzdA==', //要获取话单需要在请求中加入feeUrl // 'returnIdlePort': 'false', //指示是否需要返回平台空闲呼叫端口数量 // 'userData': 'customerId123' //设置用户的附属信息 }; var req = https.request(options, function (res) { var resHeaders = JSON.stringify(res.headers); res.setEncoding('utf8'); res.on('data', function (chunk) { console.log(chunk); }); }); req.on('error', function(e) { console.error('problem with request: ' + e); }); console.log(JSON.stringify(body)); req.write(JSON.stringify(body)); req.end(); } /** * getPlayInfoList * @param notifyVoice * @param templateId * @param templateParas * @returns */ function getPlayInfoList(notifyVoice, templateId, templateParas) { var playInfoList = [{ 'notifyVoice': notifyVoice,//通知语音的放音文件名 'templateId': templateId,//语音通知模板ID,用于唯一标识语音通知模板。 'templateParas': templateParas,//语音通知模板的变量值列表,用于依次填充templateId参数指定的模板内容中的变量。 // 'collectInd': 0, //是否进行收号 // 'replayAfterCollection': 'false', //设置是否在收号后重新播放notifyVoice或templateId指定的放音 // 'collectContentTriggerReplaying': '1' //设置触发重新放音的收号内容 }]; return playInfoList; } var playInfoList = getPlayInfoList('notifyvoice.wav', 'xxxxxx', ['3', '人民公园正门']); voiceNotifyAPI('+8653159511234', '+8613500000001', playInfoList);
-
“呼叫状态通知API”代码样例 # -*- coding: utf-8 -*- ''' 呼叫事件通知 客户平台收到语音通话平台的呼叫事件通知的接口通知 ''' import json #呼叫事件通知样例 jsonBody = json.dumps({ 'eventType': 'callout', 'statusInfo': { 'sessionId': '1201_612_4294967295_20190124030424@callenabler245.huaweicaas.com', 'timestamp': '2019-01-24 03:04:24', 'caller': '+86138*******2', 'called': '+86138*******1', 'userData': 'customerId123' } }).encode('ascii') print(jsonBody) ''' 呼叫事件通知 @see: 详细内容以接口文档为准 @param param: jsonBody @return: ''' def onCallEvent(jsonBody): jsonObj = json.loads(jsonBody) #将通知消息解析为jsonObj eventType = jsonObj['eventType'] #通知事件类型 if ('fee' == eventType): print('EventType error: ' + eventType) return if ('statusInfo' not in jsonObj): print('param error: no statusInfo.') return statusInfo = jsonObj['statusInfo'] #呼叫状态事件信息 print('eventType: ' + eventType) #打印通知事件类型 #callout:呼出事件 if ('callout' == eventType): ''' Example: 此处以解析sessionId为例,请按需解析所需参数并自行实现相关处理 'timestamp': 该呼叫事件发生时语音通话平台的UNIX时间戳 'userData': 用户附属信息 'sessionId': 通话链路的标识ID 'caller': 主叫号码 'called': 被叫号码 ''' if ('sessionId' in statusInfo): print('sessionId: ' + statusInfo['sessionId']) return #alerting:振铃事件 if ('alerting' == eventType): ''' Example: 此处以解析sessionId为例,请按需解析所需参数并自行实现相关处理 'timestamp': 该呼叫事件发生时语音通话平台的UNIX时间戳 'userData': 用户附属信息 'sessionId': 通话链路的标识ID 'caller': 主叫号码 'called': 被叫号码 ''' if ('sessionId' in statusInfo): print('sessionId: ' + statusInfo['sessionId']) return #answer:应答事件 if ('answer' == eventType): ''' Example: 此处以解析sessionId为例,请按需解析所需参数并自行实现相关处理 'timestamp': 该呼叫事件发生时语音通话平台的UNIX时间戳 'userData': 用户附属信息 'sessionId': 通话链路的标识ID 'caller': 主叫号码 'called': 被叫号码 ''' if ('sessionId' in statusInfo): print('sessionId: ' + statusInfo['sessionId']) return #collectInfo:放音收号结果事件,仅应用于语音通知场景 if ('collectInfo' == eventType): ''' Example: 此处以解析digitInfo为例,请按需解析所需参数并自行实现相关处理 'timestamp': 该呼叫事件发生时语音通话平台的UNIX时间戳 'sessionId': 通话链路的标识ID 'digitInfo': 放音收号场景中,语音通话平台对开发者进行放音收号操作的结果描述 ''' if ('digitInfo' in statusInfo): print('digitInfo: ' + statusInfo['digitInfo']) return #disconnect:挂机事件 if ('disconnect' == eventType): ''' Example: 此处以解析sessionId为例,请按需解析所需参数并自行实现相关处理 'timestamp': 该呼叫事件发生时语音通话平台的UNIX时间戳 'userData': 用户附属信息 'sessionId': 通话链路的标识ID 'caller': 主叫号码 'called': 被叫号码 'partyType': 挂机的用户类型,仅在语音回呼场景携带 'stateCode': 通话挂机的原因值 'stateDesc': 通话挂机的原因值的描述 ''' if ('sessionId' in statusInfo): print('sessionId: ' + statusInfo['sessionId']) return if __name__ == '__main__': onCallEvent(jsonBody) #呼叫事件处理
-
“呼叫状态通知API”代码样例 # -*- coding: utf-8 -*- ''' 呼叫事件通知 客户平台收到语音通话平台的呼叫事件通知的接口通知 ''' import json #呼叫事件通知样例 jsonBody = json.dumps({ 'eventType': 'callout', 'statusInfo': { 'sessionId': '1201_612_4294967295_20190124030424@callenabler245.huaweicaas.com', 'timestamp': '2019-01-24 03:04:24', 'caller': '+86138*******2', 'called': '+86138*******1', 'userData': 'customerId123' } }).encode('ascii') print(jsonBody) ''' 呼叫事件通知 @see: 详细内容以接口文档为准 @param param: jsonBody @return: ''' def onCallEvent(jsonBody): jsonObj = json.loads(jsonBody) #将通知消息解析为jsonObj eventType = jsonObj['eventType'] #通知事件类型 if ('fee' == eventType): print('EventType error: ' + eventType) return if ('statusInfo' not in jsonObj): print('param error: no statusInfo.') return statusInfo = jsonObj['statusInfo'] #呼叫状态事件信息 print('eventType: ' + eventType) #打印通知事件类型 #callout:呼出事件 if ('callout' == eventType): ''' Example: 此处以解析sessionId为例,请按需解析所需参数并自行实现相关处理 'timestamp': 该呼叫事件发生时语音通话平台的UNIX时间戳 'userData': 用户附属信息 'sessionId': 通话链路的标识ID 'caller': 主叫号码 'called': 被叫号码 ''' if ('sessionId' in statusInfo): print('sessionId: ' + statusInfo['sessionId']) return #alerting:振铃事件 if ('alerting' == eventType): ''' Example: 此处以解析sessionId为例,请按需解析所需参数并自行实现相关处理 'timestamp': 该呼叫事件发生时语音通话平台的UNIX时间戳 'userData': 用户附属信息 'sessionId': 通话链路的标识ID 'caller': 主叫号码 'called': 被叫号码 ''' if ('sessionId' in statusInfo): print('sessionId: ' + statusInfo['sessionId']) return #answer:应答事件 if ('answer' == eventType): ''' Example: 此处以解析sessionId为例,请按需解析所需参数并自行实现相关处理 'timestamp': 该呼叫事件发生时语音通话平台的UNIX时间戳 'userData': 用户附属信息 'sessionId': 通话链路的标识ID 'caller': 主叫号码 'called': 被叫号码 ''' if ('sessionId' in statusInfo): print('sessionId: ' + statusInfo['sessionId']) return #collectInfo:放音收号结果事件,仅应用于语音通知场景 if ('collectInfo' == eventType): ''' Example: 此处以解析digitInfo为例,请按需解析所需参数并自行实现相关处理 'timestamp': 该呼叫事件发生时语音通话平台的UNIX时间戳 'sessionId': 通话链路的标识ID 'digitInfo': 放音收号场景中,语音通话平台对开发者进行放音收号操作的结果描述 ''' if ('digitInfo' in statusInfo): print('digitInfo: ' + statusInfo['digitInfo']) return #disconnect:挂机事件 if ('disconnect' == eventType): ''' Example: 此处以解析sessionId为例,请按需解析所需参数并自行实现相关处理 'timestamp': 该呼叫事件发生时语音通话平台的UNIX时间戳 'userData': 用户附属信息 'sessionId': 通话链路的标识ID 'caller': 主叫号码 'called': 被叫号码 'partyType': 挂机的用户类型,仅在语音回呼场景携带 'stateCode': 通话挂机的原因值 'stateDesc': 通话挂机的原因值的描述 ''' if ('sessionId' in statusInfo): print('sessionId: ' + statusInfo['sessionId']) return if __name__ == '__main__': onCallEvent(jsonBody) #呼叫事件处理
-
语音验证码 表4 语音验证码需准备的资源 资源项 对应接口参数 用途 获取方式 APP_Key X-AKSK X-AKSK鉴权所需参数。 登录管理控制台,从“应用管理”页面获取。 创建应用,请参考添加应用。 APP_Secret APP接入地址 - API调用的基地址。 访问URI - 语音验证码场景API的接口访问URI。 从语音验证码场景API获取。 被叫用户端显示的号码 displayNbr 用户接收到平台来电时的显示号码。可申请多个。 从订购号码页面申请。 号码下发后在号码管理页面获取。 放音文件 preTone 播放语音验证码之前播放的放音文件。 登录管理控制台,从“放音文件管理”页面获取。 上传放音文件,请参考添加放音文件。 具体制作方法参见制作放音文件。 放音文件(可选) posTone 播放语音验证码之后播放的放音文件。 若使用个性化放音,可提交该资源。 若不申请,平台将在语音验证码播放完毕后结束通话。 呼叫状态通知URL(可选) statusUrl 接收呼叫过程中状态信息(振铃、应答、挂机等)的服务器地址。若需订阅呼叫状态通知,可提交该资源。 提前准备可用的服务器地址,创建应用时填写,或调用接口时填写。 创建应用,请参考添加应用。 话单通知URL(可选) feeUrl 接收呼叫结束后产生话单的服务器地址。若需订阅话单通知,可提交该资源。 准备的数据与语音验证码API请求参数关联关系如下:
-
语音通知 表3 语音通知需准备的资源 资源项 对应接口参数 用途 获取方式 APP_Key X-AKSK X-AKSK鉴权所需参数。 登录管理控制台,从“应用管理”页面获取。 创建应用,请参考添加应用。 APP_Secret APP接入地址 - API调用的基地址。 访问URI - 语音通知API的接口访问URI。 从语音通知API获取。 被叫用户端显示的号码 displayNbr 用户接收到平台来电时的显示号码。可申请多个。 从订购号码页面申请。 号码下发后在号码管理页面获取。 放音文件 notifyVoice 音频文件,用户接听平台来电后的语音通知内容。 登录管理控制台,从“放音文件管理”页面获取。 上传放音文件,请参考添加放音文件。 具体制作方法参见制作放音文件。 语音通知模板ID(可选) templateId 仅接口版本为v2.0时需申请。 语音通知模板唯一标识。 语音通知模板为文本格式,平台将其转化为用户接听来电后的语音通知。可申请多个语音通知模板。 登录管理控制台,从“语音模板管理”页面获取。 添加语音通知模板,请参考添加语音模板。 呼叫状态通知URL(可选) statusUrl 接收呼叫过程中状态信息(振铃、应答、挂机等)的服务器地址。若需订阅呼叫状态通知,可提交该资源。 提前准备可用的服务器地址,创建应用时填写,或调用接口时填写。 创建应用,请参考添加应用。 话单通知URL(可选) feeUrl 接收呼叫结束后产生话单的服务器地址。若需订阅话单通知,可提交该资源。 准备的数据与语音通知API请求参数关联关系如下:
-
语音回呼 表1 语音回呼需准备的资源 资源项 对应接口参数 用途 获取方式 APP_Key X-AKSK X-AKSK鉴权所需参数。 登录管理控制台,从“应用管理”页面获取。 创建应用,请参考添加应用。 APP_Secret APP接入地址 - API调用的基地址。 访问URI - 语音回呼场景API的接口访问URI。 从语音回呼场景API获取。 主叫端显示的号码 displayNbr 主叫端接收到平台来电时的显示号码。可申请多个。该号码可以与displayCalleeNbr配置为同一个号码,也可以配置为不同号码。 从订购号码页面申请。 号码下发后在号码管理页面获取。 被叫端显示的号码 displayCalleeNbr 被叫端接收到平台来电时的显示号码。该号码可以与displayNbr配置为同一个号码,也可以配置为不同号码。 放音文件(可选) lastMinVoice 若设置了最大通话时长,平台会于最后一分钟时进行放音提示。 若需使用个性化放音,可提交该资源。 若不提交,使用默认放音“本次通话时长还剩1分钟”。 登录管理控制台,从“放音文件管理”页面获取。 上传放音文件,请参考添加放音文件。 具体制作方法参见制作放音文件。 waitVoice 主叫接听平台来电后的等待音。 若需使用个性化放音,可提交该资源。 若不提交,使用默认回铃音,例如:“嘟...嘟...”。 呼叫状态通知URL(可选) statusUrl 接收呼叫过程中状态信息(振铃、应答、挂机等)的服务器地址。若需订阅呼叫状态通知,可提交该资源。 提前准备可用的服务器地址,创建应用时填写,或调用接口时填写。 创建应用,请参考添加应用。 话单通知URL(可选) feeUrl 接收呼叫结束后产生话单的服务器地址。若需订阅话单通知,可提交该资源。 准备的数据与语音回呼场景API请求参数关联关系如下: 表2 语音回呼录音功能需准备的资源 资源项 对应接口参数 用途 获取方式 放音文件(可选) recordHintTone 平台会于录音前放音,提示通话用户。 若需使用个性化放音,可提交该资源。 若不提交,使用默认放音。 登录管理控制台,从“放音文件管理”页面获取。 上传放音文件,请参考添加放音文件。 具体制作方法参见制作放音文件。 获取录音文件 录音文件名 fileName 下载录音文件时使用。 通过“话单通知API”的recordObjectName参数获取。 录音文件存储的服务器 域名 recordDomain 通过“话单通知API”的recordDomain参数获取。 使用录音功能,需在添加应用时开通。 使用录音功能必须订阅话单通知。不订阅话单通知,则无法获取下载录音文件的关键参数。
-
“呼叫状态通知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);
-
“获取录音文件下载地址API”代码样例 /*jshint esversion: 6 */ var https = require('https'); var util = require('./reqUtil.js'); var querystring = require('querystring'); /** * Get the download link of record file. * @param fileName record file name * @param recordDomain domain name of record file restore server * @returns */ function getRecordLinkAPI(fileName, recordDomain, xaksk) { if(fileName === undefined || fileName === null || recordDomain === undefined || recordDomain === null){ return; } if(xaksk === undefined || xaksk === null){ return; } var location; var method = 'GET'; var uri = '/rest/provision/voice/record/v1.0'; var queryParams = querystring.stringify({'fileName': fileName, 'recordDomain': recordDomain}); var options = util.createOptions(method, uri, queryParams, xaksk); var req = https.request(options, function (res) { if(301 === res.statusCode){ location = Object.getOwnPropertyDescriptor(res.headers, 'location').value; } var resHeaders = JSON.stringify(res.headers); res.setEncoding('utf8'); res.on('data', function (chunk) { console.log('resp:', chunk); //打印响应数据 }); }); req.on('error', function(e) { console.error('problem with request: ' + e); //打印错误信息 }); req.end(); //结束请求 return location; } module.exports = { getRecordLinkAPI };
-
“语音回呼场景API”代码样例 /*jshint esversion: 6 */ var https = require('https'); var data = require('./data.js'); var util = require('./reqUtil.js'); var record = require('./getRecordLink.js'); /** * voiceCallAPI * @param displayNbr * @param callerNbr * @param displayCalleeNbr * @param calleeNbr * @returns */ function voiceCallAPI(displayNbr, callerNbr, displayCalleeNbr, calleeNbr) { if(displayNbr === undefined || displayNbr === null || callerNbr === undefined || callerNbr === null) { return; } if(displayCalleeNbr === undefined || displayCalleeNbr === null || calleeNbr === undefined || calleeNbr === null) { return; } var method = 'POST'; var uri = '/rest/httpsessions/click2Call/v2.0'; var xaksk = util.buildAKSKHeader(data.data.click2call_appid, data.data.click2call_secret); var options = util.createOptions(method, uri, null, xaksk); var body = { /* 必填参数 */ 'displayNbr': displayNbr,//主叫用户手机终端的来电显示号码。 'callerNbr': callerNbr,//发起呼叫时所使用的主叫号码。 'displayCalleeNbr': displayCalleeNbr,//被叫用户终端的来电显示号码。 'calleeNbr': calleeNbr//发起呼叫时所拨打的被叫号码。 /* 选填参数 */ // 'bindNbr': '+86123456789', //CallEnabler业务号码,即绑定号码 // 'maxDuration': 0, //允许单次通话进行的最长时间 // 'lastMinVoice': 'lastmin_voice1.wav', //最后一分钟放音提示音 // 'lastMinToUE': 'both', //最后一分钟放音的播放对象 // 'playPreVoice': 'false', //设置主叫(callerNbr)应答语音回呼后,呼叫被叫(calleeNbr)前,是否向主叫(callerNbr)播放提示音 // 'preVoice': 'pre_voice1.wav', //设置主叫(callerNbr)应答语音回呼后,呼叫被叫(calleeNbr)前向主叫播放的提示音 // 'waitVoice': 'wait_voice1.wav', //设置主叫应答语音回呼后的等待音 // 'calleeMedia': 'all', //指定被叫的媒体音播放方式 // 'statusUrl': 'aHR0cDovLzIxOC40LjMzLjU1Ojg4ODgvdGVzdA==', //要获取通话状态需要在请求中加入statusUrl // 'feeUrl': 'aHR0cDovLzIxOC40LjMzLjU1Ojg4ODgvdGVzdA==', //要获取话单需要在请求中加入feeUrl // 'recordFlag': 'false', //与调测信息中的recordFlag保持一致 // 'recordHintTone': 'recordhint_voice1.wav', //设置使用录音功能的提示音 // 'partyTypeRequiredInDisconnect': 'false', //disconnect状态是否需要携带通话主动挂机的用户类型 // 'returnIdlePort': 'false', //指示是否需要返回平台空闲呼叫端口数量 // 'userData': 'customerId123' //设置用户的附属信息 }; var req = https.request(options, function (res) { var resHeaders = JSON.stringify(res.headers); res.setEncoding('utf8'); res.on('data', function (chunk) { console.log(chunk); }); }); req.on('error', function(e) { console.error('problem with request: ' + e); }); console.log(JSON.stringify(body)); req.write(JSON.stringify(body)); req.end(); } voiceCallAPI('+8653159511234', '+8613500000001', '+8653159511234', '+8613500000002'); var xaksk = util.buildAKSKHeader(data.data.click2call_appid, data.data.click2call_secret); var location = record.getRecordLinkAPI('1200_366_0_20161228102743.wav', 'ostor.huawei.com', xaksk); console.log('The record file download link is: ' + location);
-
“呼叫状态通知API”代码样例 # -*- coding: utf-8 -*- ''' 呼叫事件通知 客户平台收到语音通话平台的呼叫事件通知的接口通知 ''' import json #呼叫事件通知样例 jsonBody = json.dumps({ 'eventType': 'callout', 'statusInfo': { 'sessionId': '1201_612_4294967295_20190124030424@callenabler245.huaweicaas.com', 'timestamp': '2019-01-24 03:04:24', 'caller': '+86138*******2', 'called': '+86138*******1', 'userData': 'customerId123' } }).encode('ascii') print(jsonBody) ''' 呼叫事件通知 @see: 详细内容以接口文档为准 @param param: jsonBody @return: ''' def onCallEvent(jsonBody): jsonObj = json.loads(jsonBody) #将通知消息解析为jsonObj eventType = jsonObj['eventType'] #通知事件类型 if ('fee' == eventType): print('EventType error: ' + eventType) return if ('statusInfo' not in jsonObj): print('param error: no statusInfo.') return statusInfo = jsonObj['statusInfo'] #呼叫状态事件信息 print('eventType: ' + eventType) #打印通知事件类型 #callout:呼出事件 if ('callout' == eventType): ''' Example: 此处以解析sessionId为例,请按需解析所需参数并自行实现相关处理 'timestamp': 该呼叫事件发生时语音通话平台的UNIX时间戳 'userData': 用户附属信息 'sessionId': 通话链路的标识ID 'caller': 主叫号码 'called': 被叫号码 ''' if ('sessionId' in statusInfo): print('sessionId: ' + statusInfo['sessionId']) return #alerting:振铃事件 if ('alerting' == eventType): ''' Example: 此处以解析sessionId为例,请按需解析所需参数并自行实现相关处理 'timestamp': 该呼叫事件发生时语音通话平台的UNIX时间戳 'userData': 用户附属信息 'sessionId': 通话链路的标识ID 'caller': 主叫号码 'called': 被叫号码 ''' if ('sessionId' in statusInfo): print('sessionId: ' + statusInfo['sessionId']) return #answer:应答事件 if ('answer' == eventType): ''' Example: 此处以解析sessionId为例,请按需解析所需参数并自行实现相关处理 'timestamp': 该呼叫事件发生时语音通话平台的UNIX时间戳 'userData': 用户附属信息 'sessionId': 通话链路的标识ID 'caller': 主叫号码 'called': 被叫号码 ''' if ('sessionId' in statusInfo): print('sessionId: ' + statusInfo['sessionId']) return #collectInfo:放音收号结果事件,仅应用于语音通知场景 if ('collectInfo' == eventType): ''' Example: 此处以解析digitInfo为例,请按需解析所需参数并自行实现相关处理 'timestamp': 该呼叫事件发生时语音通话平台的UNIX时间戳 'sessionId': 通话链路的标识ID 'digitInfo': 放音收号场景中,语音通话平台对开发者进行放音收号操作的结果描述 ''' if ('digitInfo' in statusInfo): print('digitInfo: ' + statusInfo['digitInfo']) return #disconnect:挂机事件 if ('disconnect' == eventType): ''' Example: 此处以解析sessionId为例,请按需解析所需参数并自行实现相关处理 'timestamp': 该呼叫事件发生时语音通话平台的UNIX时间戳 'userData': 用户附属信息 'sessionId': 通话链路的标识ID 'caller': 主叫号码 'called': 被叫号码 'partyType': 挂机的用户类型,仅在语音回呼场景携带 'stateCode': 通话挂机的原因值 'stateDesc': 通话挂机的原因值的描述 ''' if ('sessionId' in statusInfo): print('sessionId: ' + statusInfo['sessionId']) return if __name__ == '__main__': onCallEvent(jsonBody) #呼叫事件处理
-
“呼叫状态通知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);
-
“语音验证码场景API”代码样例 /*jshint esversion: 6 */ var https = require('https'); var data = require('./data.js'); var util = require('./reqUtil.js'); /** * voiceVerificationCodeAPI * @param displayNbr * @param calleeNbr * @param languageType * @param preTone * @param verifyCode * @returns */ function voiceVerificationCodeAPI(displayNbr, calleeNbr, languageType, preTone, verifyCode) { if(displayNbr === undefined || displayNbr === null || calleeNbr === undefined || calleeNbr === null) { return; } if(languageType === undefined || languageType === null || preTone === undefined || preTone === null) { return; } if(languageType === verifyCode || languageType === verifyCode) { return; } var method = 'POST'; var uri = '/rest/httpsessions/callVerify/v1.0'; var xaksk = util.buildAKSKHeader(data.data.callverify_appid, data.data.callverify_secret); var options = util.createOptions(method, uri, null, xaksk); var body = { /* 必填参数 */ 'displayNbr': displayNbr,//主叫用户手机终端的来电显示号码。 'calleeNbr': calleeNbr,//被叫用户终端的来电显示号码。 'languageType': languageType,//验证码播放的语言类型。 'preTone': preTone,//播放语音验证码之前需要播放的放音文件名 'verifyCode': verifyCode//验证码:只支持0~9的数字,最大8位。 /* 选填参数 */ // 'bindNbr': '+86123456789', //CallEnabler业务号码,即绑定号码 // 'posTone': 'postone.wav', //播放语音验证码之后需要播放的放音文件名 // 'times': 3, //播放次数:0~9 // 'statusUrl': 'aHR0cDovLzIxOC40LjMzLjU1Ojg4ODgvdGVzdA==', //要获取通话状态需要在请求中加入statusUrl // 'feeUrl': 'aHR0cDovLzIxOC40LjMzLjU1Ojg4ODgvdGVzdA==', //要获取话单需要在请求中加入feeUrl // 'returnIdlePort': 'false', //指示是否需要返回平台空闲呼叫端口数量 // 'userData': 'customerId123' //设置用户的附属信息 }; var req = https.request(options, function (res) { var resHeaders = JSON.stringify(res.headers); res.setEncoding('utf8'); res.on('data', function (chunk) { console.log(chunk); }); }); req.on('error', function(e) { console.error('problem with request: ' + e); }); console.log(JSON.stringify(body)); req.write(JSON.stringify(body)); req.end(); } voiceVerificationCodeAPI('+8653159511234', '+8613500000001', 2, 'test.wav', '1234');
-
语音通话使用全流程 任务 操作步骤 备注 入驻华为云 注册华为账号 并开通华为云:点击注册页面 企业实名认证:点击进行实名认证 实名认证信息最长3个工作日内审核完成,请耐心等待审核结果,审核成功,即可完成认证。 开通服务 如何开通服务,点击查看开通服务。 开通语音通话服务前,请认真阅读《语音通话服务使用声明》。 业务开通申请将在1~2个工作日审核完成,请耐心等待审核结果。 添加应用 如何添加应用,点击查看添加应用。 不支持接入涉及安全事故的语音通知业务。 添加企业 如何添加企业,点击查看添加企业。 企业名称必须填写全称且和营业执照保持一致。 企业注册资金不得低于50W。 企业审核一般需要2个工作日。 订购号码 如何订购号码,点击查看订购号码。 申请固话号码,资源下发需要10个工作日。 添加放音文件/语音模板 如何添加放音文件,点击查看添加放音文件。 如何添加语音模板,点击查看添加语音模板。 根据应用类型添加放音文件或语音模板。 业务测试 如何业务测试,点击查看业务测试。 - 业务商用 如何业务商用,点击查看商业发布。 -
-
接口示例 请求示例 POST /rest/httpsessions/callVerify/v1.0 HTTP/1.1 content-type: application/json;charset=UTF-8 authorization: AKSK realm="SDP",profile="UsernameToken",type="Appkey" x-aksk: UsernameToken Username="ZRBRz4bAXoFgEH7o4Ew308eXc1RA",PasswordDigest="****",Nonce="ac1c911c4792492687f8f6b2264a491e",Created="2018-05-26T00:35:30Z" content-length:xx { "displayNbr":"+8675528****88", "calleeNbr":"+86189****0007", "languageType":2, "preTone":"welcome.wav", "verifyCode":"12345678", "times":3, "userData":"cwgtest" } 响应示例 HTTP/1.1 200 OK Content-Type: application/json;charset=UTF-8 { "resultcode":"0", "resultdesc":"Success", "sessionId":"1200_366_0_20161228102743@callenabler.home1.com" }
更多精彩内容
CDN加速
GaussDB
文字转换成语音
免费的服务器
如何创建网站
域名网站购买
私有云桌面
云主机哪个好
域名怎么备案
手机云电脑
SSL证书申请
云点播服务器
免费OCR是什么
电脑云桌面
域名备案怎么弄
语音转文字
文字图片识别
云桌面是什么
网址安全检测
网站建设搭建
国外CDN加速
SSL免费证书申请
短信批量发送
图片OCR识别
云数据库MySQL
个人域名购买
录音转文字
扫描图片识别文字
OCR图片识别
行驶证识别
虚拟电话号码
电话呼叫中心软件
怎么制作一个网站
Email注册网站
华为VNC
图像文字识别
企业网站制作
个人网站搭建
华为云计算
免费租用云托管
云桌面云服务器
ocr文字识别免费版
HTTPS证书申请
图片文字识别转换
国外域名注册商
使用免费虚拟主机
云电脑主机多少钱
鲲鹏云手机
短信验证码平台
OCR图片文字识别
SSL证书是什么
申请企业邮箱步骤
免费的企业用邮箱
云免流搭建教程
域名价格