# 话单接口文档

# 通用api - 获取授权Token接口

#### 接口说明：

访问其他接口所需的token均需通过授权的Appid和Accesskey从此接口获取（批量IVR接口除外）。接口授权Token时效性为12小时。

#### 请求方式

POST，form-data格式

#### 请求参数

| 参数名       | 类型     | 是否必须 | 说明                  |
| :-------- | :----- | :--- | :------------------ |
| appid     | string | 是    | 授权appid             |
| accesskey | string | 是    | 授权accesskey         |
| service   | string | 是    | App.Sip\_Auth.Login |

#### 接口请求示例（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
    'service'    => 'App.Sip_Auth.Login',
    'appid'      => 'ABCDEFG',
    'accesskey'  => 'ABCDEFG',
    ];
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $apiUrl);
    curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $postFields);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $response = curl_exec($curl);
    $curlError = curl_error($curl);
    curl_close($curl);
    var_dump($response);
?>

```

#### 返回数据结构示例

```
{
    "ret":200,
    "data":{
        "status":0,
        "desc":"授权成功",
        "result":{
            "companycode":"1",
            "companyname":"test",
            "token":"773a70dd02f0695d50205e9b267692b9",
            "authtime":"2020-01-01 00:00:00",
            "authmodel":""
        },
        "reqtime":1581240882,
        "rsptime":1581240882
    },
    "msg":""
}

```

#### 返回参数说明

| 参数名         | 类型     | 说明               |
| :---------- | :----- | :--------------- |
| companycode | int    | 公司代码             |
| companyname | string | 公司名称             |
| token       | string | 授权token，用来访问其他接口 |

# 通用api - 获取通话记录接口

#### 接口说明

客户主动拉取通话记录列表的接口。

#### 请求方式

POST，form-data格式

#### 获取通话记录接口请求参数

| 参数名          | 类型     | 是否必须 | 说明                                                                |
| :----------- | :----- | :--- | :---------------------------------------------------------------- |
| service      | string | 是    | App.Sip\_Cdr.GetBill                                              |
| token        | string | 是    | 通过授权接口获取的token                                                    |
| starttime    | string | 是    | (拔打)起始时间，格式：yyyy-mm-dd hh\:mm\:ss                                 |
| endtime      | string | 是    | (拔打)结束时间，格式：yyyy-mm-dd hh\:mm\:ss                                 |
| syncflag     | int    | 是    | 获取记录类型:1、获取未查询过的记录(默认)；2、获取已查询过的记录；3、获取全部记录。                      |
| direction    | int    | 是    | 呼叫方向：1、呼入； 2、呼出；3、全部（默认）。                                         |
| callmethod   | int    | 是    | 呼叫方法：0、不限；1、分机互拨；2、分机直拨（手拨）；3、API呼叫（默认）；4、API双呼；5、预测式外呼；6、IVR/群呼。 |
| currentpage  | int    | 是    | 页数，默认：1                                                           |
| itemsperpage | int    | 是    | 每页数量，默认：10，最小：1；最大：1000                                           |
| extnumber    | string | 是    | 分机号，多个分机号用英文逗号隔开，传空值时为全部                                          |
| destnumber   | string | 是    | 呼叫的目标号码，传空值时为全部                                                   |
| userid       | string | 是    | 自定义数据(员工ID)，可为空值                                                  |
| memberid     | string | 是    | 自定义数据(会员ID)，可为空值                                                  |
| ext   | string | 否    | 自定义数据(扩展参数)                                                        |
| customuuid   | string | 否    | 自定义数据(客户ID)                                                       |

#### 获取通话记录接口请求示例（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Cdr.GetBill',
        'token'     => 'ABCDEFG',
        'starttime'  => '2019-01-12 00:00:00',
        'endtime'    => '2020-12-12 00:00:00',
        'direction'  => 3
        'syncflag'   => 3,
        'callmethod' => 0,
        'currentpage'  => 1,
        'itemsperpage'  => 10,
    ];
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $apiUrl);
    curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $postFields);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $response = curl_exec($curl);
    $curlError = curl_error($curl);
    curl_close($curl);
    var_dump($response);
?>

```

#### 返回数据结构示例

```
{
    "ret": 200,
    "data": {
        "status": 0,
        "desc": "获取成功",
        "result": {
            "totalitems": 8151,
            "currentpage": 1,
            "itemsperpage": 10,
            "bills": [
                {
                    "id": 823988364,
                    "companycode": "8888723",
                    "direction": "callout",
                    "callmethod": 5,
                    "starttime": "2025-10-16 16:18:07",
                    "answertime": "",
                    "endtime": "2025-10-16 16:18:43",
                    "duration": 36,
                    "billsec": 0,
                    "userid": "U_q1IBUeAn",
                    "memberid": "M_v9sKNEVV",
                    "ext": "{\"type\":\"robot\",\"level\":4}",
                    "chengshudu": "{\"type\":\"robot\",\"level\":4}",
                    "disnumber": "218888723001",
                    "destnumber": "15978995617",
                    "extnumber": "8888723002",
                    "recordfilename": "",
                    "downloadip": "",
                    "hangupdirection": 10041,
                    "hangupcase": 10020,
                    "uuid": "a526e04e-aa68-11f0-96ea-5ba23668545d",
                    "userkey": "",
                    "customuuid": "SIcqy3Bu-qBxv-hquJ-B80W-QaOpFkWMHe8h",
                    "taskid": "20251016161536503802",
                    "round": "1",
                    "recordurl": ""
                }
            ]
        },
        "reqtime": 1581502410,
        "rsptime": 1581502410
    },
    "msg": ""
}

```

#### 返回参数说明

| 参数名               | 类型     | 说明          |
| :---------------- | :----- | :---------- |
| result            | objest | 返回的结果集      |
| —totalitems       | int    | 记录总数        |
| —currentpage      | int    | 当前页码        |
| —itemsperpage     | int    | 每页数量        |
| —bills            | array  | 记录数组        |
| ——id              | int    | 记录id        |
| ——companycode     | string | 企业code        |
| ——extnumber       | string | 分机号         |
| ——destnumber      | string | 目标号码        |
| ——disnumber       | string | 显示号码        |
| ——starttime       | string | 呼叫时间        |
| ——answertime      | string | 应答时间        |
| ——endtime         | string | 通话结束时间      |
| ——duration        | int    | 呼叫等待时长      |
| ——billsec         | int    | 通话时长        |
| ——direction       | string | 呼叫方向        |
| ——callmethod      | int    | 呼叫方式        |
| ——userid          | string | 自定义参数(用户id) |
| ——memberid        | string | 自定义参数(会员id) |
| ——chengshudu      | string | 自定义参数(和ext值一样)  |
| ——ext             | string | 自定义参数(扩展参数)  |
| ——customuuid      | string | 自定义参数(客户id) |
| ——recordfilename  | string | 通话记录文件名     |
| ——downloadip      | string | 下载ip        |
| ——hangupdirection | int    | 挂断方向        |
| ——hangupcause     | int    | 挂断原因        |
| ——userkey         | string | 用户按键        |
| ——taskid          | string | 预测外呼任务id        |
| ——round           | string | 预测外呼轮次       |
| ——recordurl       | string | 录音下载url        |

#### Postman请求参数示例

![](https://doc-admin.infin8linx.com/uploads/202503/c65b2c52d15ac1a4f5775e9b19f9cfe5.jpg)

# 通用api - 清除Token接口

#### 接口说明

当有新增分机或是分机进行调整后出现异常时，可以通过该接口清除Token后，再重新获取Token继续操作。

#### 请求方式

POST，form-data格式

#### 请求参数

| 参数名     | 类型     | 是否必须 | 说明                   |
| :------ | :----- | :--- | :------------------- |
| service | string | 是    | App.Sip\_Auth.Logout |
| token   | string | 是    | Token字符串             |

#### 接口请求示例（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => ' App.Sip_Auth.Logout',
        'token'     => 'ABCDEFG',
    ];
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $apiUrl);
    curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $postFields);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $response = curl_exec($curl);
    $curlError = curl_error($curl);
    curl_close($curl);
    var_dump($response);
?>

```

#### 返回数据结构示例

    {
        "ret": 200,
        "data": {
            "status": 0,
            "desc": "注销成功",
            "reqtime": 1602655204,
            "rsptime": 1602655204
        },
        "msg": ""
    }

# 通用api - 全局错误码和状态码

#### 一、接口异常错误

说明：ret为非200，msg为异常的错误信息。

```
{
    "ret":400, // 状态码
    "data":[],
    "msg":"非法请求：参数不合法"
}

```

| ret | msg      | 说明                  |
| :-- | :------- | :------------------ |
| 400 | 非法请求     | 一般为参数不合法            |
| 500 |          | 服务器错误               |
| 600 |          | token无效请重新登陆验证      |
| 601 | appid未授权 | 请检查appid或联系云呼科技是否授权 |
| 602 |          | appid授权已到期          |
| 603 |          | 模块未授权               |
| 604 | IP未授权    | 请联系厂商授权访问           |

#### 二、接口请求正常,内部处理错误

说明：ret为200。data结构体里status为1，desc为失败的中文描述，errors为详细错误信息，其中code码请参照对应说明。msg为空。

```
{
    "ret": 200,
    "data": {
        "status": 1,
        "desc": "xxx失败",
        "errors": {
            "code": "1003",
            "codemsg": "授权失败"
        },
        "reqtime": 1507529858,
        "rsptime": 1507529858
    },
    "msg": ""
}

```

| code  | codemsg  | 说明                           |
| :---- | :------- | :--------------------------- |
| 1001  | 服务器连接失败  | 一般为网络原因                      |
| 1002  | 操作异常     | 一般为校验异常等                     |
| 1003  | 操作失败     | 一般是授权失败、注销失败、命令发送失败、服务器连接异常等 |
| 1010  | 分机异常     | 可能是新加的分机，需要重新登陆获取新token      |
| 1011  | 非法分机     | 非本公司所有                       |
| 1012  | 分机不存在    | 分机号码状态                       |
| 1013  | 分机已停用    | 分机号码状态                       |
| 1014  | 分机未注册    | 分机号码状态                       |
| 1015  | 分机不在通话中  | 分机号码状态                       |
| 1016  | 分机已启用    | 分机号码状态                       |
| 1017  | 分机已注册    | 分机号码状态                       |
| 1018  | 号码已启用    | 主叫号码状态                       |
| 1019  | 号码已禁用    | 主叫号码状态                       |
| 1020  | 号码不存在    | 主叫号码状态                       |
| 1021  | 非法号码     | 非本公司所有                       |
| 1024  | 任务不存在    | 预测式任务接口返回状态                  |
| 1025  | 未开始      | 预测式任务接口返回状态                  |
| 1026  | 进行中      | 预测式任务接口返回状态                  |
| 1027  | 暂停       | 预测式任务接口返回状态                  |
| 1028  | 已结束      | 预测式任务接口返回状态                  |
| 1201  | 空闲       | 分机合法、已启用并已注册                 |
| 1202  | 振铃       | 分机号返回                        |
| 1203  | 摘机       | 分机号返回                        |
| 1204  | 通话中      | 分机号返回                        |
| 1205  | 用户拒接     | 被叫方拒接                        |
| 1210  | 队列异常     | 预测式外呼中返回                     |
| 1211  | 非法队列     | 不存在或非本公司所有                   |
| 1212  | 未接听      | 已分配未接听                       |
| 1213  | 等待中      | 等待分配(示闲)                     |
| 1214  | 接收中      | 队列中的分机状态                     |
| 1215  | 已接听      | 队列里的分机状态                     |
| 1216  | 拒接       | 队列里的分机状态                     |
| 1217  | 暂停       | 示忙                           |
| 1218  | 已签入      | 队列中已签入该分机                    |
| 10001	| 正常挂断	| 挂机原因                         |
| 10002	| 呼叫取消	| 挂机原因                         |
| 10003	| 拒绝接听	| 挂机原因                         |
| 10004	| 外呼通道线路失败	| 挂机原因                         |
| 10005	| 用户超时未接听	| 挂机原因                         |
| 10006	| 用户忙	| 挂机原因                         |
| 10007	| 服务器端挂断	| 挂机原因                         |
| 10008	| 分机未注册	| 挂机原因                         |
| 10009	| 目标不可达	| 挂机原因                         |
| 10011	| 定时器超时	| 挂机原因                         |
| 10012	| 呼入时回调接口错误	| 挂机原因                         |
| 10013	| 分机不存在	| 挂机原因                         |
| 10014	| 未发现	| 挂机原因                         |
| 10015	| 请求超时	| 挂机原因                         |
| 10016	| 无人接听	| 挂机原因                         |
| 10017	| 呼叫失效	| 挂机原因                         |
| 10019	| 归属地未知	| 挂机原因                         |
| 10020	| 其它原因	| 挂机原因                         |
| 10024	| 错误请求	| 挂机原因                         |
| 10025	| 呼叫被禁止	| 挂机原因                         |
| 10027	| 号码被改变	| 挂机原因                         |
| 10028	| 呼叫拦截	| 挂机原因                         |
| 10031	| 未知 | 挂机原因                         |
| 10040 | 主叫挂机     | 挂机方向                         |
| 10041 | 被叫挂机     | 挂机方向                         |

# 通用api - 通话记录回调参数说明

#### 通话记录回调参数说明
话单回调需要给对应的账号配置上回调地址即可。
话单的回调地址配置：由客户提供一个可以接收json数据的接口地址，由我们配置或客户自行在后台配置都可以。

#### 通话记录回调数据格式json

```
{
    "id": 263056202,
    "companycode": "9513923",
    "direction": "callout",
    "type": "callout",
    "callmethod": 6,
    "starttime": "2025-10-16 17:31:13",
    "answertime": "",
    "endtime": "2025-10-16 17:31:21",
    "duration": 8,
    "billsec": 0,
    "userid": "0",
    "memberid": "0",
    "chengshudu": "0",
    "ext": "0",
    "disnumber": "219513923001",
    "destnumber": "81351111451",
    "extnumber": "",
    "recordfilename": "",
    "downloadip": "",
    "hangupdirection": 10040,
    "hangupcause": 10020,
    "uuid": "db4a44cc-aa72-11f0-ad78-1d7ff0749d07",
    "userkey": "",
    "customuuid": "76c33d997640d36b033d43b1d2d3964e",
    "taskid": "",
    "round": 0,
    "recordurl": ""
}

```

#### 通话记录回调参数说明

| 参数名             | 类型     | 说明                                                                |
| :-------------- | :----- | :---------------------------------------------------------------- |
| callmethod      | int    | 呼叫方法：0、不限；1、分机互拨；2、分机直拨（手拨）；3、API呼叫（默认）；4、API双呼；5、预测式外呼；6、IVR/群呼。 |
| starttime       | string | 呼叫时间                                                              |
| answertime      | string | 应答时间                                                              |
| endtime         | string | 通话结束时间                                                            |
| duration        | int    | 呼叫等待时长                                                            |
| billsec         | int    | 通话时长                                                              |
| userid          | string | 员工工号                                                              |
| ext             | string | 自定义参数-扩展参数                                                         |
| chengshudu      | string | 自定义参数-值和ext一致                                                        |
| hangupdirection | int    | 挂机方向                                                              |
| hangupcause     | int    | 挂机原因代码                                                            |
| memberid        | string | 自定义参数-会员id                                                        |
| disnumber       | string | 主叫号码                                                              |
| destnumber      | string | 被叫号码                                                              |
| downloadip      | string | 录音下载ip                                                            |
| recordfilename  | string | 录音文件名                                                             |
| id              | int    | 数据id    
| companycode     | string | 公司code                                                             |
| type            | string | 呼叫类型    callout呼出、callin呼入                                                          |
| extnumber       | string | 分机号                                                               |
| uuid            | string | 通话uuid                                                            |
| userkey         | string | 用户按键                                                              |
| customuuid      | string | 自定义参数-客户id                                                        |
| taskid          | string | 任务id                                                       |
| round           | string | 呼叫轮次                                                        |
| recordurl       | string | 录音下载地址                                                       |

# 通用api - 通话录音下载链接接口

#### 接口说明

获取通话记录文件的下载链接。目前通话录音保存3个月时间，建议同步保存到本地。

#### 请求参数

| 参数名      | 类型     | 是否必须 | 说明                         |
| :------- | :----- | :--- | :------------------------- |
| service  | string | 是    | App.Sip\_Cdr.GetRecodeFile |
| token    | string | 是    | 通过授权接口获取的token             |
| filename | string | 是    | 通话记录回调中返回的录音文件名            |

#### 接口请求示例（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Cdr.GetRecodeFile',
        'token'     => 'ABCDEFG',
        'filename'  => 'abcdefg',
    ];
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $apiUrl);
    curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $postFields);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $response = curl_exec($curl);
    $curlError = curl_error($curl);
    curl_close($curl);
    var_dump($response);
?>

```

#### 返回数据结构示例

```
{
    "ret": 200,
    "data": {
        "status": 0,
        "desc": "获取成功",
        "result": {
            "downurl": "http://127.0.0.1:8080/abcdefg",
            "expiredtime": "失效时间：2020-02-11 17:27:23"
        },
        "reqtime": 1581412943,
        "rsptime": 1581412943
    },
    "msg": ""
}

```

#### 返回参数说明

| 参数名         | 类型     | 说明         |
| :---------- | :----- | :--------- |
| result      | objest | 返回的结果集     |
| downurl     | string | 通话录音文件下载链接 |
| expiredtime | string | 下载链接失效时间   |