中通天鸿开发者平台

中通天鸿开发者平台

  • 开发文档
  • API文档

›接口说明

中间件wintelapi

  • 如何认证
  • 角色管理
  • 黑名单管理
  • 白名单管理
  • 坐席管理
  • 坐席管理(新)
  • 分机管理
  • 技能组管理
  • 业务组管理
  • 语音管理
  • jsonp接口
  • 监控管理
  • 监控管理(新)
  • 录音管理
  • 报表管理管理
  • 报表管理(新)
  • 双向外呼(新)
  • 双向外呼(不推荐)
  • 其他相关接口
  • 话单推送

智能外呼

    快速入门

    • 功能介绍
    • 语音相关服务
    • 对接流程
    • 新手指引

    接口说明

    • 单条数据请求接口
    • 批量数据请求接口(新)
    • 回调数据下载、查询
    • 创建项目
    • 修改项目
    • 删除项目
    • 获取项目信息
    • 创建语音模板
    • 修改语音模板
    • 获取语音模板信息
    • 获取半小时接通率

短信

  • 短信接口

工单

  • 工单接口

CRM

  • 客户模块
  • 联系人模块
  • 跟进记录模块
  • 商机模块
  • 附录

隐私号 axb

  • 认证
  • axb 类型
  • ax 类型
  • axyb 类型
  • 附录

闪信

  • 认证
  • API

外呼管理

  • 认证
  • 预测式外呼-任务
  • 预测式外呼-数据
  • 预测式外呼-监控
  • 话单
  • 附录

批量数据请求接口(新)

接口请求说明

此接口既可接收单条呼叫数据,也可接收批量呼叫数据

接口地址

POST http://dms.icsoc.net/api/v3/data

Header说明

实例
Methodpost
Content-Typeapplication/json

body参数说明

字段类型是否必填示例值说明
vccIdLong是20024企业ID,系统生成,一个企业ID下可以创建指定个数的项目,创建项目接口中需要此参数
proIdLong是10613项目id,创建项目后生成唯一的id
signString是参见sign签名方式签名后的字符串
dataString是参见data字段说明加密后的数据(加密方式采用AES CBC key为token,iv为token的前16为,加密方式见“加密说明”)

sign签名方式

参见请求sign签名方式

data类型说明

字段类型:
JSONObject(单条请求)
JSONArray(批量请求,最多可以包含100个请求对象)

data字段说明

字段类型是否必填示例值说明
jobIdString否75898002应用方的自定义id,回调时原样返回
phoneNumString是18971511111被叫号码
callNumInteger否1号码的重呼次数,如callNum=1,那么该号码最多呼叫2次,默认呼叫1次+重呼1次=2次 (注:备份被叫最多重呼10次)
trunkNumString否01089658000主叫号码
callIntervalInteger否60最大外呼振铃时长,若设置为60秒,如果被叫60秒不接听即停止呼叫,不影响接通通话,默认为60秒
templateInfoString(JSON格式)否{"date": "2020年2月29号", "customer_name": "张三"}IVR模板信息,该信息中包含IVR中自定义字段的值,具体的字段视IVR模板的信息 另可参见TTS语音合成播报说明
customParamsString(JSON格式)否{"group":"1", "key":"aaa"}该字段用于传递自定义参数信息,该信息中包含所有自定义字段的值,该字段中的所有字段用于回调时原样返回
playParamsString(JSON格式)否{"playTimes": 3}动态播报内容方式及方式设置,详细见“playParams参数说明

playParams字段说明

字段类型是否必填示例值说明
playTimesInteger否1播放次数

单条请求数据格式样例:

{
    vccId : "",
    proId : "",
    sign : "",
    data : {
        jobId : "",
        phoneNum : "",
        callNum : "",
        callInterval : "",
        trunkNum : "",
        templateInfo : {},
        customParams : {}
    }
 }

批量请求数据格式样例:

{
    vccId : "",
    proId : "",
    sign : "",
    data : [
        {
            jobId : "",
            phoneNum : "",
            callNum : "",
            callInterval : "",
            trunkNum : "",
            templateInfo : {},
            customParams : {}
        },
        {
            jobId : "",
            phoneNum : "",
            callNum : "",
            callInterval : "",
            trunkNum : "",
            templateInfo : {},
            customParams : {}
        }
    ]
}

加密说明

参见加密说明

接口返回说明

接口返回结果说明

返回结果为json串:

单条:
{  
    "code":200, 
    "msg":"任务接收成功.", 
    "data":
        {
            "call_record_id": taskId
        }
}
批量:
{
    "code": 200,
    "msg": "任务接收成功.",
    "failedArray": [{
        "msg": "号码为空",
        "code": 404,
        "phoneNum": "",
        "jobId":"传递过来的jobId"
    }, {
        "msg": "号码【911000010】对应的模板为空",
        "code": 407,
        "phoneNum": "911000010",
        "jobId":"传递过来的jobId"
    }]
}

failedArray:批量调用中的返回属性,标识批量调用时哪些数据没有校验通过;在所有data数据校验通过的情况下此字段为空;
批量接口不会返回"call_record_id";

code说明如下:

code说明
200ok
400参数为空、vccId参数为空、proId参数为空
402签名sign为空
403签名错误
404号码为空
405重呼次数格式不正确,必须为整数
406呼叫时长格式不正确,必须为整数
407语音模板为空
408号码当天请求次数超过设置的最大次数(默认设置为5000次),用于防止单个号码请求次数过多
410不是有效固话
411proId不存在
412data字段为空
413解密失败
414data解析参数失败(非JSON)
415批量数据量超过限制(默认100条)
416该主叫号码已删除或禁用
417未开通国际号码外呼业务
500接口内部错误

回调说明

回调参数

参见回调参数

回调签名方式

参见回调签名方式

回调解密验证

参见回调解密验证

回调结果说明

参见回调结果说明

demo案例

java 案例

public static List buildList(List<String> phoneNos){
        List<Map> list = new ArrayList<>();
        for (String phoneNo : phoneNos){
            Map map = new TreeMap();
            Map person = new TreeMap();
            person.put("chaptername","aa");
            person.put("chapternumber","bb");
            person.put("classname","cc");
            map.put("templateInfo",person);
            map.put("phoneNum", phoneNo);
            map.put("customParams", JSON.parseObject("{\"callRecordId\":\"868462732\",\"bussinessType\":\"2\",\"envType\":\"0\",\"callAppId\":\"1\"}"));
            list.add(map);
        }
        return list;
    }

    public static String createParam(List<String> phoneNos) throws Exception {
        String vccId = "200024";
        String proId = "10256";
        String token = "c4bd85d78c04484caeab9144c2e16ea447528eab";

        List<Map> list = buildList(phoneNos);

        Map<String, Object> data = new TreeMap<>();
        data.put("vccId", vccId);
        data.put("proId", proId);
        String mapStr = "";
        if (CollectionUtils.isNotEmpty(list)){
            if (list.size() == 1){
                mapStr = JSON.toJSONString(list.get(0));
            }else {
                mapStr = JSON.toJSONString(list);
            }
        }
        //加密
//        data.put("data", AESCoder.callBackEncrypt(token, mapStr));
        //不加密
        data.put("data", mapStr);
        String sign = SHACoder.SHA1(mapStr + token);
        data.put("sign", sign);
        return JSON.toJSONString(data);
    }

    public static void main(String[] args) throws Exception {
    //----------单条调用------------------
//        List<String> phoneNos = new ArrayList<>();
//        phoneNos.add("189...电话号码");

//        HttpUtil.postHttp("http://dms.icsoc.net/api/v3/data", createParam(phoneNos));
//----------单条调用------------------

//----------批量调用----------------------
        for (int y=0;y<1;y++){
            List<String> phoneNos = new ArrayList<>();
            for (int i=0;i<99;i++){
                String phone = "911"+String.format("%05d", i)+y;
                phoneNos.add(phone);
            }
            HttpUtil.postHttp("http://dms.icsoc.net/api/v3/data",createParam(phoneNos));
        }
//----------批量调用----------------------
    }

public class SHACoder {
    private final static String KEY_SHA_1   = "SHA-1";

    /**
     * SHA加密得到字节数组
     * 
     * @param data
     *            byte[] 待加密数据
     * @return byte[]
     * @throws NoSuchAlgorithmException
     */
    public static byte[] encryptSHA(byte[] data)
            throws NoSuchAlgorithmException {
        MessageDigest sha = MessageDigest.getInstance(KEY_SHA_1);
        sha.update(data);
        return sha.digest();
    }

    /**
     * SHA加密后的字节数组再交给BASE64加密得到最终的加密字符串
     * 
     * @param data
     *            byte[] 待加密数据
     * @return String
     * @throws NoSuchAlgorithmException
     */
    public static String encryptSHAString(byte[] data)
            throws NoSuchAlgorithmException {
        return BASE64Coder.encodeBase64URLSafeString(SHACoder.encryptSHA(data));
    }

    private SHACoder() {
    }

    public static String SHA1(String decript) {
        try {
            byte messageDigest[] = encryptSHA(decript.getBytes());
            // Create Hex String
            StringBuffer hexString = new StringBuffer();
            // 字节数组转换为 十六进制 数
            for (int i = 0; i < messageDigest.length; i++) {
                String shaHex = Integer.toHexString(messageDigest[i] & 0xFF);
                if (shaHex.length() < 2) {
                    hexString.append(0);
                }
                hexString.append(shaHex);
            }
            return hexString.toString();

        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return "";
    }
}

Last updated on 8/26/2021 by luyongbing
← 单条数据请求接口回调数据下载、查询 →
  • 接口请求说明
    • 接口地址
    • Header说明
    • body参数说明
    • sign签名方式
    • data字段说明
    • playParams字段说明
    • 单条请求数据格式样例:
    • 批量请求数据格式样例:
    • 加密说明
  • 接口返回说明
    • 接口返回结果说明
  • 回调说明
    • 回调参数
    • 回调签名方式
    • 回调解密验证
    • 回调结果说明
  • demo案例
    • java 案例
中通天鸿开发者平台
产品中心
呼叫中心在线客服工单系统IM机器人CTI-PLUS语音机器人通信云资源云
帮助中心
常见问题更新日志
关于我们
公司简介联系我们友情链接
Copyright © 2021 中通天鸿(北京)通信科技股份有限公司