更新时间:2025-10-16 GMT+08:00
分享

AXB模式

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;
/**
 * AXB模式(具体场景请参考接口说明)
 */
public class AXBDemo {
    /**
     * 必填,请登录管理控制台,从"应用管理"页获取
     */
    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) {
        IAXBInterfaceDemo axb = new AXBInterfaceDemoImpl(OMPAPPKEY, OMPAPPSECRET, OMPDOMAINNAME);
        // 第一步: 号码绑定,即调用AXB模式绑定接口
        //        axb.axbBindNumber("+8618010000001", "+8618612345678", "+8618612345679");
        // 当用户发起通话时,隐私保护通话平台会将呼叫事件推送到商户应用,参考: HostingVoiceEventDemoImpl
        // 当用户使用短信功能,隐私保护通话平台将短信事件推送到商户应用,参考: HostingVoiceEventDemoImpl
        // 第二步: 用户通话结束,若设置录音,则商户可以获取录音文件下载地址,即调用获取录音文件下载地址接口
        //        axb.axbGetRecordDownloadLink("ostor.huawei.com", "1200_366_0_20161228102743.wav");
        // 第三步: 根据业务需求,可更改绑定关系,即调用AXB模式绑定信息修改接口
        //        axb.axbModifyNumber("efw89efwf7fea324252", "+8618612345679", null);
        // 第四步: 隐私号码循环使用,商户可将绑定关系解绑,即调用AXB模式解绑接口
        //        axb.axbUnbindNumber(null, "+8618010000001");
        // 第五步: 商户可查询已订购的隐私号码的绑定信息,即调用AXB模式绑定信息查询接口
        axb.axbQueryBindRelation(null, "+8618010000001");
    }
}
interface IAXBInterfaceDemo {
    /**
     * Set X number to be the privacy number between number a and number b |
     * 隐私号码AXB绑定
     *
     * @param relationNum 关系号码
     * @param callerNum   主叫号码
     * @param calleeNum   被叫号码
     */
    void axbBindNumber(String relationNum, String callerNum, String calleeNum);
    /**
     * Modify number a/b of the privacy relationship assigned by subscriptionId |
     * 隐私号码AXB绑定信息修改
     *
     * @param subscriptionId 绑定关系ID
     * @param callerNum      主叫号码
     * @param calleeNum      被叫号码
     */
    void axbModifyNumber(String subscriptionId, String callerNum, String calleeNum);
    /**
     * Unbind the privacy relationship between number a and number b | 隐私号码AXB解绑
     *
     * @param subscriptionId 绑定关系ID
     * @param relationNum    关系号码 都传时以subscriptionId优先
     */
    void axbUnbindNumber(String subscriptionId, String relationNum);
    /**
     * Query the privacy binding relationship on the X number | 查询AXB绑定信息
     *
     * @param subscriptionId 绑定关系ID
     * @param relationNum    关系号码 都传时以subscriptionId优先
     */
    void axbQueryBindRelation(String subscriptionId, String relationNum);
    /**
     * Get download link of the record file created in call | 获取录音文件下载地址
     *
     * @param recordDomain 录音文件存储的服务器域名
     * @param fileName     录音文件名
     */
    void axbGetRecordDownloadLink(String recordDomain, String fileName);
}
/**
 * AXB模式接口测试
 */
class AXBInterfaceDemoImpl implements IAXBInterfaceDemo {
    private Logger logger = Logger.getLogger(AXBInterfaceDemoImpl.class);
    private String appKey; // APP_Key
    private String appSecret; // APP_Secret
    private String ompDomainName; // APP接入地址
    public AXBInterfaceDemoImpl(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 axbBindNumber(String relationNum, String callerNum, String calleeNum) {
        if (StringUtils.isBlank(relationNum) || StringUtils.isBlank(callerNum) || StringUtils.isBlank(calleeNum)) {
            logger.info("axbBindNumber set params error");
            return;
        }
        // 必填,AXB模式绑定接口访问URI
        String url = "/rest/caas/relationnumber/partners/v1.0";
        String realUrl = buildOmpUrl(url);
        // 封装JOSN请求
        JSONObject json = new JSONObject();
        json.put("relationNum", relationNum); // X号码(关系号码)
        json.put("callerNum", callerNum); // A方真实号码(手机或固话)
        json.put("calleeNum", calleeNum); // B方真实号码(手机或固话)
        /**
         * 选填,各参数要求请参考"AXB模式绑定接口"
         */
        //         json.put("areaCode", "0755"); //城市码
        //         json.put("areaMatchMode", "1"); //号码筛选方式
        //         json.put("callDirection", 0); //允许呼叫的方向
        //         json.put("duration", 86400); //绑定关系保持时间
        //         json.put("recordFlag", false); //是否通话录音
        //         json.put("recordHintTone", "recordHintTone.wav"); //录音提示音
        //         json.put("maxDuration", 60); //单次通话最长时间
        //         json.put("privateSms", true); //是否支持短信功能
        //         JSONObject preVoice = new JSONObject();
        //         preVoice.put("callerHintTone", "callerHintTone.wav"); //设置A拨打X号码时的通话前等待音
        //         preVoice.put("calleeHintTone", "calleeHintTone.wav"); //设置B拨打X号码时的通话前等待音
        //         json.put("preVoice", preVoice); //个性化通话前等待音
        String result = HttpUtil.sendPost(appKey, appSecret, realUrl, json.toString());
        logger.info("Response is :" + result);
    }
    @Override
    public void axbModifyNumber(String subscriptionId, String callerNum, String calleeNum) {
        if (StringUtils.isBlank(subscriptionId)) {
            logger.info("axbModifyNumber set params error");
            return;
        }
        // 必填,AXB模式绑定信息修改接口访问URI
        String url = "/rest/caas/relationnumber/partners/v1.0";
        String realUrl = buildOmpUrl(url);
        // 封装JOSN请求
        JSONObject json = new JSONObject();
        json.put("subscriptionId", subscriptionId); // 绑定关系ID
        if (StringUtils.isNotBlank(callerNum)) {
            json.put("callerNum", callerNum); // 将A方修改为新的号码(手机或固话)
        }
        if (StringUtils.isNotBlank(calleeNum)) {
            json.put("calleeNum", calleeNum); // 将B方修改为新的号码(手机或固话)
        }
        /**
         * 选填,各参数要求请参考"AXB模式绑定信息修改接口"
         */
        //         json.put("callDirection", 0); //允许呼叫的方向
        //         json.put("duration", 86400); //绑定关系保持时间
        //         json.put("maxDuration", 90); //单次通话最长时间
        //         json.put("privateSms", true); //是否支持短信功能
        //         json.put("recordFlag", false); //是否通话录音
        //         JSONObject preVoice = new JSONObject();
        //         preVoice.put("callerHintTone", "callerHintTone.wav"); //设置A拨打X号码时的通话前等待音
        //         preVoice.put("calleeHintTone", "calleeHintTone.wav"); //设置B拨打X号码时的通话前等待音
        //         json.put("preVoice", preVoice); //个性化通话前等待音
        String result = HttpUtil.sendPut(appKey, appSecret, realUrl, json.toString());
        logger.info("Response is :" + result);
    }
    @Override
    public void axbUnbindNumber(String subscriptionId, String relationNum) {
        if (StringUtils.isBlank(subscriptionId) && StringUtils.isBlank(relationNum)) {
            logger.info("axbUnbindNumber set params error");
            return;
        }
        // 必填,AXB模式解绑接口访问URI
        String url = "/rest/caas/relationnumber/partners/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("relationNum", relationNum); // X号码(关系号码)
        }
        String result = HttpUtil.sendDelete(appKey, appSecret, realUrl, HttpUtil.map2UrlEncodeString(map));
        logger.info("Response is :" + result);
    }
    @Override
    public void axbQueryBindRelation(String subscriptionId, String relationNum) {
        if (StringUtils.isBlank(subscriptionId) && StringUtils.isBlank(relationNum)) {
            logger.info("axbQueryBindRelation set params error");
            return;
        }
        // 必填,AXB模式绑定信息查询接口访问URI
        String url = "/rest/caas/relationnumber/partners/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("relationNum", relationNum); // X号码(关系号码)
            /**
             * 选填,各参数要求请参考"AXB模式绑定信息查询接口"
             */
            //            map.put("pageIndex", 1); //查询的分页索引,从1开始编号
            //            map.put("pageSize", 20); //查询的分页大小,即每次查询返回多少条数据
        }
        String result = HttpUtil.sendGet(appKey, appSecret, realUrl, HttpUtil.map2UrlEncodeString(map));
        logger.info("Response is :" + result);
    }
    @Override
    public void axbGetRecordDownloadLink(String recordDomain, String fileName) {
        if (StringUtils.isBlank(recordDomain) || StringUtils.isBlank(fileName)) {
            logger.info("axbGetRecordDownloadLink set params error");
            return;
        }
        // 必填,AXB模式获取录音文件下载地址接口访问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);
    }
}

相关文档