更新时间:2025-10-16 GMT+08:00
AXE模式
package com.huawei.hosting.service.voice; import com.huawei.hosting.utils.HttpUtil; import com.alibaba.fastjson.JSONObject; import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; import java.util.HashMap; import java.util.Map; /** * AXE模式(具体场景请参考接口说明) */ public class AXEDemo { /** * 必填,请登录管理控制台,从"应用管理"页获取 */ private final static String OMPAPPKEY = "a1d1f50cad21415fbdd13d8f53d36d60"; // APP_Key private final static String OMPAPPSECRET = "cfc881cc704c4fba8d8fef5788e03e6b"; // APP_Secret private final static String OMPDOMAINNAME = "https://rtcpns.cn-north-1.myhuaweicloud.com"; // APP接入地址 public static void main(String[] args) { IAXEInterfaceDemo axe = new AXEInterfaceDemoImpl(OMPAPPKEY, OMPAPPSECRET, OMPDOMAINNAME); // 第一步: 设置绑定关系,即调用AXE模式绑定接口,绑定成功获取分机号E,如: 1234 // axe.axeBindNumber("+8618010000001", "+8618612345678"); // 当用户发起通话时,隐私保护通话平台会将呼叫事件推送到商户应用,参考: HostingVoiceEventDemoImpl // 第二步: 用户通话结束,若设置录音,则商户可以获取录音文件下载地址,即调用获取录音文件下载地址接口 // axe.axeGetRecordDownloadLink("ostor.huawei.com", "1200_366_0_20161228102743.wav"); // 第三步: 隐私号码循环使用,商户可将绑定关系解绑,即调用AXE模式解绑接口 // axe.axeUnbindNumber(null, "+8618010000001", "1234"); // 第四步: 商户可查询已订购的隐私号码的绑定信息,即调用AXE模式绑定信息查询接口 axe.axeQueryBindRelation(null, "+8618010000001", "1234"); } } /** * AXE模式接口 */ interface IAXEInterfaceDemo { /** * Set the X number to the user's virtual number | 隐私号码AXE绑定 * * @param virtualNum X号码 * @param bindNum AXE中的A号码 */ void axeBindNumber(String virtualNum, String bindNum); /** * Unbind the virtual number and extend number from number a | 隐私号码AXE解绑 * * @param subscriptionId 绑定关系ID * @param virtualNum X号码 * @param extendNum 分机号E * subscriptionId和(virtualNum+extendNum)二选一即可,当都传入时,优先选用subscriptionId */ void axeUnbindNumber(String subscriptionId, String virtualNum, String extendNum); /** * Query the binding information for virtual number and extend number | * 查询AXE绑定信息 * * @param subscriptionId 绑定关系ID * @param virtualNum X号码 * @param extendNum 分机号E * subscriptionId和(virtualNum+extendNum)二选一即可,当都传入时,优先选用subscriptionId */ void axeQueryBindRelation(String subscriptionId, String virtualNum, String extendNum); /** * Get download link of the record file created in call | 获取录音文件下载地址 * * @param recordDomain 录音文件存储的服务器域名 * @param fileName 录音文件名 */ void axeGetRecordDownloadLink(String recordDomain, String fileName); } /** * AXE模式接口测试 */ class AXEInterfaceDemoImpl implements IAXEInterfaceDemo { private Logger logger = Logger.getLogger(AXEInterfaceDemoImpl.class); private String appKey; // APP_Key private String appSecret; // APP_Secret private String ompDomainName; // APP接入地址 public AXEInterfaceDemoImpl(String appKey, String appSecret, String ompDomainName) { this.appKey = appKey; this.appSecret = appSecret; this.ompDomainName = ompDomainName; } /** * Build the real url of https request | 构建隐私保护通话平台请求路径 * * @param path 接口访问URI * @return */ private String buildOmpUrl(String path) { return ompDomainName + path; } @Override public void axeBindNumber(String virtualNum, String bindNum) { if (StringUtils.isBlank(virtualNum) || StringUtils.isBlank(bindNum)) { logger.info("axeBindNumber set params error"); return; } // 必填,AXE模式绑定接口访问URI String url = "/rest/caas/extendnumber/v1.0"; String realUrl = buildOmpUrl(url); // 封装JOSN请求 JSONObject json = new JSONObject(); json.put("virtualNum", virtualNum); // X号码 json.put("bindNum", bindNum); // A方真实号码(手机或固话) /** * 选填,各参数要求请参考"AXE模式绑定接口" */ // json.put("areaCode", "0755"); // 城市码 // json.put("areaMatchMode", "1"); // 号码筛选方式 // json.put("extendNum", "1234"); // 分机号,即AXE中的E // json.put("displayNumMode", "0"); // 非A用户呼叫X号码时,A看到的主显号码 // json.put("recordFlag", "false"); // 是否通话录音 // json.put("recordHintTone", "recordHintTone.wav"); // 录音提示音 // json.put("callbackTone", "callbackTone.wav"); // A呼叫X不存在回呼记录的提示音 // json.put("callbackNum", "+8618000000021"); // A呼叫X不存在回呼记录的转接号码 // json.put("timeUnit", "0"); // 绑定关系的有效时间 // json.put("bindExpiredTime", 24); // 绑定关系的有效时间 // json.put("callbackExpiredTime", 24); // 回呼记录有效时间 // json.put("userData", "abcdefg"); // 用户自定义数据 String result = HttpUtil.sendPost(appKey, appSecret, realUrl, json.toString()); logger.info("Response is :" + result); } @Override public void axeUnbindNumber(String subscriptionId, String virtualNum, String extendNum) { if (StringUtils.isBlank(subscriptionId) && (StringUtils.isBlank(virtualNum) || StringUtils.isBlank(extendNum))) { logger.info("axeUnbindNumber set params error"); return; } // 必填,AXE模式解绑接口访问URI String url = "/rest/caas/extendnumber/v1.0"; String realUrl = buildOmpUrl(url); // 申明对象 Map<String, Object> map = new HashMap<String, Object>(); if (StringUtils.isNotBlank(subscriptionId)) { map.put("subscriptionId", subscriptionId); // 绑定关系ID } else { map.put("virtualNum", virtualNum); // AXE中的X号码 map.put("extendNum", extendNum); // AXE中的E号码 } String result = HttpUtil.sendDelete(appKey, appSecret, realUrl, HttpUtil.map2UrlEncodeString(map)); logger.info("Response is :" + result); } @Override public void axeQueryBindRelation(String subscriptionId, String virtualNum, String extendNum) { if (StringUtils.isBlank(subscriptionId) && (StringUtils.isBlank(virtualNum) || StringUtils.isBlank(extendNum))) { logger.info("axeQueryBindRelation set params error"); return; } // 必填,AXE模式绑定信息查询接口访问URI String url = "/rest/caas/extendnumber/v1.0"; String realUrl = buildOmpUrl(url); // 申明对象 Map<String, Object> map = new HashMap<String, Object>(); if (StringUtils.isNotBlank(subscriptionId)) { map.put("subscriptionId", subscriptionId); // 绑定关系ID } else { map.put("virtualNum", virtualNum); // AXE中的X号码 map.put("extendNum", extendNum); // AXE中的E号码 } String result = HttpUtil.sendGet(appKey, appSecret, realUrl, HttpUtil.map2UrlEncodeString(map)); logger.info("Response is :" + result); } @Override public void axeGetRecordDownloadLink(String recordDomain, String fileName) { if (StringUtils.isBlank(recordDomain) || StringUtils.isBlank(fileName)) { logger.info("axeGetRecordDownloadLink set params error"); return; } // 必填,AXE模式获取录音文件下载地址接口访问URI String url = "/rest/provision/voice/record/v1.0"; String realUrl = buildOmpUrl(url); // 申明对象 Map<String, Object> map = new HashMap<String, Object>(); map.put("recordDomain", recordDomain); // 录音文件存储的服务器域名 map.put("fileName", fileName); // 录音文件名 String result = HttpUtil.sendGet(appKey, appSecret, realUrl, HttpUtil.map2UrlEncodeString(map)); logger.info("Response is :" + result); } }
父主题: Java代码样例