# 语音Wiki

# 语音业务概览

infinity links将运营商sip trunk资源进行整合，向客户提供全球主要市场的语音服务，既可以仅提供VOIP资源，也可以同时提供呼叫中心平台服务，方便客户企业灵活的根据自己的需求进行接入。

**需要配合软电话进行使用，软电话的种类，不同操作系统上的选择**

**呼出流程，呼入流程**

本文档将介绍业务相关的基础概念，帮助读者快速了解语音业务。

# SIP Trunk及VOIP 业务概览

## VOIP（Voice over Internet Protocol）
是一种通过互联网进行语音通信的技术，它将模拟语音信号转换为数字信号进行传输，具有成本低、灵活性强等特点。

## SIP Trunk（SIP中继）
是VOIP系统中连接企业内部IP电话系统与公共电话网络（PSTN）的关键组件。它通过SIP协议建立和管理通话通道，支持企业实现与外部电话网络的互通。SIP Trunk可以是运营商提供的IMS中继，也可以是第三方企业提供的基于互联网的弹性SIP中继（Elastic SIP Trunk），后者支持一点接入、全国乃至全球落地，并能聚合多个运营商的资源。

## VOIP与SIP Trunk的关系
VOIP系统依赖SIP Trunk实现与PSTN的互通。当企业需要拨打或接听外部电话时，VOIP系统通过SIP Trunk将语音数据包传输到PSTN网络，完成通话的建立和终止。SIP Trunk在VOIP系统中起到了桥梁的作用，使得企业无需传统电话线路即可实现语音通信。

[![m_deb880224a245ac751e3c3176824d599_r.png](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/m-deb880224a245ac751e3c3176824d599-r.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/m-deb880224a245ac751e3c3176824d599-r.png)

[![m_cd0829a48862313b6488fdbef565e673_r.png](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/m-cd0829a48862313b6488fdbef565e673-r.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/m-cd0829a48862313b6488fdbef565e673-r.png)


### PSTN（Public Switched Telephone Network）
即公共交换电话网络，是一种传统的电话通信网络，它通过电路交换技术实现语音通信。PSTN是全球范围内广泛使用的电话网络基础设施，支持固定电话、移动电话等通信方式。在VOIP系统中，PSTN作为外部电话网络的代表，SIP Trunk作为连接VOIP系统与PSTN的桥梁，使得企业可以通过互联网实现与传统电话网络的互通。


### SBC（会话边界控制器）
是VoIP通信中的关键组件，主要负责会话控制、媒体代理及安全防护。它支持信令代理、媒体转码、NAT穿越等功能，可部署在运营商IMS或企业网络中，保障通话质量与网络安全。


### PBX（专用交换机）
是企业内部电话系统的核心设备，提供语音通信、呼叫路由及管理功能，支持多终端接入（如IP话机、SIP中继），并集成SBC以增强安全性和扩展性。该设备既可以是在客户侧部署的硬件，也可以是在云端部署的云PBX服务


两者的核心区别在于：SBC侧重网络边界的安全与协议处理，而PBX聚焦企业内部通信资源的管理与分配。

**在infinity links，我们主要使用软交换平台实现云PBX的相关功能**


### 软交换及freeswitch
核心概念软交换（Softswitch）是一种基于分组网的呼叫控制技术，其核心思想是将传统交换机的呼叫控制功能与媒体传输功能分离，通过软件实现呼叫路由、网关管理、带宽控制等功能。它采用开放架构和标准化协议（如SIP、H.248、MGCP等），支持多网络互通（PSTN、IP网等），并能快速部署新业务。
FreeSWITCH是一个开源的多媒体通信平台，支持语音、视频、文本等多种实时通信协议（如SIP、WebRTC），常用于构建PBX、IVR、视频会议等系统。其设计核心是一个模块化的软交换引擎，可嵌入其他项目或独立运行。

| 特性     | 软交换系统                 | FreeSWITCH                |
| -------- | -------------------------- | ------------------------- |
| 定位     | 运营商级核心网络架构       | 开源通信平台              |
| 协议支持 | SIP/H.323/MGCP等标准化协议 | SIP/WebRTC等，侧重灵活性  |
| 部署场景 | 大规模电信网络             | 企业PBX、云通信、呼叫中心 |
| 核心优势 | 网络融合与业务开放         | 低成本、高定制化          |

FreeSWITCH可视为一种软交换的实现，但其更侧重灵活的开源生态和多媒体处理能力，而传统软交换系统通常面向运营商级网络，强调标准化和规模部署。

# 新页面



# 号段及路由

## 号段
在移动网络中，号段是指分配给特定运营商或服务提供商的一组电话号码范围。每个号段通常由国家或地区的电信管理机构进行规划和分配，以确保号码资源的有序使用。号段的格式通常包括国家代码、地区代码和用户号码部分。例如，在中国，手机号码的号段通常以1开头，后面跟随不同的数字组合，代表不同的运营商和业务类型。

一个移动网络电话号码的构成通常遵循下面的规则
**国家码+运营商号段+随机数字**

一个固定电话号码的构成通常遵循下面的规则
**国家码+地区码+随机数字**

其中
**国家码**
遵循ISO规范，但在实际业务中前缀可以存在多种形式，例如62，0062或+62等

**运营商号段**
遵循当地法律法规，例如中国移动号段139，telkomsel号段812等

**地区码**
遵循当地法律法规，例如纽约的区号为212，伦敦区号为20，雅加达区号为21等

**随机数字**
遵循当地法律法规及运营商规则，通常为6~9位数字



**在实践中，请注意主叫和被叫都会涉及到号段、号码的概念。在infinity links，我们通常会为不同客户、业务分配不同的主叫号段。同时，主叫可能存在被用户通过第三方软件标记为骚扰电话，进而影响接通率等业务指标的表现，需要及时进行调整**

**另外在部分公司系统中，我们会添加自定义前缀号段用于区分客户、控制路由等目的**





## 路由
在SIP Trunk业务中，路由是指语音通话数据包从源端（如企业内部的IP电话系统）到目的端（如公共电话网络PSTN或其他外部终端）的路径选择过程。具体来说，路由涉及以下几个关键点：

**路径选择**
SIP Trunk根据预设的规则和策略，决定语音数据包通过哪条网络路径传输。这可能基于成本、网络负载、地理位置等因素。

**信令控制**
SIP协议用于建立、修改和终止通话会话。路由过程中，SIP信令消息（如INVITE、ACK等）在源端和目的端之间传递，确保通话的正确建立和释放。

**媒体流传输**
一旦通话建立，语音数据包（媒体流）将沿着选定的路径传输。SIP Trunk负责确保媒体流的稳定性和质量，可能涉及媒体转码、NAT穿越等技术。

**动态调整**
在某些情况下，SIP Trunk可以根据实时网络状况动态调整路由，以优化通话质量和减少延迟。

**安全与合规**
路由过程中，SBC（会话边界控制器）等设备会进行安全检查，防止非法访问和攻击，同时确保符合当地的法律法规。

**在infinity links，主要利用号段将不同性质、不同客户的通话送往不同运营商、供应商的线路，以实现负载均衡、成本优化、风险隔离等业务目标**

# 信令及返回码

## 信令
在SIP Trunk业务中，信令是指用于建立、修改和终止通话会话的通信协议消息，主要通过SIP（Session Initiation Protocol）协议实现。信令在通话过程中起着关键作用，具体包括以下几个方面：

**会话建立：** 当用户发起通话请求时，SIP信令消息（如INVITE）从源端（如企业内部的IP电话系统）发送到目的端（如公共电话网络PSTN或其他外部终端），通知对方建立通话连接。

**会话修改：** 在通话过程中，如果需要调整通话参数（如添加或删除参与者），可以通过SIP信令消息（如UPDATE或 re-INVITE）来实现。

**会话终止：** 当通话结束时，SIP信令消息（如BYE）用于通知对方终止通话连接，释放资源。

**状态管理：** SIP信令还用于管理通话的状态，例如通过REGISTER消息注册用户状态，或通过OPTIONS消息查询对方的支持能力。

**信令控制：** SIP信令消息在源端和目的端之间传递，确保通话的正确建立、维持和释放，是SIP Trunk业务中实现语音通信的核心机制。

总结来说，SIP Trunk业务中的信令是通过SIP协议进行会话控制和管理的关键组成部分，确保通话的顺利建立、维持和终止。


## 信令返回码
在SIP Trunk业务中，SIP（Session Initiation Protocol）信令用于建立、修改和终止通话会话。SIP响应码分为几类，每类响应码表示不同的含义。以下是SIP Trunk业务中常见的返回码及其简要解释：

**1xx：信息性响应**

100 Trying：表示服务器已收到请求，正在处理，但尚未完成。

180 Ringing：表示被叫方正在振铃。

183 Session Progress：表示会话正在进行中，通常用于提示通话建立过程中的中间状态。

**2xx：成功响应**

200 OK：表示请求已成功处理，通常用于确认通话建立、修改或终止。

202 Accepted：表示请求已被接受，但处理尚未完成，通常用于异步操作。

**3xx：重定向响应**

301 Moved Permanently：表示请求的资源已永久移动到新位置。

302 Moved Temporarily：表示请求的资源暂时移动到新位置。

380 Alternative Service：表示通话被重定向到另一种服务。

**4xx：客户端错误**

400 Bad Request：表示请求语法错误，服务器无法理解。

401 Unauthorized：表示请求需要身份验证。

403 Forbidden：表示服务器理解请求，但拒绝执行。

404 Not Found：表示请求的资源不存在。

408 Request Timeout：表示服务器等待请求超时。

429 Too Many Requests：表示客户端发送的请求过多，需要限制请求频率。

**5xx：服务器错误**

500 Internal Server Error：表示服务器遇到意外情况，无法完成请求。

501 Not Implemented：表示服务器不支持请求的功能。

503 Service Unavailable：表示服务器暂时不可用，通常用于维护或过载情况。

504 Gateway Timeout：表示服务器作为网关或代理时，未及时收到上游服务器的响应。

**6xx：全局错误**

600 Busy Everywhere：表示被叫方在所有可用端点都忙。

603 Decline：表示被叫方明确拒绝通话请求。

604 Does Not Exist Anywhere：表示被叫方在任何地方都不存在。

606 Not Acceptable：表示被叫方接受会话描述，但某些媒体特性不可接受。

这些返回码在SIP Trunk业务中用于指示通话建立、修改和终止过程中的不同状态和问题，帮助网络管理员和开发人员诊断和解决通信中的问题。

# Account Manage

Test

# 快速入门指南

本文详细介绍了首次使用云联络中心语音平台的基本流程，并对控制台登录、界面导航及核心语音功能入口进行了全面阐述。

### 功能概述

本指南帮助语音业务管理员或客服主管快速完成平台登录，并直达 IVR 配置、分机管理、坐席组设置等关键功能，高效开展语音服务配置工作。

### 访问与登录

1.在浏览器地址栏输入语音平台访问地址：

https://voice-console.yourcompany.com

（请向管理员获取实际地址）

[![](https://document.infin8linx.com/uploads/images/gallery/2025-08/scaled-1680-/image-1754878296837.png)](https://document.infin8linx.com/uploads/images/gallery/2025-08/image-1754878296837.png)

2.在登录页面中，依次填写：

- 账户名称：由管理员分配的用户名；
- 密码：初始密码或已修改的登录密码；
- 验证码：根据页面提示输入图形验证码；
- Google 验证器动态码（如已启用）：若您的账号已配置双因素认证，需额外输入 Google Authenticator 应用生成的 6 位动态验证码。

> ⚠️ Google 验证器仅在管理员为您的账号开启双因素认证后才会显示。若未启用，则无需填写。

[![](https://document.infin8linx.com/uploads/images/gallery/2025-08/scaled-1680-/image-1754878446498.png)](https://document.infin8linx.com/uploads/images/gallery/2025-08/image-1754878446498.png)

3.点击 **Submit** 按钮，完成登录。

⚠️ 若忘记密码，请联系系统管理员重置。

🔒 首次登录后，建议立即修改默认密码。

### 控制台概览

登录后，左侧导航栏包含以下语音相关模块：

- 语音 
    - 自动外呼：创建基于名单的自动外呼任务
    - 预测式外呼：配置高并发智能预测外呼策略
    - 语音素材：上传和管理 MP3/TTS 语音文件
    - 分机管理：分机资源的分配与维护
    - 通话报表：查看呼入/呼出通话记录与统计
    - 客服管理：管理客服人员及坐席组
    - IVR管理：配置呼入自助语音流程
    - 拨号管理：配置外呼号码池及显号规则
    - 设置：配置语音业务全局参数

### 执行您的第一个语音操作

推荐从以下任一任务开始：

创建预测式外呼任务

1.路径：语音 &gt; 预测式外呼 &gt; 任务添加

2.操作步骤：

- 提前在 **语音 &gt; 客服管理** 中创建一个坐席组并添加坐席；
- 准备好接收号码列表（CSV/TXT 格式）；
- 在预测式外呼页面点击 任务添加，上传号码文件，并选择目标坐席组或指定坐席；
- 设置任务名称与外显号码，提交即可启动外呼。

💡 各功能的详细配置说明，请参阅本手册后续章节。

# Common API - Extension call state callback parameters

# Extension call state callback parameters

To call back the call status of an extension, you need to configure a callback address for the corresponding account. Callback address configuration for extension call status: The customer provides an interface address that can receive json data, which can be configured by us or by the customer in the background.

#### Extension call status callback data format

```
{
"buuid":"526d643a-e8fe-11ea-a84a-cf6e45e88543",
"callee":"87847569524",
"caller":"90240005",
"companycode":"9024",
"customuuid":"123Abc",
"direction":"callout",
"disnumber":"2190240001",
"extnumber":"90240005",
"isbleg":"false",
"method":"3",
"starttime":"1598598959",
"status":"ring",
"type":"call",
"uuid":"526d637c-e8fe-11ea-a849-cf6e45e88543"
}


```

#### Explanation of extension call status callback parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th align="left">parameter name</th><th align="left">type</th><th align="left">illustrate</th></tr></thead><tbody><tr><td align="left">buuid</td><td align="left">string</td><td align="left">The uuid of the called number on side b of the call</td></tr><tr><td align="left">callee</td><td align="left">int</td><td align="left">called number</td></tr><tr><td align="left">caller</td><td align="left">int</td><td align="left">calling number</td></tr><tr><td align="left">companycode</td><td align="left">int</td><td align="left">The company id corresponding to the account</td></tr><tr><td align="left">customuuid</td><td align="left">string</td><td align="left">Custom parameter - customer id</td></tr><tr><td align="left">direction</td><td align="left">string</td><td align="left">Call direction: 1. Incoming; 2. Outgoing;</td></tr><tr><td align="left">disnumber</td><td align="left">int</td><td align="left">Destination number to call</td></tr><tr><td align="left">extnumber</td><td align="left">int</td><td align="left">Ext</td></tr><tr><td align="left">isbleg</td><td align="left">string</td><td align="left">true is ringing on the mobile phone side; false is ringing on the seat side;</td></tr><tr><td align="left">method</td><td align="left">string</td><td align="left">Call method: 0, unlimited; 1, mutual extension dial; 2, extension direct dial; 3, API call (default); 4, API double call; 5, predictive outbound call; 6, IVR/group call.</td></tr><tr><td align="left">starttime</td><td align="left">string</td><td align="left">call time</td></tr><tr><td align="left">status</td><td align="left">string</td><td align="left">call type</td></tr><tr><td align="left">type</td><td align="left">string</td><td align="left">call type</td></tr><tr><td align="left">uuid</td><td align="left">string</td><td align="left">call uuid</td></tr></tbody></table>

# 文档更新记录

<table id="bkmrk-%E7%89%88%E6%9C%AC-%E6%8F%8F%E8%BF%B0-%E4%BD%9C%E8%80%85-%E6%97%B6%E9%97%B4-v1.3-1.-"><thead><tr><th>版本</th><th>描述</th><th>作者</th><th>时间</th></tr></thead><tbody><tr><td>v1.3</td><td>1. 增加错误code=110  
2. 清理增加Java，PHP转16进制示例代码</td><td></td><td>2020/10/26  
2021/06/24</td></tr><tr><td>v1.4</td><td>支持https协议</td><td></td><td></td></tr><tr><td>v1.4.1</td><td>[增加客户上报短信状态接口](/books/message-cn-api/page/bd4c9 "增加客户上报短信状态接口")</td><td></td><td></td></tr><tr><td>v1.4.2</td><td>[增加短信字符编码检查接口](/books/message-cn-api/page/6ea2e "增加短信字符编码检查接口")</td><td></td><td></td></tr></tbody></table>

# 通用API - 获取录音下载

#### 接口说明

获取通话记录文件的下载链接。目前通话录音保存3个月时间，建议同步保存到本地。

#### 请求参数

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E6%98%AF%E5%90%A6%E5%BF%85%E9%A1%BB-%E8%AF%B4%E6%98%8E-servi"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">是否必须</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">service</td><td align="left">string</td><td align="left">是</td><td align="left">App.Sip\_Cdr.GetRecodeFile</td></tr><tr><td align="left">token</td><td align="left">string</td><td align="left">是</td><td align="left">通过授权接口获取的token</td></tr><tr><td align="left">filename</td><td align="left">string</td><td align="left">是</td><td align="left">通话记录回调中返回的录音文件名</td></tr></tbody></table>

#### 接口请求示例（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": ""
}


```

#### 返回参数说明

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-result-obj"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">result</td><td align="left">objest</td><td align="left">返回的结果集</td></tr><tr><td align="left">downurl</td><td align="left">string</td><td align="left">通话录音文件下载链接</td></tr><tr><td align="left">expiredtime</td><td align="left">string</td><td align="left">下载链接失效时间</td></tr></tbody></table>

# 批量IVR - IVR群呼接入流程

#### IVR群呼接入流程

**接入前录音文件准备：** 接口请求前，请先使用Infinity提供的账号密码登录到后台，在Voice后台的左侧找到菜单“Record Template(offline)”，在此处上传接口要使用的录音文件.  
`录音文件要求：采样率为8000bps，mp3格式，文件名不可带中文，允许英文及"_"符号。`

[![18a9cb71c6f980b20e9983f646a7ead7.jpg](https://document.infin8linx.com/uploads/images/gallery/2025-08/scaled-1680-/18a9cb71c6f980b20e9983f646a7ead7.jpg)](https://document.infin8linx.com/uploads/images/gallery/2025-08/18a9cb71c6f980b20e9983f646a7ead7.jpg)

# 通用 API 格式说明

### 请求头

- certification-code: af92196e-0d07-3c1d-a631-a71c...
- 是从 INCS 获取的唯一凭证，与每个 WhatsApp 号码对应

### 响应格式

#### 响应参数列表

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E5%BF%85%E4%BC%A0-%E6%8F%8F%E8%BF%B0-status-"><thead><tr><th>参数名</th><th>类型</th><th>必传</th><th>描述</th></tr></thead><tbody><tr><td>status</td><td>string</td><td>是</td><td>响应状态描述</td></tr><tr><td>code</td><td>int</td><td>是</td><td>错误码，200为成功，详见 [错误码](https://document.infin8linx.com/books/incs-messages-api/page/559cb)</td></tr><tr><td>message</td><td>string</td><td>是</td><td>错误描述</td></tr><tr><td>data</td><td>object</td><td>是</td><td>响应内容</td></tr><tr><td>error</td><td>object</td><td>是</td><td>错误详情</td></tr></tbody></table>

#### 成功响应示例

```json
{
    "status": "success",
    "code": 200,
    "message": "",
    "data": {
        "msg_id": "wamid.HBgLODUyNjg0MTUwMjYVAgARGBIyMUQ4RjA5MTY1NUJERjE3NjYA"
    },
    "error": {}
}

```

#### 失败响应示例

```json
{
    "status": "error",
    "code": 422,
    "message": "The phone number is invalid.",
    "data": {},
    "error": {
        "to": [
            "The phone number is invalid."
        ]
    }
}

```

# 发送 WhatsApp 消息

### 域名

- https://chat-api.incsapp.com

### 请求路由

- /external/messages/whatsapp

### 请求方式

- **POST**

### 请求头

- Content-Type: application/json
- certification-code: af92196e-0d07-3c1d-a631-a71c...

### 请求限流

- 单 Sender 最大 **5 rps** (每秒5请求)

### 请求参数

#### 请求参数列表

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E5%BF%85%E5%A1%AB-%E6%8F%8F%E8%BF%B0-to-stri"><thead><tr><th>参数名</th><th>类型</th><th>必填</th><th>描述</th></tr></thead><tbody><tr><td>to</td><td>string</td><td>是</td><td>收信人 WhatsApp 手机号，必须是国家码+手机号的纯数字格式，如 "8526841511234"</td></tr><tr><td>type</td><td>string</td><td>是</td><td>消息类型，支持模板消息：template，和普通消息（需要用户回复的24小时内可以发送）：text, image, video, audio, document, interactive（互动消息：cta\_url, list, carousel, button）</td></tr><tr><td>filter\_unsubscribed</td><td>int</td><td>否</td><td>定制化功能：过滤取消订阅用户。默认关闭该功能，传"1"时启用该功能，需要在INCS设置取消订阅关键字，用户发送该关键字取消订阅后，再给该用户发送消息会拦截。</td></tr><tr><td>use\_for\_agent</td><td>int</td><td>否</td><td>将消息通过 INCS 客服工作台发送。默认关闭该功能，传"1"时将消息同步到 INCS 客服工作台，需要启用 INCS 客服账号，否则功能不生效。</td></tr></tbody></table>

- 每种消息需要的参数见请求示例

#### 请求示例

##### **不包含参数**的模板消息请求示例

```json
{
    "to": "85268411234",
    "type": "template",
    "template": {
        "name": "test_button_reply_1"
    }
}

```

##### **包含参数**的模板消息请求示例

- 发送包含**header媒体参数**的模板消息

```json
{
    "to": "85268411234",
    "type": "template",
    "template": {
        "name": "test_header_image_5",
        "components": [
            {
                "type": "header",
                "parameters": [
                    {
                        "type": "image",
                        "image": {
                            "link": "https://incs-saas.oss-ap-southeast-1.aliyuncs.com/chat/images/header-98403274893.png"
                        }
                    }
                ]
            }
        ]
    }
}

```

- 发送包含**header文本参数**和**body文本参数**的模板消息

```json
{
    "to": "85268411234",
    "type": "template",
    "template": {
        "name": "test_header_text_2",
        "components": [
            {
                "type": "header",
                "parameters": [
                    {
                        "type": "text",
                        "text": "2025-10-01"
                    }
                ]
            },
            {
                "type": "body",
                "parameters":[
                    {
                        "type": "text",
                        "text": "the end of 2025"
                    },
                    {
                        "type": "text",
                        "text": "25OFF"
                    },
                    {
                        "type": "text",
                        "text": "25%"
                    }
                ]
            }
        ]
    }
}

```

- 发送包含**网址链接参数**的模板消息

```json
{
    "to": "85268411234",
    "type": "template",
    "template": {
        "name": "test_url_param",
        "components": [
            {
                "type": "button",
                "sub_type": "url",
                "index": "0", // 参数按钮顺序，假如只有一个按钮有参数，传"0"即可，多个按钮有参数时，按按钮顺序传
                "parameters": [
                    {
                        "type": "text",
                        "text": "12345" //url参数值
                    }
                ]
            }
        ]
    }
}

```

- 发送包含**COPY\_CODE 按钮**的模板消息

```json
{
    "to": "85268411234",
    "type": "template",
    "template": {
        "name": "test_button_code_1",
        "components": [
            {
                "type": "button",
                "sub_type": "COPY_CODE",
                "index": "0",
                "parameters": [
                    {
                        "type": "coupon_code",
                        "coupon_code": "843924"
                    }
                ]
            }
        ]
    }
}

```

##### text 消息示例

```json
{
    "to": "85268411234",
    "type": "text",
    "text": "Hello"
}

```

##### image 消息示例

- 支持类型：.jpeg, .png
- 图像必须为 8 位、RGB 或 RGBA
- 最大 5 MB
- caption: 媒体素材描述。**非必要**。string 类型，最大1024字符。

```json
{
    "to": "85268411234",
    "type": "image",
    "image": {
        "link": "https://incs-saas.oss-ap-southeast-1.aliyuncs.com/chat/images/header-98403274893.png",
        "caption": "A image description"
    }
}

```

##### video 消息示例

- 支持类型：.3gp, .mp4
- 最大 16 MB
- 仅支持 H.264 视频编解码器和 AAC 音频编解码器。仅限单个音频流或无音频流。
- 请注意，使用 H.264“高”配置文件和 B 帧编码的视频不受 Android WhatsApp 客户端支持。建议您在编码时（或使用 ffmpeg 等工具重新编码时）使用 H.264“主”配置文件（不含 B 帧）或 H.264“基准”配置文件，并将 moov 盒置于在 mdat 盒之前，以获得更广泛的兼容性。如果您使用的是 ffmpeg，可以使用 -movflags faststart 标记将 moov 盒置于 mdata 盒之前。
- caption: 媒体素材描述。**非必要**。string 类型，最大1024字符。

```json
{
    "to": "85268411234",
    "type": "video",
    "video": {
        "link": "https://incs-saas.oss-ap-southeast-1.aliyuncs.com/chat/videos/687710788353f.mp4",
        "caption": "A video description"
    }
}

```

##### audio 消息示例

- 支持类型：.aac, .amr, .mp3, .m4a, .ogg
- 最大 16 MB

```json
{
    "to": "85268411234",
    "type": "audio",
    "audio": {
        "link": "https://incs-saas.oss-ap-southeast-1.aliyuncs.com/chat/videos/68771078812f353f.mp3"
    }
}

```

##### document 消息示例

- 支持类型：.txt, .xls, .xlsx, .doc, .docx, .ppt, .pptx, .pdf
- 最大 100 MB,
- caption: 媒体素材描述。**非必要**。string 类型，最大1024字符。

```json
{
    "to": "85268411234",
    "type": "document",
    "document": {
        "link": "https://incs-saas.oss-ap-southeast-1.aliyuncs.com/chat/files/template.xls",
        "caption": "A document description"
    }
}

```

##### AUTHENTICATION 模板消息示例

```json
{
    "to": "85268411234",
    "type": "template",
    "template": {
        "name": "authentication_ca",
        "code": "123456" // 验证码
    }
}

```

##### interactive 交互消息

**包含四种交互类型：**

- cta\_url 网址按钮
- list 清单按钮
- carousel 素材轮播
- button 回复按钮

###### 1. cta\_url 网址按钮

WhatsApp 用户可能会犹豫是否要轻触文字消息中包含冗长或模糊字符串的原始网址。在这种情况下，您不妨改为发送包含互动式行动号召 (CTA) 网址按钮的消息。通过行动号召 (CTA) 网址按钮消息，您可以将任何网址映射到一个按钮，而不必在消息正文中加入原始网址。

![img](https://scontent-nrt6-1.xx.fbcdn.net/v/t39.2365-6/498114174_2231456237292792_1964702441845433307_n.png?_nc_cat=105&ccb=1-7&_nc_sid=e280be&_nc_ohc=bmOvq0uG1wsQ7kNvwF2Q7JM&_nc_oc=AdpSM6gDEHEzimXUULwf8_zDDk0npaedyYvZkZ7eTKxdmjZ8O1emWVYA1dmVJNJdAd0&_nc_zt=14&_nc_ht=scontent-nrt6-1.xx&_nc_gid=q0YHLkXtqFelwLREJu-36g&_nc_ss=7b289&oh=00_Af0BA66yjJUIVG7ryGw5Iy79Quvd3w7Vx1CLm2pIj-xczQ&oe=6A0AA391)

1.1 请求语法

```
{
  "to": "<WHATSAPP_USER_PHONE_NUMBER>",
  "type": "interactive",
  "interactive": {
    "type": "cta_url",

    <!-- If using document header, otherwise omit -->
    "header": {
      "type": "document",
      "document": {
        "link": "<ASSET_URL>"
      }
    },

    <!-- If using image header, otherwise omit -->
    "header": {
      "type": "image",
      "image": {
        "link": "<ASSET_URL>"
      }
    },

    <!-- If using text header, otherwise omit -->
    "header": {
      "type": "text",
      "text": "<HEADER_TEXT>"
      }
    },

    <!-- If using video header, otherwise omit -->
    "header": {
      "type": "video",
      "video": {
        "link": "<ASSET_URL>"
      }
    },

    "body": {
      "text": "<BODY_TEXT>"
    },
    "action": {
      "name": "cta_url",
      "parameters": {
        "display_text": "<BUTTON_LABEL_TEXT>",
        "url": "<BUTTON_URL>"
      }
    },

    <!-- If using footer text, otherwise omit -->
    "footer": {
      "text": "<FOOTER_TEXT>"
    }
  }
}'

```

1.2 请求参数

<table id="bkmrk-%E5%8D%A0%E4%BD%8D%E6%96%87%E6%9C%AC-%E8%AF%B4%E6%98%8E-%E7%A4%BA%E4%BE%8B%E5%80%BC-%3Casset_u"><thead><tr><th align="left">**占位文本**</th><th align="left">**说明**</th><th align="left">**示例值**</th></tr></thead><tbody><tr><td align="left">`<ASSET_URL>`*字符串*</td><td align="left">\*\*必需（如果使用包含媒体素材的标头）。\*\*公共服务器上的素材网址。</td><td align="left">`https://www.luckyshrub.com/assets/lucky-shrub-banner-logo-v1.png`</td></tr><tr><td align="left">`<BODY_TEXT>`*字符串*</td><td align="left">\*\*必要。\*\*正文。网址会自动转换为超链接。最多 1,024 个字符。</td><td align="left">`Tap the button below to see available dates.`</td></tr><tr><td align="left">`<BUTTON_LABEL_TEXT>`*字符串*</td><td align="left">\*\*必要。\*\*按钮标签文本。如果使用多个按钮，标签文本必须唯一。最多 20 个字符。</td><td align="left">`See Dates`</td></tr><tr><td align="left">`<BUTTON_URL>`</td><td align="left">\*\*必要。\*\*WhatsApp 用户轻触该按钮时要在设备的默认网页浏览器中加载的网址。</td><td align="left">`https://www.luckyshrub.com?clickID=kqDGWd24Q5TRwoEQTICY7W1JKoXvaZOXWAS7h1P76s0R7Paec4`</td></tr><tr><td align="left">`<FOOTER_TEXT>`*字符串*</td><td align="left">\*\*使用页脚时必需。\*\*页脚文本。网址会自动转换为超链接。最多 60 个字符。</td><td align="left">`Dates subject to change.`</td></tr><tr><td align="left">`<HEADER_TEXT>`*字符串*</td><td align="left">\*\*必需（如果使用文字标头）。\*\*标题文本。最多 60 个字符。</td><td align="left">`New workshop dates announced!`</td></tr></tbody></table>

1.3 请求示例

```
{
  "to": "16505551234",
  "type": "interactive",
  "interactive": {
    "type": "cta_url",
    "header": {
      "type": "image",
      "image": {
        "link": "https://www.luckyshrub.com/assets/lucky-shrub-banner-logo-v1.png"
      }
    },
    "body": {
      "text": "Tap the button below to see available dates."
    },
    "action": {
      "name": "cta_url",
      "parameters": {
        "display_text": "See Dates",
        "url": "https://www.luckyshrub.com?clickID=kqDGWd24Q5TRwoEQTICY7W1JKoXvaZOXWAS7h1P76s0R7Paec4"
      }
    },
    "footer": {
      "text": "Dates subject to change."
    }
  }
}'

```

###### 2. list 清单按钮

通过互动式清单消息，您可以向 WhatsApp 用户呈现可供选择的选项清单（选项定义为请求 Payload 中的行）：

![img](https://scontent-nrt6-1.xx.fbcdn.net/v/t39.2365-6/439906651_815131396632137_2393939757123941379_n.png?_nc_cat=106&ccb=1-7&_nc_sid=e280be&_nc_ohc=SWAf4VilT7YQ7kNvwHW0v5i&_nc_oc=AdpUVpkbswVY_NnbOGNVcvsRxrK1j8IxWoNZA3f6ZBM4vDaiuiOSkumLrXukrrx1ePs&_nc_zt=14&_nc_ht=scontent-nrt6-1.xx&_nc_gid=pzSjYMuGoVfoeFLCHNn8Aw&_nc_ss=7b289&oh=00_Af0ULrMwBWXb92JyO6IMLws5j_ByMIrFuPJaGoCKvVY5cQ&oe=6A0AAF11)

当用户轻触消息中的按钮时，会显示列出可用选项的模态窗口：

![img](https://scontent-nrt1-1.xx.fbcdn.net/v/t39.2365-6/440772174_1215031642793437_4263879536705453309_n.png?_nc_cat=109&ccb=1-7&_nc_sid=e280be&_nc_ohc=h-0TvqahypoQ7kNvwESUbvf&_nc_oc=AdqQ_OMKosAy7qwMHgVMK87PSCtBAI8UOANDJIxjDWMt42GV4zn3gCBMwJnivKQh4U8&_nc_zt=14&_nc_ht=scontent-nrt1-1.xx&_nc_gid=pzSjYMuGoVfoeFLCHNn8Aw&_nc_ss=7b289&oh=00_Af1bOfRGwAT2kHnnwzu0yHD7psk5fjXnu4eYl6P4hftceQ&oe=6A0AD083)

然后，用户可以选择一个选项，该选项将作为回复发送：

![img](https://scontent-nrt6-1.xx.fbcdn.net/v/t39.2365-6/440751989_956441365805448_2344471884869029846_n.png?_nc_cat=106&ccb=1-7&_nc_sid=e280be&_nc_ohc=zyjKg9awJNoQ7kNvwEmXRGI&_nc_oc=AdpQottidPiomPAkLpIgaxJP_1LG7FbshYqqERwHoxuxkMPXaXRxnxeCqRWcqfA1lHI&_nc_zt=14&_nc_ht=scontent-nrt6-1.xx&_nc_gid=pzSjYMuGoVfoeFLCHNn8Aw&_nc_ss=7b289&oh=00_Af1GExGmHskrBA22nh8qQgpWygTjPPOROkxNZ3scaMjKcA&oe=6A0AB113)

这会触发一个识别用户所选选项的 Webhook。

互动式清单消息最多支持 10 个版块，所有版块总共最多包含 10 行，并可包含可选的标头和页脚。

2.1 请求语法

```
{
  "to": "<WHATSAPP_USER_PHONE_NUMBER>",
  "type": "interactive",
  "interactive": {
    "type": "list",
    "header": {
      "type": "text",
      "text": "<MESSAGE_HEADER_TEXT>"
    },
    "body": {
      "text": "<MESSAGE_BODY_TEXT>"
    },
    "footer": {
      "text": "<MESSAGE_FOOTER_TEXT>"
    },
    "action": {
      "button": "<BUTTON_TEXT>",
      "sections": [
        {
          "title": "<SECTION_TITLE_TEXT>",
          "rows": [
            {
              "id": "<ROW_ID>",
              "title": "<ROW_TITLE_TEXT>",
              "description": "<ROW_DESCRIPTION_TEXT>"
            }
            <!-- Additional rows would go here -->
          ]
        }
        <!-- Additional sections would go here -->
      ]
    }
  }
}'

```

2.2 请求参数

<table id="bkmrk-%E5%8D%A0%E4%BD%8D%E6%96%87%E6%9C%AC-%E8%AF%B4%E6%98%8E-%E7%A4%BA%E4%BE%8B%E5%80%BC-%3Cbutton_"><thead><tr><th align="left">**占位文本**</th><th align="left">**说明**</th><th align="left">**示例值**</th></tr></thead><tbody><tr><td align="left">`<BUTTON_TEXT>`*字符串*</td><td align="left">\*\*必要。\*\*按钮标签文本。轻触时显示各选项行（WhatsApp 用户可以轻触的选项）。支持单个按钮。最多 20 个字符。</td><td align="left">`Shipping Options`</td></tr><tr><td align="left">`<MESSAGE_BODY_TEXT>`*字符串*</td><td align="left">\*\*必要。\*\*消息正文。支持网址。最多 4096 个字符。</td><td align="left">`Which shipping option do you prefer?`</td></tr><tr><td align="left">`<MESSAGE_FOOTER_TEXT>`*字符串*</td><td align="left">\*\*非必要。\*\*消息页脚文本。最多 60 个字符。</td><td align="left">`Lucky Shrub: Your gateway to succulents™`</td></tr><tr><td align="left">`<MESSAGE_HEADER_TEXT>`*字符串*</td><td align="left">**非必要。**`header` 对象为可选项。仅支持 `text` 标头类型。最多 60 个字符。</td><td align="left">`Choose Shipping Option`</td></tr><tr><td align="left">`<ROW_DESCRIPTION_TEXT>`*字符串*</td><td align="left">\*\*非必要。\*\*行描述。最多 72 个字符。</td><td align="left">`Next Day to 2 Days`</td></tr><tr><td align="left">`<ROW_ID>`*字符串*</td><td align="left">\*\*必要。\*\*用于识别行的任意字符串。如果用户提交选择，此编号将包含在 Webhook Payload 中。至少需要一行。最多支持 10 行。最多 200 个字符。</td><td align="left">`priority_express`</td></tr><tr><td align="left">`<ROW_TITLE_TEXT>`*字符串*</td><td align="left">\*\*必要。\*\*行标题。至少需要 1 行。最多支持 10 行。不超过 24 个字符。</td><td align="left">`Priority Mail Express`</td></tr><tr><td align="left">`<SECTION_TITLE_TEXT>`*字符串*</td><td align="left">\*\*必要。\*\*版块标题文本。至少需要 1 个版块。最多支持 10 个版块。不超过 24 个字符。</td><td align="left">`I want it ASAP!`</td></tr></tbody></table>

2.3 请求示例

发送带标头、正文、页脚和两个版块（各包含两行）的互动式清单消息的请求示例。

```
{
  "to": "16505551234",
  "type": "interactive",
  "interactive": {
    "type": "list",
    "header": {
      "type": "text",
      "text": "Choose Shipping Option"
    },
    "body": {
      "text": "Which shipping option do you prefer?"
    },
    "footer": {
      "text": "Lucky Shrub: Your gateway to succulents™"
    },
    "action": {
      "button": "Shipping Options",
      "sections": [
        {
          "title": "I want it ASAP!",
          "rows": [
            {
              "id": "priority_express",
              "title": "Priority Mail Express",
              "description": "Next Day to 2 Days"
            },
            {
              "id": "priority_mail",
              "title": "Priority Mail",
              "description": "1–3 Days"
            }
          ]
        },
        {
          "title": "I can wait a bit",
          "rows": [
            {
              "id": "usps_ground_advantage",
              "title": "USPS Ground Advantage",
              "description": "2–5 Days"
            },
            {
              "id": "media_mail",
              "title": "Media Mail",
              "description": "2–8 Days"
            }
          ]
        }
      ]
    }
  }
}'

```

2.4 Webhook

当 WhatsApp 用户选择一个选项并发送消息时，会触发**消息** Webhook，用于识别该用户所选选项的编号 (`id`)。

```
{
    "event": "new_message",
    "channel_id": 30058,
    "business_phone": "6281519236680",
    "message": {
        "messaging_product": "whatsapp",
        "metadata": {
            "display_phone_number": "6281519236680",
            "phone_number_id": "302702419599374"
        },
        "contacts": [
            {
                "profile": {
                    "name": "lucasleeve"
                },
                "wa_id": "6281519140327",
                "user_id": "ID.1459909096148557"
            }
        ],
        "messages": [
            {
                "context": {
                    "from": "6281519236680",
                    "id": "wamid.HBgNNjI4MTUxOTE0MDMyNxUCABEYEjI2OTlBQTkxMjkwNjc5N0NGRQA="
                },
                "from": "6281519140327",
                "from_user_id": "ID.1459909096148557",
                "id": "wamid.HBgNNjI4MTUxOTE0MDMyNxUCABIYIEFDOTgzNjhFOTU2NDgxMDI4NEY2NDdCOTg0MkEyMDgzAA==",
                "timestamp": "1777368530",
                "type": "interactive",
                "interactive": {
                    "type": "list_reply",
                    "list_reply": {
                        "id": "row_1.2",
                        "title": "row 1.2",
                        "description": "this is row 1.2"
                    }
                }
            }
        ]
    }
}

```

###### 3. carousel 素材轮播

互动式媒体轮播消息会显示一组可水平滚动的媒体图卡。每张图卡均可显示图片或视频标头、正文，以及快速回复按钮或网址按钮。

例如，以下是一个互动式媒体图卡轮播消息，在一个可滚动区域（用虚线矩形突出显示）中显示三张图卡，每张图卡均包含图片标题、正文和网址按钮：

![img](https://scontent-nrt6-1.xx.fbcdn.net/v/t39.2365-6/600343323_2167777830292496_5403577751834566910_n.png?_nc_cat=110&ccb=1-7&_nc_sid=e280be&_nc_ohc=bbDGWRxWRCkQ7kNvwFNjhfo&_nc_oc=AdoEUb1ATZsha--4GwzTumcIJSq9t_GXqn01ipqyb5W9yendzvci7rIsEizThaEFhcQ&_nc_zt=14&_nc_ht=scontent-nrt6-1.xx&_nc_gid=ExHeMx3hjVCwCLfX2iaO2g&_nc_ss=7b289&oh=00_Af1pdqOXc55unOoHxDaL0XY2t54F6LY3Mfwu1FKHgz0J_A&oe=6A0ACDB9)

这条消息与上一条消息相同，只不过使用的是快速回复按钮，而非网址按钮：

![img](https://scontent-nrt1-2.xx.fbcdn.net/v/t39.2365-6/600325826_4096765807302684_4781899173713977844_n.png?_nc_cat=104&ccb=1-7&_nc_sid=e280be&_nc_ohc=8MwZieu3mpEQ7kNvwF5XVYw&_nc_oc=Adru3gWij9lbnneeOylfJcKqVThpqzK6328YLxilJwRIHN0IxICozSiUsO8PHfuBcbc&_nc_zt=14&_nc_ht=scontent-nrt1-2.xx&_nc_gid=ExHeMx3hjVCwCLfX2iaO2g&_nc_ss=7b289&oh=00_Af12lR83RVLTCuhNFPSaBatKUW_tGZXsBj9OQlvKrBRZsg&oe=6A0AC720)

3.1 组件

消息中必须包含 2 至 10 张图卡。必须提供主消息正文。不支持主消息标头、页脚和互动组件。图卡必须包含图片或视频标头。其他标头类型不受支持。图卡正文为可选项。图卡必须包含一个网址按钮，或者一个/多个快速回复按钮。所有图卡的按钮类型和数量必须一致（例如，如果您为一张图卡设置 2 个快速回复按钮，则必须为所有图卡都设置 2 个快速回复按钮）。

3.2 请求语法

```
{
  "to": "<USER_PHONE_NUMBER>",
  "type": "interactive",
  "interactive": {
    "type": "carousel",
    "body": {
      "text": "<MESSAGE_BODY_TEXT>"
    },
    "action": {

      <!-- First card object -->
      "cards": [
        {
          "card_index": <CARD_INDEX>,
          "type": "cta_url",
          "header": {
            "type": "<HEADER_TYPE>",
            "<HEADER_TYPE>": {
              "link": "<MEDIA_ASSET_URL>"
            }
          },

          <!-- Card body text is optional -->
          "body": {
            "text": "<CARD_BODY_TEXT>"
          },

          "action": {
            <!-- Only if using a URL button -->
            "name": "cta_url",
            "parameters": {
              "display_text": "<URL_BUTTON_LABEL>",
              "url": "<URL_BUTTON_URL>"
            }
            <!-- Only if using one or more quick-reply buttons -->
            "buttons": [
              {
                "type": "quick_reply",
                "quick_reply": {
                  "id": "<QUICK_REPLY_BUTTON_ID>",
                  "title": "<QUICK_REPLY_BUTTON_LABEL>"
                }
              },
              <!-- Additional quick-reply buttons would follow -->
          }
        },
        <!-- Additional card objects would follow -->
      ]
    }
  }
}'

```

3.3 请求参数

<table id="bkmrk-%E5%8D%A0%E4%BD%8D%E6%96%87%E6%9C%AC-%E8%AF%B4%E6%98%8E-%E7%A4%BA%E4%BE%8B%E5%80%BC-%3Ccard_bo"><thead><tr><th align="left">**占位文本**</th><th align="left">**说明**</th><th align="left">**示例值**</th></tr></thead><tbody><tr><td align="left">`<CARD_BODY_TEXT>` *字符串*</td><td align="left">**非必要。** 图卡正文。最多 160 个字符，且最多 2 行。</td><td align="left">`*Blue Echeveria*\n\nA rosette-shaped succulent with powdery blue leaves, perfect for brightening up any space.`</td></tr><tr><td align="left">`<CARD_INDEX>` *整数*</td><td align="left">**必要。** 图卡索引采用零索引规则。在可滚动视图中，图卡将从左至右显示，起始索引为 0。</td><td align="left">`0`</td></tr><tr><td align="left">`<HEADER_TYPE>` *字符串*</td><td align="left">**必要。** 标头类型。值可以是： `image` — 表示图卡图片标头。 `video` — 表示图卡视频标头。 参阅[受支持的媒体类型](https://developers.facebook.com/documentation/business-messaging/whatsapp/business-phone-numbers/media)。</td><td align="left">`image`</td></tr><tr><td align="left">`<MEDIA_ASSET_URL>` *字符串*</td><td align="left">**必要。** 公开的媒体素材网址。</td><td align="left">`https://www.luckyshrub.com/assets/blue-echeveria.jpeg`</td></tr><tr><td align="left">`<MESSAGE_BODY_TEXT>` *字符串*</td><td align="left">**必要。** 主消息正文。最多 1,024 个字符。</td><td align="left">`Of course! Here are three of our latest arrivals, each under $25:`</td></tr><tr><td align="left">`<QUICK_REPLY_BUTTON_ID>` *字符串*</td><td align="left">**如果使用快速回复按钮，则为必要项。** 快速回复按钮编号。最多 256 个字符。</td><td align="left">`learn-blue-echeveria`</td></tr><tr><td align="left">`<QUICK_REPLY_BUTTON_LABEL>` *字符串*</td><td align="left">**如果使用快速回复按钮，则为必要项。** 快速回复按钮标签文本。最多 20 个字符。</td><td align="left">`Learn more`</td></tr><tr><td align="left">`<URL_BUTTON_LABEL>` *字符串*</td><td align="left">**如果使用网址按钮，则为必要项。** 网址按钮标签文本。最多 20 个字符。</td><td align="left">`Buy now`</td></tr><tr><td align="left">`<URL_BUTTON_URL>` *字符串*</td><td align="left">**如果使用网址按钮，则为必要项。** 用户轻触该按钮时要在设备的默认网页浏览器中加载的网址。</td><td align="left">`https://shop.luckyshrub.com/latest/blue-echeveria`</td></tr></tbody></table>

3.4 请求示例

3.4.1 网址按钮示例

该请求示例发送的媒体轮播消息由 3 张图卡组成，每张图卡均包含图片标头、图卡正文和网址按钮。

```
{
  "to": "16505551234",
  "type": "interactive",
  "interactive": {
    "type": "carousel",
    "body": {
      "text": "Of course! Here are three of our latest arrivals, each under $25:"
    },
    "action": {
      "cards": [
        {
          "card_index": 0,
          "type": "cta_url",
          "header": {
            "type": "image",
            "image": {
              "link": "https://www.luckyshrub.com/assets/blue-echeveria.jpeg"
            }
          },
          "body": {
            "text": "*Blue Echeveria*\n\nA rosette-shaped succulent with powdery blue leaves, perfect for brightening up any space."
          },
          "action": {
            "name": "cta_url",
            "parameters": {
              "display_text": "Buy now",
              "url": "https://shop.luckyshrub.com/latest/blue-echeveria"
            }
          }
        },
        {
          "card_index": 1,
          "type": "cta_url",
          "header": {
            "type": "image",
            "image": {
              "link": "https://www.luckyshrub.com/assets/zebra-haworthia.jpeg"
            }
          },
          "body": {
            "text": "*Zebra Haworthia*\n\nStriking white stripes on deep green leaves give this compact succulent a bold, modern look."
          },
          "action": {
            "name": "cta_url",
            "parameters": {
              "display_text": "Buy now",
              "url": "https://shop.luckyshrub.com/latest/zebra-haworthia"
            }
          }
        },
        {
          "card_index": 2,
          "type": "cta_url",
          "header": {
            "type": "image",
            "image": {
              "link": "https://www.luckyshrub.com/assets/panda-plant.jpeg"
            }
          },
          "body": {
            "text": "*Panda Plant*\n\nSoft, fuzzy leaves with chocolate-brown edges—adorable and easy to care for."
          },
          "action": {
            "name": "cta_url",
            "parameters": {
              "display_text": "Buy now",
              "url": "https://shop.luckyshrub.com/latest/panda-plant"
            }
          }
        }
      ]
    }
  }
}'

```

3.4.2 快速回复按钮示例

该请求示例发送的媒体轮播消息由 3 张图卡组成，每张图卡均包含图片标头、图卡正文和两个快速回复按钮。

```
{
  "to": "16505551234",
  "type": "interactive",
  "interactive": {
    "type": "carousel",
    "body": {
      "text": "Of course! Here are three of our latest arrivals, each under $25:"
    },
    "action": {
      "cards": [
        {
          "card_index": 0,
          "type": "cta_url",
          "header": {
            "type": "image",
            "image": {
              "link": "https://www.luckyshrub.com/assets/blue-echeveria.jpeg"
            }
          },
          "body": {
            "text": "*Blue Echeveria*\n\nA rosette-shaped succulent with powdery blue leaves, perfect for brightening up any space."
          },
          "action": {
            "buttons": [
              {
                "type": "quick_reply",
                "quick_reply": {
                  "id": "learn-blue-echeveria",
                  "title": "Learn more"
                }
              },
              {
                "type": "quick_reply",
                "quick_reply": {
                  "id": "fav-blue-echeveria",
                  "title": "Add to favorites"
                }
              }
            ]
          }
        },
        {
          "card_index": 1,
          "type": "cta_url",
          "header": {
            "type": "image",
            "image": {
              "link": "https://www.luckyshrub.com/assets/zebra-haworthia.jpeg"
            }
          },
          "body": {
            "text": "*Zebra Haworthia*\n\nStriking white stripes on deep green leaves give this compact succulent a bold, modern look."
          },
          "action": {
            "buttons": [
              {
                "type": "quick_reply",
                "quick_reply": {
                  "id": "learn-zebra-haworthia",
                  "title": "Learn more"
                }
              },
              {
                "type": "quick_reply",
                "quick_reply": {
                  "id": "fav-zebra-haworthia",
                  "title": "Add to favorites"
                }
              }
            ]
          }
        },
        {
          "card_index": 2,
          "type": "cta_url",
          "header": {
            "type": "image",
            "image": {
              "link": "https://www.luckyshrub.com/assets/panda-plant.jpeg"
            }
          },
          "body": {
            "text": "*Panda Plant*\n\nSoft, fuzzy leaves with chocolate-brown edges—adorable and easy to care for."
          },
          "action": {
            "buttons": [
              {
                "type": "quick_reply",
                "quick_reply": {
                  "id": "learn-panda-plant",
                  "title": "Learn more"
                }
              },
              {
                "type": "quick_reply",
                "quick_reply": {
                  "id": "fav-panda-plant",
                  "title": "Add to favorites"
                }
              }
            ]
          }
        }
      ]
    }
  }
}'

```

###### 4. button 回复按钮

互动式回复按钮消息支持发送最多三个预定义回复，供用户选择。

![img](https://scontent-nrt6-1.xx.fbcdn.net/v/t39.2365-6/440749535_402938502645501_9105062754221017983_n.png?_nc_cat=105&ccb=1-7&_nc_sid=e280be&_nc_ohc=EgVZHeFPWswQ7kNvwGi5aRo&_nc_oc=AdqoAqKzwoREahZHxkpRb9J5ynfXiWMvyV5Gvd3gu_OH6nImYzGobht-jH7XSF6C9fw&_nc_zt=14&_nc_ht=scontent-nrt6-1.xx&_nc_gid=qflyFw7-uPyftn4eLvYXMA&_nc_ss=7b289&oh=00_Af2XqM4AXqeA6rKuKRUoz4JTZSiJctjImVbe5Dceh14_iw&oe=6A0AA531)

用户可以通过选择预定义按钮之一来回复消息，这将触发描述用户所做选择的消息 Webhook。

![img](https://scontent-nrt1-2.xx.fbcdn.net/v/t39.2365-6/440803070_1108181003739406_7014741695346688945_n.png?_nc_cat=104&ccb=1-7&_nc_sid=e280be&_nc_ohc=vxsScrtCP-4Q7kNvwHHNaAg&_nc_oc=AdpKjuSgja8DpiWV2lzcn7nOpnF67YYOZd2zuCnQHujl6q1H7Slw4_pGia0HHpDljqs&_nc_zt=14&_nc_ht=scontent-nrt1-2.xx&_nc_gid=qflyFw7-uPyftn4eLvYXMA&_nc_ss=7b289&oh=00_Af0frzH4SGsuuTj234EDgHsPUkJpP3YbmGt1G6faTfKYrw&oe=6A0AAEC6)

4.1 请求语法

```
{
  "to": "<WHATSAPP_USER_PHONE_NUMBER>",
  "type": "interactive",
  "interactive": {
    "type": "button",
    "header": {<MESSAGE_HEADER>},
    "body": {
      "text": "<BODY_TEXT>"
    },
    "footer": {
      "text": "<FOOTER_TEXT>"
    },
    "action": {
      "buttons": [
        {
          "type": "reply",
          "reply": {
            "id": "<BUTTON_ID>",
            "title": "<BUTTON_LABEL_TEXT>"
          }
        }
        <!-- Additional buttons would go here (maximum 3) -->
      ]
    }
  }
}'

```

4.2 请求参数

<table id="bkmrk-%E5%8D%A0%E4%BD%8D%E6%96%87%E6%9C%AC-%E8%AF%B4%E6%98%8E-%E7%A4%BA%E4%BE%8B%E5%80%BC-%3Cbody_te"><thead><tr><th align="left">**占位文本**</th><th align="left">**说明**</th><th align="left">**示例值**</th></tr></thead><tbody><tr><td align="left">`<BODY_TEXT>`*字符串*</td><td align="left">\*\*必要。\*\*正文。网址会自动转换为超链接。最多 1,024 个字符。</td><td align="left">`Hi Pablo! Your gardening workshop is scheduled for 9am tomorrow. Use the buttons if you need to reschedule. Thank you!`</td></tr><tr><td align="left">`<BUTTON_ID>`*字符串*</td><td align="left">\*\*必要。\*\*每个按钮的唯一标识符。最多支持 3 个按钮。最多 256 个字符。</td><td align="left">`change-button`</td></tr><tr><td align="left">`<BUTTON_LABEL_TEXT>`*字符串*</td><td align="left">\*\*必要。\*\*按钮标签文本。如果使用多个按钮，标签文本必须唯一。最多 20 个字符。</td><td align="left">`Change`</td></tr><tr><td align="left">`<FOOTER_TEXT>`*字符串*</td><td align="left">\*\*使用页脚时必需。\*\*页脚文本。网址会自动转换为超链接。最多 60 个字符。</td><td align="left">`Lucky Shrub: Your gateway to succulents!™`</td></tr><tr><td align="left">`<MESSAGE_HEADER>`*JSON 对象*</td><td align="left">\*\*非必要。\*\*标头内容。支持以下类型：`document``image``text``video`影音素材可通过其[已上传影音内容](https://developers.facebook.com/documentation/business-messaging/whatsapp/business-phone-numbers/media#upload-media)`id` 或网址 `link`（不推荐）的方式进行发送。</td><td align="left">使用已上传影音内容编号的图像标头示例（所有影音内容类型的基本结构都相同）：`{ "type": "image", "image": { "id": "2762702990552401" }`使用托管影音内容的图像标头示例：`{ "type": "image", "image": { "link": "https://www.luckyshrub.com/media/workshop-banner.png" }`文本标头示例：`{ "type":"text", "text": "Workshop Details" }`</td></tr></tbody></table>

4.3 请求示例

发送带图像标头、正文文本、页脚文本和两个快速回复按钮的互动式回复按钮消息的请求示例。

```
{
  "to": "16505551234",
  "type": "interactive",
  "interactive": {
    "type": "button",
    "header": {
      "type": "image",
      "image": {
        "link": "https://static.incsapp.com/chat/images/123456.jpg"
      }
    },
    "body": {
      "text": "Hi Pablo! Your gardening workshop is scheduled for 9am tomorrow. Use the buttons if you need to reschedule. Thank you!"
    },
    "footer": {
      "text": "Lucky Shrub: Your gateway to succulents!™"
    },
    "action": {
      "buttons": [
        {
          "type": "reply",
          "reply": {
            "id": "change-button",
            "title": "Change"
          }
        },
        {
          "type": "reply",
          "reply": {
            "id": "cancel-button",
            "title": "Cancel"
          }
        }
      ]
    }
  }
}'

```

4.4 Webhook

当 WhatsApp 用户轻触回复按钮时，会触发**消息** Webhook，该 Webhook 在 `button_reply` 对象中描述用户的选择：

```
"button_reply": {
  "id": "<BUTTON_ID>",
  "title": "<BUTTON_LABEL_TEXT>"
}

```

`<BUTTON_ID>` — 用户所轻触按钮的按钮编号。

`<BUTTON_LABEL_TEXT>` — 用户所轻触按钮的按钮标签文本。

4.5 Webhook 示例

```
{
    "event": "new_message",
    "channel_id": 30058,
    "business_phone": "6281519236680",
    "message": {
        "messaging_product": "whatsapp",
        "metadata": {
            "display_phone_number": "6281519236680",
            "phone_number_id": "302702419599374"
        },
        "contacts": [
            {
                "profile": {
                    "name": "lucasleeve"
                },
                "wa_id": "6281519140327",
                "user_id": "ID.1459909096148557"
            }
        ],
        "messages": [
            {
                "context": {
                    "from": "6281519236680",
                    "id": "wamid.HBgNNjI4MTUxOTE0MDMyNxUCABEYEjYwRDc4QjE0M0UyQjI5QTVDMAA="
                },
                "from": "6281519140327",
                "from_user_id": "ID.1459909096148557",
                "id": "wamid.HBgNNjI4MTUxOTE0MDMyNxUCABIYIEFDOUQxMjM5QThFMDMyQkMyQTRGREVERjA2N0NDQUFCAA==",
                "timestamp": "1777366826",
                "type": "interactive",
                "interactive": {
                    "type": "button_reply",
                    "button_reply": {
                        "id": "change-button",
                        "title": "Change"
                    }
                }
            }
        ]
    }
}

```

### 响应

#### 成功响应示例

```json
{
    "status": "success",
    "code": 200,
    "message": "",
    "data": {
        "msg_id": "wamid.HBgLODUyNjg0MTUwMjYVAgARGBIyMUQ4RjA5MTY1NUJERjE3NjYA" // WhatsApp Msg ID
    },
    "error": {}
}

```

#### 失败响应示例

```json
{
    "status": "error",
    "code": 10002,
    "message": "(#132012) Parameter format does not match format in the created template",
    "data": {},
    "error": {}
}

```

# 消息状态回调

### 回调地址

- **需要在 INCS 设置您的回调地址**

### 回调请求方式

- **POST**

### 回调内容

#### 参数列表

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E5%BF%85%E4%BC%A0-%E6%8F%8F%E8%BF%B0-event-s"><thead><tr><th>参数名</th><th>类型</th><th>必传</th><th>描述</th></tr></thead><tbody><tr><td>event</td><td>string</td><td>是</td><td>回调事件名称，这里为 "message\_status\_update"</td></tr><tr><td>channel\_id</td><td>int</td><td>是</td><td>INCS 的消息通道ID</td></tr><tr><td>business\_phone</td><td>string</td><td>是</td><td>whatsapp business phone number</td></tr><tr><td>message\_id</td><td>string</td><td>是</td><td>WABA message ID</td></tr><tr><td>message\_status</td><td>string</td><td>是</td><td>消息状态：sent, failed, delivered, read</td></tr><tr><td>error</td><td>object|null</td><td>是</td><td>错误信息，没有错误时为 null，有错误时为 object</td></tr><tr><td>error.title</td><td>string</td><td>否</td><td>错误描述</td></tr><tr><td>error.code</td><td>int</td><td>否</td><td>WABA 定义的错误码</td></tr><tr><td>received\_at</td><td>timestamp</td><td>是</td><td>消息状态变更时间</td></tr></tbody></table>

#### 回调示例

```json
{
  "event": "message_status_update",
  "channel_id": 30058,
  "business_phone": "6281519236680",
  "message_id": "wamid.HBgNNjI4OTY1MjQ1NjU0OBUCABEYEkYxNTY4NkNBRUY...",
  "message_status": "failed",
  "error": {
    "code": 131049,
    "title": "This message was not delivered to maintain healthy ecosystem engagement."
  },
  "received_at": 1754466101
},

```

# 预测式外呼 - 预测式外呼接入流程

#### 预测式外呼接入流程

[![3986542d676f7ddfd0fdcd85e171010d.jpg](https://document.infin8linx.com/uploads/images/gallery/2025-08/scaled-1680-/3986542d676f7ddfd0fdcd85e171010d.jpg)](https://document.infin8linx.com/uploads/images/gallery/2025-08/3986542d676f7ddfd0fdcd85e171010d.jpg)

# 模板资源说明

### 资源示例

```json
{
    "template_id": "2445248382535213",
    "name": "test_all_components_1",
    "language": "en_US",
    "category": "MARKETING",
    "status": "REJECTED",
    "quality": "",
    "components": [
        {
            "type": "HEADER",
            "format": "IMAGE",
            "example": {
                "header_link": [
                    "https://waba-crm.oss-ap-southeast-1.aliyuncs.com/storage/img/ea/43d3741b272e9a84656e4cd7169d16.jpg"
                ]
            }
        },
        {
            "type": "BODY",
            "text": "A test template, first parameter: {{1}}, second parameter: {{2}}",
            "example": {
                "body_text": [
                    [
                        1,
                        2
                    ]
                ]
            }
        },
        {
            "type": "BUTTONS",
            "buttons": [
                {
                    "type": "COPY_CODE",
                    "example": "123456"
                },
                {
                    "type": "PHONE_NUMBER",
                    "text": "CALL",
                    "phone_number": "6281519236680"
                },
                {
                    "type": "URL",
                    "text": "Our site",
                    "url": "https://chat.incsapp.com?from=",
                    "example": "whatsapp"
                },
                {
                    "type": "QUICK_REPLY",
                    "text": "Need help?"
                }
            ]
        },
        {
            "type": "FOOTER",
            "text": "welcome"
        }
    ],
    "created_time": 1755254297,
    "updated_time": 1755254308,
    "status_updated_time": 0,
    "quality_updated_time": 0,
    "category_updated_time": 0
}

```

### 字段说明

<table id="bkmrk-%E5%AD%97%E6%AE%B5%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E6%8F%8F%E8%BF%B0-template_i"><thead><tr><th>字段名</th><th>类型</th><th>描述</th></tr></thead><tbody><tr><td>template\_id</td><td>string</td><td>whatsapp template id</td></tr><tr><td>name</td><td>string</td><td>模板名称，最长为100</td></tr><tr><td>language</td><td>string</td><td>whatsapp 允许的语言code列表，见下述**支持的语言列表**</td></tr><tr><td>category</td><td>string</td><td>模板类型，支持 MARKETING，UTILITY，AUTHENTICATION 模板类别可能发生变更，及时获取变更需要设置模板更新回调</td></tr><tr><td>status</td><td>string</td><td>whatsapp 审核状态，见下述**模板状态**，及时获取模板状态变更需要设置模板更新回调</td></tr><tr><td>quality</td><td>string</td><td>模板质量评分：UNKNOWN（待定），GREEN（高质量），YELLOW（中等质量），RED（低质量），及时获取模板质量评分变更需要设置模板更新回调</td></tr><tr><td>components</td><td>array</td><td>模板组件, 见下述**模板组件**</td></tr><tr><td>created\_time</td><td>timestamp</td><td>模板创建时间</td></tr><tr><td>updated\_time</td><td>timestamp</td><td>模板最后更新时间</td></tr><tr><td>status\_updated\_time</td><td>timestamp</td><td>模板状态最后更新时间</td></tr><tr><td>quality\_updated\_time</td><td>timestamp</td><td>模板质量评分最后更新时间</td></tr><tr><td>category\_updated\_time</td><td>timestamp</td><td>模板类别最后更新时间</td></tr></tbody></table>

### 支持的语言列表

<table id="bkmrk-%E8%AF%AD%E8%A8%80-%E4%BB%A3%E7%A0%81-%E5%8D%97%E9%9D%9E%E8%8D%B7%E5%85%B0%E8%AF%AD-af-%E9%98%BF%E5%B0%94%E5%B7%B4%E5%B0%BC%E4%BA%9A"><thead><tr><th>语言</th><th>代码</th></tr></thead><tbody><tr><td>南非荷兰语</td><td>af</td></tr><tr><td>阿尔巴尼亚语</td><td>sq</td></tr><tr><td>阿拉伯语</td><td>ar</td></tr><tr><td>阿塞拜疆语</td><td>az</td></tr><tr><td>孟加拉语</td><td>bn</td></tr><tr><td>保加利亚语</td><td>bg</td></tr><tr><td>加泰罗尼亚语</td><td>ca</td></tr><tr><td>中文（中国大陆）</td><td>zh\_CN</td></tr><tr><td>中文（香港）</td><td>zh\_HK</td></tr><tr><td>中文（台湾）</td><td>zh\_TW</td></tr><tr><td>克罗地亚语</td><td>hr</td></tr><tr><td>捷克语</td><td>cs</td></tr><tr><td>丹麦语</td><td>da</td></tr><tr><td>荷兰语</td><td>nl</td></tr><tr><td>英语</td><td>en</td></tr><tr><td>英语（英国）</td><td>en\_GB</td></tr><tr><td>英语（美国）</td><td>zh\_CN</td></tr><tr><td>爱沙尼亚语</td><td>et</td></tr><tr><td>菲律宾语</td><td>fil</td></tr><tr><td>芬兰语</td><td>fi</td></tr><tr><td>法语</td><td>fr</td></tr><tr><td>德语</td><td>de</td></tr><tr><td>希腊语</td><td>el</td></tr><tr><td>古吉拉特语</td><td>gu</td></tr><tr><td>豪萨语</td><td>ha</td></tr><tr><td>希伯来语</td><td>he</td></tr><tr><td>印地语</td><td>hi</td></tr><tr><td>匈牙利语</td><td>hu</td></tr><tr><td>印尼语</td><td>id</td></tr><tr><td>爱尔兰语</td><td>ga</td></tr><tr><td>意大利语</td><td>it</td></tr><tr><td>日语</td><td>ja</td></tr><tr><td>卡纳达语</td><td>kn</td></tr><tr><td>哈萨克语</td><td>kk</td></tr><tr><td>韩语</td><td>ko</td></tr><tr><td>老挝语</td><td>lo</td></tr><tr><td>拉脱维亚语</td><td>lv</td></tr><tr><td>立陶宛语</td><td>lt</td></tr><tr><td>马其顿语</td><td>mk</td></tr><tr><td>马来语</td><td>ms</td></tr><tr><td>马拉雅拉姆语</td><td>ml</td></tr><tr><td>马拉地语</td><td>mr</td></tr><tr><td>挪威语</td><td>nb</td></tr><tr><td>波斯语</td><td>fa</td></tr><tr><td>波兰语</td><td>pl</td></tr><tr><td>葡萄牙语（巴西）</td><td>pt\_BR</td></tr><tr><td>葡萄牙语（葡萄牙）</td><td>pt\_PT</td></tr><tr><td>旁遮普语</td><td>pa</td></tr><tr><td>罗马尼亚语</td><td>ro</td></tr><tr><td>俄语</td><td>ru</td></tr><tr><td>塞尔维亚语</td><td>sr</td></tr><tr><td>斯洛伐克语</td><td>sk</td></tr><tr><td>斯洛文尼亚语</td><td>sl</td></tr><tr><td>西班牙语</td><td>es</td></tr><tr><td>西班牙语（阿根廷）</td><td>es\_AR</td></tr><tr><td>西班牙语（西班牙）</td><td>es\_ES</td></tr><tr><td>西班牙语（墨西哥）</td><td>es\_MX</td></tr><tr><td>斯瓦希里语</td><td>sw</td></tr><tr><td>瑞典语</td><td>sv</td></tr><tr><td>泰米尔语</td><td>ta</td></tr><tr><td>泰卢固语</td><td>te</td></tr><tr><td>泰语</td><td>th</td></tr><tr><td>土耳其语</td><td>tr</td></tr><tr><td>乌克兰语</td><td>uk</td></tr><tr><td>乌尔都语</td><td>ur</td></tr><tr><td>乌兹别克语</td><td>uz</td></tr><tr><td>越南语</td><td>vi</td></tr><tr><td>祖鲁语</td><td>zu</td></tr></tbody></table>

### 模板状态

- `FAILED` — 模板创建失败
- `APPROVED` — 模板已通过模板审核并获得批准，现在可通过模板消息发送
- `PENDING` — 模板已通过类别验证，将进入模板审核流程。
- `REJECTED` — 模板未通过类别验证或模板审核。
- `PAUSED` — 模板被暂停使用。

### 模板组件

- **AUTHENTICATION** 类型不适用，见下述 **AUTHENTICATION 模板**
- 支持 HEADER, BODY, BUTTONS, FOOTER 四种组件

#### 标头（HEADER）

标头是出现在模板消息顶部的可选组件。

- 支持**文本**和**媒体**（图片、视频、文档）。

所有模板仅限拥有 1 个标头组件

##### 文本标头

您可以选择将标头文本添加到消息模板。标头组件中的消息文本支持用于编程配置的参数。

###### 位置参数示例

```json
{
  "type": "HEADER",
  "format": "TEXT",
  "text": "Our new sale starts {{1}}!",
  "example": {
    "header_text": [
      "December 1st"
    ]
  }
}

```

##### 媒体标头

媒体标头可以是 IMAGE、VIDEO 或 DOCUMENT（如 PDF），必须是一个公网可访问的 URL。用于定义媒体标头的语法适用于所有媒体类型。

###### 示例

```json
{
    "type": "HEADER",
    "format": "IMAGE",
    "example": {
        "header_link": [
            "https://waba-crm.oss-ap-southeast-1.aliyuncs.com/storage/img/ea/43d3741b272e9a84656e4cd7169d16.jpg"
        ]
    }
}

```

#### 正文（BODY）

正文组件代表消息模板的核心文本内容，它是一个仅包含文本的模板组件。所有模板都必须使用它。

正文组件中的消息文本支持用于编程配置的参数。

###### 位置参数示例

```json
{
  "type": "BODY",
  "text": "Shop now through {{1}} and use code {{2}} to get {{3}} off of all merchandise.",
  "example": {
    "body_text": [
        [
            "the end of August",
            "25OFF",
            "25%"
        ]
    ]
  }
}

```

#### 按钮（BUTTONS）

按钮是可选的互动式组件，在用户轻触时会执行特定操作。一个模板中可混合使用最多 10 个按钮组件，然而同一类型的单个按钮数量和按钮组合有限制。限制内容如下。

- 支持 COPY\_CODE, PHONE\_NUMBER, QUICK\_REPLY, URL

###### 语法

```json
{
    "type": "BUTTONS",
    "buttons": [ // button 数组
        <BUTTON_1>,
        <BUTTON_2>,
        ...
    ]
}

```

##### 复制验证码按钮

当应用用户轻触复制验证码按钮时，该按钮会将文本字符串（在通过模板消息发送模板时定义）复制到设备的剪贴板。一个模板仅限拥有 1 个复制验证码按钮。

###### 语法

```json
{
  "type": "COPY_CODE",
  "example": "<EXAMPLE>"
}

```

##### 电话号码按钮

当应用用户轻触时，电话号码按钮会拨打指定的公司电话号码。一个模板仅限拥有 1 个电话号码按钮。

###### 语法

```json
{
  "type": "PHONE_NUMBER",
  "text": "<TEXT>",
  "phone_number": "<PHONE_NUMBER>"
}

```

##### 快速回复按钮

快速回复按钮是自定义的纯文本按钮，在应用用户轻触时会立即向您发送包含指定文本字符串的消息。常见的用例之一是能让客户轻松退订任何营销消息的按钮。

一个模板仅限拥有 10 个快速回复按钮。如果结合使用快速回复按钮和其他按钮，必须将按钮分为 2 组：快速回复按钮和非快速回复按钮。如果分组不正确，API 将返回一个错误，表示组合无效。

有效分组的示例：

- 快速回复、快速回复
- 快速回复、快速回复、网址、电话
- 网址、电话、快速回复、快速回复

无效分组的示例：

- 快速回复、网址、快速回复
- 网址、快速回复、网址

###### 语法

```json
{
  "type": "QUICK_REPLY",
  "text": "<TEXT>"
}

```

##### 网址按钮

当应用用户轻触时，网址按钮会在设备的默认网页浏览器中加载指定的网址。一个模板仅限拥有 2 个网址按钮。

###### 语法

```json
{
  "type": "URL",
  "text": "<TEXT>",
  "url": "<URL>",

  # Required if <URL> contains a variable
  "example": [
    "<EXAMPLE>"
  ]
}

```

###### 示例

```json
{
  "type": "URL",
  "text": "Shop Now",
  "url": "https://www.luckyshrub.com/shop?promo={{1}}",
  "example": [
    "summer2023"
  ]
}

```

#### 页脚（FOOTER）

页脚是可选的纯文本组件，紧跟正文组件之后出现。一个模板仅限拥有 1 个页脚组件。

###### 语法

```json
{
  "type": "FOOTER",
  "text": "<TEXT>"
}

```

### AUTHENTICATION 模板

AUTHENTICATION 模板包括以下组件：

- 固定的预设文本：&lt;VERIFICATION\_CODE&gt; 是您的验证码。
- 安全免责声明（可选）：为安全起见，请勿共享该验证码。
- 过期警告（可选）：这组验证码将在 &lt;NUM\_MINUTES&gt; 分钟后过期。
- 复制代码按钮。

##### 简单模板创建示例：

- 无**安全免责声明**和**过期警告**

```json
{
    "name": "auth_ja",
    "language": "ja",
    "category": "AUTHENTICATION"
}

```

##### 带有提示的模板创建示例：

- BODY 和 FOOTER 组件必传

```json
{
    "name": "auth_en",
    "language": "en_US",
    "category": "AUTHENTICATION",
    "components": [
        {
            "type": "BODY",
            "add_security_recommendation": true // 安全免责声明（选填），bool类型
        },
        {
            "type": "FOOTER",
            "code_expiration_minutes": 5 // 过期警告（选填），1-90 的数字
        }
    ]
}

```

# 分机组管理 - 创建分机组

#### 接口说明

创建分机组

#### 请求方式

POST，form-data格式

#### 请求参数

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E6%98%AF%E5%90%A6%E5%BF%85%E9%A1%BB-%E8%AF%B4%E6%98%8E-servi"><thead><tr><th>参数名</th><th>类型</th><th>是否必须</th><th>说明</th></tr></thead><tbody><tr><td>service</td><td>string</td><td>是</td><td>App.Sip\_Extgroup.AddExtgroup</td></tr><tr><td>token</td><td>string</td><td>是</td><td>通过授权接口获取的token</td></tr><tr><td>name</td><td>string</td><td>是</td><td>分机组名</td></tr><tr><td>status</td><td>int</td><td>否</td><td>分机组状态：0 启用；1 禁用，默认 0</td></tr></tbody></table>

#### 接口请求示例（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Extgroup.AddExtgroup',
        'token'     => 'ABCDEFG',
        'name'  => 'abcdefg',
        'status'  => 1
    ];
    $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": 1581410934,
        "rsptime": 1581410934
    },
    "msg": ""
}

```

#### 返回数据字段说明

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-status-int"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">status</td><td align="left">int</td><td align="left">0修改成功，1修改失败</td></tr><tr><td align="left">desc</td><td align="left">string</td><td align="left">描述信息</td></tr><tr><td align="left">result</td><td align="left">object</td><td align="left">对象信息当前为空</td></tr></tbody></table>

# 分机管理 - 获取分机启用状态

#### 接口说明

获取用户拥有的分机列表信息。

#### 请求方式

POST，form-data格式

#### 请求参数

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E6%98%AF%E5%90%A6%E5%BF%85%E9%A1%BB-%E8%AF%B4%E6%98%8E-servi"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">是否必须</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">service</td><td align="left">string</td><td align="left">是</td><td align="left">App.Sip\_Status.GetSipValidStatus</td></tr><tr><td align="left">token</td><td align="left">string</td><td align="left">是</td><td align="left">通过授权接口获取的token</td></tr><tr><td align="left">extnumber</td><td align="left">string</td><td align="left">是</td><td align="left">分机号，多个分机号用英文逗号隔开</td></tr></tbody></table>

#### 接口请求示例（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Status.GetSipValidStatus',
        'token'     => 'ABCDEFG',
        'extnumber'  => '100001'
    ];
    $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": [
            {
                "extnumber": "90170002",
                "code": 1016
            }
        ],
        "reqtime": 1581508401,
        "rsptime": 1581508401
    },
    "msg": ""
}


```

#### 返回参数说明

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-result-arr"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">result</td><td align="left">array</td><td align="left">分机数据数组</td></tr><tr><td align="left">—extnumber</td><td align="left">string</td><td align="left">分机号</td></tr><tr><td align="left">—code</td><td align="left">int</td><td align="left">分机号状态</td></tr></tbody></table>

# 语音呼叫API-获取主叫号码信息

#### 接口说明

获取用户拥有的主叫号码列表信息。

#### 请求参数

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E6%98%AF%E5%90%A6%E5%BF%85%E9%A1%BB-%E8%AF%B4%E6%98%8E-servi"><thead><tr><th>参数名</th><th>类型</th><th>是否必须</th><th>说明</th></tr></thead><tbody><tr><td>service</td><td>string</td><td>是</td><td>App.Sip\_Disnum.getDisnumberInfo</td></tr><tr><td>token</td><td>string</td><td>是</td><td>通过授权接口获取的token</td></tr><tr><td>status</td><td>int</td><td>是</td><td>1:启用（默认）、2:禁用、3:全部</td></tr><tr><td>autocall</td><td>int</td><td>是</td><td>是否预测外呼号码：1:不限（默认）、2:是、3:否</td></tr><tr><td>disnumber</td><td>string</td><td>否</td><td>主叫号码，多个主叫号码用英文逗号隔开，不传时获取所有</td></tr><tr><td>areacode</td><td>string</td><td>否</td><td>号码区号</td></tr></tbody></table>

#### 接口请求示例（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Disnum.getDisnumberInfo',
        'token'     => 'ABCDEFG',
        'status'    => 1,
        'autocall'  => 1,
        'disnumber'    => '0755111,0755222',
        'areacode'  => '0755'
    ];
    $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": 1,
          "currentpage": 1,
          "itemsperpage": 20,
          "disnumbers": [
              {
                  "disnumber": "2026080210",
                  "areacode": "62",
                  "disnumbertype": "mob",
                  "concurrent": 0,
                  "status": 1018,
                  "autocall": "yes",
                  "message": "号码已启用"
              }
          ]
      },
      "reqtime": 1789628860,
      "rsptime": 1789628860
  },
  "msg": ""
}

```

#### 返回参数说明

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-result-obj"><thead><tr><th>参数名</th><th>类型</th><th>说明</th></tr></thead><tbody><tr><td>result</td><td>object</td><td>号码对象信息</td></tr><tr><td>-totalitems</td><td>int</td><td>分机总数</td></tr><tr><td>-currentpage</td><td>int</td><td>当前页码</td></tr><tr><td>-itemsperpage</td><td>int</td><td>每页默认值</td></tr><tr><td>-disnumbers</td><td>array</td><td>号码列表数组</td></tr><tr><td>—disnumber</td><td>string</td><td>主叫号码</td></tr><tr><td>—areacode</td><td>string</td><td>区号</td></tr><tr><td>—disnumbertype</td><td>string</td><td>号码类型 tel:固话 mob:手机</td></tr><tr><td>—concurrent</td><td>int</td><td>号码并发, 0 表示不限制</td></tr><tr><td>—status</td><td>int</td><td>号码状态码，1018：启用、1019：禁用、1020：不存在</td></tr><tr><td>—autocall</td><td>string</td><td>是否预测外呼号码 yes:是 no:否</td></tr></tbody></table>

# 语音验证码 - 语音验证码

#### **请求URL**

- `https://dashboardapi.infin8linx.com/voiceCode`

#### **请求方式**

- POST

#### **请求参数**

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E5%BF%85%E9%80%89-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-appid-%E6%98%AF"><thead><tr><th align="left">参数名</th><th align="left">必选</th><th align="left">类型</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">appid</td><td align="left">是</td><td align="left">string</td><td align="left">鉴权 appid</td></tr><tr><td align="left">accesskey</td><td align="left">是</td><td align="left">string</td><td align="left">鉴权 accesskey</td></tr><tr><td align="left">code</td><td align="left">是</td><td align="left">string</td><td align="left">验证码 4位有效数字</td></tr><tr><td align="left">phone</td><td align="left">是</td><td align="left">string</td><td align="left">接收验证码的手机号 印尼及墨西哥手机号码不需要加国别号码，例如完整号码为：`0062 8123456789`，则直接以 `8123456789` 请求即可。</td></tr><tr><td align="left">nationCode</td><td align="left">是</td><td align="left">string</td><td align="left">语言版本 en:英语 id:印尼 sp:西班牙语</td></tr><tr><td align="left">customuuid</td><td align="left">否</td><td align="left">string</td><td align="left">用户自定义参数</td></tr></tbody></table>

#### **返回示例**

```
{
  "code":0,
  "msg":"operation succeeded",
  "data":null
}


```

#### **返回参数说明**

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-code-int-%E8%BF%94"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">code</td><td align="left">int</td><td align="left">返回码 0 成功 其他为失败</td></tr><tr><td align="left">msg</td><td align="left">string</td><td align="left">返回信息</td></tr><tr><td align="left">data</td><td align="left">object</td><td align="left">返回数据</td></tr><tr><td align="left">—customuuid</td><td align="left">string</td><td align="left">任务唯一id</td></tr></tbody></table>

[查看错误码详情](https://www.showdoc.cc/page/edit/663198582928843/4040095140133787 "查看错误码详情")

# 1.创建分机组

> 关于本章节的说明：
> 
> 创建坐席组并非预测试外呼的强制前置条件。您可以根据实际呼叫需求灵活选择：
> 
> **指定分机呼叫**：无需创建坐席组，直接在后续外呼任务中选择具体分机即可。
> 
> **指定坐席组呼叫：** 若需对多个坐席进行统一调度或轮询呼叫，请先完成本章节的坐席组创建。

#### 1. 功能入口

1.登录[管理后台](https://dashboard.infin8linx.com/)，在左侧导航栏，选择 **语音**，然后在展开的菜单中点击 **客服管理**，进入后选择 **坐席组** 即可访问管理页面。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-06/scaled-1680-/image-1782729858110.png)](https://document.infin8linx.com/uploads/images/gallery/2026-06/image-1782729858110.png)

2.在**坐席组**列表页面，点击 **「添加」**，于弹出页面中填写分机组名称并提交，即可完成创建。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-06/scaled-1680-/image-1782729892976.png)](https://document.infin8linx.com/uploads/images/gallery/2026-06/image-1782729892976.png)

[![](https://document.infin8linx.com/uploads/images/gallery/2026-06/scaled-1680-/image-1782729987244.png)](https://document.infin8linx.com/uploads/images/gallery/2026-06/image-1782729987244.png)

3.**坐席组** 创建完成后，在分机组列表页面的 **“操作”** 栏中点击 **「成员」**，即可为该分机组添加坐席成员。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-06/scaled-1680-/image-1782730028981.png)](https://document.infin8linx.com/uploads/images/gallery/2026-06/image-1782730028981.png)

4.点击 **「添加」** 后，弹出页面将显示已创建的分机列表，您可根据需要选择要添加的分机。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-06/scaled-1680-/image-1782730149545.png)](https://document.infin8linx.com/uploads/images/gallery/2026-06/image-1782730149545.png)

[![](https://document.infin8linx.com/uploads/images/gallery/2026-06/scaled-1680-/image-1782730269912.png)](https://document.infin8linx.com/uploads/images/gallery/2026-06/image-1782730269912.png)

# 获取Token接口

#### 接口说明

访问其他接口所需的token均需通过授权的Appid和Accesskey从此接口获取（批量IVR接口除外）。接口授权Token时效性为**12小时**。

#### 请求方式

POST，form-data格式

#### 请求参数

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E6%98%AF%E5%90%A6%E5%BF%85%E9%A1%BB-%E8%AF%B4%E6%98%8E-appid"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">是否必须</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">appid</td><td align="left">string</td><td align="left">是</td><td align="left">授权appid</td></tr><tr><td align="left">accesskey</td><td align="left">string</td><td align="left">是</td><td align="left">授权accesskey</td></tr><tr><td align="left">service</td><td align="left">string</td><td align="left">是</td><td align="left">App.Sip\_Auth.Login</td></tr><tr><td align="left">lang</td><td align="left">string</td><td align="left">否</td><td align="left">枚举值zh en，默认值zh，这个参数用于系统返回对应的语种</td></tr></tbody></table>

#### 接口请求示例（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":""
}


```

#### 返回参数说明

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-companycod"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">companycode</td><td align="left">int</td><td align="left">公司代码</td></tr><tr><td align="left">companyname</td><td align="left">string</td><td align="left">公司名称</td></tr><tr><td align="left">token</td><td align="left">string</td><td align="left">授权token，用来访问其他接口</td></tr></tbody></table>

# 软电话操作手册

### 推荐的手机软电话：Zoiper

### 一、安卓系统

#### 1. APP 下载与安装

在 Google Play 上搜索 “Zoiper IAX SIP VOIP Softphone” 进行下载，或使用以下载链接直接下载： [https://play.google.com/store/apps/details?id=com.zoiper.android.app&amp;hl=zh](https://play.google.com/store/apps/details?id=com.zoiper.android.app&hl=zh)

#### 2.软电话配置

打开 Zoiper 应用并授予必要的权限

输入分机号和密码，然后点击“创建账户”（参见下图）：

[![m_b2b528e6ceea041c7f88e9eae126d1a4_r.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/m-b2b528e6ceea041c7f88e9eae126d1a4-r.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/m-b2b528e6ceea041c7f88e9eae126d1a4-r.png)

[![m_5b91b9f674200279b616b1ef7cee9b2a_r.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/m-5b91b9f674200279b616b1ef7cee9b2a-r.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/m-5b91b9f674200279b616b1ef7cee9b2a-r.png)

配置域名，然后点击下一步（参见下图）。

[![m_8026a8b238d21f7627aa2c105e7d50f7_r.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/m-8026a8b238d21f7627aa2c105e7d50f7-r.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/m-8026a8b238d21f7627aa2c105e7d50f7-r.png)

[![m_bfc5827c6fd37524d6d54d58b5761a32_r.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/m-bfc5827c6fd37524d6d54d58b5761a32-r.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/m-bfc5827c6fd37524d6d54d58b5761a32-r.png)

跳过提供商设置（参见下图）。

[![m_66f34767246257fbe0c57612d424a4ea_r.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/m-66f34767246257fbe0c57612d424a4ea-r.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/m-66f34767246257fbe0c57612d424a4ea-r.png)

在“选择配置”下，等待协议选项加载完毕，选择合适的协议，然后点击完成。

[![m_eb4edc825570b87151ea23d5de1118f7_r.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/m-eb4edc825570b87151ea23d5de1118f7-r.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/m-eb4edc825570b87151ea23d5de1118f7-r.png)

配置完成。返回主屏幕即可拨打电话。

注意：印度尼西亚号码以“8”开头，无需添加“0”或“62”等前缀（参见下图）。

[![m_6374fb8181768577feb43ae94284dd11_r.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/m-6374fb8181768577feb43ae94284dd11-r.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/m-6374fb8181768577feb43ae94284dd11-r.png)

[![m_4177f37f0fb9046c15bc2e8ed12b7187_r.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/m-4177f37f0fb9046c15bc2e8ed12b7187-r.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/m-4177f37f0fb9046c15bc2e8ed12b7187-r.png)

[![m_eb106a4d9b6afa1928617e9bff78d6cf_r.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/m-eb106a4d9b6afa1928617e9bff78d6cf-r.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/m-eb106a4d9b6afa1928617e9bff78d6cf-r.png)

### 二、 iOS 系统

#### 1. APP 下载与安装

请使用非中文地区的 App Store 账号搜索 “Zoiper” 并下载该应用。

#### 2. 软电话配置

打开 Zoiper，授予权限，然后依次进入：**设置 &gt; 账户 &gt; “+” &gt; 手动配置 &gt; SIP 账户**。

填写以下信息，然后点击 **“注册”**：

<table id="bkmrk-%E5%90%8D%E7%A7%B0-%E5%86%85%E5%AE%B9-account-name-%E5%A1%AB"><thead><tr><th>名称</th><th>内容</th></tr></thead><tbody><tr><td>**Account name**</td><td>**填写我们提供的分机号**</td></tr><tr><td>**Domain**</td><td>**填写我们提供的域名**</td></tr><tr><td>**User name**</td><td>**填写我们提供的分机号**</td></tr><tr><td>**Password**</td><td>**填写我们提供的分机密码**</td></tr></tbody></table>

**具体操作截图如下**

[![image10.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image10.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image10.png)[![image11.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/image11.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image11.png)[![image12.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image12.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image12.png)[![image13.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/image13.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image13.png)[![image14.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image14.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image14.png)[![image15.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/image15.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image15.png)[![image16.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/image16.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image16.png)

### 三、 MicroSIP - 电脑版

#### 1、安装软电话——MicroSIP

**安装软电话 —— MicroSIP 操作流程**

打开我们提供的 MicroSIP 安装包进行安装。

[![image17.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image17.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image17.png)

请选择您自己的安装语言；

[![image18.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image18.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image18.png)

安装完成后，打开 MicroSIP 软件界面；

[![image19.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image19.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image19.png)

#### 2、软电话登录

注意：软电话登录主要用于外呼系统用户在接听来电后进行软电话操作。坐席人员可通过点击软电话上的“接听”或“拒绝”按钮，选择是否接听来电。因此，每位坐席人员均需登录一个软电话账户。默认情况下，一名坐席对应一个软电话账户。如需更多软电话账户，请与我们联系。

**软电话配置操作步骤如下：**

**1.点击 MicroSIP 界面，点击下方三角形按钮中的“添加账户”（Add Account），弹出如下所示的配置界面；**

[![image20.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image20.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image20.png)

**2.需要填写以下配置项：**

**账户名称：** 我们提供的软电话账户；

**SIP 服务器：** 我们提供的服务器 IP 地址或域名；

**用户名：** 我们提供的软电话账户；

**域名：** 我们提供的服务器 IP 地址或域名；

**登录名：** 我们提供的软电话账户；

**密码：** 我们提供的软电话账户密码，需与对应的软电话账户匹配。

**3.状态说明（如下图所示）:**

**在线（Online）：** 登录成功，可正常接听来电；

**禁止（Forbidden）：** 软电话账户密码输入错误；

[![image21.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image21.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image21.png)

### 四、InfinitySip - 电脑版

#### 1、安装软电话——InfinitySIP

**安装软电话-InfinitySIP 操作流程**

打开我们提供的 InfinitySIP安装包进行安装。

[![image22.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image22.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image22.png)

请选择您自己的安装语言；

[![image23.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image23.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image23.png)

安装完成后，打开 InfinitySIP 软件界面；

[![image24.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/image24.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image24.png)

#### 2、软电话登录

**注意：** 软电话登录主要用于外呼系统用户在接听来电后进行相关操作。坐席人员可通过点击软电话界面上的“接听”或“拒绝”按钮，选择是否接听来电。因此，每位坐席人员均需登录一个软电话账户。默认情况下，一名坐席对应一个软电话账户。如需更多软电话账户，请与我们联系。

软电话配置操作步骤如下：

1.安装 InfinitySip 后，默认会弹出一个需要登录的窗口；

[![image25.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image25.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image25.png)

2.需要填写以下配置项：

**账户名称：** 我们提供的软电话账户；

**用户名：** 我们提供的软电话账户；

**域名：** 我们提供的服务器域名；

**密码：** 我们提供的软电话账户密码，需与对应的软电话账户匹配。

3.状态说明（如下图所示）：

**在线（Online）：** 登录成功，可正常接听来电；

**禁止（Forbidden）：** 软电话账户密码输入错误；

[![image26.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image26.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image26.png)

### 五、zoiper5 - Mac版

#### 1、zoiper5登录流程

首先打开zoiper5. 点击继续作为免费用户。 [![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1763718666281.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1763718666281.png)

填写以下信息，然后点击 **“登录”**：

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1763718719399.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1763718719399.png)

<table id="bkmrk-%E5%90%8D%E7%A7%B0-%E5%86%85%E5%AE%B9-account-name-%E5%A1%AB-1"><thead><tr><th>名称</th><th>内容</th></tr></thead><tbody><tr><td>**Account name**</td><td>**填写我们提供的分机号**</td></tr><tr><td>**Password**</td><td>**填写我们提供的分机密码**</td></tr></tbody></table>

主机名输入我们提供的sip注册地址,选择对应国家的域名 如印尼填写：indo.infin8link.com:7060。 填写完点击下一个

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1763718802689.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1763718802689.png)

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1763718843522.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1763718843522.png)

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1763718858338.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1763718858338.png)

有可用选择可用之后点击下一步，没有点击跳过。

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1763718888443.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1763718888443.png)

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1763718901455.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1763718901455.png)

登录成功之后，看是否显示√，显示√才可拨打电话。

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1763718944750.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1763718944750.png)

注意：一般情况系统会默认√，如有√，使用全球stun改为不使用

#### 2、Zoiper5拨打电话

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1763719007955.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1763719007955.png)

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1763719019739.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1763719019739.png)

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1763719031933.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1763719031933.png)

需要拨打的号码也可直接复制粘贴拨打

### 软电话常见问题解答

常用推荐的软电话主要有：MicroSIP。

以下是 MicroSIP 的常见问题，但通常情况下，MicroSIP 在正常登录后的界面显示如下：

[![image27.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image27.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image27.png)

#### 软电话无法正常工作的常见问题汇总：

##### 1、软电话提示：Forbidden

通常是因为分机号码或密码输入错误。

解决方法：请仔细检查分机密码的输入是否正确。如果您确认密码无误但仍提示 “Forbidden”，请联系 Infinity 团队获取协助。

[![image28.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image28.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image28.png)

##### 2、软电话提示：Gateway Error（网关错误）或 Bad Gateway（错误网关）

主要原因是本地出口网络连接异常，导致无法正常连接到服务器。

解决方法：请检查登录分机所在设备的本地网络环境，可尝试重启路由器或切换至其他稳定网络后重试。

[![image29.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image29.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image29.png)

##### 3、软电话提示：Application has expired（应用程序已过期）或 Application expired

可能是由于服务器端授权临时失效或服务暂不可用所致。

解决方法：请联系 Infinity 团队获取支持与协助。

[![image30.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image30.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image30.png)

##### 4、软电话提示：Request timed out（请求超时）

可能由以下原因导致：本地网络不稳定、软电话域名配置错误，或服务器端存在问题。 解决方法：

a. 首先检查软电话中的域名配置是否正确。如果配置无误，请继续参考 b 和 c 项；

b. 检查本地网络是否正常，可在命令行中使用 ping 命令测试软电话所配置的域名，以确认当前网络连通性；

c. 如问题仍未解决，请联系 Infinity 团队获取进一步协助。

[![image31.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image31.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image31.png)

##### 5、软电话提示：Account or credential is disabled（账户或凭据已被禁用）

通常是因为该账户尚未完成配置或未正确激活。

解决方法：请重新配置账户信息：点击界面右上角的“下三角”按钮，选择“Add Account”（添加账户），然后按照提示填写正确的账户参数（包括账户名、SIP 服务器、用户名、域名和密码等）。 [![image32.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image32.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image32.png)

##### 6、软电话提示：Undefined external error（未定义的外部错误）

通常是由软电话软件自身异常或安装不完整导致。

解决方法：请卸载当前软电话软件，并重新安装最新版本的软电话程序。

[![image33.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image33.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image33.png)

##### 7、软电话无法挂断通话

可能是软电话软件自身卡死或无响应。

解决方法：请打开计算机的任务管理器，结束（强制关闭）软电话相关进程，然后重新启动软件并重新登录。

[![image34.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image34.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image34.png)

##### 8、软电话点击呼叫无响应

可能是当前安装的软电话软件存在异常或兼容性问题。

解决方法：请先卸载当前版本的 MicroSIP 软件，然后下载其他版本（如更早或更新的稳定版本）重新安装并配置。

[![image35.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image35.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image35.png)

# Softphone Manual

**Recommended Softphone for Mobile: Zoiper**

### **一、Android System**

#### **1. APP Download and Installation**

Search for "Zoiper IAX SIP VOIP Softphone" on Google Play to download, or use the direct download ： [https://play.google.com/store/apps/details?id=com.zoiper.android.app&amp;hl=zh](https://play.google.com/store/apps/details?id=com.zoiper.android.app&hl=zh).

#### **2. Softphone Configuration**

Open the Zoiper app and grant necessary permissions.

**Enter the extension number and password, then click Create an account** (see images below):

[![m_b2b528e6ceea041c7f88e9eae126d1a4_r.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/m-b2b528e6ceea041c7f88e9eae126d1a4-r.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/m-b2b528e6ceea041c7f88e9eae126d1a4-r.png)

[![m_5b91b9f674200279b616b1ef7cee9b2a_r.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/m-5b91b9f674200279b616b1ef7cee9b2a-r.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/m-5b91b9f674200279b616b1ef7cee9b2a-r.png)

Configure the domain name and click **Next** (see images below).

[![m_8026a8b238d21f7627aa2c105e7d50f7_r.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/m-8026a8b238d21f7627aa2c105e7d50f7-r.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/m-8026a8b238d21f7627aa2c105e7d50f7-r.png)

[![m_bfc5827c6fd37524d6d54d58b5761a32_r.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/m-bfc5827c6fd37524d6d54d58b5761a32-r.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/m-bfc5827c6fd37524d6d54d58b5761a32-r.png)

**Skip Provider Settings (see image below).**

[![m_66f34767246257fbe0c57612d424a4ea_r.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/m-66f34767246257fbe0c57612d424a4ea-r.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/m-66f34767246257fbe0c57612d424a4ea-r.png)

**Under** **Choose configurations**, wait for protocol options to load, select the appropriate protocol, and click **Finish**.

[![m_eb4edc825570b87151ea23d5de1118f7_r.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/m-eb4edc825570b87151ea23d5de1118f7-r.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/m-eb4edc825570b87151ea23d5de1118f7-r.png)

**Configuration complete. Return to the home screen to initiate calls.**

**Note:** Indonesian numbers start with "8" without prefixes like "0" or "62" (see images below).

[![m_6374fb8181768577feb43ae94284dd11_r.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/m-6374fb8181768577feb43ae94284dd11-r.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/m-6374fb8181768577feb43ae94284dd11-r.png)

[![m_4177f37f0fb9046c15bc2e8ed12b7187_r.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/m-4177f37f0fb9046c15bc2e8ed12b7187-r.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/m-4177f37f0fb9046c15bc2e8ed12b7187-r.png)

[![m_eb106a4d9b6afa1928617e9bff78d6cf_r.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/m-eb106a4d9b6afa1928617e9bff78d6cf-r.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/m-eb106a4d9b6afa1928617e9bff78d6cf-r.png)

### **二、 iOS System**

#### **1. APP Download and Installation**

Use a non-Chinese App Store account to search for "Zoiper" and download the app (see image below).

#### **2. Softphone Configuration**

Open Zoiper, grant permissions, and navigate:**Settings &gt; Accounts &gt; "+" &gt; Manual configuration &gt; SIP account**. *Fill in the following details and click Register*:

<table id="bkmrk-field-description-ac"><thead><tr><th align="left">**Field**</th><th align="left">**Description**</th></tr></thead><tbody><tr><td align="left">**Account name**</td><td align="left">softphone account</td></tr><tr><td align="left">**Domain**</td><td align="left">Doamin</td></tr><tr><td align="left">**User name**</td><td align="left">softphone account</td></tr><tr><td align="left">**Password**</td><td align="left">softphone account password</td></tr></tbody></table>

**The specific operation screenshots are as follows:**

[![image10.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image10.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image10.png)

[![image11.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/image11.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image11.png)

[![image12.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image12.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image12.png)

[![image13.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/image13.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image13.png)

[![image14.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image14.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image14.png)

[![image15.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/image15.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image15.png)

[![image16.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/image16.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image16.png)

### 三、**Microsip -PC**

#### **1. Install softphone--MicroSIP**

**Install Softphone --- MicroSIP Operation Process**

*Open the MicroSIP installation package provided by us to install*

[![image17.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image17.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image17.png)

**Choose your own installation language;**

[![image18.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image18.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image18.png)

*After installation, open the MicroSIP software interface;*

[![image19.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image19.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image19.png)

#### **2. softphone login**

**Note:** The softphone login is mainly used for the softphone and operation that the system outside call user can go to after answering. The operator can click the "answer" or "reject" button of the softphone to choose whether to answer the call. So each operator needs to log in to the softphone account. By default, an operator corresponds to a softphone account. If you need more softphone accounts, you can contact us.

**Soft phone configuration operations are as follows:**

***1. Click the interface of MicroSIP and click Add Account under the lower triangle button to pop up the configuration interface as shown below;***

[![image20.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image20.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image20.png)

***2. Need to fill in the configuration items:***

**Account Name：** Softphone account we provide;

**SIP Server：** The server IP or domain name we provide；

**Username：** Softphone account we provide;

**Domain：** The server IP or domain name we provide；

**Login：** Softphone account we provide;

**Password：** The softphone account password we provide needs to correspond to the softphone account.

**3.State description (as shown below):**

**Online：** The login is successful and you can answer the call normally;

**Forbidden：** Softphone account password input error;

[![image21.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image21.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image21.png)

### **四、 InfinitySip -PC**

#### **1. Install InfinitySIP**

***Install Softphone --- InfinitySIP Operation Process***

**Open the InfinitySIP installation package provided by us to install**

[![image22.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image22.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image22.png)

*Choose your own installation language;*

[![image23.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image23.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image23.png)

**After installation, open the InfinitySIP software interface;**

[![image24.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/image24.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image24.png)

#### **2. softphone login**

**Note:** The softphone login is mainly used for the softphone and operation that the system outside call user can go to after answering. The operator can click the "answer" or "reject" button of the softphone to choose whether to answer the call. So each operator needs to log in to the softphone account. By default, an operator corresponds to a softphone account. If you need more softphone accounts, you can contact us.

**Soft phone configuration operations are as follows:**

***1. After InfinitySip is installed by default, a pop-up window that requires login will pop up;***

[![image25.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image25.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image25.png)

***2. Need to fill in the configuration items:***

**Account Name：** Softphone account we provide;

**Username：** Softphone account we provide;

**Domain：** The server domain name we provide；

**Password：** The softphone account password we provide needs to correspond to the softphone account.

#### **3. State description (as shown below):**

**Online：** The login is successful and you can answer the call normally;

**Forbidden：** Softphone account password input error;

[![image26.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image26.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image26.png)

### **五、(FAQ about Softphone)**

*Commonly recommended softphones are mainly: MicroSIP, the following are the common problems of MicroSIP, but generally, the display of MicroSIP after normal login is as follows:*

[![image27.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image27.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image27.png)

***Summary of the problem of softphone not working normally:***

***1. The softphone prompt:*** Forbidden, usually the extension number password is entered incorrectly. **Solution:** Check the input of the extension password. If you are sure that the password is correct and still prompt Forbidden, contact us Infinity for assistance.

[![image28.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image28.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image28.png)

***2. The softphone prompts:*** when the gateway is wrong or Bad Gateway, the main reason is the failure of the local outlet network connection.

**Solution:** Check the local network environment of the login extension, you can try to restart the router.

[![image29.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image29.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image29.png)

***3. The softphone prompts:*** When the application has expired or Application expired, the server may be requested to be temporarily unavailable.

**Solution:** Contact us Infinity for assistance.

[![image30.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image30.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image30.png)

***4. Softphone prompt:*** When the request timed out or Request timed out, it may be caused by the local network, the softphone domain name may be incorrectly configured, or the corresponding server problem may be caused.

***Solution:****a.First check whether the softphone domain name configuration is wrong, if it is correct, please refer to the b and c methods;**b.To check whether the local network is normal, you can try to use the domain name configured by the softphone under the command Ping to check the current network status;**c.Contact us Infinity for assistance.*

[![image31.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image31.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image31.png)

***5. When the softphone prompts:*** Account or credential is disabled, it is mostly because the account has not been configured.

**Solution:** Reconfigure the account, click the "lower triangle" in the upper right corner to "Add Account" to configure the account information.

[![image32.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image32.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image32.png)

***6. Softphone prompt:*** Undefined external error. Generally, the softphone software is abnormal.

**Solution:** Reinstall the softphone software.

[![image33.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image33.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image33.png)

***7. When the softphone cannot be hung up, it may be that the softphone software itself is stuck.***

**Solution:** Open the task manager on the computer, kill the softphone process, and restart the login.

[![image34.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image34.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image34.png)

**8.The softphone point call does not respond, it may be that the softphone software is abnormal.**

**Solution:** After uninstalling, download other versions of MicroSIP software and reinstall.

[![image35.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image35.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image35.png)

# Common API - API for getting call records

#### Interface description

the interface for the customer to actively pull the list of call records.

#### Request method

POST, form-data format

#### Get call record interface request parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th align="left">parameter name</th><th align="left">type</th><th align="left">Is it necessary</th><th align="left">illustrate</th></tr></thead><tbody><tr><td align="left">service</td><td align="left">string</td><td align="left">yes</td><td align="left">App.Sip\_Cdr.GetBill</td></tr><tr><td align="left">token</td><td align="left">string</td><td align="left">yes</td><td align="left">The token obtained through the authorization interface</td></tr><tr><td align="left">starttime</td><td align="left">string</td><td align="left">yes</td><td align="left">(Dial) start time, format：yyyy-mm-dd hh:mm:ss</td></tr><tr><td align="left">endtime</td><td align="left">string</td><td align="left">yes</td><td align="left">(Dial) end time, format：yyyy-mm-dd hh:mm:ss</td></tr><tr><td align="left">syncflag</td><td align="left">int</td><td align="left">yes</td><td align="left">Get record type: 1. Get unqueried records (default); 2. Get queried records; 3. Get all records.</td></tr><tr><td align="left">direction</td><td align="left">int</td><td align="left">yes</td><td align="left">Call direction: 1. Incoming; 2. Outgoing; 3. All (default).</td></tr><tr><td align="left">callmethod</td><td align="left">int</td><td align="left">yes</td><td align="left">Call method: 0, unlimited; 1, mutual extension dial; 2, extension direct dial (manual dial); 3, API call (default); 4, API double call; 5, predictive outbound call; 6, IVR/group call .</td></tr><tr><td align="left">currentpage</td><td align="left">int</td><td align="left">yes</td><td align="left">number of pages, default: 1</td></tr><tr><td align="left">itemsperpage</td><td align="left">int</td><td align="left">yes</td><td align="left">Number per page, default: 10, minimum: 1; maximum: 1000</td></tr><tr><td align="left">extnumber</td><td align="left">string</td><td align="left">yes</td><td align="left">Extension number, multiple extension numbers are separated by English commas, when passing a null value, it is all</td></tr><tr><td align="left">destnumber</td><td align="left">string</td><td align="left">yes</td><td align="left">The target number of the call, when passing a null value, it is all</td></tr><tr><td align="left">userid</td><td align="left">string</td><td align="left">yes</td><td align="left">Custom data (employee ID), nullable</td></tr><tr><td align="left">memberid</td><td align="left">string</td><td align="left">yes</td><td align="left">Custom data (member ID), can be empty</td></tr><tr><td align="left">chengshudu</td><td align="left">string</td><td align="left">no</td><td align="left">Custom Data (Maturity)</td></tr><tr><td align="left">customuuid</td><td align="left">string</td><td align="left">no</td><td align="left">Custom Data (Customer ID)</td></tr></tbody></table>

#### API Request Example for Obtaining Call Records（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);
?>


```

#### return data structure example

```
{
    "ret": 200,
    "data": {
        "status": 0,
        "desc": "get success",
        "result": {
            "totalitems": 8151,
            "currentpage": 1,
            "itemsperpage": 10,
            "bills": [
                {
                    "id": 22670,
                    "extnumber": "",
                    "destnumber": "13387525701",
                    "displaynumber": "2190170001",
                    "starttime": "2019-09-27 14:58:37",
                    "answertime": null,
                    "endtime": "2019-09-27 14:59:05",
                    "duration": 28,
                    "billsec": 0,
                    "direction": "callout",
                    "callmethod": 6,
                    "userid": "0",
                    "memberid": "0",
                    "chengshudu": "0",
                    "customuuid": "0",
                    "recordfilename": "",
                    "downloadip": "",
                    "hangupdirection": 10041,
                    "hangupcause": 10020,
                    "userkey":"#"
                }
            ]
        },
        "reqtime": 1581502410,
        "rsptime": 1581502410
    },
    "msg": ""
}


```

#### Return parameter description

<table id="bkmrk-parameter-name-type--1"><thead><tr><th align="left">parameter name</th><th align="left">type</th><th align="left">illustrate</th></tr></thead><tbody><tr><td align="left">result</td><td align="left">objest</td><td align="left">returned result set</td></tr><tr><td align="left">—totalitems</td><td align="left">int</td><td align="left">total number of records</td></tr><tr><td align="left">—currentpage</td><td align="left">int</td><td align="left">current page number</td></tr><tr><td align="left">—itemsperpage</td><td align="left">int</td><td align="left">Quantity per page</td></tr><tr><td align="left">—bills</td><td align="left">array</td><td align="left">record array</td></tr><tr><td align="left">——id</td><td align="left">int</td><td align="left">record id</td></tr><tr><td align="left">——extnumber</td><td align="left">string</td><td align="left">Ext</td></tr><tr><td align="left">——destnumber</td><td align="left">string</td><td align="left">target number</td></tr><tr><td align="left">——displaynumber</td><td align="left">string</td><td align="left">display number</td></tr><tr><td align="left">——starttime</td><td align="left">string</td><td align="left">call time</td></tr><tr><td align="left">——answertime</td><td align="left">string</td><td align="left">response time</td></tr><tr><td align="left">——endtime</td><td align="left">string</td><td align="left">call end time</td></tr><tr><td align="left">——duration</td><td align="left">int</td><td align="left">call waiting time</td></tr><tr><td align="left">——billsec</td><td align="left">int</td><td align="left">call time</td></tr><tr><td align="left">——direction</td><td align="left">string</td><td align="left">call direction</td></tr><tr><td align="left">——callmethod</td><td align="left">int</td><td align="left">call method</td></tr><tr><td align="left">——userid</td><td align="left">string</td><td align="left">Custom parameter (user id)</td></tr><tr><td align="left">——memberid</td><td align="left">string</td><td align="left">Custom parameters (member id)</td></tr><tr><td align="left">——chengshudu</td><td align="left">string</td><td align="left">Custom parameters (maturity)</td></tr><tr><td align="left">——customuuid</td><td align="left">string</td><td align="left">Custom parameters (customer id)</td></tr><tr><td align="left">——recordfilename</td><td align="left">string</td><td align="left">call log file name</td></tr><tr><td align="left">——downloadip</td><td align="left">string</td><td align="left">download ip</td></tr><tr><td align="left">——hangupdirection</td><td align="left">int</td><td align="left">hang up directions</td></tr><tr><td align="left">——hangupcause</td><td align="left">int</td><td align="left">hang up reason</td></tr><tr><td align="left">——userkey</td><td align="left">string</td><td align="left">user button</td></tr></tbody></table>

#### Postman Example request parameters

![](https://doc-admin.infin8linx.com/uploads/202503/c65b2c52d15ac1a4f5775e9b19f9cfe5.jpg)

# Common API - Obtain authorization token interface

#### Interface Description

Tokens required to access other interfaces must be obtained from this interface through the authorized Appid and Accesskey (except for the batch IVR interface). The timeliness of the interface authorization Token is 12 hours.

#### Request method

POST, form-data format

#### request parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th align="left">parameter name</th><th align="left">type</th><th align="left">Is it necessary</th><th align="left">illustrate</th></tr></thead><tbody><tr><td align="left">appid</td><td align="left">string</td><td align="left">yes</td><td align="left">authorized appid</td></tr><tr><td align="left">accesskey</td><td align="left">string</td><td align="left">yes</td><td align="left">authorized accesskey</td></tr><tr><td align="left">service</td><td align="left">string</td><td align="left">yes</td><td align="left">App.Sip\_Auth.Login</td></tr></tbody></table>

#### Interface request example（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);
?>


```

#### Return Data Example

```
{
    "ret":200,
    "data":{
        "status":0,
        "desc":"Authorization successful",
        "result":{
            "companycode":"1",
            "companyname":"test",
            "token":"773a70dd02f0695d50205e9b267692b9",
            "authtime":"2020-01-01 00:00:00",
            "authmodel":""
        },
        "reqtime":1581240882,
        "rsptime":1581240882
    },
    "msg":""
}


```

#### Return parameter description

<table id="bkmrk-parameter-name-type--1"><thead><tr><th align="left">parameter name</th><th align="left">type</th><th align="left">illustrate</th></tr></thead><tbody><tr><td align="left">companycode</td><td align="left">int</td><td align="left">Company code</td></tr><tr><td align="left">companyname</td><td align="left">string</td><td align="left">Company Name</td></tr><tr><td align="left">token</td><td align="left">string</td><td align="left">Authorization token, used to access other interfaces</td></tr></tbody></table>

# Extension Manage - Create extension group

#### Interface Description

Create extension group

#### Request method

POST, form-data format

#### request parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th>parameter name</th><th>type</th><th>Is it necessary</th><th>illustrate</th></tr></thead><tbody><tr><td>service</td><td>string</td><td>yes</td><td>App.Sip\_Extgroup.AddExtgroup</td></tr><tr><td>token</td><td>string</td><td>yes</td><td>The token obtained through the authorization interface</td></tr><tr><td>name</td><td>string</td><td>yes</td><td>extension group name</td></tr><tr><td>status</td><td>int</td><td>no</td><td>Extension group status: 1 enable; 0 disable, default 1</td></tr></tbody></table>

#### Interface request example（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Extgroup.AddExtgroup',
        'token'     => 'ABCDEFG',
        'name'  => 'abcdefg',
        'status'  => 1
    ];
    $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);
?>

```

#### return data structure example

```
{
    "ret": 200,
    "data": {
        "status": 0,
        "desc": "Extension group added successfully",
        "reqtime": 1581410934,
        "rsptime": 1581410934
    },
    "msg": ""
}

```

#### Return data field description

<table id="bkmrk-field-illustrate"><thead><tr><th>field</th><th>illustrate</th></tr></thead><tbody><tr><td></td><td></td></tr></tbody></table>

# Batch IVR -  Call out ivr voice in batches

#### Interface Description

For different numbers that need to play the same IVR voice content, you can use this interface to make calls in batches, and a single submission should not exceed 5000 numbers.

#### Request method

POST, form-data format

#### Request URL：

[http://platform.infin8linx.com/api/yunhu](http://platform.infin8linx.com/api/yunhu)

#### request parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th align="left">parameter name</th><th align="left">type</th><th align="left">Is it necessary</th><th align="left">illustrate</th></tr></thead><tbody><tr><td align="left">service</td><td align="left">string</td><td align="left">yes</td><td align="left">App.Sip\_Call.PlayVoice</td></tr><tr><td align="left">appid</td><td align="left">string</td><td align="left">yes</td><td align="left">authorized appid</td></tr><tr><td align="left">accesskey</td><td align="left">string</td><td align="left">yes</td><td align="left">authorized accesskey</td></tr><tr><td align="left">nationcode</td><td align="left">string</td><td align="left">yes</td><td align="left">Country shortcode in: India id: Indonesia ph: Philippines mx: Mexico co: Colombia tha: Thailand</td></tr><tr><td align="left">destnumber</td><td align="left">string</td><td align="left">yes</td><td align="left">Target number, connect multiple numbers with ","</td></tr><tr><td align="left">voicetype</td><td align="left">int</td><td align="left">yes</td><td align="left">The audio file type to play. 1: offline voice file, 2: online voice (url)</td></tr><tr><td align="left">voicefile</td><td align="left">string</td><td align="left">yes</td><td align="left">Offline audio file name or online voice url address</td></tr><tr><td align="left">userkey</td><td align="left">int</td><td align="left">no</td><td align="left">Whether user buttons are required, 1: required, 0 not required, default 0</td></tr><tr><td align="left">chengshudu</td><td align="left">string</td><td align="left">no</td><td align="left">Customer-defined data, returned as it is in the callback data after the call ends.</td></tr><tr><td align="left">disnumber</td><td align="left">string</td><td align="left">no</td><td align="left">Caller ID, if left blank, a random caller ID will be selected</td></tr><tr><td align="left">customuuid</td><td align="left">string</td><td align="left">no</td><td align="left">Customer-defined data, returned as it is in the callback data after the call ends</td></tr><tr><td align="left">waittime</td><td align="left">int</td><td align="left">no</td><td align="left">call waiting time</td></tr><tr><td align="left">conntime</td><td align="left">int</td><td align="left">no</td><td align="left">call airtime</td></tr><tr><td align="left">todayonly</td><td align="left">int</td><td align="left">no</td><td align="left">Whether the number submitted on the day is only dialed on the same day 1: Yes, the number that has not been called on the day will be kicked out of the queue directly 2: No, the number that has not been called on the day will continue to call the next day, and the default is 1 if it is not transmitted</td></tr></tbody></table>

#### Interface request example（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Call.PlayVoice',
        'appid'     => 'ABCDEFG',
        'accesskey'     => 'ABCDEFG',
        'nationcode'     => 'id',
        'destnumber'  => '133，134，135，135',
        'voicetype'  => 'abcdefg',
        'voicefile'  => 'abcdefg',
        'chengshudu'  => 'abcdefg',
        'disnumber'  => 'abcdefg',
        'customuuid'  => 'abcdefg',
        'waittime'  => 60,
        'conntime'  => 60,
        'todayonly'  => 1,
    ];
    $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);
?>


```

#### return data structure example

```
{
    "code": 200,
    "msg": "successful request",
    "data": {
        "desc": "Play command sent successfully",
        "reqtime": 1588836407,
        "rsptime": 1588836407
    }
}


```

#### Return parameter description

<table id="bkmrk-parameter-name-type--1"><thead><tr><th align="left">parameter name</th><th align="left">type</th><th align="left">illustrate</th></tr></thead><tbody><tr><td align="left">code</td><td align="left">int</td><td align="left">return code 200 success</td></tr><tr><td align="left">msg</td><td align="left">string</td><td align="left">return prompt information</td></tr><tr><td align="left">data</td><td align="left">object</td><td align="left">return data object</td></tr><tr><td align="left">—desc</td><td align="left">string</td><td align="left">request hints</td></tr><tr><td align="left">—reqtime</td><td align="left">int</td><td align="left">request timestamp</td></tr><tr><td align="left">—rsptime</td><td align="left">int</td><td align="left">return timestamp</td></tr></tbody></table>

# Obtain authorization token interface

#### Interface Description

Tokens required to access other interfaces must be obtained from this interface through the authorized Appid and Accesskey (except for the batch IVR interface). The timeliness of the interface authorization Token is 12 hours.

#### Request method

POST, form-data format

#### request parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th align="left">parameter name</th><th align="left">type</th><th align="left">Is it necessary</th><th align="left">illustrate</th></tr></thead><tbody><tr><td align="left">appid</td><td align="left">string</td><td align="left">yes</td><td align="left">authorized appid</td></tr><tr><td align="left">accesskey</td><td align="left">string</td><td align="left">yes</td><td align="left">authorized accesskey</td></tr><tr><td align="left">service</td><td align="left">string</td><td align="left">yes</td><td align="left">App.Sip\_Auth.Login</td></tr></tbody></table>

#### Interface request example（PHP）

```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);
?>


```

#### Return Data Example

```
{
    "ret":200,
    "data":{
        "status":0,
        "desc":"Authorization successful",
        "result":{
            "companycode":"1",
            "companyname":"test",
            "token":"773a70dd02f0695d50205e9b267692b9",
            "authtime":"2020-01-01 00:00:00",
            "authmodel":""
        },
        "reqtime":1581240882,
        "rsptime":1581240882
    },
    "msg":""
}


```

#### Return parameter description

<table id="bkmrk-parameter-name-type--1"><thead><tr><th align="left">parameter name</th><th align="left">type</th><th align="left">illustrate</th></tr></thead><tbody><tr><td align="left">companycode</td><td align="left">int</td><td align="left">Company code</td></tr><tr><td align="left">companyname</td><td align="left">string</td><td align="left">Company Name</td></tr><tr><td align="left">token</td><td align="left">string</td><td align="left">Authorization token, used to access other interfaces</td></tr></tbody></table>

# 1.Create an Agent Group

> 💡 Tip: This step is optional. If you only need to specify a single extension for outbound calls, you can skip this step. Creating an agent group is only necessary when you need to batch assign multiple agents for collaborative calling.

#### Accessing the Feature

1.Log in to the admin console. In the left-side navigation pane, select Voice, then click Customer Service Management from the expanded menu. On the subsequent page, choose Seat Group to access the management interface.

[![](https://document.infin8linx.com/uploads/images/gallery/2026-06/scaled-1680-/image-1782786774038.png)](https://document.infin8linx.com/uploads/images/gallery/2026-06/image-1782786774038.png)

2.On the Seat Group list page, click **"Add"** .

[![](https://document.infin8linx.com/uploads/images/gallery/2025-12/scaled-1680-/image-1766564868996.png)](https://document.infin8linx.com/uploads/images/gallery/2025-12/image-1766564868996.png)

[![](https://document.infin8linx.com/uploads/images/gallery/2026-06/scaled-1680-/image-1782786852769.png)](https://document.infin8linx.com/uploads/images/gallery/2026-06/image-1782786852769.png)

3.In the pop-up window, enter the agent group name and submit to complete the creation.

[![](https://document.infin8linx.com/uploads/images/gallery/2026-06/scaled-1680-/image-1782786940517.png)](https://document.infin8linx.com/uploads/images/gallery/2026-06/image-1782786940517.png)

4.After the agent group is created, click **"Member"** in the **"Action"** column on the Agent Groups list page to add extensions to this group.

[![](https://document.infin8linx.com/uploads/images/gallery/2026-06/scaled-1680-/image-1782787117606.png)](https://document.infin8linx.com/uploads/images/gallery/2026-06/image-1782787117606.png)

5.After clicking **"Add"**, a pop-up window will display the list of existing extensions. You can select the desired extensions to add based on your needs.

[![](https://document.infin8linx.com/uploads/images/gallery/2026-06/scaled-1680-/image-1782787190225.png)](https://document.infin8linx.com/uploads/images/gallery/2026-06/image-1782787190225.png)

[![](https://document.infin8linx.com/uploads/images/gallery/2026-06/scaled-1680-/image-1782787238016.png)](https://document.infin8linx.com/uploads/images/gallery/2026-06/image-1782787238016.png)

# 任务管理

### 功能概述

任务管理用于创建、配置和调度自动外呼任务。用户可通过该模块绑定录音文件与呼叫名单，灵活设置执行时间，并根据通话状态（如主动挂断、未接通）智能触发相应的短信通知，从而实现外呼业务的自动化闭环管理。

### 功能入口

登录呼叫中心后台 → 进入 **「语音」** -&gt; **「自动外呼」** -&gt; **「任务管理」**

#### 创建任务

##### 步骤1：设置任务名称

1.在任务管理界面，点击 **「添加」**, 在弹出的对话框中，填写任务名称（例：2026年1月促销活动），点击 **“下一步”**。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-01/scaled-1680-/image-1768545617533.png)](https://document.infin8linx.com/uploads/images/gallery/2026-01/image-1768545617533.png)

> ⚠️ 注意：任务名称仅支持中文/数字/英文，禁止特殊字符（如 @#%）

##### 步骤2：设置录音

在 **「录音文件」** 下拉框中，选择已上传的 MP3 文件（例：促销活动-中文.mp3），点击 **“下一步”**。

> 注：录音文件需提前通过「录音文件管理」模块上传（详见“[录音文件管理](https://document.infin8linx.com/books/voice-cn-manual/page/0266e)”章节）。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-01/scaled-1680-/image-1768545774371.png)](https://document.infin8linx.com/uploads/images/gallery/2026-01/image-1768545774371.png)

##### 步骤3：发送设置

在“发送设置”页面，配置以下任务参数：

[![](https://document.infin8linx.com/uploads/images/gallery/2026-01/scaled-1680-/image-1768548739802.png)](https://document.infin8linx.com/uploads/images/gallery/2026-01/image-1768548739802.png)

- **呼叫名单：** 从下拉菜单中选择已上传的名单（例：促销名单\_202601.xlsx）。 > 注意：名单需提前通过「呼叫名单」模块上传。（详见[呼叫名单管理](https://document.infin8linx.com/books/voice-cn-manual/page/9b861) 章节）。
- **开始时间：** 选择「立即执行」（创建后即刻启动）或「定时执行」（设定未来任意时间）。 > 注意：系统执行时间以印尼时间为准。
- **短信设置（需已开通短信账户）：** 根据业务需求，分别配置以下两类短信： 
    - **挂断发送短信：** 当客户接通电话后主动挂断时触发，用于完成通话闭环。选择「发送短信」后，选择已经报备的短信模板（详见[短信模板管理](https://document.infin8linx.com/books/voice-cn-manual/page/d709f)）章节，通话结束会系统会使用选择的模板发送短信。
        
        ```
         示例：短信内容 = 尊敬的客户，您的服务已办理，请查收。[公司名]
        
        ```
    - **未接通发送短信：** 当电话未接通（如未接听、关机、占线等）时触发，用于提醒客户。选择「发送短信」后，选择已经报备的短信模板（详见[短信模板管理](https://document.infin8linx.com/books/voice-cn-manual/page/d709f)）章节，通话结束会系统会使用选择的模板发送短信。
        
        ```
        示例：外呼任务拨打客户手机，但客户未接听→系统自动发送短信："【XX公司】您有未接来电，详情请回复1。"
        
        ```

**提示：两类短信可同时启用，系统会根据实际通话结果智能判断触发哪一条。**

##### 步骤4：提交任务

确认所有信息无误后，点击 **“提交”**，即可成功创建任务。

#### 编辑任务

1.在任务管理列表中，点击对应任务的操作列 **“编辑”** 按钮，在展开的选择框中选择 **编辑**。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-07/scaled-1680-/image-1782982660187.png)](https://document.infin8linx.com/uploads/images/gallery/2026-07/image-1782982660187.png)

2.在弹出的对话框中，修改任务名称。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-07/scaled-1680-/image-1782982749973.png)](https://document.infin8linx.com/uploads/images/gallery/2026-07/image-1782982749973.png)

3.确认无误后，点击 **“确认”** 以更新任务信息。

#### 暂停任务

1.在任务管理列表中，，点击对应任务的操作列 **“编辑”** 按钮，在展开的选择框中选择 **暂停**。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-07/scaled-1680-/image-1782982891047.png)](https://document.infin8linx.com/uploads/images/gallery/2026-07/image-1782982891047.png)

2.在弹出的对话框中，点击 **“确认”** 以暂停任务。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-07/scaled-1680-/image-1782983009725.png)](https://document.infin8linx.com/uploads/images/gallery/2026-07/image-1782983009725.png)

# Generic API format

### Request Headers

- certification-code: af92196e-0d07-3c1d-a631-a71c...(Unique credential)

### Response

<table id="bkmrk-field-name-type-requ"><thead><tr><th>Field name</th><th>type</th><th>Required</th><th>Description</th></tr></thead><tbody><tr><td>status</td><td>string</td><td>Yes</td><td>Response status description</td></tr><tr><td>code</td><td>int</td><td>Yes</td><td>Error Codes</td></tr><tr><td>message</td><td>string</td><td>Yes</td><td>Error message</td></tr><tr><td>data</td><td>object</td><td>Yes</td><td>Response payload</td></tr><tr><td>error</td><td>object</td><td>Yes</td><td>Error details</td></tr></tbody></table>

#### Success Response Example

```json
{
    "status": "success",
    "code": 200,
    "message": "",
    "data": {
        "msg_id": "wamid.HBgLODUyNjg0MTUwMjYVAgARGBIyMUQ4RjA5MTY1NUJERjE3NjYA"
    },
    "error": {}
}

```

#### Failure Response Example

```json
{
    "status": "error",
    "code": 422,
    "message": "The phone number is invalid.",
    "data": {},
    "error": {
        "to": [
            "The phone number is invalid."
        ]
    }
}

```

#### Error Codes

<table id="bkmrk-error-code-error-exp"><thead><tr><th>Error Code</th><th>Error Explanation</th></tr></thead><tbody><tr><td>200</td><td>No error</td></tr><tr><td>404</td><td>Not found</td></tr><tr><td>422</td><td>Request parameter error</td></tr><tr><td>429</td><td>Too many attempts</td></tr><tr><td>500</td><td>Server error</td></tr><tr><td>10001</td><td>Certification code is invalid</td></tr><tr><td>10002</td><td>WhatsApp API error</td></tr><tr><td>10003</td><td>Viber API error</td></tr><tr><td>10004</td><td>RCS API error</td></tr></tbody></table>

# Submit a template for review

### Request

#### API Domain

- https://api.incsapp.com

#### API Route

- /external/templates/rcs

#### Method

- **POST**

#### Headers

- Content-Type: application/json
- certification-code: f484bd42-4a0c-39d....

#### Parameters

<table id="bkmrk-parameter-type-manda"><thead><tr><th>Parameter</th><th>Type</th><th>Mandatory</th><th>Description</th><th>Remarks</th></tr></thead><tbody><tr><td>name</td><td>string</td><td>Yes</td><td>Template name. Max length 25 and should contain only alphanumeric chars, underscore.</td><td>e.g: test\_template</td></tr><tr><td>type</td><td>string</td><td>Yes</td><td>Template type. Must be one of text, richcard, or carousel. See: [Template Type](#bkmrk--1).</td><td>e.g: text</td></tr><tr><td>category</td><td>string</td><td>Yes</td><td>Categorization of message content. See: [Template Category](#bkmrk--3)</td><td>e.g: TRANSACTION</td></tr><tr><td>content</td><td>object</td><td>Yes</td><td>Template content. See: [Template Content](#bkmrk--5)</td><td></td></tr></tbody></table>

<a id="bkmrk--1"></a>

#### Template Type

Supported types of templates are:

- **Text Message** - The Text Message template supports simple text messages with suggested replies or actions. Text messages can contain up to 11 suggestions.
- **Rich Card standalone** - The Rich Card Stand-alone template allows for the inclusion of a rich card: image, gif or video along with suggested replies and actions. A maximum of 4 suggestions can be included with the rich card in this template.
- **Rich Card carousel** - The Rich Card Carousel template supports carousels with a minimum of two rich cards, with each featuring suggested replies and actions. the Rich Card Carousel template allows you to present up to 10 cards in the carousel with each card having up to 4 suggestions.

<a id="bkmrk--3"></a>

#### Template Category

**Mandatory for multi-use agents**. Allowed values:

- **PROMOTION** – default for promotional agents.
- **TRANSACTION** – default for transactional agents.
- **AUTHENTICATION** – default for OTP agents.

<a id="bkmrk--5"></a>

#### Template Content

##### 1. Text Message Template (text)

- **content** payload
    
    <table><thead><tr><th>Parameter</th><th>Type</th><th>Mandatory</th><th>Description</th><th>Remarks</th></tr></thead><tbody><tr><td>textMessage</td><td>string</td><td>Yes</td><td>Template message with custom variables. Custom variables are mentioned in square brackets \[variable\_name\]. Max length 2500.</td><td>e.g: Dear \[name\], it is time to grab a big deal.</td></tr><tr><td>suggestions</td><td>array</td><td>No</td><td>Object with suggestions related data. See: [Suggestion Types](#bkmrk--7)</td><td></td></tr></tbody></table>
- Sample Request

```json
      {
          "name": "test_template",
          "type": "text",
          "category": "PROMOTION",
          "content": {
              "textMessage": "Dear [name], your order [order_id] has been shipped.",
              "suggestions": [
                  {
                      "suggestionType": "reply",
                      "text": "Track Order",
                      "postbackData": "track_order_[order_id]"
                  },
                  {
                      "suggestionType": "url_action",
                      "text": "View Details",
                      "postbackData": "view_details",
                      "url": "https://brand.com/orders/[order_id]"
                  }
              ]
          }
      }

```

##### 2. Rich Card Standalone (richcard)

- **content** payload <table><thead><tr><th>Parameter</th><th>Type</th><th>Mandatory</th><th>Description</th><th>Remarks</th></tr></thead><tbody><tr><td>orientation</td><td>string</td><td>Yes</td><td>Card orientation (VERTICAL/HORIZONTAL)</td><td>e.g VERTICAL</td></tr><tr><td>alignment</td><td>string</td><td>No</td><td>In case of HORIZONTAL orientation alignment should be (LEFT,RIGHT)</td><td>e.g: LEFT</td></tr><tr><td>height</td><td>string</td><td>No</td><td>Applicable only for VERTICAL orientation.Card Height (SHORT,MEDIUM)</td><td>e.g MEDIUM</td></tr><tr><td>standaloneCard</td><td>object</td><td>Yes</td><td>Rich card Object with below details</td><td></td></tr></tbody></table>
- **standaloneCard** details <table><thead><tr><th>Parameter</th><th>Type</th><th>Mandatory</th><th>Description</th><th>Remarks</th></tr></thead><tbody><tr><td>cardTitle</td><td>string</td><td>Yes</td><td>Card title. Max length 200 including variables if any.</td><td></td></tr><tr><td>cardDescription</td><td>string</td><td>No</td><td>Card description. Max length 2000 including variables if any.</td><td></td></tr><tr><td>mediaUrl</td><td>string</td><td>Yes</td><td>Valid publicly accessible URL. Max length 2048. Custom variables are allowed post domain/public IP only. Refer [Media guidelines](#bkmrk--9) for accepted size/aspect ratio</td><td>Eg. https://brand.com/final.mp4 Eg. https://brand.com/\[media\]</td></tr><tr><td>thumbnailUrl</td><td>string</td><td>No</td><td>Valid publicly accessible URL.Custom variables are not allowed. Max length 2048.</td><td>Eg. https://brand.com/final.jpeg</td></tr><tr><td>suggestions</td><td>array</td><td>No</td><td>Object with suggestions related data</td><td>See: [Suggestion Types](#bkmrk--7)</td></tr></tbody></table>
- Sample Request

```json
      {
          "name": "promo_richcard_url",
          "type": "richcard",
          "category": "PROMOTION",
          "content": {
              "orientation": "VERTICAL",
              "height": "SHORT",
              "standaloneCard": {
                  "cardTitle": "Keep calm & BAT on!",
                  "cardDescription": "Dear [name], time to participate in lucky draw and win prizes",
                  "mediaUrl": "https://brand.com/Ad.mp4",
                  "thumbnailUrl": "https://brand.com/Ad_snap.png",
                  "suggestions": [
                      {
                          "suggestionType": "reply",
                          "text": "Avail offer [offer_name]",
                          "postbackData": "offer_reply"
                      }
                  ]
              }
          }
      }
      

```

##### 3. Rich Card Carousel (carousel)

- **content** payload
    
    <table><thead><tr><th>Parameter</th><th>Type</th><th>Mandatory</th><th>Description</th><th>Remarks</th></tr></thead><tbody><tr><td>width</td><td>string</td><td>Yes</td><td>Card width (SMALL/MEDIUM)</td><td>e.g: SHORT</td></tr><tr><td>height</td><td>string</td><td>Yes</td><td>Card height (SHORT/MEDIUM)</td><td>e.g: MEDIUM</td></tr><tr><td>carouselCard</td><td>array</td><td>Yes</td><td>Carousel List Object with below details</td><td></td></tr></tbody></table>
- **carouselCard** details
    
    <table><thead><tr><th>Parameter</th><th>Type</th><th>Mandatory</th><th>Description</th><th>Remarks</th></tr></thead><tbody><tr><td>cardTitle</td><td>string</td><td>Yes</td><td>Card title. Max length 200 including variables if any.</td><td></td></tr><tr><td>cardDescription</td><td>string</td><td>No</td><td>Card description. Max length 2000 including variables if any</td><td></td></tr><tr><td>mediaUrl</td><td>string</td><td>Yes</td><td>Valid publicly accessible URL. Max length 2048. Custom variables are allowed post domain/public IP only. Refer [Media guidelines](#bkmrk--9) for accepted size/aspect ratio</td><td>Eg. https://brand.com/final.mp4 Eg. https://brand.com/\[media\]</td></tr><tr><td>thumbnailUrl</td><td>string</td><td>No</td><td>Valid publicly accessible URL.Custom variables are not allowed. Max length 2048.</td><td>Eg. https://brand.com/final.jpeg</td></tr><tr><td>suggestions</td><td>array</td><td>No</td><td>Object with suggestions related data</td><td>See: [Suggestion Types](#bkmrk--7)</td></tr></tbody></table>
- Sample Request

```json
      {
          "name": "test_carousel",
          "type": "carousel",
          "category": "PROMOTION",
          "content": {
              "height": "SHORT",
              "width": "MEDIUM",
              "carouselCard": [
                  {
                      "cardTitle": "New watches",
                      "cardDescription": "Dear [name] brand new watches for less price",
                      "mediaUrl": "https://brand.com/media/watches.mp4",
                      "thumbnailUrl": "https://brand.com/media/watches.jpeg",
                      "suggestions": [
                          {
                              "suggestionType": "url_action",
                              "url": "https://brand.com/",
                              "text": "Buy Now at [offer_name]",
                              "postbackData": "shop_url"
                          }
                      ]
                  },
                  {
                      "cardTitle": "New perfumes",
                      "cardDescription": "Dear [name], Choose from brand new perfumes.",
                      "mediaUrl": "https://brand.com/media/[image]",
                      "suggestions": [
                          {
                              "suggestionType": "dialer_action",
                              "phoneNumber": "+919702012345",
                              "text": "Call now to avail[offer_name]",
                              "postbackData": "call_click"
                          }
                      ]
                  }
              ]
          }
      }

```

<a id="bkmrk--7"></a>

#### Suggestion Types

This section is to describe details about different types of suggestions and their formats

- **The below two fields are common in all suggestions.：**<table><thead><tr><th>Parameter</th><th>Type</th><th>Mandatory</th><th>Description</th><th>Remarks</th></tr></thead><tbody><tr><td>text</td><td>string</td><td>Yes</td><td>Suggestion text. Max length is 25 including variables if any.</td><td></td></tr><tr><td>postbackData</td><td>string</td><td>Yes</td><td>Suggestion postback data Max length is 120 including variables if any.</td><td></td></tr></tbody></table>

##### 1. Reply suggestion

Suggested replies help users respond to your agent in ways that it can easily respond to. When tapped, sends the text reply back to the agent.

```json
{
    "suggestionType": "reply",
    "text": "Yes",
    "postbackData": "user_confirmed_yes"
}

```

##### 2. Suggestion Action

When tapped, initiates the corresponding native action on the device

###### 2.1. Url Action - Browser

The Open URL action lets you guide users to a web page specified by your agent. By default, the web page opens in the user's browser. If a user has a default app configured for the web page, that app will open instead. In that case, the icon on the suggested action button will be the app's icon.

<table id="bkmrk-parameter-descriptio"><thead><tr><th>Parameter</th><th>Description</th><th>Value</th></tr></thead><tbody><tr><td>suggestionType</td><td>url\_action</td><td>url\_action</td></tr><tr><td>url</td><td>Valid public URL with/without variables</td><td>e.g: https://brand.com</td></tr></tbody></table>

```json
{
    "suggestionType": "url_action",
    "text": "Visit Website",
    "postbackData": "visit_website",
    "url": "https://brand.com"
}

```

###### 2.2. Dialer Action

Opens the user's default dialer app with the agent-specified phone number filled in.

<table id="bkmrk-parameter-descriptio-1"><thead><tr><th>Parameter</th><th>Description</th><th>Value</th></tr></thead><tbody><tr><td>suggestionType</td><td>dialer\_action</td><td>dialer\_action</td></tr><tr><td>phoneNumber</td><td>Valid Phone Number to dial in International format or custom variable.</td><td>e.g: +919702012345 or \[dial\_number\]</td></tr></tbody></table>

```json
{
    "suggestionType": "dialer_action",
    "text": "Call Us",
    "postbackData": "call_support",
    "phoneNumber": "+6281234567890"
}

```

##### 2.3. View Locatio

Opens the user's default map app and selects the agent-specified location or searches around the user's location given an agent-specified query.

<table id="bkmrk-parameter-descriptio-2"><thead><tr><th>Parameter</th><th>Description</th><th>Value</th></tr></thead><tbody><tr><td>suggestionType</td><td>view\_location</td><td>view\_location</td></tr><tr><td>latitude</td><td>Valid latitude within the range -90 to 90</td><td>e.g: -34.34555</td></tr><tr><td>longitude</td><td>Valid latitude within the range -180 to 180</td><td>e.g: 12.54654</td></tr><tr><td>label</td><td>Label to display</td><td></td></tr></tbody></table>

```json
{
    "suggestionType": "view_location",
    "text": "View Store",
    "postbackData": "view_store_location",
    "latitude": -6.2088,
    "longitude": 106.8456,
    "label": "Brand Store Jakarta"
}

```

##### 2.4. Query Location

Opens default maps app on the device and searches the query text around the user location given an agent-specified query. Only supported on Android Messages clients.

<table id="bkmrk-parameter-descriptio-3"><thead><tr><th>Parameter</th><th>Description</th><th>Value</th></tr></thead><tbody><tr><td>suggestionType</td><td>query\_location</td><td>query\_location</td></tr><tr><td>query</td><td>Valid location name to search</td><td>e.g: Tajmahal</td></tr></tbody></table>

```json
{
    "suggestionType": "query_location",
    "text": "Find Nearby",
    "postbackData": "find_nearby_stores",
    "query": "Brand Store near me"
}

```

##### 2.5. Share Location

Opens the RCS app's location chooser so the user can pick a location to send to the agent.

```json
{
    "suggestionType": "share_location",
    "text": "Share Location",
    "postbackData": "user_shared_location"
}

```

##### 2.6. Calendar Event

Opens the user's default calendar app and starts the new calendar event flow with the agent-specified event data pre-filled.

<table id="bkmrk-parameter-descriptio-4"><thead><tr><th>Parameter</th><th>Description</th><th>Value</th></tr></thead><tbody><tr><td>suggestionType</td><td>calendar\_event</td><td>calendar\_event</td></tr><tr><td>title</td><td>Tile of the event. Max length 2048.</td><td></td></tr><tr><td>description</td><td>Description of the event. Max length 2048.</td><td></td></tr><tr><td>startTime</td><td>Start time of the event in YYYY-MM-DD HH:mm:ss format in local time zone</td><td>e.g: 2024-04-23 10:33:11</td></tr><tr><td>endTime</td><td>End time of the event in YYYY-MM-DD HH:mm:ss format in local time zone</td><td>e.g: 2024-04-23 18:33:11</td></tr></tbody></table>

```json
{
    "suggestionType": "calendar_event",
    "text": "Add to Calendar",
    "postbackData": "add_event",
    "title": "Product Launch Event",
    "description": "Join us for the exciting product launch",
    "startTime": "2024-04-23 10:33:11",
    "endTime": "2024-04-23 18:33:11"
}

```

##### 2.7. Url Action – WebView

The Open URL with webview action loads the specified web page inside the messaging app with the rendering engine of your default browser. This allows the user to interact with the web page without leaving the RBM conversation. If the user's device doesn't support webviews, the web page opens in the user's browser instead.

<table id="bkmrk-parameter-descriptio-5"><thead><tr><th>Parameter</th><th>Description</th><th>Value</th></tr></thead><tbody><tr><td>suggestionType</td><td>url\_action</td><td>url\_action</td></tr><tr><td>application</td><td>WEBVIEW</td><td>WEBVIEW</td></tr><tr><td>webviewViewMode</td><td>**FULL**: The web page takes up the full screen. **HALF**: The web page takes up half of the screen. **TALL**: The web page takes up three quarters of the screen.</td><td>FULL</td></tr><tr><td>url</td><td>Valid public URL with/without variables</td><td>e.g: https://brand.com</td></tr><tr><td>description</td><td>Accessbility description for webview.</td><td></td></tr></tbody></table>

```json
{
    "suggestionType": "url_action",
    "text": "Open Form",
    "postbackData": "open_webview_form",
    "application": "WEBVIEW",
    "url": "https://brand.com/form",
    "webviewViewMode": "FULL",
    "description": "Registration form"
}

```

<a id="bkmrk--9"></a>

#### Media guidelines

The media provided in Rich card and Rich card carousel should follow below guidelines.

##### Image:

<table id="bkmrk-message-type-card-or"><thead><tr><th>Message Type</th><th>Card Orientation</th><th>Card Height</th><th>Card Width</th><th>Image Aspect ratio</th><th>Image Optimal Resolution(px)</th><th>Image Max file size</th><th>Accepted Image formats</th></tr></thead><tbody><tr><td>Rich Card</td><td>VERTICAL</td><td>SHORT</td><td>-</td><td>3:1</td><td>1440×480</td><td>2MB</td><td>JPEG, JPG, PNG, GIF</td></tr><tr><td>Rich Card</td><td>VERTICAL</td><td>MEDIUM</td><td>-</td><td>2:1</td><td>1440×720</td><td>2MB</td><td></td></tr><tr><td>Rich Card</td><td>HORIZONTAL</td><td>-</td><td>-</td><td>3:4</td><td>768×1024</td><td>2MB</td><td></td></tr><tr><td>Carousel</td><td>NA</td><td>SHORT</td><td>SMALL</td><td>8:5</td><td>1160×720</td><td>1MB</td><td></td></tr><tr><td>Carousel</td><td>NA</td><td>SHORT</td><td>MEDIUM</td><td>5:2</td><td>1840×720</td><td>1MB</td><td></td></tr><tr><td>Carousel</td><td>NA</td><td>MEDIUM</td><td>SMALL</td><td>1:1</td><td>770×720</td><td>1MB</td><td></td></tr><tr><td>Carousel</td><td>NA</td><td>MEDIUM</td><td>MEDIUM</td><td>16:9</td><td>1280×720</td><td>1MB</td><td></td></tr></tbody></table>

##### Video &amp; Thumbnail:

<table id="bkmrk-message-type-card-or-1"><thead><tr><th>Message Type</th><th>Card Orientation</th><th>Card Height</th><th>Card Width</th><th>Video Max file size</th><th>Video Accepted Formats</th><th>THUMBNAIL Aspect ratio</th><th>THUMBNAIL Optimal Resolution(px)</th><th>THUMBNAIL File Size</th><th>THUMBNAIL Accepted Formats</th></tr></thead><tbody><tr><td>Rich Card</td><td>VERTICAL</td><td>SHORT</td><td>-</td><td>10MB</td><td>MP4, M4V, MPEG, WEBM, H263, M4P</td><td>3:1</td><td>770×257</td><td>MIN: 40KB MAX: 100KB</td><td>JPEG, JPG, PNG</td></tr><tr><td>Rich Card</td><td>VERTICAL</td><td>MEDIUM</td><td>-</td><td>10MB</td><td></td><td>7:3</td><td>770×335</td><td></td><td></td></tr><tr><td>Rich Card</td><td>HORIZONTAL</td><td>-</td><td>-</td><td>10MB</td><td></td><td>25:33</td><td>250×330</td><td></td><td></td></tr><tr><td>Carousel</td><td>NA</td><td>SHORT</td><td>SMALL</td><td>5MB</td><td></td><td>8:5</td><td>718×448</td><td></td><td></td></tr><tr><td>Carousel</td><td>NA</td><td>SHORT</td><td>MEDIUM</td><td>5MB</td><td></td><td>5:2</td><td>1140×448</td><td></td><td></td></tr><tr><td>Carousel</td><td>NA</td><td>MEDIUM</td><td>SMALL</td><td>5MB</td><td></td><td>1:1</td><td>480×448</td><td></td><td></td></tr><tr><td>Carousel</td><td>NA</td><td>MEDIUM</td><td>MEDIUM</td><td>5MB</td><td></td><td>16:9</td><td>796×448</td><td></td><td></td></tr></tbody></table>

[Refer to Google best practices(Rich Cards section) while using images/video in rich cards messages.](https://developers.google.com/business-communications/rcs-business-messaging/guides/learn/best-practices)

### Response

#### Template Status

<table id="bkmrk-status-description-p"><thead><tr><th>Status</th><th>Description</th></tr></thead><tbody><tr><td>PENDING</td><td>Template is pending review.</td></tr><tr><td>APPROVED</td><td>Template has been approved and is ready to use.</td></tr><tr><td>REJECTED</td><td>Template has been rejected.</td></tr><tr><td>DISABLED</td><td>Template has been disabled.</td></tr><tr><td>ENABLED</td><td>Template has been re-enabled from a DISABLED or SUSPENDED status.</td></tr><tr><td>SUSPENDED</td><td>Template has been suspended.</td></tr></tbody></table>

#### Sample Successful Response

```json
{
    "status": "success",
    "code": 200,
    "message": "",
    "data": {
        "template_id": "2217676094281515152",
        "name": "api_5_text",
        "type": "text",
        "category": "PROMOTION",
        "status": "PENDING",
        "content": {
            "textMessage": "Dear [name], time to use rcs api",
            "suggestions": [
                {
                    "suggestionType": "reply",
                    "text": "Join us",
                    "postbackData": "click_reply"
                }
            ]
        },
        "created_time": 1767609428,
        "updated_time": 1767609428,
        "status_updated_time": 0
    },
    "error": {}
}

```

#### Sample Error Response

```json
{
    "status": "error",
    "code": 400,
    "message": "type require",
    "data": {},
    "error": {}
}

```

# New Message Webhook (RCS)

### Webhook Request Method

- **POST**

### Webhook Payload

<table id="bkmrk-parameter-type-descr"><thead><tr><th>Parameter</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>event</td><td>string</td><td>This is set to "new\_message".</td></tr><tr><td>message</td><td>object</td><td>Message data.</td></tr></tbody></table>

#### Webhook Sample

```json
{
    "event": "new_message",
    "business_phone": "",
    "message": {
        "senderPhoneNumber": "+6281519140000",
        "messageId": "da220bf7-e15b-4b2b-90af-1860eb335872",
        "sendTime": "2026-02-02T08:11:41.193204Z",
        "agentId": "infinity_links_indo_test_promo_tqzwtuox_agent@rbm.goog",
        "suggestionResponse": {
            "postbackData": "shop_url",
            "text": "Buy Now at INCS",
            "type": "ACTION"
        }
    }
}

```

#### Message data Samples

##### 1. Text Message

```json
{
    "senderPhoneNumber": "+628XXXXXXXXX",
    "messageId": "5312df2b-54e3-457d-8654-49a4f3ba1a19",
    "sendTime": "2024-04-20T10:11:02.589915Z",
    "text": "Hiii",
    "agentId": "test_vhbgamhn_agent@rbm.goog"
}

```

##### 2. File Message

```json
{
    "senderPhoneNumber": "+628XXXXXXXXX",
    "messageId": "5312df2b-54e3-457d-8654-49a4f3ba1a19",
    "sendTime": "2024-04-20T10:58:29.951141Z",
    "userFile": {
        "thumbnail": {
            "mimeType": "image/jpeg",
            "fileSizeBytes": 8001,
            "fileUri": "https://rcs-user-content-ap.storage.googleapis.com/baf60d40-f197-497f-83f8-5a52fd081262/54b9a1aae33ff62d14ea58db59f43ff04cf62d2329041b110b724b7447a7"
        },
        "payload": {
            "mimeType": "image/jpeg",
            "fileSizeBytes": 144594,
            "fileName": "1000002217.jpg",
            "fileUri": "https://rcs-user-content-ap.storage.googleapis.com/f7cdd990-83ea-4b8d-ba89-73eacf8d7d8a/d63d8f295248fc67cc1716658c169bba70f98b0513798c3c60f56f52734f"
        }
    },
    "agentId": "test_vhbgamhn_agent@rbm.goog"
}

```

##### 3. Response to suggestion – REPLY

```json
{
    "senderPhoneNumber": "+628XXXXXXXXX",
    "messageId": "5312df2b-54e3-457d-8654-49a4f3ba1a19",
    "sendTime": "2024-04-05T13:15:40.152413Z",
    "agentId": "test_vhbgamhn_agent@rbm.goog",
    "suggestionResponse": {
        "postbackData": "user_reply_what_is_rcs",
        "text": "what is RCS?",
        "type": "REPLY"
    }
}

```

##### 4. Response to suggestion – ACTION

```json
{
    "senderPhoneNumber": "+628XXXXXXXXX",
    "messageId": "5312df2b-54e3-457d-8654-49a4f3ba1a19",
    "sendTime": "2024-04-05T13:16:42.183829Z",
    "agentId": "test_vhbgamhn_agent@rbm.goog",
    "suggestionResponse": {
        "postbackData": "user_action_open_url",
        "text": "visit our website",
        "type": "ACTION"
    }
}

```

##### 5. Location message

```json
{
    "senderPhoneNumber": "+62XXXXXXXXXX",
    "messageId": "b0d0ea18-c809-4206-9ca2-5baf02707fe0",
    "sendTime": "2025-07-29T06:08:36.741050Z",
    "agentId": "test_dev_vhbgamhn_agent@rbm.goog",
    "location": {
        "longitude": 78.3861501,
        "latitude": 17.4370557
    }
}

```

# 坐席组

本文详细介绍了坐席组的创建过程，并对坐席组的功能进行了全面阐述。

### 功能概述

坐席组是一个逻辑划分的特定功能组织，坐席组可以管理多个坐席，最终的电话都是由坐席完成。

### 功能入口

1.登录呼叫中心控制台，在左侧导航栏选择客**服管理&gt;坐席组**，可以看到自己创建的坐席组。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/image-1772247409276.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/image-1772247409276.png)

### 功能介绍

#### 创建坐席组

1.进入坐席组管理界面，点击**添加**,打开创建技能组界面。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/image-1772247575920.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/image-1772247575920.png)

2.填写基本信息，点击**确定**完成坐席组创建

[![](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/image-1772265208737.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/image-1772265208737.png)

- 坐席组名称： 坐席组名称必填，字符串长度在1-64之间。
- 分配策略：呼入时坐席组内成员的分配机制，随机：随机分配，呼叫时长：根据坐席通话时长分配，呼叫次数：根据呼叫次数分配，优先级：根据优先级分配。
- 描述：可以根据坐席组的用途，添加一些描述信息。

##### 添加坐席组成员

1.点击具体坐席组操作列**成员**，弹出添加做坐席组成员页面

[![](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/image-1772249200672.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/image-1772249200672.png)

2.点击**添加**，弹出坐席选择列表页面。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/image-1772249575879.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/image-1772249575879.png)

3.选择需要添加的坐席成员并完成基本的配置，点击**确认**完成配置

[![](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/image-1772262802503.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/image-1772262802503.png)

##### 编辑坐席组成员

1.单击具体坐席成员操作列**编辑**，弹出编辑坐席成员页面。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/image-1772263152878.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/image-1772263152878.png)

2.在编辑页面可以更改坐席权重和坐席状态，点击**确认**即可完成编辑

[![](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/image-1772263250831.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/image-1772263250831.png)

#### 编辑坐席组

1.单击具体坐席组操作列**编辑**，弹出编辑坐席组页面。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/image-1772265329337.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/image-1772265329337.png)

2.在编辑坐席组页面可以修改坐席组**名称**，**分配策略**，**状态**以及相关的**描述**。单击**确认**完成编辑。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/image-1772264914373.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/image-1772264914373.png)

#### 删除坐席组

在坐席组列表页面中找到要删除的坐席组，单击该坐席组操作列的**删除**，在弹出的对话框中单击**确认**，即可删除该坐席组。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/image-1772264071323.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/image-1772264071323.png)

> ⚠️ **重要** 如果删除的坐席组绑定了IVR流程，客户电话在该IVR转人工到该坐席组后，将没有人接听。

# 回调配置

在本文中，您将学习如何设置回调URL，以便接收来自语音业务平台的关键事件通知，例如呼叫状态变更、话单生成、录音文件就绪等。

#### 功能入口

1.登录呼叫中心控制台，在左侧导航栏选择**语音-&gt;设置-&gt;系统设置**

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1772417180804.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1772417180804.png)

2.在设置页面中，您会看到 **回调配置** 和 **安全配置** 两个 Tab 标签，点击 **回调配置**。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1772418097649.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1772418097649.png)

#### 配置项说明

- **话单推送地址**：用于接收通话计费话单数据。
- **状态推送地址**：用于接收实时呼叫状态事件（如振铃、接通、挂断等）。
- **预测式任务状态回调**：用于接收预测外呼任务的状态更新（如成功拨打、未接通等）。

> ⚠️ 回调地址必须为公网可访问的 HTTP/HTTPS URL，且能正确响应平台的 POST 请求。

#### 操作步骤

1. 在对应字段中填写您的回调 URL。
2. 点击 **保存**，完成配置。

平台将在相关事件触发时，自动向您配置的地址推送 JSON 格式的通知。

# IVR设置

本文详细介绍了 IVR 的创建与配置过程，并对 IVR 各项交互参数的功能进行了全面阐述。

### 功能概述

IVR（Interactive Voice Response，交互式语音应答）用于在客户呼入时提供自助语音服务。通过配置 IV 规则，系统可根据用户按键自动播放相应语音内容，实现如营业时间播报、业务引导等基础服务，无需人工介入。

### 功能入口

1.登录呼叫中心控制台，在左侧导航栏选择 **语音 &gt; IVR管理 &gt; IVR设置**，可查看已创建的 IVR 规则列表。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1772421047794.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1772421047794.png)

### 功能介绍

#### 创建与基础配置 IVR

##### 创建 IVR

1.进入 IVR 管理界面，点击 **添加**，打开 IVR 创建页面。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1772421696981.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1772421696981.png)

2.在IVR创建界面，填写 IVR 配置信息，点击 **确认** 完成创建。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1772421806910.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1772421806910.png)

- 名称：必填项，用于标识该 IVR 规则，支持 1–64 个字符（如“客服热线主IVR”）。
- 确认按键：指定用户输入结束后需按的确认键（如 #），留空表示无需确认，系统自动识别输入结束。
- 超时设置(秒)：首次等待用户按键的最大时长，默认为 1 秒，范围建议 1–30 秒。
- 按键超时(秒)：两次按键之间的最大间隔时间，默认为 1 秒，超时视为输入结束。
- 按键最大尝试次数：用户连续输入无效或超时后允许重试的次数，默认为 0（即不重试，失败后直接播放结束语音）。
- 按键长度限制：允许输入的最小与最大位数（格式如 4-6），默认为 0 表示不限制长度。
- 欢迎语音文件标识：用户接入后首先播放的语音（如“欢迎致电XXX”），需从已上传的语音素材中选择。
- 按键提示语音文件标识：提示用户按键的语音（如“按1查询营业时间”），需提前上传。
- 无效按键提示语音文件标识：当用户输入不符合规则时播放的提示音（如“您输入的号码无效”）。
- 结束语音文件标识：IVR 流程结束前播放的收尾语音（如“感谢您的来电”）。
- 备注：可选，用于记录 IVR 的用途、适用场景或维护人信息。

⚠️ 注意：所有语音文件需先在 语音素材管理 中上传并获取唯一标识，方可在此处选择使用。

##### 编辑 IVR

1.在 IVR 列表中，点击目标 IVR 操作列的 **编辑**，进入编辑页面。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1774248196910.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1774248196910.png)

2.在弹出的IVR界面修改任意配置项（包括名称、超时参数、语音文件等），点击 **确认** 保存更改。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1774248236939.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1774248236939.png)

💡 配置修改后立即生效，已绑定的呼入号码将自动使用最新规则。

##### 删除 IVR

1.在 IVR 列表中，点击目标 IVR 操作列的 **删除**。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1774248332764.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1774248332764.png)

2.在弹出的确认对话框中点击 **确认**，即可删除该 IVR 规则。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1774248376409.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1774248376409.png)

⚠️ 重要：若该 IVR 已在 号码管理 中被呼入号码引用，请先解除绑定，否则可能导致呼入电话无法正常播放语音或直接挂断。

#### IVR 按键设置

##### 添加按键

1.在 IVR 设置列表页，点击操作栏 **按键**，打开按键配置页面。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1774248461003.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1774248461003.png)

2.在按键列表页面，点击**添加** 按钮，打开按键创建页面

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1774248936883.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1774248936883.png)

3.填写以下配置信息，点击 **确定** 完成按键添加。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1774248527055.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1774248527055.png)

- 按键数字：用户需要按下的数字（如 1）。
- 按键描述：简要描述该按键的作用（如“查询账户余额”）。

##### 编辑按键

1.在按键列表中，点击目标按键操作列的 **编辑**，进入编辑页面。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1774248639588.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1774248639588.png)

2.修改按键的相关配置（如按键数字、描述、语音文件等），点击 **确认** 保存更改。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1774248670502.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1774248670502.png)

##### 删除按键

1.在按键列表中，点击目标按键操作列的 **删除**。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1774248740054.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1774248740054.png)

2.在弹出的确认对话框中点击 **确认**，即可删除该按键。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1774248780402.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1774248780402.png)

⚠️ 注意：删除按键后，相关语音文件仍保留在系统中，但不再与该 IVR 关联。 补充说明 所有时间类参数单位均为 秒，数值过小可能导致用户体验不佳（如 1 秒超时易误判）。 若未配置“无效按键提示”或“结束语音”，系统将静默结束通话。 当前 IVR 仅支持单次按键输入响应，不支持多级菜单跳转。

# 分机账号管理

本文详细介绍了分机账号的状态控制、密码维护与生命周期管理过程，并对分机在软电话登录及通信安全中的作用进行了全面阐述。

### 功能概述

分机账号是语音业务平台中用于软电话登录的数字标识，由系统管理员预先创建。每个分机拥有独立的登录密码，用于身份认证。本页面支持查看分机基本信息、启用或停用状态、修改登录密码及删除分机等运维操作，确保通信资源安全可控。

### 功能入口

1.登录呼叫中心控制台，在左侧导航栏选择 **语音 &gt; 分机管理 &gt; 分机账号**，进入分机账号列表页面。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1772442966513.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1772442966513.png)

### 功能介绍

#### 查看分机信息

在分机账号列表中，可查看以下字段：

- 分机号码：4–8 位数字，唯一标识；
- 分机名称：管理员设置的可读名称；
- 分机密码：登录软电话的认证凭证；
- 启用状态：
    
    
    - 启用：允许登录；
    - 禁用：禁止登录；
- 是否手拨：开启后，可以直接使用软电话拨号键盘进行拨打；
- 是否录音：该分机发起或接听的通话是否自动录音；
- 注册状态：
    
    
    - 已注册：软电话在线；
    - 未注册：离线或未登录；
- 注册时间：最近一次成功注册的时间；
- 注册节点：分机当前连接的媒体服务器节点；
- 客户端IP：软电话所在设备的公网 IP；
- 客户端名称：软电话客户端类型（如 “WebRTC”、“Windows Client v2.1”）；
- 创建时间：分机创建时间（只读）

#### 编辑分机账号

1.在分机账号列表中，点击目标分机操作列的 **编辑**，进入编辑页面。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1772444160269.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1772444160269.png)

2.在弹出的编辑页面，可对分机名称、是否录音、是否直拨、分机状态进行修改，点击**确认**保存更改。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1772444284603.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1772444284603.png)[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1772444214405.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1772444214405.png)

#### 删除分机账号

1.在分机账号列表中，点击目标分机操作列的**删除**。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1772444514692.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1772444514692.png)

2.在弹出的确认对话框中点击 **确认**，完成删除。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1772448482576.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1772448482576.png)

⚠️ 重要：仅当分机处于 停用状态 且 无活跃通话或任务关联 时，才允许删除。若正在使用，系统将提示“该分机正在被使用，无法删除”。

# 录音文件管理

本文详细介绍了外呼语音录音文件的上传与维护过程，并对格式规范及使用规则进行了全面阐述。

### 功能概述

录音文件用于自动外呼任务中播放预录话术（如通知、提醒）。通过上传标准音频文件，系统将其纳入素材库，供外呼任务调用。

### 功能入口

登录呼叫中心控制台，在左侧导航栏选择 **语音 &gt; 语音资源 &gt; 录音文件管理**，进入管理页面。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1772607594374.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1772607594374.png)

### 功能介绍

#### 上传录音文件

1.在录音文件管理页面，点击 **添加** 按钮；

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1772607650796.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1772607650796.png)

2.在弹出窗口中填写以下信息：

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1772607703099.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1772607703099.png)

- 语音名称：必填项，建议包含业务场景与版本（如“3月还款提醒\_V2”），1–20 个字符；
- 音频文件：点击 选择文件，上传本地 .mp3 或 .wav 文件；
- 备注：可选，用于说明适用渠道或有效期，最多 100 个字符； 点击 确定 完成上传。

⚠️ 格式要求：

- 音频格式：MP3（推荐）或 WAV
- 采样率：8000 Hz
- 声道：单声道
- 时长：不超过 60 秒
- 文件大小：不超过 1MB

不符合要求的文件将上传失败。

#### 编辑录音文件信息

1.在录音文件列表中，找到目标文件，点击操作列的 **编辑**；

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1772616516583.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1772616516583.png)

2.在编辑窗口中，可修改：

- 语音名称
- 描述

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1772616564482.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1772616564482.png)

点击 **确认** 保存更改。

⚠️ 注意：已上传的音频文件内容不可替换，仅支持修改元数据（名称、描述）。

#### 试听录音文件

1.在录音文件列表中，点击目标文件操作列的 **播放** 按钮；

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1772616652147.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1772616652147.png)

2.系统将在页面内嵌播放器中播放该录音；

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1772616710775.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1772616710775.png)

可通过播放器控制暂停、播放速度以及下载。

💡 建议上传后立即试听，确认音质、语速、内容无误后再用于外呼任务。

#### 删除录音文件

1.在录音文件列表中，点击目标文件操作列的 **删除**；

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1772616795889.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1772616795889.png)

2.在弹出的确认对话框中，点击 **确认**；

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1772616847540.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1772616847540.png)

若删除成功，文件将从列表中移除。

⚠️ 重要：仅当该录音文件 未被任何自动外呼或预测式外呼任务引用时，才允许删除。若已被使用，系统将提示：“该录音正在被使用，无法删除”。

# 通话记录查询

本文详细介绍了呼叫中心通话记录查询与管理功能的操作流程，并对筛选条件、字段含义及录音操作进行了全面阐述。

### 功能概述

通话记录功能用于实时查询和历史回溯所有进出呼叫的详细数据，适用于话务质检、业务核对及纠纷处理场景。用户可灵活组合时间、分机、号码及呼叫状态等多维条件进行检索，支持在线播放录音、下载音频文件及查看转写文本，所有记录均纳入系统日志供长期追溯。

### 功能入口

登录呼叫中心控制台，在左侧导航栏选择 **通话 &gt; 通话记录（或 报表 &gt; 通话明细）**，进入管理页面。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1774410358683.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1774410358683.png)

### 功能介绍

#### 查询通话记录

在通话记录页面，顶部筛选栏提供以下配置项：

- 呼叫时间：必选项，支持选择起止日期范围（如“最近24小时”、“自定义时间段”），系统将仅展示该范围内的数据； > 💡 呼叫时间的智能时区说明：
    > 
    > 系统会根据您的使用情况，自动为您处理时间，无需手动换算时差：
    > 
    > 
    > - **本地使用时（自动识别）**：如果您就在当地（如墨西哥用户），系统会自动识别您的当地时区，搜索栏会默认显示并自动填充您当地当前的起始时间，也就是“今天”的开始结束时间。
    > - **跨时区查看时（手动切换）**：系统登录时默认展示的是您当前所在时区的当天（“今天”）的起止时间。如果您需要查看账号所在地区（如墨西哥）的数据，只需在顶部切换到“墨西哥时区”，系统就会自动帮您“倒时差”，将搜索框的默认时间切换为墨西哥当地当天（“今天”）的起止时间。
    > - **查询历史数据时（原样保留）**：无论是本地还是跨时区，只要您查询的是过去的历史数据，系统都不会自作主张。您选了哪天、哪个时间，它就原封不动地按该时间去查。
- 分机号码：可选项，输入具体分机号可筛选该坐席的所有通话；
- 主叫/被叫号码：可选项，输入完整或部分电话号码，模糊匹配相关记录；
- 呼叫类型：下拉选择，支持 手拨、接口呼叫、双呼、预测式外呼 或 IVR自助呼叫；
- 呼叫方向：下拉选择 呼入、呼出通话；
- 呼叫状态：下拉选择 已接通、未接通,快速定位特定结果的话务；
- 设定好上述条件后，点击 **查询** 按钮，下方列表将即时刷新显示匹配结果。

查询结果列表中，每条记录包含以下核心字段：

基础信息：主叫号码、被叫号码、占用分机号、呼叫方向（呼入/呼出）；

业务属性：呼叫类型（如预测外呼）、挂断方向（主叫挂/被叫挂）、双方IP地址；

时间维度：

- 呼叫时间：发起呼叫的时刻；
- 应答时间：对方接起电话的时刻；
- 结束时间：通话挂断的时刻；
- 等待时长：从振铃到接起的耗时；
- 通话时长：实际沟通的持续时间（秒/分）。

#### 在线播放录音

在通话记录列表页面，选择对应条目操作列的**播放**按钮。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1774410790871.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1774410790871.png)

系统将在浏览器新打开一个页面弹出音频播放器；

用户可直接收听该通电话的完整录音；

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1774410847416.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1774410847416.png)

#### 下载录音文件

在通话记录列表页面，选择对应条目操作列的**下载**按钮,浏览器将立即启动文件下载任务。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1774410946641.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1774410946641.png)

系统将把该条记录的音频文件（格式通常为 WAV 或 MP3）保存至用户本地的默认下载文件夹； 用户可在本地使用任意媒体播放器离线收听或归档保存。

#### 语音转文本

在通话记录列表页面，选择对应条目操作列的 **转文本（或“查看文字”)** 按钮,

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1774411122828.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1774411122828.png)

在弹出的文本框窗口选择需要转换的语言。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1774411230260.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1774411230260.png)

点击**确认**系统将自动调用 ASR（语音识别）引擎，调取该段录音对应的识别结果；

识别完成之后可在**通话 &gt; 录音识别记录** 列表进行查看。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1774411400173.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1774411400173.png)

⚠️ 操作注意：

若录音文件尚未完成上传或转码（通常通话结束后1-5分钟内），播放或下载按钮可能暂时置灰或提示“资源准备中”；

语音转文本功能的准确性受通话音质、口音及背景噪音影响，仅供参考，具体以录音为准；

下载和查看录音需具备相应的数据权限，无权限用户将无法看到操作按钮。

#### 导出数据（可选）

在通话记录页面，点击列表上方的 导出 按钮，系统提供两种导出模式以应对不同数据量场景：

##### 同步导出（适用于小数据量）

若当前筛选条件下的记录数较少（如少于 1000 条），系统将直接执行同步导出；

点击通话列表上方的 **导出** 按钮；

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1774411533388.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1774411533388.png)

浏览器将立即弹出文件下载对话框；

用户可即时获取包含所有字段信息（含时间、号码、时长等）的 CSV 文件，方便离线分析或存档；

⚠️ 注意：若数据量较大，同步导出可能因网络超时导致失败，此时建议切换至异步导出。

##### 异步导出（适用于大数据量）

###### **创建任务**

点击通话列表上方的 **后台导出** 按钮；

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1774411723534.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1774411723534.png)

系统将在后台生成导出任务，并提示“任务已创建，请前往任务中心查看进度”，页面不会卡死或超时。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1774419949670.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1774419949670.png)

###### **查看进度**

在左侧导航栏找到 **通话 &gt; 任务中心（或“导出任务管理”）** 入口并点击进入；

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1774411787981.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1774411787981.png)

在任务列表中找到刚才创建的导出任务；

查看 **状态**列，实时显示任务进度（如“排队中”、“生成中 50%”、“已完成”或“失败”）。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1774419743912.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1774419743912.png)

###### **下载文件**

当任务状态变为 **已完成** 时，操作列的 **下载** 按钮将被激活；

点击 **下载**，系统将把生成的完整数据文件保存至本地；

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1774411859594.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1774411859594.png)

支持多次下载，文件通常在任务完成后保留 2 小时（依系统配置而定），过期后自动清理。

⚠️ 格式要求：

最大行数：单次异步导出任务通常支持最多 10 万 -50 万条记录（具体视系统配置）；

文件有效期：异步生成的文件并非永久存储，请及时下载，避免过期丢失；

并发限制：同一用户同时进行的异步导出任务数量可能有限制（如最多 3 个），超出需等待其他任务完成。

⚠️ 注意事项

权限控制：普通坐席通常仅能查看本人分机的通话记录，管理员或质检员可查看全中心数据；

录音延迟：通话结束后，录音文件上传及转码可能需要1-5分钟延迟，期间可能暂时无法播放或下载；

存储周期：录音文件及详细记录通常保留3-6个月（具体依公司策略而定），过期后可能自动清除或归档至冷存储；

# Extension Account Management

This document provides a detailed guide on managing extension account status, maintaining passwords, and handling the full account lifecycle. It also comprehensively explains the critical role extensions play in softphone login and communication security.

### Feature Overview

An extension account serves as a digital identifier for softphone login within the voice service platform and is pre-created by system administrators. Each extension has a unique login password for identity authentication. This page supports various operational and maintenance (O&amp;M) tasks, including viewing basic extension information, enabling or disabling accounts, changing login passwords, and deleting extensions, ensuring that communication resources remain secure and under control.

### Accessing the Feature

Log in to the Call Center Console. In the left navigation pane, select **Voice &gt; Agents &gt; Agent Accounts** to access the extension account list page.

[![](https://document.infin8linx.com/uploads/images/gallery/2026-07/scaled-1680-/image-1782959258962.png)](https://document.infin8linx.com/uploads/images/gallery/2026-07/image-1782959258962.png)

### Feature Introduction

#### Viewing Extension Information

In the extension account list, you can view the following fields:

- Extension Number: A 4–8 digit unique identifier.
- Extension Name: A readable name set by the administrator.
- Extension Password: The authentication credential for logging in to the softphone.
- Status:Enabled: Login is allowed.
- Disabled: Login is prohibited.
- Manual Dialing: When enabled, you can directly make calls using the softphone's dial pad.
- Call Recording: Indicates whether calls initiated or received by this extension are automatically recorded.
- Registration Status:Registered: The softphone is online.
- Unregistered: The softphone is offline or not logged in.
- Registration Time: The timestamp of the most recent successful registration.
- Registration Node: The media server node to which the extension is currently connected.
- Client IP: The public IP address of the device where the softphone is located.
- Client Name: The type of softphone client (e.g., "WebRTC", "Windows Client v2.1").
- Creation Time: The time when the extension was created (read-only).

#### Editing an Extension Account

1.In the extension account list, click **Edit** button in the Actions column for the target extension to go to the edit page.

[![](https://document.infin8linx.com/uploads/images/gallery/2026-07/scaled-1680-/image-1782959508100.png)](https://document.infin8linx.com/uploads/images/gallery/2026-07/image-1782959508100.png)

2.On the pop-up edit page, you can modify the extension name, call recording settings, manual dialing settings, and extension status. Click Confirm to save the changes.

[![](https://document.infin8linx.com/uploads/images/gallery/2026-07/scaled-1680-/image-1782959899913.png)](https://document.infin8linx.com/uploads/images/gallery/2026-07/image-1782959899913.png)

#### Deleting an Extension Account

1.In the extension account list, click **Delete** button in the Actions column for the target extension.

[![](https://document.infin8linx.com/uploads/images/gallery/2026-07/scaled-1680-/image-1782960155647.png)](https://document.infin8linx.com/uploads/images/gallery/2026-07/image-1782960155647.png)

2.In the confirmation dialog box, click **Confirm** to complete the deletion.

[![](https://document.infin8linx.com/uploads/images/gallery/2026-07/scaled-1680-/image-1782960241657.png)](https://document.infin8linx.com/uploads/images/gallery/2026-07/image-1782960241657.png)

# 关键词规则

本文详细介绍了语音质检模块中关键词匹配规则的配置与管理机制，重点阐述了系统默认词库与自定义规则的协同工作逻辑，确保质检分析能够精准覆盖通用场景及特定业务需求。

## 功能概述

关键词规则是语音质检进行意图识别与内容分析的基础依据。系统采用 **“系统默认 + 用户自定义”** 的叠加匹配策略：

- **系统默认规则**：平台预置的通用关键词库（如语音信箱识别词），无需配置即可生效，保障基础质检能力。
- **自定义规则**：支持管理员根据实际业务场景添加特定的业务术语或敏感词。

当用户配置自定义规则后，系统将同时加载默认词库与自定义列表进行综合匹配，实现对录音内容的全面覆盖。

## 功能入口

1. 登录后台管理系统，在左侧导航栏选择 **语音质检 &gt; 关键词规则**，进入规则配置页面。 [![](https://document.infin8linx.com/uploads/images/gallery/2026-08/scaled-1680-/image-1787887573463.png)](https://document.infin8linx.com/uploads/images/gallery/2026-08/image-1787887573463.png)

## 功能介绍

### 规则模式说明

页面顶部提供两种规则来源的展示与配置入口：

- **系统默认**：显示平台统一维护的基础关键词库。该部分内容为只读状态，旨在提供通用的业务识别能力（例如自动识别印尼语等语种的“语音信箱”、“反垃圾”等常用术语），用户无需自行配置即可直接使用。
- **自定义**：支持用户完全使用自己的关键词列表。在此处配置的词条将与系统默认词库**共同生效**（即：最终匹配逻辑 = 系统默认词库 + 自定义词库），用于覆盖特定的业务场景或个性化质检需求。 [![](https://document.infin8linx.com/uploads/images/gallery/2026-08/scaled-1680-/image-1787887869777.png)](https://document.infin8linx.com/uploads/images/gallery/2026-08/image-1787887869777.png)

### 查看系统默认词（只读）

在“系统默认词”区域，可查看当前平台预置的所有基础关键词信息，主要包含以下字段：

- **标签分类**：关键词所属的业务类别（如“语音信箱”），右侧数字代表该类别下的词条数量。
- **语言**：关键词所属的语种（如“印尼语”），用于区分多语言环境下的匹配逻辑。
- **关键词**：具体的匹配文本内容（如 "tekan", "anti spam" 等）。

### 配置自定义规则

1. 在“自定义”区域，点击 **添加**，进入编辑状态。 [![](https://document.infin8linx.com/uploads/images/gallery/2026-08/scaled-1680-/image-1787887623699.png)](https://document.infin8linx.com/uploads/images/gallery/2026-08/image-1787887623699.png)
2. 输入需要新增的业务关键词，并选择对应的语言或分类。 [![](https://document.infin8linx.com/uploads/images/gallery/2026-08/scaled-1680-/image-1787887694481.png)](https://document.infin8linx.com/uploads/images/gallery/2026-08/image-1787887694481.png)
3. 点击 **保存**，新规则将立即加入匹配队列，与系统默认词库并行工作。 [![](https://document.infin8linx.com/uploads/images/gallery/2026-08/scaled-1680-/image-1787887720814.png)](https://document.infin8linx.com/uploads/images/gallery/2026-08/image-1787887720814.png)

> ️ **重要：**自定义规则采用**增量叠加**模式，而非覆盖模式。配置自定义规则**不会**导致系统默认的基础识别能力失效，请放心配置特定业务词汇以增强质检效果。

# 回调管理 - 查看回调

#### 接口说明

用于查看账号配置的回调地址

#### 请求方式

POST，form-data格式

#### 请求参数

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E6%98%AF%E5%90%A6%E5%BF%85%E9%A1%BB-%E8%AF%B4%E6%98%8E-servi"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">是否必须</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">service</td><td align="left">string</td><td align="left">是</td><td align="left">App.Sip\_Ywconfig.getYwConfigInfo</td></tr><tr><td align="left">token</td><td align="left">string</td><td align="left">是</td><td align="left">通过授权接口获取的token</td></tr><tr><td align="left">name</td><td align="left">string</td><td align="left">否</td><td align="left">record 预测任务, callstatus 通话状态, cdr 通话记录</td></tr><tr><td align="left">disabled</td><td align="left">string</td><td align="left">否</td><td align="left">状态：0启用、1禁用、2全部</td></tr></tbody></table>

#### 接口请求示例（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Ywconfig.getYwConfigInfo',
        'token'     => 'ABCDEFG',
        'name'  => 'record'
    ];
    $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": {
            "configs": [
                {
                    "id": 225,
                    "createtime": "2020-04-05 12:24:49",
                    "updatetime": "2020-04-05 12:24:49",
                    "disabled": 0,
                    "company_id": 0,
                    "companycode": "9002",
                    "groups": "pushurl",
                    "name": "cdr",
                    "value": "http://47.110.35.200:9103/services/out/call/callback",
                    "mark": "话单推送地址"
                },
                {
                    "id": 226,
                    "createtime": "2020-04-05 12:24:49",
                    "updatetime": "2020-04-05 12:24:49",
                    "disabled": 0,
                    "company_id": 0,
                    "companycode": "9002",
                    "groups": "pushurl",
                    "name": "callstatus",
                    "value": "",
                    "mark": "状态推送地址"
                },
                {
                    "id": 227,
                    "createtime": "2020-04-05 12:24:49",
                    "updatetime": "2026-09-17 17:51:14",
                    "disabled": 0,
                    "company_id": 0,
                    "companycode": "9002",
                    "groups": "pushurl",
                    "name": "record",
                    "value": "http://127.0.0.1/callback",
                    "mark": "预测任务回调"
                }
            ]
        },
        "reqtime": 1789640375,
        "rsptime": 1789640375
    },
    "msg": ""
}


```

#### 返回参数说明

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-result-obj"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">result</td><td align="left">object</td><td align="left">对象类型</td></tr><tr><td align="left">configs</td><td align="left">array</td><td align="left">数组类型</td></tr></tbody></table>

# 挂机短信任务

#### **请求URL**

- `https://{domain}/hangupSms/task`

#### **请求方式**

- POST

#### **请求参数**

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E5%BF%85%E9%80%89-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-appid-%E6%98%AF"><thead><tr><th align="left">参数名</th><th align="left">必选</th><th align="left">类型</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">appid</td><td align="left">是</td><td align="left">string</td><td align="left">鉴权 appid</td></tr><tr><td align="left">accesskey</td><td align="left">是</td><td align="left">string</td><td align="left">鉴权 accesskey</td></tr><tr><td align="left">name</td><td align="left">是</td><td align="left">string</td><td align="left">任务名称</td></tr><tr><td align="left">destnumber</td><td align="left">是</td><td align="left">string</td><td align="left">接收验证码的手机号不需要加国别号码，例如完整号码为：`00628123456789`，则直接以 `8123456789` 请求即可。</td></tr><tr><td align="left">voicefile</td><td align="left">是</td><td align="left">string</td><td align="left">可以在线访问的录音文件地址</td></tr><tr><td align="left">answered\_sms\_tpl</td><td align="left">可选，但不能与 no\_answer\_sms\_tpl 同时为空</td><td align="left">string</td><td align="left">用户接听使用的短信模板id</td></tr><tr><td align="left">no\_answer\_sms\_tpl</td><td align="left">可选，但不能与 answered\_sms\_tpl 同时为空</td><td align="left">string</td><td align="left">用户未接听使用的短信模板id</td></tr><tr><td align="left">start\_time</td><td align="left">是</td><td align="left">string</td><td align="left">任务开始时间(北京时间)</td></tr></tbody></table>

#### **请求示例**

```
{
    "appid":"xxxxxx",
    "accesskey":"xxxxx",
    "name":"test1132383",
    "start_time":"2026-10-20 15:53:00",
    "voicefile":"https://xxxx/offlineSound/playback?filename=Tips.mp3",
    "destnumber":"822xxx998",
    "answered_sms_tpl":"",
    "no_answer_sms_tpl":"81"
}

```

#### **返回示例**

```
{
    "code": 0,
    "msg": "operation succeeded",
    "data": {
        "task_id": "4556",
        "count": 1
    }
}

```

#### **返回参数说明**

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-code-int-%E8%BF%94"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">code</td><td align="left">int</td><td align="left">返回码 0 成功 其他为失败</td></tr><tr><td align="left">msg</td><td align="left">string</td><td align="left">返回信息</td></tr><tr><td align="left">data</td><td align="left">object</td><td align="left">返回数据</td></tr></tbody></table>

# 预测式外呼简介

# 预测式外呼

### 概述
预测式外呼（Predictive Dialing） 是一种智能自动拨号技术，广泛应用于呼叫中心的外呼业务中。

系统通过算法预测客服代表何时将结束当前通话并空闲下来，提前自动拨打多个电话号码，并在后台自动过滤忙音、语音信箱、无人接听等无效通话，仅将由真人接听的有效电话转接给可用坐席。

这种方式能显著减少客服的等待时间，最大化坐席利用率，特别适合高频、大批量的外呼场景，如营销推广、客户回访或催收通知。

### 工作原理

多线拨打：系统根据坐席的工作状态和历史通话数据，同时拨打多个电话号码。

筛选有效通话：过滤掉忙音、语音信箱、无人接听等无效通话，只将成功接通的真人通话转接到可用的客服代表处。

动态调整：实时监控通话情况和坐席状态，灵活调整拨号速度，以保持高效率同时避免因过多未及时转接导致的客户不满。

### 预测式外呼的优势

提升效率：通过减少客服人员的空闲时间，使他们可以处理更多的电话。

降低成本：提高了每个客服代表的工作效率，减少了需要雇佣的客服人数。

增强客户体验：确保每次通话都能迅速连接到合适的客服人员，提供更专业的服务。
应用场景

# Call Recording

test

# Common API - call record callback parameters

# call record callback parameters

Bill callback needs to be configured with a callback address for the corresponding account. Callback address configuration of bills: The customer provides an interface address that can receive json data, which can be configured by us or configured by the customer in the background.

#### Call record callback data format json

```
{
    "callmethod": 3, 
    "starttime": "2018-03-14 12:18:21", 
    "answertime": "", 
    "endtime": "2018-03-14 12:18:35",  
    "duration": 14,  
    "billsec": 0, 
    "crmid": "2001", 
    "hangupdirection": 10015, 
    "chengshudu": "0", 
    "hangupcause": 10001, 
    "memberid": "18533700187590656",  
    "disnumber": "02566823420",  
    "destnumber": "015029913692",  
    "downloadip": "120.76.152.137", 
    "recordfilename": "",  
    "companycode": 20000013,  
    "type": "callout",  
    "id": 982, 
    "extnumber": "7003" 
    "uuid": "cda5c6c4-0a17-11e8-b177-e7cbf2bd1f36" 
    "userkey":1  
    "customuuid": "customuuid"  
}


```

#### Description of Call Record Callback Parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th align="left">parameter name</th><th align="left">type</th><th align="left">illustrate</th></tr></thead><tbody><tr><td align="left">callmethod</td><td align="left">int</td><td align="left">Call method: 0, unlimited; 1, mutual extension dial; 2, extension direct dial (manual dial); 3, API call (default); 4, API double call; 5, predictive outbound call; 6, IVR/group call .</td></tr><tr><td align="left">starttime</td><td align="left">string</td><td align="left">call time</td></tr><tr><td align="left">answertime</td><td align="left">string</td><td align="left">response time</td></tr><tr><td align="left">endtime</td><td align="left">string</td><td align="left">call end time</td></tr><tr><td align="left">duration</td><td align="left">int</td><td align="left">call waiting time</td></tr><tr><td align="left">billsec</td><td align="left">int</td><td align="left">call time</td></tr><tr><td align="left">crmid</td><td align="left">string</td><td align="left">employee number</td></tr><tr><td align="left">hangupdirection</td><td align="left">int</td><td align="left">On-hook direction</td></tr><tr><td align="left">chengshudu</td><td align="left">string</td><td align="left">Custom Parameters - Maturity</td></tr><tr><td align="left">hangupcause</td><td align="left">int</td><td align="left">Hangup Reason Code</td></tr><tr><td align="left">memberid</td><td align="left">string</td><td align="left">Custom parameter - member id</td></tr><tr><td align="left">disnumber</td><td align="left">string</td><td align="left">calling number</td></tr><tr><td align="left">destnumber</td><td align="left">string</td><td align="left">called number</td></tr><tr><td align="left">downloadip</td><td align="left">string</td><td align="left">recording download ip</td></tr><tr><td align="left">recordfilename</td><td align="left">string</td><td align="left">recording file name</td></tr><tr><td align="left">companycode</td><td align="left">string</td><td align="left">company id</td></tr><tr><td align="left">type</td><td align="left">string</td><td align="left">call type</td></tr><tr><td align="left">extnumber</td><td align="left">string</td><td align="left">Ext</td></tr><tr><td align="left">uuid</td><td align="left">string</td><td align="left">call uuid</td></tr><tr><td align="left">userkey</td><td align="left">string</td><td align="left">user button</td></tr><tr><td align="left">customuuid</td><td align="left">string</td><td align="left">Custom parameter - customer id</td></tr></tbody></table>

# 接口说明

**重要说明：**

1. 发送内容(utf8编码)需转换为16进制码再发送，例如 "你好" 转为 "e4bda0e5a5bd" [跳转到示例代码](/books/message-cn-api/page/java16#2)
2. 手机号需加上国际区码（如：00628131565741）
3. pwd 加密规则为：md5(spid+"00000000"+"明文密码"+timestamp) 如：
    
    md5前：testspid00000000testpwd1601029303
    
    md5后：a14e201f22aafbae74c4d72030ad5a8d

# 通用API - 分机话务统计

#### 接口说明

按分机号汇总或按天统计指定时间范围内的呼叫量、接通率和通话时长

#### 请求参数

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E6%98%AF%E5%90%A6%E5%BF%85%E9%A1%BB-%E8%AF%B4%E6%98%8E-servi"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">是否必须</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">service</td><td align="left">string</td><td align="left">是</td><td align="left">App.Sip\_Cdr.GetExtStats</td></tr><tr><td align="left">token</td><td align="left">string</td><td align="left">是</td><td align="left">通过授权接口获取的token</td></tr><tr><td align="left">starttime</td><td align="left">string</td><td align="left">是</td><td align="left">统计起始时间，格式：yyyy-mm-dd hh:mm:ss，时间范围最长31天</td></tr><tr><td align="left">endtime</td><td align="left">string</td><td align="left">是</td><td align="left">统计结束时间，格式：yyyy-mm-dd hh:mm:ss，时间范围最长31天</td></tr><tr><td align="left">extnumber</td><td align="left">string</td><td align="left">否</td><td align="left">分机号，多个分机号用英文逗号隔开；留空统计全部坐席</td></tr><tr><td align="left">granularity</td><td align="left">string</td><td align="left">否</td><td align="left">统计粒度：total时间范围汇总、day按天统计</td></tr><tr><td align="left">currentpage</td><td align="left">int</td><td align="left">否</td><td align="left">页数，默认：1</td></tr><tr><td align="left">itemsperpage</td><td align="left">int</td><td align="left">否</td><td align="left">每页数量，默认：10，最小：1；最大：1000</td></tr></tbody></table>

#### 接口请求示例（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Cdr.GetRecodeFile',
        'token'     => 'ABCDEFG',
        'starttime'  => 'yyyy-mm-dd hh:mm:ss',
        'endtime'  => 'yyyy-mm-dd hh:mm:ss',
        'extnumber'  => '121212',
        'granularity'  => 'day',
    ];
    $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": "success",
        "result": {
            "totalitems": 1,
            "currentpage": 1,
            "itemsperpage": 20,
            "stats": [
                {
                    "extnumber": "90020002",
                    "total_calls": 1,
                    "answered_calls": 0,
                    "unanswered_calls": 1,
                    "answer_rate": 0,
                    "total_talk_seconds": 0,
                    "avg_talk_seconds": 0,
                    "avg_wait_seconds": 18
                }
            ]
        },
        "reqtime": 1788932971,
        "rsptime": 1788932972
    },
    "msg": ""
}


```

#### 返回参数说明

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-result-obj"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">result</td><td align="left">objest</td><td align="left">返回的结果集</td></tr></tbody></table>

# 批量IVR - 批量呼出ivr语音(过时）

#### 接口说明

对于需要播放同一个IVR语音内容的不同号码，可以使用此接口批量呼出，单次提交不要超过5000个号码。

#### 请求方式

POST，form-data格式

#### 请求URL

[http://ivr.infin8linx.com/yunhu](http://ivr.infin8linx.com/yunhu)

#### 请求参数

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E6%98%AF%E5%90%A6%E5%BF%85%E9%A1%BB-%E8%AF%B4%E6%98%8E-servi"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">是否必须</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">service</td><td align="left">string</td><td align="left">是</td><td align="left">App.Sip\_Call.PlayVoice</td></tr><tr><td align="left">appid</td><td align="left">string</td><td align="left">是</td><td align="left">授权appid</td></tr><tr><td align="left">accesskey</td><td align="left">string</td><td align="left">是</td><td align="left">授权accesskey</td></tr><tr><td align="left">destnumber</td><td align="left">string</td><td align="left">是</td><td align="left">目标号码，多个号码用“,”连接</td></tr><tr><td align="left">voicetype</td><td align="left">int</td><td align="left">是</td><td align="left">播放的语音文件类型。1:离线语音文件（自己录制的语音文件，上传到系统后台或者通过系统后台在线生成的）、2:在线语音(url) （提供一个可以访问的录音文件地址）</td></tr><tr><td align="left">voicefile</td><td align="left">string</td><td align="left">是</td><td align="left">voicetype=1 传后台的录音文件名；voicetype=2 传可以访问的语音url地址</td></tr><tr><td align="left">userkey</td><td align="left">int</td><td align="left">否</td><td align="left">是否需要用户按键，1:需要 0:不需要 默认0</td></tr><tr><td align="left">chengshudu</td><td align="left">string</td><td align="left">否</td><td align="left">客户自定义数据，在通话结束之后的回调数据中原样返回。</td></tr><tr><td align="left">disnumber</td><td align="left">string</td><td align="left">否</td><td align="left">主叫号码(显示在用户手机上的来电号码），留空则系统会随机取一个主叫号码</td></tr><tr><td align="left">customuuid</td><td align="left">string</td><td align="left">否</td><td align="left">客户自定义数据，在通话结束之后的回调数据中原样返回</td></tr><tr><td align="left">transfer</td><td align="left">int</td><td align="left">否</td><td align="left">是否转接到agent， 0不转、1转接，默认值为0，设置为转接agent不能为空</td></tr><tr><td align="left">agent</td><td align="left">string</td><td align="left">否</td><td align="left">坐席组或坐席号</td></tr><tr><td align="left">waittime</td><td align="left">int</td><td align="left">否</td><td align="left">呼叫等待时间，默认60s (秒)</td></tr><tr><td align="left">conntime</td><td align="left">int</td><td align="left">否</td><td align="left">呼叫通话时间, 播放多久后自动结束,默认60s (秒)</td></tr></tbody></table>

#### 接口请求示例（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Call.PlayVoice',
        'appid'     => 'ABCDEFG',
        'accesskey'     => 'ABCDEFG',
        'destnumber'  => '133，134，135，135',
        'voicetype'  => 'abcdefg',
        'voicefile'  => 'abcdefg',
        'chengshudu'  => 'abcdefg',
        'disnumber'  => 'abcdefg',
        'customuuid'  => 'abcdefg',
        'waittime'  => 60,
        'conntime'  => 60,
    ];
    $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);
?>


```

#### 返回数据结构示例

```
{
    "code": 200,
    "msg": "请求成功",
    "data": {
        "desc": "播放命令发送成功",
        "reqtime": 1588836407,
        "rsptime": 1588836407
    }
}


```

#### 返回参数说明

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-code-int-%E8%BF%94"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">code</td><td align="left">int</td><td align="left">返回码 200 成功</td></tr><tr><td align="left">msg</td><td align="left">string</td><td align="left">返回提示信息</td></tr><tr><td align="left">data</td><td align="left">object</td><td align="left">返回数据对象</td></tr><tr><td align="left">—desc</td><td align="left">string</td><td align="left">请求提示信息</td></tr><tr><td align="left">—reqtime</td><td align="left">int</td><td align="left">请求时间戳</td></tr><tr><td align="left">—rsptime</td><td align="left">int</td><td align="left">返回时间戳</td></tr></tbody></table>

# 错误码

<table id="bkmrk-error-code-error-exp"><thead><tr><th>Error Code</th><th>Error Explanation</th></tr></thead><tbody><tr><td>200</td><td>No error</td></tr><tr><td>404</td><td>Not found</td></tr><tr><td>422</td><td>Request parameter error</td></tr><tr><td>429</td><td>Too many attempts</td></tr><tr><td>500</td><td>Server error</td></tr><tr><td>10001</td><td>Certification code is invalid</td></tr><tr><td>10002</td><td>WhatsApp API error</td></tr><tr><td>10003</td><td>Viber API error</td></tr><tr><td>10004</td><td>RCS API error</td></tr></tbody></table>

# 发送 Viber 消息

### 域名

- https://chat-api.incsapp.com

### 请求路由

- /external/messages/viber

### 请求方式

- **POST**

### 请求头

- Content-Type: application/json
- certification-code: af92196e-0d07-3c1d-a631-a71c...

### 请求限流

- 单 Sender 最大 **5 rps** (每秒5请求)

### 请求参数

#### 请求参数列表

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E5%BF%85%E5%A1%AB-%E6%8F%8F%E8%BF%B0-to-stri"><thead><tr><th>参数名</th><th>类型</th><th>必填</th><th>描述</th></tr></thead><tbody><tr><td>to</td><td>string</td><td>是</td><td>收信人手机号，必须是国家码+手机号的纯数字格式，如 "8526841511234"</td></tr><tr><td>type</td><td>string</td><td>是</td><td>消息类型，支持 otp 和普通消息：text, image, video, document</td></tr></tbody></table>

- 每种消息需要的参数见请求示例

#### 请求示例

##### OTP 消息请求示例

```json
{
    "to": "85268411234",
    "type": "otp",
    "otp": {
        "code": "123456", // 验证码
        "language": "en", // 语言
        "code_expiration_minutes": 3 // 验证码失效时间
    }
}

```

##### text 消息示例

- 最大长度 1000 个字符

```json
{
    "to": "85268411234",
    "type": "text",
    "text": "Hello"
}

```

##### image 消息示例

- 支持类型：png, jpeg, jpg, gif
- 最大 200 MB

```json
{
    "to": "85268411234",
    "type": "image",
    "image": {
        "link": "https://incs-saas.oss-ap-southeast-1.aliyuncs.com/chat/images/header-98403274893.png"
    }
}

```

##### video 消息示例

- 支持类型：mp4
- 最大 200 MB
- 最长 10 分钟
- 视频链接响应头必须包含 'Content-Length' 参数

```json
{
    "to": "85268411234",
    "type": "video",
    "video": {
        "link": "https://incs-saas.oss-ap-southeast-1.aliyuncs.com/chat/videos/687710788353f.mp4"
    }
}

```

##### document 消息示例

- 支持类型：doc(x), xls(x), csv, pdf
- 最大 200 MB

```json
{
    "to": "85268411234",
    "type": "document",
    "document": {
        "link": "https://incs-saas.oss-ap-southeast-1.aliyuncs.com/chat/files/template.xls"
    }
}

```

### 响应

#### 成功响应示例

```json
{
    "status": "success",
    "code": 200,
    "message": "",
    "data": {
        "msg_id": "02cda2a2-2cb2-3c47-861c-ab91f5c9872e"
    },
    "error": {}
}

```

#### 失败响应示例

```json
{
    "status": "error",
    "code": 10003,
    "message": "Message failed \u2013 detailed reason unknown",
    "data": {},
    "error": {}
}

```

# 模板更新回调

### 回调地址

- **需要在 INCS 设置您的回调地址**

### 回调请求方式

- **POST**

### 回调内容

#### 参数列表

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E5%BF%85%E4%BC%A0-%E6%8F%8F%E8%BF%B0-event-s"><thead><tr><th>参数名</th><th>类型</th><th>必传</th><th>描述</th></tr></thead><tbody><tr><td>event</td><td>string</td><td>是</td><td>回调事件名称</td></tr><tr><td>channel\_id</td><td>int</td><td>是</td><td>INCS 消息通道 ID，对应创建该模板使用的通道</td></tr><tr><td>business\_phone</td><td>string</td><td>是</td><td>whatsapp business phone number</td></tr><tr><td>template\_id</td><td>string</td><td>是</td><td>模板ID</td></tr><tr><td>new\_value</td><td>string</td><td>是</td><td>对应的新值</td></tr><tr><td>reason</td><td>string</td><td>是</td><td>变更说明</td></tr><tr><td>received\_at</td><td>timestamp</td><td>是</td><td>变更时间</td></tr></tbody></table>

#### 回调事件

<table id="bkmrk-%E4%BA%8B%E4%BB%B6%E5%90%8D-%E6%8F%8F%E8%BF%B0-template_stat"><thead><tr><th>事件名</th><th>描述</th></tr></thead><tbody><tr><td>template\_status\_update</td><td>模板状态变更通知</td></tr><tr><td>template\_category\_update</td><td>模板类别变更通知</td></tr><tr><td>template\_quality\_update</td><td>模板质量评分变更通知</td></tr></tbody></table>

#### 回调示例

```json
// 状态更新
{
  "event": "template_status_update",
  "channel_id": 30058,
  "business_phone": "6281519236680",
  "template_id": "1287380349540668",
  "template_name": "tmp_test",
  "new_value": "APPROVED",
  "reason": "",
  "received_at": 1754466101
}
// 类别更新
{
  "event": "template_category_update",
  "channel_id": 30058,
  "business_phone": "6281519236680",
  "template_id": "1287380349540668",
  "template_name": "tmp_test",
  "new_value": "MARKETING",
  "reason": "",
  "received_at": 1754466101
}
// 质量评分更新
{
  "event": "template_quality_update",
  "channel_id": 30058,
  "business_phone": "6281519236680",
  "template_id": "1287380349540668",
  "template_name": "tmp_test",
  "new_value": "YELLOW",
  "reason": "",
  "received_at": 1754466101
}

```

# 预测式外呼 - 任务状态参数回调说明

#### 接口说明

**任务结束就会推送**

#### 回调方式

由客户提供一个可以接收json数据的接口地址，由我们配置或客户自行在后台配置都可以

#### 分机状态回调数据示例

```
{
	"taskid": "20260828142910757770",
	"companycode": "3562829",
	"status": 3,
	"round": 1,
	"endtype": "over"
}

```

#### 字段说明

<table id="bkmrk-%E5%AD%97%E6%AE%B5-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-taskid-stri"><thead><tr><th>字段</th><th>类型</th><th>说明</th></tr></thead><tbody><tr><td>taskid</td><td>string</td><td>任务id</td></tr><tr><td>companycode</td><td>string</td><td>公司编码</td></tr><tr><td>status</td><td>string</td><td>任务结束 3</td></tr><tr><td>round</td><td>string</td><td>轮次</td></tr><tr><td>endtype</td><td>string</td><td>结束类型 over 正常结束， timeout 任务截止结束</td></tr></tbody></table>

# 快速入门指南

本文详细介绍了首次使用云联络中心短信平台的基本流程，并对控制台登录、界面导航及核心短信功能入口进行了全面阐述。

### 功能概述

本指南帮助运营、营销或开发人员快速完成平台登录，并直达短信任务创建、发送状态查询、数据统计等关键功能，高效开展短信发送与监控工作。

### 访问与登录

1.在浏览器地址栏输入短信平台访问地址：

`https://sms-console.yourcompany.com`

（请向管理员获取实际地址）

[![](https://document.infin8linx.com/uploads/images/gallery/2025-08/scaled-1680-/image-1754878296837.png)](https://document.infin8linx.com/uploads/images/gallery/2025-08/image-1754878296837.png)

2.在登录页面中，依次填写：

- 账户名称：由管理员分配的用户名；
- 密码：初始密码或已修改的登录密码；
- 验证码：根据页面提示输入图形验证码；
- Google 验证器动态码（如已启用）：若您的账号已配置双因素认证，需额外输入 Google Authenticator 应用生成的 6 位动态验证码。

> ⚠️ Google 验证器仅在管理员为您的账号开启双因素认证后才会显示。若未启用，则无需填写。

[![](https://document.infin8linx.com/uploads/images/gallery/2025-08/scaled-1680-/image-1754878446498.png)](https://document.infin8linx.com/uploads/images/gallery/2025-08/image-1754878446498.png)

3.点击 **Submit** 按钮，完成登录。

⚠️ 若忘记密码，请联系系统管理员重置。

🔒 首次登录后，建议立即修改默认密码。

### 控制台概览

登录后，左侧导航栏包含以下短信相关模块：

- 短信 
    - 短信任务：创建批量发送任务
    - 发送详情：查询单条或多条发送状态
    - 发送数量统计：查看每日发送量、成功率、余额
    - 系统设置：用于配置号码脱敏等全局策略

### 执行您的第一个短信操作

推荐从以下任一任务开始：

1.创建 短信发送任务（路径：短信 &gt; 短信任务 &gt; 任务添加）

2.查询某号码的 发送状态（路径：短信 &gt; 发送详情）

3.查看昨日 发送统计报表（路径：统计 &gt; 发送数量统计）

💡 各功能的详细操作说明，请参阅本手册后续章节。

# 创建模板

### 域名

- https://api.incsapp.com

### 请求路由

- /external/templates

### 请求方式

- **POST**

### 请求头

- Content-Type: application/json
- certification-code: f484bd42-4a0c-39d....

### 请求参数

#### 请求参数列表

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E5%BF%85%E5%A1%AB-%E6%8F%8F%E8%BF%B0-name-st"><thead><tr><th>参数名</th><th>类型</th><th>必填</th><th>描述</th></tr></thead><tbody><tr><td>name</td><td>string</td><td>是</td><td>模板名称，最大长度100</td></tr><tr><td>language</td><td>string</td><td>是</td><td>语言code</td></tr><tr><td>category</td><td>string</td><td>是</td><td>模板类别：MARKETING，UTILITY</td></tr><tr><td>components</td><td>array</td><td>否</td><td>模板内容</td></tr></tbody></table>

#### 请求参数示例

```json
{
    "name": "test_api_2",
    "language": "en_US",
    "category": "MARKETING",
    "components": [
        {
            "type": "BODY",
            "text": "A API test template, first variable: {{1}}, second variable: {{2}}",
            "example": {
                "body_text": [
                    [1, 2]
                ]
            }
        },
        {
            "type": "FOOTER",
            "text": "Good night"
        }
    ]
}

```

### 响应

#### 成功响应示例

- 响应说明参见**模板资源说明**

```json
{
    "status": "success",
    "code": 200,
    "message": "",
    "data": {
        "template_id": "4166201267033543",
        "name": "test_api_2",
        "language": "en_US",
        "category": "MARKETING",
        "status": "REJECTED",
        "quality": "",
        "components": [
            {
                "type": "BODY",
                "text": "A API test template, first variable: {{1}}, second variable: {{2}}",
                "example": {
                    "body_text": [
                        [
                            1,
                            2
                        ]
                    ]
                }
            },
            {
                "type": "FOOTER",
                "text": "Good night"
            }
        ],
        "created_time": 1755076187,
        "updated_time": 1755076201,
        "status_updated_time": 0,
        "quality_updated_time": 0,
        "category_updated_time": 0
    },
    "error": {}
}

```

#### 失败响应示例

```json
{
    "status": "error",
    "code": 400,
    "message": "category require",
    "data": {},
    "error": {}
}

```

# 分机组管理 - 删除分机组

#### 接口说明

删除分机组

#### 请求方式

POST，form-data格式

#### 请求参数

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E6%98%AF%E5%90%A6%E5%BF%85%E9%A1%BB-%E8%AF%B4%E6%98%8E-servi"><thead><tr><th>参数名</th><th>类型</th><th>是否必须</th><th>说明</th></tr></thead><tbody><tr><td>service</td><td>string</td><td>是</td><td>App.Sip\_Extgroup.DelExtgroup</td></tr><tr><td>token</td><td>string</td><td>是</td><td>通过授权接口获取的token</td></tr><tr><td>name</td><td>string</td><td>是</td><td>分机组名</td></tr></tbody></table>

#### 接口请求示例（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Extgroup.DelExtgroup',
        'token'     => 'ABCDEFG',
        'name'  => '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":1581409781,
        "rsptime":1581409781
    },
    "msg":""
}

```

#### 返回数据字段说明

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-status-int"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">status</td><td align="left">int</td><td align="left">0修改成功，1修改失败</td></tr><tr><td align="left">desc</td><td align="left">string</td><td align="left">描述信息</td></tr><tr><td align="left">result</td><td align="left">object</td><td align="left">对象信息当前为空</td></tr></tbody></table>

# 分机管理 - 获取分机通话状态

#### 接口说明

获取用户拥有的分机列表信息。

#### 请求方式

POST，form-data格式

#### 请求参数

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E6%98%AF%E5%90%A6%E5%BF%85%E9%A1%BB-%E8%AF%B4%E6%98%8E-servi"><thead><tr><th>参数名</th><th>类型</th><th>是否必须</th><th>说明</th></tr></thead><tbody><tr><td>service</td><td>string</td><td>是</td><td>App.Sip\_Status.GetSipCallStatus</td></tr><tr><td>token</td><td>string</td><td>是</td><td>通过授权接口获取的token</td></tr><tr><td>extnumber</td><td>string</td><td>是</td><td>分机号，多个分机号用英文逗号隔开</td></tr></tbody></table>

#### 接口请求示例（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Status.GetSipCallStatus',
        'token'     => 'ABCDEFG',
        'extnumber'  => '100001'
    ];
    $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": [
            {
                "extnumber": "90170002",
                "status": 1014,
                "caller": null,
                "callee": null,
                "disnumber": null,
                "direction": null,
                "channel": null,
                "idleduration": null,
                "callduration": null
            }
        ],
        "reqtime": 1581506689,
        "rsptime": 1581506689
    },
    "msg": ""
}

```

#### 返回参数说明

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-result-arr"><thead><tr><th>参数名</th><th>类型</th><th>说明</th></tr></thead><tbody><tr><td>result</td><td>array</td><td>分机数据数组</td></tr><tr><td>—extnumber</td><td>string</td><td>分机号</td></tr><tr><td>—status</td><td>int</td><td>分机号状态</td></tr><tr><td>—caller</td><td>string</td><td>呼叫人</td></tr><tr><td>—callee</td><td>string</td><td>被叫人</td></tr><tr><td>—disnumber</td><td>string</td><td>显示号码</td></tr><tr><td>—direction</td><td>string</td><td>呼叫方向</td></tr><tr><td>—channel</td><td>string</td><td>渠道</td></tr><tr><td>—idleduration</td><td>int</td><td>空闲时长</td></tr><tr><td>—callduration</td><td>int</td><td>通话时长</td></tr></tbody></table>

# 语音呼叫API - 接入流程

# 语音呼叫API接入流程

![](https://doc-admin.infin8linx.com/uploads/202503/d86ab231b4965937f47dcea811ec4fca.jpg)

# 语音验证码 - 错误码信息

#### 错误码信息

**简要描述：**

- 错误码信息

<table id="bkmrk-%E9%94%99%E8%AF%AF%E7%A0%81-%E8%AF%B4%E6%98%8E-1000-%E7%B3%BB%E7%BB%9F%E9%94%99%E8%AF%AF-100"><thead><tr><th align="left">错误码</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">1000</td><td align="left">系统错误</td></tr><tr><td align="left">1001</td><td align="left">参数错误</td></tr></tbody></table>

# 2.创建任务

#### 功能入口

1.登录[管理后台](https://dashboard.infin8linx.com/)，在左侧导航栏，选择 **「语音」**，然后在展开的菜单中点击 **「预测式外呼」**，进入后选择 **「任务管理」** 即可访问管理页面。

[![](https://document.infin8linx.com/uploads/images/gallery/2025-09/scaled-1680-/image-1758789989948.png)](https://document.infin8linx.com/uploads/images/gallery/2025-09/image-1758789989948.png)

2.在预测式外呼任务管理页面，单击 **「添加」**，进入信息配置界面。按业务需求填写内容后，点击 **「确认」** 即可完成新建任务。

[![](https://document.infin8linx.com/uploads/images/gallery/2025-09/scaled-1680-/image-1758790191057.png)](https://document.infin8linx.com/uploads/images/gallery/2025-09/image-1758790191057.png)

#### 任务配置说明

- **任务名称**

为本次外呼任务设置一个具有辨识度的名称，例如“9月客户回访”或“产品促销活动”。便于在任务列表中快速识别和管理。

- **呼叫次数**
    
    针对同一个被叫号码的最大拨打尝试次数。例如，设置为“3”，表示系统最多会尝试拨打该号码3次。
    
    **说明：** **此计数包含首次拨打**。如果首次未接通（如占线、无人接听、关机等），系统将根据“重呼间隔”设置进行重复拨打，直至达到设定次数或最终接通。
- **是否定时执行**
    
    选择“是”或“否”。
    
    
    - 是：任务状态自动变更为“运行中”。到达开始时间后，系统开始外呼；到达结束时间后，任务自动停止。
    - 否：任务创建后状态为“未开始”，需要您手动点击“启动”按钮才会开始外呼。
- **重呼间隔**
    
    当一次呼叫未接通时，系统再次拨打同一个被叫号码之间需要等待的最短时间。
    
    **单位：秒。**
    
    **示例：** 设置为“600秒”，表示首次未接通后，至少等待10分钟才会进行第二次拨打。
    
    **注意：实际拨打时间可能因系统调度、坐席资源等因素略有延迟。**
- **坐席呼叫比**
    
    预测式外呼的核心参数，定义系统为每个就绪坐席预估并拨出的并发外呼数量。
    
    **原理：** 系统通过算法预测坐席的空闲时间，提前拨打电话。例如，设置为“1:2”，表示系统会尝试为每个空闲坐席匹配2个已接通的客户电话，以最大化坐席利用率。
    
    **影响：** 比值过高可能导致客户接通后等待坐席时间过长（“干等”），
    
    **影响体验；** 比值过低则坐席利用率不足。需根据业务场景和客户接听率调整。
- **是否固定呼叫比例**
    
    (此选项通常与“坐席呼叫比”联动）
    
    **是：** 严格按照设定的“坐席呼叫比”进行外呼调度。
    
    **否：** 系统可根据实时情况（如历史接通率、坐席状态）动态调整外呼并发量，不一定严格遵循设定比例，以适应波动。
- **分配类型：**
    
    选择参与本次外呼任务的坐席资源组织方式。
    
    
    - **分机组：**
        
        将外呼任务分配给一个或多个技能组（分机组）。任务中的客户电话将由这些技能组内的所有坐席共同承接
    - **分机：**
    
    将外呼任务直接分配给特定的坐席分机号，仅被指定的坐席会接到该任务的客户电话。
    
    ```
    在“分配类型”选择“分机组”后，此处需选择一个具体的技能组。所有属于所选技能组的坐席都将参与本次外呼任务，并在空闲时接听系统预测接通的客户电话。
    
    在“分配类型”选择“分机”后，此处需输入或选择一个具体的坐席分机号码。只有被指定的坐席会参与并承接本次外呼任务的通话。
    
    ```
- **主叫号码**
    
    客户手机上显示的来电号码。可从选择一组号码，系统将轮询或根据策略从该集合中随机选择主叫号码外呼，可用于分散单个号码的呼叫压力。
- **号码文件**
    
    上传包含需要外呼的客户电话号码及相关信息的文件。
    
    
    - **格式：** .xlsx 文件。
    - **内容：** 文件中至少包含“被叫号码”列，也可包含客户姓名、自定义字段等，用于坐席弹屏或数据统计。

# 清除Token接口

#### 接口说明

当有新增分机或是分机进行调整后出现异常时，可以通过该接口清除Token后，再重新获取Token继续操作。

#### 请求方式

POST，form-data格式

#### 请求参数

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E6%98%AF%E5%90%A6%E5%BF%85%E9%A1%BB-%E8%AF%B4%E6%98%8E-servi"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">是否必须</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">service</td><td align="left">string</td><td align="left">是</td><td align="left">App.Sip\_Auth.Logout</td></tr><tr><td align="left">token</td><td align="left">string</td><td align="left">是</td><td align="left">Token字符串</td></tr></tbody></table>

#### 接口请求示例（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": ""
}

```

# Common API - Obtain authorization token interface

#### Interface Description

Tokens required to access other interfaces must be obtained from this interface through the authorized Appid and Accesskey (except for the batch IVR interface). The timeliness of the interface authorization Token is 12 hours.

#### Request method

POST, form-data format

#### request parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th align="left">parameter name</th><th align="left">type</th><th align="left">Is it necessary</th><th align="left">illustrate</th></tr></thead><tbody><tr><td align="left">appid</td><td align="left">string</td><td align="left">yes</td><td align="left">authorized appid</td></tr><tr><td align="left">accesskey</td><td align="left">string</td><td align="left">yes</td><td align="left">authorized accesskey</td></tr><tr><td align="left">service</td><td align="left">string</td><td align="left">yes</td><td align="left">App.Sip\_Auth.Login</td></tr></tbody></table>

#### Interface request example（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);
?>


```

#### Return Data Structure Example

```
{
    "ret":200,
    "data":{
        "status":0,
        "desc":"Authorization successful",
        "result":{
            "companycode":"1",
            "companyname":"test",
            "token":"773a70dd02f0695d50205e9b267692b9",
            "authtime":"2020-01-01 00:00:00",
            "authmodel":""
        },
        "reqtime":1581240882,
        "rsptime":1581240882
    },
    "msg":""
}


```

#### Return parameter description

<table id="bkmrk-parameter-name-type--1"><thead><tr><th align="left">parameter name</th><th align="left">type</th><th align="left">illustrate</th></tr></thead><tbody><tr><td align="left">companycode</td><td align="left">int</td><td align="left">Company code</td></tr><tr><td align="left">companyname</td><td align="left">string</td><td align="left">Company Name</td></tr><tr><td align="left">token</td><td align="left">string</td><td align="left">Authorization token, used to access other interfaces</td></tr></tbody></table>

# Common API - Clear the Token interface

#### Interface Description

Note: When there is a new extension or an abnormality occurs after the extension is adjusted, you can clear the Token through this interface, and then obtain the Token again to continue the operation.

#### Request method

POST, form-data format

#### request parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th align="left">parameter name</th><th align="left">type</th><th align="left">Is it necessary</th><th align="left">illustrate</th></tr></thead><tbody><tr><td align="left">service</td><td align="left">string</td><td align="left">yes</td><td align="left">App.Sip\_Auth.Logout</td></tr><tr><td align="left">token</td><td align="left">string</td><td align="left">yes</td><td align="left">Token string</td></tr></tbody></table>

#### Interface request example（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);
?>


```

#### return data structure example

```
{
    "ret": 200,
    "data": {
        "status": 0,
        "desc": "logout successful",
        "reqtime": 1602655204,
        "rsptime": 1602655204
    },
    "msg": ""
}

```

# Extension Manage - delete extension group

#### Interface Description

delete extension group

#### Request method

POST, form-data format

#### request parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th>parameter name</th><th>type</th><th>Is it necessary</th><th>illustrate</th></tr></thead><tbody><tr><td>service</td><td>string</td><td>yes</td><td>App.Sip\_Extgroup.DelExtgroup</td></tr><tr><td>token</td><td>string</td><td>yes</td><td>The token obtained through the authorization interface</td></tr><tr><td>name</td><td>string</td><td>yes</td><td>extension group name</td></tr></tbody></table>

#### Interface request example（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Extgroup.DelExtgroup',
        'token'     => 'ABCDEFG',
        'name'  => '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);
?>

```

#### return data structure example

```
{
    "ret":200,
    "data":{
        "status":0,
        "desc":"successfully deleted",
        "reqtime":1581409781,
        "rsptime":1581409781
    },
    "msg":""
}

```

#### Return data field description

<table id="bkmrk-field-illustrate"><thead><tr><th>field</th><th>illustrate</th></tr></thead><tbody><tr><td></td><td></td></tr></tbody></table>

# Batch IVR - IVR group call access process

IVR group call access process

**Recording file preparation before access:** Before the interface request, please use the account password provided by Infinity to log in to the background, and find the menu "Record Template (offline)" on the left side of the Voice background, here Upload the recording file to be used by the interface. `Requirements for recording files: sampling rate 8000bps, mp3 format, file name cannot contain Chinese, English and "_" symbols are allowed. `

[![18a9cb71c6f980b20e9983f646a7ead7.jpg](https://document.infin8linx.com/uploads/images/gallery/2025-12/scaled-1680-/18a9cb71c6f980b20e9983f646a7ead7.jpg)](https://document.infin8linx.com/uploads/images/gallery/2025-12/18a9cb71c6f980b20e9983f646a7ead7.jpg)

# Update Log

## Update Log

<table id="bkmrk-version-description-"><thead><tr><th>Version</th><th>Description</th><th>Author</th><th>Date</th></tr></thead><tbody><tr><td>v1.3</td><td>1. Added error code=110  
2. Added Java, PHP hexadecimal conversion examples</td><td></td><td>2020/10/26  
2021/06/24</td></tr><tr><td>v1.4</td><td>Supported https protocol</td><td></td><td></td></tr><tr><td>v1.4.1</td><td>Added customer report SMS status interface 5</td><td></td><td></td></tr></tbody></table>

# 1. System Login

### 1.1. Login Method

Please enter the platform access address in your browser's address bar: [http://dashboard.infin8linx.com/login](http://dashboard.infin8linx.com/login), to access the login page, as shown below:

[![m_6c5851f3eb29b3dff1297ac9e296db58_r.png](https://document.infin8linx.com/uploads/images/gallery/2025-12/scaled-1680-/m-6c5851f3eb29b3dff1297ac9e296db58-r.png)](https://document.infin8linx.com/uploads/images/gallery/2025-12/m-6c5851f3eb29b3dff1297ac9e296db58-r.png)

### 1.2. Account Login

On the login page, enter your account name, password, and verification code, then click the "Login" button to complete the login process.

[![m_ef492d4912355f75d83c9a671d1f2a66_r.png](https://document.infin8linx.com/uploads/images/gallery/2025-12/scaled-1680-/m-ef492d4912355f75d83c9a671d1f2a66-r.png)](https://document.infin8linx.com/uploads/images/gallery/2025-12/m-ef492d4912355f75d83c9a671d1f2a66-r.png)

# Clear the Token interface

#### Description

Note: When there is a new extension or an abnormality occurs after the extension is adjusted, you can clear the Token through this interface, and then obtain the Token again to continue the operation.

#### Request method: POST, form-data format

**request parameters**

<table id="bkmrk-parameter-name-type-"><thead><tr><th align="left">parameter name</th><th align="left">type</th><th align="left">Is it necessary</th><th align="left">illustrate</th></tr></thead><tbody><tr><td align="left">service</td><td align="left">string</td><td align="left">yes</td><td align="left">App.Sip\_Auth.Logout</td></tr><tr><td align="left">token</td><td align="left">string</td><td align="left">yes</td><td align="left">Token string</td></tr></tbody></table>

**Interface request example（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);
?>


```

**return data structure example**

```
{
    "ret": 200,
    "data": {
        "status": 0,
        "desc": "logout successful",
        "reqtime": 1602655204,
        "rsptime": 1602655204
    },
    "msg": ""
}

```

# Manual de funcionamiento del softphone

### 一、Sistema Android

#### 1、Descarga e instalación de la aplicación

Busca "Zoiper IAX SIP VOIP Softphone" en Google Play para descargarlo, o usa el siguiente enlace directo:[https://play.google.com/store/apps/details?id=com.zoiper.android.app&amp;hl=zh](https://play.google.com/store/apps/details?id=com.zoiper.android.app&hl=zh)

#### 2、Configuración del teléfono soft

Abre la aplicación Zoiper y concede los permisos necesariosIngresa el número de extensión y la contraseña, luego haz clic en "Crear cuenta" (consulta las imágenes siguientes):

![m_b2b528e6ceea041c7f88e9eae126d1a4_r.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/m-b2b528e6ceea041c7f88e9eae126d1a4-r.png)

![m_5b91b9f674200279b616b1ef7cee9b2a_r.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/m-5b91b9f674200279b616b1ef7cee9b2a-r.png)

Configura el dominio y haz clic en "Siguiente" (consulta la imagen siguiente):

![m_8026a8b238d21f7627aa2c105e7d50f7_r.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/m-8026a8b238d21f7627aa2c105e7d50f7-r.png)

![m_bfc5827c6fd37524d6d54d58b5761a32_r.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/m-bfc5827c6fd37524d6d54d58b5761a32-r.png)

Omite la configuración del proveedor (consulta la imagen siguiente):

![m_66f34767246257fbe0c57612d424a4ea_r.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/m-66f34767246257fbe0c57612d424a4ea-r.png)

En "Seleccionar configuración", espera a que se carguen las opciones de protocolo, elige el protocolo adecuado y haz clic en "Completar".

![m_eb4edc825570b87151ea23d5de1118f7_r.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/m-eb4edc825570b87151ea23d5de1118f7-r.png)

La configuración se ha completado. Regresa a la pantalla principal para hacer llamadas.Nota: Los números indonesios comienzan con "8", no es necesario agregar prefijos como "0" o "62"

![m_6374fb8181768577feb43ae94284dd11_r.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/m-6374fb8181768577feb43ae94284dd11-r.png)

![m_4177f37f0fb9046c15bc2e8ed12b7187_r.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/m-4177f37f0fb9046c15bc2e8ed12b7187-r.png)

![m_eb106a4d9b6afa1928617e9bff78d6cf_r.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/m-eb106a4d9b6afa1928617e9bff78d6cf-r.png)

### 二、Sistema iOS

#### 1、Descarga e instalación de la aplicación

Usa una cuenta de App Store de una región no china para buscar "Zoiper" y descargar la aplicación.

#### 2、Configuración del teléfono soft

Abre Zoiper, concede los permisos y accede a: Configuración &gt; Cuenta &gt; "+" &gt; Configuración manual &gt; Cuenta SIP.

Completa la siguiente información y haz clic en "Registrar":

<table id="bkmrk-normbe-contenido-acc"><thead><tr><th>Normbe</th><th>Contenido</th></tr></thead><tbody><tr><td>**Account name**</td><td>**Ingresa el número de extensión que proporcionamos**</td></tr><tr><td>**Domain**</td><td>**Ingresa el dominio que proporcionamos**</td></tr><tr><td>**User name**</td><td>**Ingresa el número de extensión que proporcionamos**</td></tr><tr><td>**Password**</td><td>**Ingresa la contraseña de la extensión queproporcionamos**</td></tr></tbody></table>

Capturas de pantalla de la operación:

![image10.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image10.png)

![image11.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/image11.png)

![image12.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image12.png)

![image13.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/image13.png)

![image14.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image14.png)

![image15.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/image15.png)

![image16.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/image16.png)

### 三、MicroSIP - Versión para ordenador

#### 1、Instalación del teléfono soft: MicroSIP

Abre el paquete de instalación de MicroSIP que proporcionamos.

![image17.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image17.png)

Selecciona tu idioma de instalación:

![image18.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image18.png)

Selecciona tu idioma de instalación:Después de completar la instalación, abre la interfaz de MicroSIP:

![image19.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image19.png)

#### 2、Inicio de sesión en el teléfono soft

Nota: El inicio de sesión en el teléfono soft se usa principalmente para que los usuarios del sistema de marcación saliente realicen operaciones en el teléfono soft después de contestar una llamada entrante. El personal de atención al cliente puede hacer clic en los botones "Contestar" o "Rechazar" en el teléfono soft para decidir si contestar la llamada. Por lo tanto, cada agente debe iniciar sesión en una cuenta de teléfono soft. Por defecto, un agente corresponde a una cuenta de teléfono soft. Si necesitas más cuentas, contáctanos.

**Pasos de configuración del teléfono soft:**

1.Haz clic en la interfaz de MicroSIP, haz clic en el botón triangular inferior y selecciona "Agregar cuenta" (Add Account) para abrir la interfaz de configuración:

![image20.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image20.png)

2.Pasos de configuración del teléfono soft:Nombre de la cuenta: La cuenta de teléfono soft que proporcionamos.

Servidor SIP: La dirección IP o el dominio del servidor que proporcionamos.

**Nombre de usuario:** La cuenta de teléfono soft que proporcionamos.

Dominio: La dirección IP o el dominio del servidor que proporcionamos.

**Nombre de inicio de sesión:** La cuenta de teléfono soft que proporcionamos

**Contraseña:** La contraseña de la cuenta de teléfono soft que proporcionamos, debe coincidir con la cuenta correspondiente.

3.Explicación del estado (como se muestra en la imagen):

**En línea (Online):** Inicio de sesión exitoso, puede contestar llamadas

**normalmente.Prohibido (Forbidden):** La contraseña de la cuenta de teléfono soft es incorrecta.

![image21.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image21.png)

### 四、InfinitySIP - Versión para ordenador

#### 1、Instalación del teléfono soft: InfinitySIP

**Procedimiento de instalación de InfinitySIP**

Abre el paquete de instalación de InfinitySIP que proporcionamos.

![image22.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image22.png)

Selecciona tu idioma de instalación:

![image23.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image23.png)

Después de completar la instalación, abre la interfaz de InfinitySIP:

![image24.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/image24.png)

#### 2、Inicio de sesión en el teléfono soft

Nota: El inicio de sesión en el teléfono soft se usa principalmente para que los usuarios del sistema de marcación saliente realicen operaciones relacionadas después de contestar una llamada entrante. El personal de atención al cliente puede hacer clic en los botones "Contestar" o "Rechazar" en la interfaz del teléfono soft para decidir si contestar la llamada. Por lo tanto, cada agente debe iniciar sesión en una cuenta de teléfono soft. Por defecto, un agente corresponde a una cuenta de teléfono soft. Si necesitas más cuentas, contáctanos.

**Pasos de configuración del teléfono soft:**

1.Después de instalar InfinitySIP, aparecerá una ventana de inicio de sesión por defecto:

![image25.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image25.png)

2.Debes completar los siguientes ítems de configuración:

Nombre de la cuenta: La cuenta de teléfono soft que proporcionamos.

Nombre de usuario: La cuenta de teléfono soft que proporcionamos.

Dominio: El dominio del servidor que proporcionamos.

Contraseña: La contraseña de la cuenta de teléfono soft que proporcionamos, debe coincidir con la cuenta correspondiente.

3.Explicación del estado (como se muestra en la imagen):

**En línea (Online):** Inicio de sesión exitoso, puede contestar llamadas normalmente.

![image26.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image26.png)

### 五.Zoiper5 - Versión para Mac

#### 1、Procedimiento de inicio de sesión en Zoiper5

Primero, abre Zoiper5. Haz clic en "Continuar como usuario gratuito".

![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1763718666281.png)

Completa la siguiente información y haz clic en "Iniciar sesión":

![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1763718719399.png)

<table id="bkmrk-nombre-contendio-acc"><thead><tr><th>Nombre</th><th>Contendio</th></tr></thead><tbody><tr><td>**Account name**</td><td>**填写我们提供的分机号**</td></tr><tr><td>**Password**</td><td>**填写我们提供的分机密码**</td></tr></tbody></table>

Introduzca la dirección de registro SIP que proporcionamos en el nombre del host y elija el dominio correspondiente al país. Por ejemplo, para méxico, ingrese: mex.infin8link.com: 7060.

![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1763718802689.png)

[](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1763718843522.png)

![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1763718858338.png)

Después de que hay opciones disponibles, haga clic en siguiente sin hacer clic para saltar.

![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1763718888443.png)

![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1763718901455.png)

Después de iniciar sesión con éxito, vea si se muestra √ y se muestra √ antes de llamar.

![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1763718944750.png)

Nota: en general, el sistema por defecto √ si hay, Use Global Tun en lugar de no usarlo.

#### 2、llamadas de zoiper5

![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1763719007955.png)

![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1763719019739.png)

![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1763719031933.png)

Los números que hay que llamar también se pueden copiar y pegar directamente para hacer llamadas.

### Preguntas frecuentes para teléfonos blandos

Los teléfonos blandos recomendados comúnmente son principalmente: microsipLas siguientes son preguntas comunes para microsip, pero normalmente, la interfaz de microsip después de iniciar sesión normalmente se muestra de la siguiente manera:

![image27.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image27.png)

**1.consejos telefónicos blandos: Forbidden**

Por lo general, se debe a un error en la entrada del número de extensión o contraseña.

**Solución:** verifique cuidadosamente si la entrada de la contraseña de la extensión es correcta. Si confirma que la contraseña es correcta pero todavía le pide "forbidden", Póngase en contacto con el equipo de Infinity para obtener asistencia.

![image28.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image28.png)

**2.aviso de teléfono suave: Gateway error (gateway error) o Bad Gateway (gateway error)**

La razón principal es una conexión anormal a la red de salida local, lo que hace que no se pueda conectar correctamente al servidor.

**Solución:** verifique el entorno de red local del dispositivo donde se encuentra la extensión de inicio de sesión, puede intentar reiniciar el enrutador o cambiar a otra red estable e intentarlo de nuevo

![image29.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image29.png)

**3、Aviso de teléfono blando: la aplicación ha expirado (la aplicación ha expirado) o la aplicación ha expirado**

**Solución:** Póngase en contacto con el equipo de Infinity para obtener apoyo y asistencia

![image30.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image30.png)

**4、Aviso de teléfono suave: solicitar tiempo fuera (tiempo de espera de la solicitud)**

Puede ser causado por la inestabilidad de la red local, la configuración incorrecta del nombre de dominio del teléfono blando o problemas en el lado del servidor.

**Solución:**

A. primero verifique si la configuración del nombre de dominio en el teléfono blando es correcta. Si la configuración es correcta, continúe haciendo referencia a los elementos B y c;

B. compruebe si la red local es normal y puede usar el comando Ping en la línea de órdenes para probar el nombre de dominio configurado por el teléfono blando para confirmar la conectividad actual de la red;Si el problema no se ha resuelto, Póngase en contacto con el equipo de Infinity para obtener más asistencia.

![image31.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image31.png)

**5、aviso telefónico suave: la cuenta o el crédito está desactivado (la cuenta o las credenciales han sido desactivadas)**

Generalmente porque la cuenta aún no ha sido configurada o no se ha activado correctamente.

**Solución:** reconfigurar la información de la cuenta: haga clic en el botón "triángulo inferior" en la esquina superior derecha de la interfaz, seleccione "añadir cuenta" y luego siga las indicaciones para completar los parámetros correctos de la cuenta (incluyendo nombre de la cuenta, servidor sip, nombre de usuario, nombre de dominio y contraseña, etc.).

![image32.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image32.png)

**6、Aviso telefónico suave: error externo indefinido (error externo indefinido)**

Por lo general, se debe a una anomalía en el propio software de teléfono suave o a una instalación incompleta.

**Solución:** desinstale el software de teléfono blando actual y reinstale la última versión del programa de teléfono blando.

![image33.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image33.png)

**7、El teléfono blando no puede colgar la llamada**

Puede ser que el propio software de teléfono blando esté atascadoo no responda.

**Solución:** abra el gestor de tareas de su computadora, termine (cierre forzado) el proceso relacionado con el teléfono blando y luego reinicie el software y vuelva a iniciar sesión.

![image34.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image34.png)

**8、Teléfono suave haga clic para llamar sin respuesta**

Puede ser que el software de teléfono blando instalado actualmente tenga anomalías o problemas de compatibilidad.

**Solución:** desinstale primero la versión actual del software microsip y luego descargue otras versiones, como una versión estable anterior o actualizada, para reinstalar y configurar.

![image35.png](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image35.png)

# 2.Create Task

#### Feature Access

1.To access the management page, log in to the [admin console](https://dashboard.infin8linx.com/), select **Voice** from the left-hand navigation menu, then click **Predictive Call** in the expanded submenu, and finally choose **Scheduler**.

[![](https://document.infin8linx.com/uploads/images/gallery/2026-06/scaled-1680-/image-1782787352639.png)](https://document.infin8linx.com/uploads/images/gallery/2026-06/image-1782787352639.png)

2.On the Predictive Outbound Dialing Task Management page, click **Add** to enter the configuration interface. Fill in the required information according to your business needs, then click **Confirm** to complete the creation of a new task.

[![](https://document.infin8linx.com/uploads/images/gallery/2026-06/scaled-1680-/image-1782787426648.png)](https://document.infin8linx.com/uploads/images/gallery/2026-06/image-1782787426648.png)

[![](https://document.infin8linx.com/uploads/images/gallery/2026-06/scaled-1680-/image-1782787480876.png)](https://document.infin8linx.com/uploads/images/gallery/2026-06/image-1782787480876.png)

**Task Name**

Set a recognizable name for this outbound calling task, such as “September Customer Follow-up” or “Product Promotion Campaign,” to help quickly identify and manage it in the task list.

**Call Attempts**

The maximum number of times the system will attempt to call the same recipient number.

Example: If set to “3,” the system will try calling that number up to 3 times.

Note: This count includes the first call attempt. If the first call is not answered (e.g., busy, no answer, phone off), the system will retry based on the **call retry interval** setting until it either reaches the maximum number of attempts or successfully connects.

**Call Retry Interval**

The minimum waiting time (in seconds) before the system retries a call to the same number after a failed attempt.

Unit: seconds Example: Setting it to “600 seconds” means the system waits at least 10 minutes before the next attempt.

Note: Actual recall timing may vary slightly due to system scheduling or agent availability.

**Timed Execution**

Choose “Yes” or “No.”

Yes: The task status automatically changes to “Running.” The system starts dialing at the scheduled start time and stops automatically at the end time.

No: The task status remains “Not Started” after creation. You must manually click the Start button to begin dialing.

**Set Call Ratio**

A core parameter for predictive dialing, defining how many concurrent calls the system dials per ready agent.

Principle: The system predicts when agents will become available and places calls in advance. For example, a ratio of “1:2” means the system aims to have 2 connected calls ready for every available agent to maximize utilization.

Impact: Too high → Customers may wait too long after answering (“dry wait”), hurting experience. Too low → Agents sit idle, reducing efficiency. Adjust based on your business scenario and customer answer rates.

**Is Fixed Call Ratio**

(This option usually works together with **“Set Call Ratio”**)

Yes: The system strictly follows the configured **Set Call Ratio**.

No: The system dynamically adjusts the number of concurrent calls based on real-time factors (e.g., historical answer rate, agent status), even if it deviates from the set ratio, to better adapt to changing conditions.

**Assign Type**

Choose how agent resources are assigned to this outbound task:

**Agent Group:** Assign the task to one or more skill-based agent groups. All agents within the selected group(s) will share and handle the incoming connected calls.

**Extension:** Assign the task directly to specific agent extensions. Only the designated agents will receive calls from this task.

If you select Agent Group, you must then choose a specific skill group. All agents in that group will participate in the task and receive calls when available.

If you select Extension, you must enter or select specific agent extension numbers. Only those agents will handle calls for this task.

**Caller No**

The phone number displayed on the customer’s device when receiving the call. You can select a pool of numbers; the system will rotate or randomly pick from this set during outbound calls to distribute calling load and avoid overusing a single number.

**Phone File**

Upload a file containing the customer phone numbers and related information for this campaign.

Format: .xlsx

Required Column: At least include a “Recipient Number” column.

Optional Columns: Customer name, custom fields, etc.—used for agent screen pop or reporting purposes.

# 创建模板

### 域名

- https://api.incsapp.com

### 请求路由

- /external/templates/rcs

### 请求方式

- **POST**

### 请求头

- Content-Type: application/json
- certification-code: f484bd42-4a0c-39d....

### 请求参数

#### 请求参数列表

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E5%BF%85%E5%A1%AB-%E6%8F%8F%E8%BF%B0-name-st"><thead><tr><th>参数名</th><th>类型</th><th>必填</th><th>描述</th></tr></thead><tbody><tr><td>name</td><td>string</td><td>是</td><td>模板名称。最大长度 25，只能包含字母数字字符和下划线。例如：test\_template</td></tr><tr><td>type</td><td>string</td><td>是</td><td>模板类型，必须是text,richcard,carousel中的一种，参考：[**模板类型说明**](#bkmrk--1)</td></tr><tr><td>category</td><td>string</td><td>是</td><td>模板类别. 参考：[**模板类型说明**](#bkmrk--3)</td></tr><tr><td>content</td><td>object</td><td>是</td><td>模板内容，参考：[**模板内容（content）说明和请求示例**](#bkmrk--5)</td></tr></tbody></table>

<a id="bkmrk--1"></a>

#### 模板类型（type）说明

- **支持的模板类型（type）包括：**
    
    
    - **文本消息 (text)** - 文本消息模板支持包含建议回复或操作的简单文本消息。文本消息最多可包含 11 个建议项。
    - **独立富卡片 (richcard)** - 独立富卡片模板允许包含一张富卡片：图片、GIF 或视频，并附带建议回复和操作。该模板中的富卡片最多可包含 4 个建议项。
    - **富卡片轮播 (carousel)** - 富卡片轮播模板支持包含至少两张富卡片的轮播展示，其中每张卡片均带有建议回复和操作。富卡片轮播模板最多允许展示 10 张卡片，且每张卡片最多可包含 4 个建议项。
- **创建包含媒体内容的模板时，请参阅 [媒体指南](#bkmrk--9)**

<a id="bkmrk--3"></a>

#### 模板类别（category）说明

对于 **multi-use agents** 必填。 允许的值:

- **PROMOTION** – promotional agents 的默认值.
- **TRANSACTION** – transactional agents 的默认值.
- **AUTHENTICATION** – OTP agents 的默认值.

<a id="bkmrk--5"></a>

#### 模板内容（content）说明和请求示例

##### 1. 文本消息模板（text）

- **content** 参数内容说明：
    
    <table><thead><tr><th>参数</th><th>类型</th><th>必填</th><th>描述</th><th>备注</th></tr></thead><tbody><tr><td>textMessage</td><td>string</td><td>是</td><td>带有自定义变量的模板消息。自定义变量用方括号 \[variable\_name\] 表示。最大长度 2500。</td><td>例如：Dear \[name\], it is time to grab a big deal.</td></tr><tr><td>suggestions</td><td>array</td><td>否</td><td>包含建议相关数据的数组</td><td>参考：[建议内容（suggestions）说明和示例](#bkmrk--7)</td></tr></tbody></table>
- 请求示例

```json
      {
          "name": "test_template",
          "type": "text",
          "category": "PROMOTION",
          "content": {
              "textMessage": "Dear [name], your order [order_id] has been shipped.",
              "suggestions": [
                  {
                      "suggestionType": "reply",
                      "text": "Track Order",
                      "postbackData": "track_order_[order_id]"
                  },
                  {
                      "suggestionType": "url_action",
                      "text": "View Details",
                      "postbackData": "view_details",
                      "url": "https://brand.com/orders/[order_id]"
                  }
              ]
          }
      }

```

##### 2. 富媒体卡片独立模板（richcard）

- **content** 参数内容说明： <table><thead><tr><th>参数</th><th>类型</th><th>必填</th><th>描述</th><th>备注</th></tr></thead><tbody><tr><td>orientation</td><td>string</td><td>是</td><td>卡片方向：VERTICAL 或 HORIZONTAL</td><td></td></tr><tr><td>alignment</td><td>string</td><td>否</td><td>排列：当 orientation 为 HORIZONTAL 时，排列为：(LEFT, RIGHT)</td><td></td></tr><tr><td>height</td><td>string</td><td>否</td><td>卡片高度：SHORT 或 MEDIUM（仅当 cardOrientation 为 VERTICAL 时适用）</td><td></td></tr><tr><td>standaloneCard</td><td>object</td><td>是</td><td>包含富媒体卡片配置的对象</td><td>内容见下述**standaloneCard** 参数内容说明</td></tr></tbody></table>
- **standaloneCard** 参数内容说明： <table><thead><tr><th>参数</th><th>类型</th><th>必填</th><th>描述</th><th>备注</th></tr></thead><tbody><tr><td>cardTitle</td><td>string</td><td>是</td><td>卡片标题。最大长度 200。</td><td></td></tr><tr><td>cardDescription</td><td>string</td><td>否</td><td>卡片描述。最大长度 2000。</td><td></td></tr><tr><td>mediaUrl</td><td>string</td><td>是</td><td>媒体文件的公共 URL</td><td></td></tr><tr><td>thumbnailUrl</td><td>string</td><td>否</td><td>视频缩略图的公共 URL</td><td>当媒体为视频时必填</td></tr><tr><td>suggestions</td><td>array</td><td>否</td><td>建议数组</td><td>参考：[建议内容（suggestions）说明和示例](#bkmrk--7)</td></tr></tbody></table>
- 请求示例

```json
      {
          "name": "promo_richcard_url",
          "type": "richcard",
          "category": "PROMOTION",
          "content": {
              "orientation": "VERTICAL",
              "height": "SHORT",
              "standaloneCard": {
                  "cardTitle": "Keep calm & BAT on!",
                  "cardDescription": "Dear [name], time to participate in lucky draw and win prizes",
                  "mediaUrl": "https://brand.com/Ad.mp4",
                  "thumbnailUrl": "https://brand.com/Ad_snap.png",
                  "suggestions": [
                      {
                          "suggestionType": "reply",
                          "text": "Avail offer [offer_name]",
                          "postbackData": "offer_reply"
                      }
                  ]
              }
          }
      }
      

```

##### 3. 富媒体卡片轮播模板（carousel）

- **content** 参数内容说明：
    
    <table><thead><tr><th>参数</th><th>类型</th><th>必填</th><th>描述</th><th>备注</th></tr></thead><tbody><tr><td>width</td><td>string</td><td>是</td><td>卡片宽度：SMALL 或 MEDIUM</td><td></td></tr><tr><td>height</td><td>string</td><td>是</td><td>卡片高度：SHORT 或 MEDIUM</td><td></td></tr><tr><td>carouselCard</td><td>array</td><td>是</td><td>卡片数组，最少 2 个，最多 10 个</td><td>见下述**carouselCard** 参数内容说明</td></tr></tbody></table>
- **carouselCard** 数组对象参数内容说明：
    
    <table><thead><tr><th>参数</th><th>类型</th><th>必填</th><th>描述</th><th>备注</th></tr></thead><tbody><tr><td>cardTitle</td><td>string</td><td>是</td><td>卡片标题。最大长度 200。</td><td></td></tr><tr><td>cardDescription</td><td>string</td><td>否</td><td>卡片描述。最大长度 2000。</td><td></td></tr><tr><td>mediaUrl</td><td>string</td><td>是</td><td>媒体 URL</td><td></td></tr><tr><td>thumbnailUrl</td><td>string</td><td>否</td><td>缩略图 URL</td><td></td></tr><tr><td>suggestions</td><td>array</td><td>否</td><td>建议数组，每个卡片最多 4 个</td><td>参考：[建议内容（suggestions）说明和示例](#bkmrk--7)</td></tr></tbody></table>
- 请求示例

```json
      {
          "name": "test_carousel",
          "type": "carousel",
          "content": {
              "height": "SHORT",
              "width": "MEDIUM",
              "category": "PROMOTION",
              "carouselCard": [
                  {
                      "cardTitle": "New watches",
                      "cardDescription": "Dear [name] brand new watches for less price",
                      "mediaUrl": "https://brand.com/media/watches.mp4",
                      "thumbnailUrl": "https://brand.com/media/watches.jpeg",
                      "suggestions": [
                          {
                              "suggestionType": "url_action",
                              "url": "https://brand.com/",
                              "text": "Buy Now at [offer_name]",
                              "postbackData": "shop_url"
                          }
                      ]
                  },
                  {
                      "cardTitle": "New perfumes",
                      "cardDescription": "Dear [name], Choose from brand new perfumes.",
                      "mediaUrl": "https://brand.com/media/[image]",
                      "suggestions": [
                          {
                              "suggestionType": "dialer_action",
                              "phoneNumber": "+919702012345",
                              "text": "Call now to avail[offer_name]",
                              "postbackData": "call_click"
                          }
                      ]
                  }
              ]
          }
      }

```

<a id="bkmrk--7"></a>

#### 建议内容（suggestions）说明和示例

- **所有建议类型都包含以下通用参数：**<table><thead><tr><th>参数</th><th>必填</th><th>描述</th><th>备注</th></tr></thead><tbody><tr><td>suggestionType</td><td>是</td><td>建议类型</td><td></td></tr><tr><td>text</td><td>是</td><td>建议显示文本。最大长度 25。</td><td></td></tr><tr><td>postbackData</td><td>是</td><td>回传数据。最大长度 120。</td><td></td></tr></tbody></table>

##### 1. 回复建议

用于简单的快速回复按钮。

```json
{
    "suggestionType": "reply",
    "text": "Yes",
    "postbackData": "user_confirmed_yes"
}

```

##### 2. URL 动作 - 浏览器

在浏览器中打开 URL。

<table id="bkmrk-%E5%8F%82%E6%95%B0-%E5%BF%85%E5%A1%AB-%E6%8F%8F%E8%BF%B0-suggestiont"><thead><tr><th>参数</th><th>必填</th><th>描述</th></tr></thead><tbody><tr><td>suggestionType</td><td>是</td><td>设置为 "url\_action"</td></tr><tr><td>url</td><td>是</td><td>要打开的有效公共 URL</td></tr></tbody></table>

```json
{
    "suggestionType": "url_action",
    "text": "Visit Website",
    "postbackData": "visit_website",
    "url": "https://brand.com"
}

```

##### 3. 拨号动作

拨打电话号码。

<table id="bkmrk-%E5%8F%82%E6%95%B0-%E5%BF%85%E5%A1%AB-%E6%8F%8F%E8%BF%B0-suggestiont-1"><thead><tr><th>参数</th><th>必填</th><th>描述</th></tr></thead><tbody><tr><td>suggestionType</td><td>是</td><td>设置为 "dialer\_action"</td></tr><tr><td>phoneNumber</td><td>是</td><td>国际格式的有效电话号码</td></tr></tbody></table>

```json
{
    "suggestionType": "dialer_action",
    "text": "Call Us",
    "postbackData": "call_support",
    "phoneNumber": "+6281234567890"
}

```

##### 4. 查看位置

在地图中显示特定位置。

<table id="bkmrk-%E5%8F%82%E6%95%B0-%E5%BF%85%E5%A1%AB-%E6%8F%8F%E8%BF%B0-suggestiont-2"><thead><tr><th>参数</th><th>必填</th><th>描述</th></tr></thead><tbody><tr><td>suggestionType</td><td>是</td><td>设置为 "view\_location"</td></tr><tr><td>latitude</td><td>是</td><td>纬度</td></tr><tr><td>longitude</td><td>是</td><td>经度</td></tr><tr><td>label</td><td>否</td><td>位置标签</td></tr></tbody></table>

```json
{
    "suggestionType": "view_location",
    "text": "View Store",
    "postbackData": "view_store_location",
    "latitude": -6.2088,
    "longitude": 106.8456,
    "label": "Brand Store Jakarta"
}

```

##### 5. 查询位置

搜索附近的位置。

<table id="bkmrk-%E5%8F%82%E6%95%B0-%E5%BF%85%E5%A1%AB-%E6%8F%8F%E8%BF%B0-suggestiont-3"><thead><tr><th>参数</th><th>必填</th><th>描述</th></tr></thead><tbody><tr><td>suggestionType</td><td>是</td><td>设置为 "query\_location"</td></tr><tr><td>query</td><td>是</td><td>搜索查询字符串</td></tr></tbody></table>

```json
{
    "suggestionType": "query_location",
    "text": "Find Nearby",
    "postbackData": "find_nearby_stores",
    "query": "Brand Store near me"
}

```

##### 6. 分享位置

请求用户分享其当前位置。

```json
{
    "suggestionType": "share_location",
    "text": "Share Location",
    "postbackData": "user_shared_location"
}

```

##### 7. 日历事件

在用户日历中创建事件。

<table id="bkmrk-%E5%8F%82%E6%95%B0-%E5%BF%85%E5%A1%AB-%E6%8F%8F%E8%BF%B0-suggestiont-4"><thead><tr><th>参数</th><th>必填</th><th>描述</th></tr></thead><tbody><tr><td>suggestionType</td><td>是</td><td>设置为 "calendar\_event"</td></tr><tr><td>title</td><td>是</td><td>事件标题</td></tr><tr><td>description</td><td>否</td><td>事件描述</td></tr><tr><td>startTime</td><td>是</td><td>开始时间（YYYY-MM-DD HH:mm:ss 格式）</td></tr><tr><td>endTime</td><td>是</td><td>结束时间（YYYY-MM-DD HH:mm:ss 格式）</td></tr></tbody></table>

```json
{
    "suggestionType": "calendar_event",
    "text": "Add to Calendar",
    "postbackData": "add_event",
    "title": "Product Launch Event",
    "description": "Join us for the exciting product launch",
    "startTime": "2024-04-23 10:33:11",
    "endTime": "2024-04-23 18:33:11"
}

```

##### 8. URL 动作 - WebView

在应用内 WebView 中打开 URL。

<table id="bkmrk-%E5%8F%82%E6%95%B0-%E5%BF%85%E5%A1%AB-%E6%8F%8F%E8%BF%B0-suggestiont-5"><thead><tr><th>参数</th><th>必填</th><th>描述</th></tr></thead><tbody><tr><td>suggestionType</td><td>是</td><td>设置为 "url\_action"</td></tr><tr><td>application</td><td>是</td><td>设置为 "WEBVIEW"</td></tr><tr><td>webviewViewMode</td><td>否</td><td>视图模式：FULL、HALF、TALL</td></tr><tr><td>url</td><td>是</td><td>要在 WebView 中打开的 URL</td></tr><tr><td>description</td><td>否</td><td>WebView 的可访问性描述</td></tr></tbody></table>

```json
{
    "suggestionType": "url_action",
    "text": "Open Form",
    "postbackData": "open_webview_form",
    "application": "WEBVIEW",
    "url": "https://brand.com/form",
    "webviewViewMode": "FULL",
    "description": "Registration form"
}

```

<a id="bkmrk--9"></a>

#### 媒体指南

**富媒体卡片和富媒体卡片轮播中的媒体应遵循以下指南。**

##### 图片：

<table id="bkmrk-%E6%B6%88%E6%81%AF%E7%B1%BB%E5%9E%8B-%E5%8D%A1%E7%89%87%E6%96%B9%E5%90%91-%E5%8D%A1%E7%89%87%E9%AB%98%E5%BA%A6-%E5%8D%A1%E7%89%87%E5%AE%BD%E5%BA%A6-"><thead><tr><th>消息类型</th><th>卡片方向</th><th>卡片高度</th><th>卡片宽度</th><th>图片宽高比</th><th>图片最佳分辨率(px)</th><th>图片最大文件大小</th><th>支持的图片格式</th></tr></thead><tbody><tr><td>富媒体卡片</td><td>VERTICAL</td><td>SHORT</td><td>-</td><td>3:1</td><td>1440×480</td><td>2MB</td><td>JPEG, JPG, PNG, GIF</td></tr><tr><td></td><td>VERTICAL</td><td>MEDIUM</td><td>-</td><td>2:1</td><td>1440×720</td><td></td><td></td></tr><tr><td></td><td>HORIZONTAL</td><td>-</td><td>-</td><td>3:4</td><td>768×1024</td><td></td><td></td></tr><tr><td>轮播</td><td>NA</td><td>SHORT</td><td>SMALL</td><td>8:5</td><td>1160×720</td><td>1MB</td><td></td></tr><tr><td></td><td></td><td>SHORT</td><td>MEDIUM</td><td>5:2</td><td>1840×720</td><td></td><td></td></tr><tr><td></td><td></td><td>MEDIUM</td><td>SMALL</td><td>1:1</td><td>770×720</td><td></td><td></td></tr><tr><td></td><td></td><td>MEDIUM</td><td>MEDIUM</td><td>16:9</td><td>1280×720</td><td></td><td></td></tr></tbody></table>

##### 视频和缩略图：

<table id="bkmrk-%E6%B6%88%E6%81%AF%E7%B1%BB%E5%9E%8B-%E5%8D%A1%E7%89%87%E6%96%B9%E5%90%91-%E5%8D%A1%E7%89%87%E9%AB%98%E5%BA%A6-%E5%8D%A1%E7%89%87%E5%AE%BD%E5%BA%A6--1"><thead><tr><th>消息类型</th><th>卡片方向</th><th>卡片高度</th><th>卡片宽度</th><th>视频最大文件大小</th><th>支持的视频格式</th><th>缩略图宽高比</th><th>缩略图最佳分辨率(px)</th><th>缩略图文件大小</th><th>支持的缩略图格式</th></tr></thead><tbody><tr><td>富媒体卡片</td><td>VERTICAL</td><td>SHORT</td><td>-</td><td>10MB</td><td>MP4, M4V, MPEG, WEBM, H263, M4P</td><td>3:1</td><td>770×257</td><td>最小: 40KB, 最大: 100KB</td><td>JPEG, JPG, PNG</td></tr><tr><td></td><td>VERTICAL</td><td>MEDIUM</td><td>-</td><td></td><td></td><td>7:3</td><td>770×335</td><td></td><td></td></tr><tr><td></td><td>HORIZONTAL</td><td>-</td><td>-</td><td></td><td></td><td>25:33</td><td>250×330</td><td></td><td></td></tr><tr><td>轮播</td><td>NA</td><td>SHORT</td><td>SMALL</td><td>5MB</td><td></td><td>8:5</td><td>718×448</td><td></td><td></td></tr><tr><td></td><td></td><td>SHORT</td><td>MEDIUM</td><td></td><td></td><td>5:2</td><td>1140×448</td><td></td><td></td></tr><tr><td></td><td></td><td>MEDIUM</td><td>SMALL</td><td></td><td></td><td>1:1</td><td>480×448</td><td></td><td></td></tr><tr><td></td><td></td><td>MEDIUM</td><td>MEDIUM</td><td></td><td></td><td>16:9</td><td>796×448</td><td></td><td></td></tr></tbody></table>

在富媒体卡片消息中使用图片/视频时，请参考 [Google 最佳实践（富媒体卡片部分）](https://developers.google.com/business-communications/rcs-business-messaging/guides/learn/best-practices)

### 响应

#### 成功响应示例

```json
{
    "status": "success",
    "code": 200,
    "message": "",
    "data": {
        "template_id": "2217676094281515152",
        "name": "api_5_text",
        "type": "text",
        "status": "PENDING",
        "content": {
            "textMessage": "Dear [name], time to use rcs api",
            "suggestions": [
                {
                    "suggestionType": "reply",
                    "text": "Join us",
                    "postbackData": "click_reply"
                }
            ]
        },
        "created_time": 1767609428,
        "updated_time": 1767609428,
        "status_updated_time": 0
    },
    "error": {}
}

```

#### 模板状态说明：

**获取模板状态请需要回调设置**

<table id="bkmrk-%E7%8A%B6%E6%80%81-%E6%8F%8F%E8%BF%B0-pending-%E6%A8%A1%E6%9D%BF%E6%AD%A3%E5%9C%A8%E7%AD%89%E5%BE%85"><thead><tr><th>状态</th><th>描述</th></tr></thead><tbody><tr><td>PENDING</td><td>模板正在等待审核</td></tr><tr><td>APPROVED</td><td>模板已批准，可以使用</td></tr><tr><td>REJECTED</td><td>模板已被拒绝</td></tr><tr><td>DISABLED</td><td>模板已被禁用</td></tr><tr><td>ENABLED</td><td>模板已从禁用或暂停状态重新激活</td></tr><tr><td>SUSPENDED</td><td>模板已被暂停</td></tr></tbody></table>

#### 失败响应示例

```json
{
    "status": "error",
    "code": 400,
    "message": "type require",
    "data": {},
    "error": {}
}

```

# 短信模板管理

### 功能概述

短信模板管理用于统一配置和维护自动外呼任务中使用的短信内容。通过提前创建标准化的短信模板并支持动态变量替换，系统可根据具体业务场景（如未接通提醒、活动通知等）自动向客户发送相应的文本消息，从而提高外呼效率并规范服务话术。

### 功能入口

登录语音后台 → 进入 **「语音」** → **「自动外呼」** → **「短信模板」**

[![](https://document.infin8linx.com/uploads/images/gallery/2026-04/scaled-1680-/image-1777346812016.png)](https://document.infin8linx.com/uploads/images/gallery/2026-04/image-1777346812016.png)

#### 添加模板

1.在短信模板页面中，点击操作列的“添加”。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-04/scaled-1680-/image-1777346847592.png)](https://document.infin8linx.com/uploads/images/gallery/2026-04/image-1777346847592.png)

2.在弹出的对话框中，填写模板名称（例：未接通提醒\_2026促销）及短信正文内容

[![](https://document.infin8linx.com/uploads/images/gallery/2026-04/scaled-1680-/image-1777346933544.png)](https://document.infin8linx.com/uploads/images/gallery/2026-04/image-1777346933544.png)

**名称**：输入模板名称（例：未接通提醒\_2026促销）

**内容**：在文本框中输入短信正文。

#### 编辑模板

1.在短信模板页面中，点击目标模板操作列的 **“编辑”** 按钮。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-07/scaled-1680-/image-1782984119311.png)](https://document.infin8linx.com/uploads/images/gallery/2026-07/image-1782984119311.png)

2.在弹出的对话框中，修改模板的名称或短信正文内容。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-07/scaled-1680-/image-1782984171929.png)](https://document.infin8linx.com/uploads/images/gallery/2026-07/image-1782984171929.png)

3.确认无误后，点击 **“确认”** 以更新模板信息。

#### 删除模板

1.在短信模板页面中，点击目标模板操作列的 **“删除”**。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-07/scaled-1680-/image-1782984233012.png)](https://document.infin8linx.com/uploads/images/gallery/2026-07/image-1782984233012.png)

2.在弹出的确认提示框中，点击 **“确认”** 以永久删除该模板。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-07/scaled-1680-/image-1782984278257.png)](https://document.infin8linx.com/uploads/images/gallery/2026-07/image-1782984278257.png)

# Get Template Details

## Request

### API Domain

- https://api.incsapp.com

### API Route

- /external/templates/rcs/{template\_id}

### Method

- **GET**

### Headers

- certification-code: f484bd42-4a0c-39d....

### Parameters

-

## Response

### Sample Successful Response

```json
{
    "status": "success",
    "code": 200,
    "message": "",
    "data": {
        "template_id": "2217670951241515121",
        "name": "api_4_standalone_image",
        "type": "richcard",
        "category": "PROMOTION",
        "status": "APPROVED",
        "content": {
            "orientation": "VERTICAL",
            "height": "SHORT",
            "standaloneCard": {
                "cardTitle": "Keep calm & BAT on!",
                "cardDescription": "Dear [name], time to participate in lucky draw and win prizes",
                "mediaUrl": "https://incs-test.oss-ap-southeast-1.aliyuncs.com/chat/videos/6943e9cea07d7.mp4",
                "thumbnailUrl": "",
                "suggestions": [
                    {
                        "suggestionType": "reply",
                        "text": "Avail offer [offer_name]",
                        "postbackData": "offer_reply"
                    }
                ]
            }
        },
        "created_time": 1767095125,
        "updated_time": 1767337727,
        "status_updated_time": 1767337724
    },
    "error": {}
}

```

### Sample Error Response

```json
{
    "status": "error",
    "code": 404,
    "message": "The template is not found.",
    "data": {},
    "error": {}
}

```

# Message Status Webhook

### Webhook Request Method

- **POST**

### Webhook Payload

<table id="bkmrk-parameter-type-manda"><thead><tr><th>Parameter</th><th>type</th><th>Mandatory</th><th>Description</th></tr></thead><tbody><tr><td>event</td><td>string</td><td>Yes</td><td>This is set to "message\_status\_update"</td></tr><tr><td>business\_phone</td><td>string</td><td>No</td><td>Business phone number</td></tr><tr><td>message\_id</td><td>string</td><td>Yes</td><td>Message ID</td></tr><tr><td>message\_status</td><td>string</td><td>Yes</td><td>Message status, one of "sent", "failed", "delivered", "read"</td></tr><tr><td>error</td><td>object|null</td><td>Yes</td><td>Error details，default is set to null.</td></tr><tr><td>error.title</td><td>string</td><td>No</td><td>Service provider-defined error title.</td></tr><tr><td>error.code</td><td>int</td><td>No</td><td>Service provider-defined error code.</td></tr><tr><td>received\_at</td><td>timestamp</td><td>Yes</td><td>Webhook received timestamp.</td></tr></tbody></table>

#### Webhook Sample

```json
{
  "event": "message_status_update",
  "business_phone": "6281519236680",
  "message_id": "wamid.HBgNNjI4OTY1MjQ1NjU0OBUCABEYEkYxNTY4NkNBRUY...",
  "message_status": "failed",
  "error": {
    "code": 131049,
    "title": "This message was not delivered to maintain healthy ecosystem engagement."
  },
  "received_at": 1754466101
},

```

# Send RCS messages

### Request

#### API Domain

- https://api.incsapp.com

#### API Route

- /external/messages/rcs

#### Method

- **POST**

#### Headers

- Content-Type: application/json
- certification-code: f484bd42-4a0c-39d....

#### Parameters

**The below two fields are common in all messages.**

<table id="bkmrk-parameter-type-manda"><thead><tr><th>Parameter</th><th>Type</th><th>Mandatory</th><th>Description</th><th>Remarks</th></tr></thead><tbody><tr><td>to</td><td>string</td><td>Yes</td><td>Recipient phone number. Must be a digits-only format of country code + phone number.</td><td>e.g: 628XXXXXXXXX</td></tr><tr><td>type</td><td>string</td><td>Yes</td><td>Message type. Supported values are template message (template), and regular messages (text, image, video, document) which can be sent within 24 hours after the user replies.</td><td>e.g: text</td></tr></tbody></table>

#### Samples

##### Template message **without parameters**

```json
{
    "to": "85268411234",
    "type": "template",
    "template": {
        "name": "test_button_reply_1"
    }
}

```

##### Template message **with parameters**

```json
{
    "to": "85268411234",
    "type": "template",
    "template": {
        "name": "test_button_reply_1",
        "parameters": {
            "username": "jack",
            "service_name": "promotion"
        }
    }
}

```

##### Text message

```json
{
    "to": "85268411234",
    "type": "text",
    "text": "Hello"
}

```

##### Image message

```json
{
    "to": "85268411234",
    "type": "image",
    "image": {
        "link": "https://static.incsapp.com/chat/images/header-98403274893.png"
    }
}

```

##### Video message

```json
{
    "to": "85268411234",
    "type": "video",
    "video": {
        "link": "https://static.incsapp.com/chat/videos/abc.mp4"
    }
}

```

##### Document message

```json
{
    "to": "85268411234",
    "type": "document",
    "document": {
        "link": "https://static.incsapp.com/chat/files/template.pdf"
    }
}

```

### Response

#### Sample Successful Response

```json
{
    "status": "success",
    "code": 200,
    "message": "",
    "data": {
        "msg_id": "019b8d8e-c4e7-73fe-b333-470c51e61f9f"
    },
    "error": {}
}

```

#### Sample Error Response

```json
{
    "status": "error",
    "code": 10004,
    "message": "Template with the code [api_4_standalone_image] and bot [Wk3rZWBx435KKATY] received with insufficient custom params",
    "data": {},
    "error": {}
}

```

# 安全设置

本文专注于保障用户数据的安全性，特别是敏感信息如电话号码的保护措施。

#### 号码脱敏

为了增强客户隐私保护，在某些情况下可以启用号码脱敏功能。开启后，平台在展示或推送敏感信息（如主被叫号码）时将自动进行脱敏处理。

#### 功能入口

1. 登录呼叫中心控制台。
2. 在左侧导航栏依次选择 **语音 &gt; 设置 &gt; 系统设置**。
3. 在设置页面中，点击 **安全配置** Tab 标签。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1772417650453.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1772417650453.png)

#### 配置项说明

##### 号码脱敏

开启后，平台在以下场景中对电话号码进行部分隐藏（例如显示为 `138****1234`）：

- 控制台通话记录展示
- 导出报表中的号码信息

> 🔒 该设置仅影响**展示层**，原始通话数据仍完整存储于系统后台，用于计费与审计。

#### 操作步骤

1. 在 **号码脱敏** 选项右侧，点击开关按钮启用或关闭该功能。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1772418673301.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1772418673301.png)

2.点击页面 **保存**按钮，使配置生效。

> 💡 建议在涉及客户隐私的业务场景（如客服外呼、录音回放）中开启此功能，以符合数据安全合规要求。

# 语音文件管理

本文详细介绍了语音素材的上传、管理与使用过程，并对语音文件在 IVR 场景中的应用进行了全面说明。

#### 功能概述

语音素材是 IVR 自助服务中播放的音频内容，包括欢迎语、按键提示、无效输入提醒等。通过上传或生成语音文件并获取唯一标识，可在 IVR 配置中引用，实现定制化语音交互。

### 功能入口

1.登录呼叫中心控制台，在左侧导航栏选择 **语音 &gt; IVR管理 &gt; 语音文件**，进入语音素材管理页面。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1772434625730.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1772434625730.png)

### 功能介绍

#### 上传语音素材

1.在语音文件管理页面，点击 **添加** ，打开上传窗口。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1772434739587.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1772434739587.png)

2.在上传界面，按要求填写信息并上传音频文件，点击 **确认** 完成上传。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1772435812965.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1772435812965.png)

- 语音名称：必填项，用于标识该语音文件，支持 1–64 个字符（如“营业时间播报”）。
- 音频文件：上传本地 .wav 或 .mp3 文件（推荐采样率 8kHz/16bit，单声道，时长 ≤ 60 秒）。
- 描述：可选，用于说明语音用途或适用场景，最多 256 个字符。

⚠️ 注意：上传的音频文件需符合格式与大小限制，否则将上传失败。建议使用专业工具导出标准语音文件。

#### 查看与使用语音素材

上传成功后，系统自动生成唯一的 语音文件标识（如 voice\_20260302\_abc123）。

该标识将在 **IVR设置** &gt; **添加/编辑** IVR 页面中用于选择对应语音（如下拉列表或搜索框）。

语音文件一旦被 IVR 引用，不可删除，避免 IVR 播放失败。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1774247313625.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1774247313625.png)

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1774247228705.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1774247228705.png)

#### 编辑语音素材

1.在语音文件列表中，点击目标语音操作列的 **编辑**。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1774247761063.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1774247761063.png)

2.可修改 **语音名称** 或 **描述**，点击 **确认** 保存。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1774247813756.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1774247813756.png)

#### 删除语音素材

1.在语音文件列表中，点击目标语音操作列的 **删除**。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1774247918731.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1774247918731.png)

2.在弹出的确认对话框中点击 **确认**，完成删除。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1774247964930.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1774247964930.png)

⚠️ 重要：仅当语音文件未被任何 IVR 规则引用时，才允许删除。若已被使用，系统将提示“该语音正在被使用，无法删除”。

补充说明

- 所有语音文件存储于平台安全存储服务，无需用户自行维护。
- TTS 合成语音的语言、音色、语速等参数由平台全局配置决定，暂不支持单条设置。
- 建议为不同业务场景（如售前、售后、节假日）分别上传独立语音，便于管理和更新。

# 分机通话统计

本文详细介绍了分机通话数据的统计维度、查询条件、报表展示方式及单次通话的全链路详情，旨在帮助管理员全面掌握各分机的通话负载、服务质量（接通率、平均通话时长）及业务繁忙时段，为人员排班、资源优化及绩效考核提供数据支撑。

### 功能概述

分机通话统计模块聚合了语音业务平台中所有分机账号的历史通话记录。系统支持按时间范围、分机号码等维度进行筛选，并自动生成详细的数据列表。该功能主要包含以下两部分内容：

- **通话统计数据**：提供指定日期内的呼叫次数、接通与未接通数量、总通话时长等核心指标。
- **通话详情展示**：展示每一通电话的具体明细，包括被叫号码、呼叫时间、应答时间、结束时间、接通状态以及单次通话时长。

通过该功能，管理员可以快速查看各分机的通话量与基础指标，并深入查阅具体的通话明细记录。

### 功能入口

登录呼叫中心控制台，在左侧导航栏选择 **语音 &gt; 分机管理 &gt; 分机通话统计**，进入统计页面。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1774421785015.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1774421785015.png)

#### 1. 筛选与查询

在页面顶部的筛选区，支持组合以下条件进行精确查询：

- 时间范围：通过时间选择框自定义查询的起止时间（精确到秒）。
- 分机号码：输入特定分机号（支持模糊搜索），可查看指定坐席的通话情况；留空则统计全部分机。

设置好筛选条件后，点击 **查询** 按钮即可刷新下方的数据列表。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-07/scaled-1680-/image-1782964718743.png)](https://document.infin8linx.com/uploads/images/gallery/2026-07/image-1782964718743.png)

- 呼叫总数： 呼叫的总电话数（包括接通和未接通的）。
- 已接通次数：电话接通的次数。
- 未接通次数：未接通的电话次数。
- 通话总时长： 已接通的总通话时长。

#### 2. 查看通话详情

1.在通话统计列表中，点击目标记录操作列的 **“详情”** 按钮，系统将弹出通话全链路详情窗口。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1774421994746.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1774421994746.png)

2.在弹出的详情对话框，我们可以查看分机的详细通话情况。 [![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1774424167803.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1774424167803.png)

- 被叫号码：呼叫的目标号码
- 开始时间：呼叫开始时刻
- 应答时间：被叫应答时刻
- 结束时间：呼叫结束时刻
- 通话时间：真正通话的时间。
- 接通状态：已接通/未接通。

# TTS 在线生成语音

本文详细介绍了利用文本转语音（TTS）技术在线生成语音素材的过程，并对文本配置、变量插入及特殊格式读法进行了全面阐述。

### 功能概述

TTS 功能用于将文本内容实时转换为标准音频文件，适用于动态话术场景（如账单金额通知、验证码播报）。用户可灵活配置固定文本与参数变量，支持在保存前实时试听，合成后的音频纳入素材库供外呼任务调用。

### 功能入口

登录呼叫中心控制台，在左侧导航栏选择 **语音 &gt; 语音资源 &gt; 生成语音**，进入管理页面。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1774319489896.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1774319489896.png)

### 功能介绍

#### 创建 TTS 语音

在 TTS 文本生成语音页面，点击 **添加** 按钮；

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1774319563850.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1774319563850.png)

在弹出窗口中填写以下信息：

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1774319620908.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1774319620908.png)

- 语音名称：必填项，建议包含业务场景与版本（如“双11促销通知\_男声版”），1–20 个字符；
- 文本类型：必选项，支持两种模式：
    
    
    - 固定文本：直接输入全程不变的播报内容；
    - 参数文本：输入包含变量的模板文本，实际呼叫时由系统动态替换；
- 语言选择：必选项，下拉选择目标国家/地区语言（如“中文（中国）”、“英文（美国）”、“日文（日本）”等），系统将据此加载对应的发音引擎；
- 文本内容编辑区：
    
    在此区域输入具体话术；
    
    
    - 插入变量：点击工具栏 插入 按钮，可选择预设变量（如 {name}、{amount}），用于动态替换；
    - 插入停顿：点击工具栏 ⏸ 图标，可在语句间插入指定时长的停顿（如 0.5s, 1s），优化听感；
    - 朗读方式：针对选中变量或文本段，下拉选择以下五种读法规则之一： 
        - 默认：按常规文本语境自然朗读；
        - 号码：将数字串作为整体号码朗读（常用于电话号码、卡号等，保持连贯性）；
        - 字母逐个读出：将字符串中的字母或数字拆解为单个字符依次朗读（如“ABC123”读作“A、B、C、一、二、三”），常用于验证码或序列号；
        - 日期格式：自动识别并规范播报年月日（如“20231001”读作“二零二三年十月一日”）；
        - 货币金额：自动转换为大写金额或规范读法（如“100.50”读作“一百元五角”）；
- 实时试听（重要）：
    
    
    - 在点击保存前，可点击编辑区下方的 试听 按钮；
    - 系统将根据当前配置的文本、变量样例、停顿及朗读方式即时合成语音并播放；
    - 用户可反复调整参数并试听，直至效果满意；

确认无误后，点击 生成并保存 完成创建。

⚠️ 格式要求：

文本长度：单次生成不超过 500 个字符（含变量占位符）；

变量规范：变量名需与外呼数据表头严格一致，否则无法替换；

特殊符号：不支持复杂数学公式或特殊表情符号，系统将自动过滤或报错；

生成时长：合成后的音频时长不得超过 60 秒。

#### 查看与播放已生成语音

在 TTS 语音列表中，点击目标条目操作列的 **播放语音** 按钮；

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1774320604151.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1774320604151.png)

系统将播放该条目最终生成并保存的音频文件；

可通过播放器控制暂停、调节音量以及下载音频文件。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1774321593761.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1774321593761.png)

#### 删除 TTS 语音

在 TTS 语音列表中，点击目标条目操作列的 **删除**；

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1774320526401.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1774320526401.png)

在弹出的确认对话框中，点击 **确认**；

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1774320565199.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1774320565199.png)

若删除成功，条目将从列表中移除。

⚠️ 重要：仅当该 TTS 语音 未被任何自动外呼或预测式外呼任务引用时，才允许删除。若已被使用，系统将提示：“该语音素材正在被使用，无法删除”。

# 通话统计概览

本文详细介绍了呼叫中心“通话统计”页面的功能与操作流程。该页面以日期为维度，直观展示每日的话务总量、接通情况及服务质量核心指标，帮助管理者快速掌握整体运营趋势。

### 功能概述

通话统计功能用于按日聚合全中心（或指定权限范围内）的呼叫数据，提供关键指标的宏观视图。通过此页面，用户可快速评估每日话务负载、坐席接听效率及线路稳定性，无需深入明细即可发现异常波动（如接通率骤降）。

### 功能入口

登录呼叫中心控制台，在左侧导航栏选择 **通话 &gt; 通话统计（或 报表 &gt; 每日概览）**，进入统计页面。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1774420498204.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1774420498204.png)

### 功能介绍

#### 查看统计列表

页面顶部提供时间范围筛选器，支持以下操作：

- 日期范围：必选项，支持选择起止日期（如“最近7天”、“本月”或自定义时间段）；
- 设定好条件后，点击 **搜索** 按钮，下方列表将即时刷新显示对应日期的统计结果。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1774420641258.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1774420641258.png)

- **日期：** 统计数据的归属日期 格式为 YYYY-MM-DD，按时间倒序或正序排列。
- **呼叫总数：** 当日发起的所有呼叫请求总和 包含呼入、呼出及内部通话；无论是否接通，只要发起呼叫即计入。
- **接通总数：** 指当日成功建立通话且产生时长的记录，包含坐席接起、客户接起、IVR成功接入及语音信箱。
- **未接通总数：** 当日未能成功建立通话的数量 包含忙线、无应答、用户挂断、系统故障等所有非接通状态的记录。 (呼叫总数 = 接通总数 + 未接通总数)
- **接通率：** 衡量线路质量与坐席效率的核心指标 计算公式：(接通总数 ÷ 呼叫总数) × 100%。 通常保留两位小数（如 95.20%）。

⚠️ 注意：若呼叫总数为0，该字段显示为 - 或 0%。

# 获取Token

### 域名

- https://api.incsapp.com

### 请求路由

- /external/auth/token

### 请求方式

- **POST**

### 请求头

- Content-Type: application/json

### 请求参数

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E5%BF%85%E5%A1%AB-%E6%8F%8F%E8%BF%B0-usernam"><thead><tr><th>参数名</th><th>类型</th><th>必填</th><th>描述</th></tr></thead><tbody><tr><td>username</td><td>string</td><td>是</td><td>admin 账号</td></tr><tr><td>password</td><td>string</td><td>是</td><td>密码</td></tr></tbody></table>

### 响应示例

```json
{
    "status": "success",
    "code": 200,
    "message": "",
    "data": {
        "access_token": "a06b3b2d7f762dde75b6be6a54ca9ad38b2c4bf95b48c43fc42802d6b57e0c01",
        "expires_in": 7200 // 有效期，秒
    },
    "error": {}
}

```

# 创建并分配任务

### 域名

- https://api.incsapp.com

### 请求路由

- /external/tasks

### 请求方式

- **POST**

### 请求头

- Content-Type: application/json
- Authorization: Bearer a06b3b2d7f762....

### 请求参数

#### 请求参数列表

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E5%BF%85%E5%A1%AB-%E6%8F%8F%E8%BF%B0-name-st"><thead><tr><th>参数名</th><th>类型</th><th>必填</th><th>描述</th></tr></thead><tbody><tr><td>name</td><td>string</td><td>是</td><td>任务名称，限256字符</td></tr><tr><td>description</td><td>string</td><td>否</td><td>任务描述，限256字符</td></tr><tr><td>task\_template\_id</td><td>int</td><td>否</td><td>任务模板id</td></tr><tr><td>user\_phone</td><td>string</td><td>是</td><td>任务对象手机号，必须是区号开头的纯数字格式，例如："6281512341234"</td></tr><tr><td>user\_name</td><td>string</td><td>否</td><td>任务对象名称</td></tr><tr><td>assignee\_username</td><td>string</td><td>是</td><td>任务被分配人账号</td></tr><tr><td>channels</td><td>array</td><td>是</td><td>任务通讯通道，可多选，通道名+通道授权id （voice通道不需要填授权id）</td></tr><tr><td>custom\_data</td><td>object</td><td>否</td><td>任务模板对应的自定义数据字段值</td></tr></tbody></table>

#### 请求示例

```json
{
  "name": "8 月催收任务",
  "description": "",
  "task_template_id": 123,
  "user_phone": "628123456789",
  "user_name": "Budi",
  "assignee_username": "agent1",
  "channels": [
    {
      "channel_name": "whatsapp-meta",
      "auth_id": 30058
    },
    {
      "channel_name": "voice"
    }
  ],
  "custom_data": {
    "订单号": "ORD-1",
    "金额": "100000"
  }
}

```

### 响应

#### 成功响应示例

```json
{
    "status": "success",
    "code": 200,
    "message": "",
    "data": {
        "total": 1,
        "data": [
            {
                "id": 3625,
                "creation_id": 181,
                "name": "9 月催收任务",
                "description": "www",
                "channels": [
                    {
                        "channel_name": "voice",
                        "auth_id": 30090,
                        "conversation_id": 5580
                    },
                    {
                        "channel_name": "whatsapp-meta",
                        "auth_id": 30058,
                        "conversation_id": 5581
                    }
                ],
                "user_name": "Budi",
                "user_phone": "628123456789",
                "assignee_username": "incs_1",
                "status": 1,
                "task_template_id": 11,
                "custom_data": {
                    "data": "2026-09-10",
                    "money": "100000",
                    "name": "www",
                    "number": "432526436436"
                },
                "created_at": "2026-09-14 10:35:13",
                "updated_at": "2026-09-14 10:53:47"
            }
        ]
    },
    "error": {}
}

```

#### 失败响应示例

```json
{
    "status": "error",
    "code": 400,
    "message": "Data error",
    "data": {},
    "error": {}
}

```

# Extension Call Statistics

This document provides a detailed guide on the statistical dimensions, query conditions, and report display methods for extension call data, as well as the full-link details of individual calls. It is designed to help administrators gain comprehensive insights into each extension's call load, service quality (e.g., answer rate, average call duration), and peak business hours, thereby providing data support for staff scheduling, resource optimization, and performance evaluation.

### Feature Overview

The Extension Call Statistics module aggregates historical call records for all extension accounts on the voice service platform. The system supports filtering by dimensions such as time range and extension number, and automatically generates detailed data lists. This feature primarily includes the following two parts:

- **Call Statistics:** Provides key metrics for the specified date range, including the number of calls, answered/unanswered calls, and total call duration.
- **Call Details:** Displays specific details for each call, including the called number, start time, answer time, end time, connection status, and single call duration.

Through this feature, administrators can quickly review the call volume and basic metrics for each extension, as well as access specific call detail records.

### Accessing the Feature

Log in to the Call Center Console. In the left navigation pane, select **Voice &gt; Agents &gt; Statistics** to access the statistics page.

[![](https://document.infin8linx.com/uploads/images/gallery/2026-07/scaled-1680-/image-1782964213529.png)](https://document.infin8linx.com/uploads/images/gallery/2026-07/image-1782964213529.png)

#### 1. Filter and Query

In the filter area at the top of the page, you can combine the following conditions for precise queries:

- **Time Range:** Customize the start and end times for your query using the time picker (accurate to the second).
- **Extension Number:** Enter a specific extension number (fuzzy search supported) to view the call records for a specific agent. Leave it blank to include all extensions.

After setting the filter conditions, click the Query button to refresh the data list below.

[![](https://document.infin8linx.com/uploads/images/gallery/2026-07/scaled-1680-/image-1782964280970.png)](https://document.infin8linx.com/uploads/images/gallery/2026-07/image-1782964280970.png)

- **Total Calls:** The total number of calls made (including both answered and unanswered calls).
- **Answered Calls:** The number of successfully answered calls.
- **Unanswered Calls:** The number of calls that were not answered.
- **Total Call Duration:** The total duration of all answered calls.

#### 2. Viewing Call Details

1.In the call statistics list, click the Details button in the Actions column for the target record. The system will pop up the full-link call details window.

[![](https://document.infin8linx.com/uploads/images/gallery/2026-07/scaled-1680-/image-1782964331462.png)](https://document.infin8linx.com/uploads/images/gallery/2026-07/image-1782964331462.png)

2.In the pop-up details dialog box, you can view the detailed call information for the extension.

[![](https://document.infin8linx.com/uploads/images/gallery/2026-07/scaled-1680-/image-1782964410125.png)](https://document.infin8linx.com/uploads/images/gallery/2026-07/image-1782964410125.png)

- **Called Number:** The target number being called.
- **Start Time:** The time when the call was initiated.
- **Answer Time:** The time when the called party answered the call.
- **End Time:** The time when the call ended.
- **Talk Time:** The actual duration of the conversation.
- **Connection Status:** Answered / Unanswered.

# Creating an Outbound Call Task

### Accessing the Feature

Log in to the Call Center Backend → Go to Voice &gt; Automatic Outbound Call &gt; Task Management.

#### Step 1: Create a Task

On the Task Management page, click Add. Enter the Task Name (e.g., January 2026 Promotional Campaign) → Click Next.

#### Step 2: Configure Recording

Select an uploaded MP3 file (e.g., Promotional Campaign-Chinese.mp3) from the Recording File drop-down list.

#### Step 3: Sending Settings

##### 1.Select Call List

Select an uploaded list (e.g., Promotional List\_202601.xlsx) from the drop-down menu. Note: The list must be uploaded in advance via List Management.

##### 2.Set Start Time

Execute Immediately: The task will start right after it is created. Scheduled Execution: You can set any specific time in the future.

> ⚠️ Note: The execution time is based on Indonesia time.

##### 3. SMS Settings (Requires an active SMS account)

Please configure the following two types of SMS messages according to your business requirements:

**Send SMS on Hang-up:**

Auto-send a service confirmation SMS when the customer hangs up after answering, to complete the call loop. If "Do Not Send SMS" is selected: No SMS will be triggered after the call ends. If "Send SMS" is selected: Please select a pre-approved SMS template. This template will be used to send the message after the call ends. Example: SMS Content = Dear Customer, your service has been successfully processed. Please check your account. \[Company Name\]

**Send SMS on Missed Call:**

This option is independent of the "Send SMS on Hang-up" feature and can be enabled or disabled separately.

When a call is not connected (e.g., unanswered, powered off, busy, or out of signal), a reminder SMS will be automatically sent to prevent the customer from missing important information and to improve the reach rate.

- **If "Do Not Send SMS" is selected:** No SMS will be sent.
- **If "Send SMS" is selected:** Please select a pre-approved SMS template, which will be used to send the message after the call ends.

**Example:** The outbound task calls the customer's mobile phone, but the customer does not answer → The system automatically sends an SMS: "\[XX Company\] You have a missed call. Reply 1 for details."

> 💡 Tip: Both types of SMS can be enabled simultaneously. The system will intelligently determine which one to trigger based on the actual call result.

#### 4. Submit Task

Click Submit → The task is created successfully.

# Task Management

### Overview

Task Management is used to create, configure, and schedule automatic outbound call tasks. Through this module, users can bind audio recordings and call lists, flexibly set execution times, and intelligently trigger corresponding SMS notifications based on call status (such as active hang-up or unanswered calls), thereby achieving an automated closed-loop management of outbound call operations.

### Accessing the Feature

After logging in to the Call Center platform, navigate to **Voice &gt; Auto Call &gt; Scheduler**.

#### Create Task

##### Step 1: Set Task Name

On the **Task Management** page, click **Add**. In the dialog box, enter a task name (e.g., **January 2026 Promotion**) and click **Next Setp**.

[![](https://document.infin8linx.com/uploads/images/gallery/2026-07/scaled-1680-/image-1783048206636.png)](https://document.infin8linx.com/uploads/images/gallery/2026-07/image-1783048206636.png)

> **Note:** Task names can contain only Chinese characters, English letters, and numbers. Special characters (e.g., **@**, **\#**, and **%**) are not allowed.

##### Step 2: Configure the Recording

In the **Recording File** drop-down list, select a previously uploaded MP3 file (e.g., **Promotion Campaign - Chinese.mp3**), then click **Next Setp**.

> **Note:** The recording file must be uploaded in advance through the **Recording File Management** module. For more information, see the **Recording File Management** section.

[![](https://document.infin8linx.com/uploads/images/gallery/2026-07/scaled-1680-/image-1783048456901.png)](https://document.infin8linx.com/uploads/images/gallery/2026-07/image-1783048456901.png)

### Step 3: Configure Send Settings

On the **Send Settings** page, configure the following task parameters:

[![](https://document.infin8linx.com/uploads/images/gallery/2026-07/scaled-1680-/image-1783048513902.png)](https://document.infin8linx.com/uploads/images/gallery/2026-07/image-1783048513902.png)

**Select Roster:** Select a previously uploaded roster from the drop-down list (e.g., **Promotion\_List\_202601.xlsx**).

> **Note:** The roster must be uploaded in advance through the **Call Roster** module. For more information, see the **Call Roster Management** section.

**Start Time:** Select **Run Immediately** to start the task immediately after it is created, or **Scheduled Run** to specify a future start time.

> Note: The system uses Western Indonesia Time (WIB, UTC+7) for task scheduling.

**SMS Settings** (requires an active SMS account): Configure the following two types of SMS settings based on your business requirements:

**Send SMS on Call Disconnect:** This SMS is triggered when the customer hangs up after answering the call, helping complete the post-call follow-up. To enable this feature, select **Send SMS**, then choose a pre-approved SMS template from the **SMS Template** drop-down list. For more information, see the **SMS Template Management** section. After the call ends, the system sends the SMS using the selected template.

> **Example:** SMS content: **Dear Customer, your requested service has been completed. Please check it. \[Company Name\]**

**Send SMS on Unanswered Call:** This SMS is triggered when a call is not answered (e.g., no answer, powered off, or busy), helping notify the customer. To enable this feature, select **Send SMS**, then choose a pre-approved SMS template from the **SMS Template** drop-down list. For more information, see the **SMS Template Management** section. After the call ends, the system sends the SMS using the selected template.

> **Example:** An outbound call is placed to the customer, but the call is not answered. The system automatically sends the following SMS: **"\[XX Company\] You have a missed call. Reply with 1 for more information."**

**Tip:** Both SMS types can be enabled at the same time. The system automatically determines which SMS to send based on the actual call outcome.

##### Step 4: Submit the Task

After confirming that all information is correct, click **Submit** to create the task.

### Edit a Task

1. On the **Task Management** page, locate the target task, click **Edit** in the **Actions** column, and then select **Edit** from the drop-down menu.
2. In the dialog box, modify the task name.
3. After confirming that all information is correct, click **Confirm** to update the task information.

## Pause a Task

1. On the **Task Management** page, locate the target task, click **Edit** in the **Actions** column, and then select **Pause** from the drop-down menu.
2. In the dialog box, click **Confirm** to pause the task.

# Recording File Management

### Overview

The **Recording File Management** module is used to upload and manage pre-recorded audio messages (such as notifications and reminders) for automatic outbound call tasks. Once uploaded, recording files are added to the voice asset library and can be used by outbound call tasks.

### Accessing the Feature

After logging in to the Call Center platform, navigate to **Voice** &gt; **Voice Assets** &gt; **Recording File Management**.

### Feature Description

#### Upload a Recording File

1. On the **Recording File Management** page, click **Add**.
2. In the dialog box, enter the following information:

- **Voice Name:** Required. It is recommended to include the business scenario and version in the name (e.g., **March Payment Reminder\_V2**). The name must be between 1 and 20 characters.
- **Audio File:** Click **Select File** to upload a local **.mp3** or **.wav** file.
- **Description:** Optional. Used to describe the applicable scenario or validity period. Up to 100 characters.
- Click **Confirm** to complete the upload.

**Note:** The uploaded audio file must meet the following requirements:

- **Audio Format:** MP3 (recommended) or WAV
- **Sample Rate:** 8000 Hz
- **Channels:** Mono
- **Duration:** No longer than 60 seconds
- **File Size:** No larger than 1 MB

Files that do not meet these requirements cannot be uploaded.

#### Edit Recording File Information

1. On the **Recording File Management** page, locate the target recording file and click **Edit** in the **Actions** column.
2. In the dialog box, you can modify the following information:

- **Voice Name**
- **Description**

Click **Confirm** to save the changes.

**Note:** Uploaded audio files cannot be replaced. Only the metadata (Voice Name and Description) can be modified.

#### Preview a Recording File

1. On the **Recording File Management** page, locate the target recording file and click **Play** in the **Actions** column.
2. The system plays the recording in the embedded audio player.

You can use the player controls to pause playback, adjust the playback speed, or download the recording.

**Tip:** It is recommended to preview the recording after uploading it to verify the audio quality, playback speed, and content before using it for outbound call tasks.

#### Delete a Recording File

1. On the **Recording File Management** page, locate the target recording file and click **Delete** in the **Actions** column.
2. In the confirmation dialog box, click **Confirm**.

If the recording file is deleted successfully, it is removed from the list.

**Important:** A recording file can be deleted only if it is not referenced by any automatic outbound call or predictive outbound call task. If the recording file is in use, the system displays the following message: **"This recording file is currently in use and cannot be deleted."**

# Agent Groups

This page provides detailed instructions on creating agent groups and explains their key features.

### Overview

An **Agent Group** is a logical organizational unit that manages multiple agents. Agents are assigned to groups, and all customer calls are ultimately handled by the assigned agents.

### Accessing the Feature

1. After logging in to the Call Center platform, navigate to **Customer Service Management** &gt; **Agent Groups** to view the agent groups you have created.

### Feature Description

#### Create an Agent Group

1. On the **Agent Groups** page, click **Add** to open the **Create Agent Group** dialog box.
2. Enter the required information, then click **Confirm** to create the agent group.

- **Group Name:** Required. The name must contain between 1 and 64 characters.
- **Assignment Strategy:** Specifies how incoming calls are assigned to agents within the group.
    
    
    - **Random:** Assigns calls randomly.
    - **Call Duration:** Assigns calls based on each agent's total call duration.
    - **Call Count:** Assigns calls based on the number of calls handled by each agent.
    - **Priority:** Assigns calls according to the configured priority.
- **Description:** Optional. Enter a description for the agent group.

##### Add Agent Group Members

1. On the **Agent Groups** page, locate the target group and click **Members** in the **Actions** column.
2. Click **Add** to open the **Select Agents** dialog box.
3. Select the agents to add, configure the required settings, and then click **Confirm**.

##### Edit Agent Group Members

1. Locate the target agent and click **Edit** in the **Actions** column.
2. In the dialog box, modify the **Agent Weight** or **Agent Status**, then click **Confirm**.

#### Edit an Agent Group

1. Locate the target agent group and click **Edit** in the **Actions** column.
2. In the dialog box, modify the **Group Name**, **Assignment Strategy**, **Status**, or **Description**, then click **Confirm** to save the changes.

#### Delete an Agent Group

1. On the **Agent Groups** page, locate the target agent group and click **Delete** in the **Actions** column.
2. In the confirmation dialog box, click **Confirm** to delete the agent group.

**Important:** If the agent group is associated with an IVR flow, callers transferred from the IVR to this agent group will not be answered after the group is deleted.

# Callback Configuration

This page explains how to configure callback URLs to receive key event notifications from the voice platform, such as call status updates, call detail record (CDR) generation, and recording file availability.

## Accessing the Feature

1. After logging in to the Call Center platform, navigate to **Voice** &gt; **Settings** &gt; **System Settings**.
2. On the **System Settings** page, select the **Callback Configuration** tab.

## Configuration Items

- **CDR Callback URL:** Receives call detail record (CDR) data.
- **Call Status Callback URL:** Receives real-time call status events, such as **Ringing**, **Answered**, and **Disconnected**.
- **Predictive Task Status Callback URL:** Receives status updates for predictive outbound call tasks, such as successful calls and unanswered calls.

**Note:** Callback URLs must be publicly accessible **HTTP** or **HTTPS** URLs and must be able to process **HTTP POST** requests from the platform.

## Procedure

1. Enter the appropriate callback URL in each field.
2. Click **Save** to apply the configuration.

When a relevant event occurs, the platform automatically sends a notification in **JSON** format to the configured callback URL.

# Call Records

This page provides detailed instructions on querying and managing call records in the Call Center platform, including search filters, field descriptions, and recording-related operations.

### Overview

The **Call Records** feature allows you to query and review detailed information for all inbound and outbound calls in real time or from historical records. It is suitable for call quality monitoring, business verification, and dispute resolution. Users can search call records using multiple criteria, such as call time, extension number, phone number, and call status. The feature also supports online playback of call recordings, downloading audio files, and viewing call transcriptions. All records are stored in the system logs for future reference.

### Accessing the Feature

After logging in to the Call Center platform, navigate to **Calls** &gt; **Call Records** (or **Reports** &gt; **Call Details**) to open the **Call Records** page.

### Feature Description

#### Search Call Records

On the **Call Records** page, the filter bar provides the following search options:

- **Call Time:** Required. Select a date and time range (for example, **Last 24 Hours** or **Custom Range**). Only records within the selected period are displayed.
- **Extension Number:** Optional. Enter an extension number to view all calls handled by the corresponding agent.
- **Caller/Callee Number:** Optional. Enter a full or partial phone number to perform a fuzzy search for matching records.
- **Call Type:** Select from **Manual Call**, **API Call**, **Double Call**, **Predictive Outbound Call**, or **IVR Call**.
- **Call Direction:** Select **Inbound** or **Outbound**.
- **Call Status:** Select **Answered** or **Unanswered** to quickly locate specific call records.

After configuring the search criteria, click **Search**. The results list is refreshed immediately to display the matching records.

Each call record includes the following key information:

- **Basic Information:** Caller Number, Callee Number, Extension Number, and Call Direction (Inbound or Outbound).
- **Call Information:** Call Type (for example, **Predictive Outbound Call**), Hang-up Party (Caller or Callee), and the IP addresses of both parties.
- **Time Information:**
    
    
    - **Call Time:** The time when the call was initiated.
    - **Answer Time:** The time when the call was answered.
    - **End Time:** The time when the call ended.
    - **Wait Time:** The time elapsed between ringing and answering.
    - **Talk Time:** The actual duration of the conversation, displayed in seconds or minutes.

#### Play Call Recordings

1. On the **Call Records** page, locate the target record and click **Play** in the **Actions** column.
2. The system opens the audio player in a new browser page.
3. You can listen to the complete recording of the selected call.

#### Download Call Recordings

1. On the **Call Records** page, locate the target record and click **Download** in the **Actions** column. The browser immediately starts the file download.
2. The audio file for the selected call (typically in **WAV** or **MP3** format) is saved to your default download folder.
3. You can play the downloaded file using any media player or archive it for future reference.

#### Speech-to-Text

1. On the **Call Records** page, locate the target record and click **Speech-to-Text** (or **View Transcript**) in the **Actions** column.
2. In the dialog box, select the language for transcription.
3. Click **Confirm**. The system automatically uses the **ASR (Automatic Speech Recognition)** engine to transcribe the selected call recording.
4. After the transcription is complete, you can view the results by navigating to **Calls** &gt; **Recording Transcriptions**.

**Note:**

- If the recording file has not yet been uploaded or transcoded (typically within 1–5 minutes after the call ends), the **Play** and **Download** buttons may be temporarily disabled or display the message **"Resource is being prepared."**
- The accuracy of the **Speech-to-Text** feature may be affected by call quality, accents, and background noise. The transcription results are provided for reference only. Please refer to the original recording when necessary.
- Viewing or downloading recordings requires the appropriate data access permissions. Users without the required permissions cannot view the corresponding action buttons.

#### Export Data (Optional)

On the **Call Records** page, click **Export** above the results list. The system provides two export modes for different data volumes.

##### Synchronous Export (Recommended for Small Data Sets)

If the number of records matching the current search criteria is relatively small (for example, fewer than **1,000** records), the system performs a synchronous export.

1. Click **Export** above the call records list.
2. The browser immediately opens the file download dialog box.
3. Download the generated **CSV** file, which contains all available record information, including call time, phone numbers, and call duration, for offline analysis or archiving.

**Note:** If the data volume is large, the synchronous export may fail because of network timeouts. In this case, it is recommended to use **Asynchronous Export** instead.

##### Asynchronous Export (Recommended for Large Data Sets)

###### Create an Export Task

1. Click **Background Export** above the call records list.
2. The system creates an export task in the background and displays the message: **"The export task has been created. Go to the Task Center to view its progress."** The page remains responsive without timing out.

###### View Export Progress

1. Navigate to **Calls** &gt; **Task Center** (or **Export Task Management**) from the left navigation pane.
2. Locate the export task you created.
3. Check the **Status** column to monitor the task progress in real time, such as **Queued**, **Generating (50%)**, **Completed**, or **Failed**.

###### Download the Exported File

1. When the task status changes to **Completed**, the **Download** button in the **Actions** column becomes available.
2. Click **Download** to save the exported data file to your local device.
3. The file can be downloaded multiple times. By default, exported files are retained for **2 hours** after the task is completed (depending on the system configuration) and are automatically deleted after expiration.

**Note:**

- **Maximum Records:** Each asynchronous export task typically supports exporting **100,000 to 500,000** records, depending on the system configuration.
- **File Retention:** Exported files are stored temporarily. Download them before they expire.
- **Concurrent Tasks:** The number of asynchronous export tasks that a user can run simultaneously may be limited (for example, a maximum of **3** tasks). Additional tasks must wait until an existing task is completed.

**Additional Notes:**

- **Permission Control:** Standard agents can typically view only the call records associated with their own extensions, while administrators and quality assurance personnel can access all call records.
- **Recording Availability:** Recording files may require **1–5 minutes** after a call ends to be uploaded and transcoded. During this period, playback and download may be temporarily unavailable.
- **Data Retention:** Call recordings and detailed call records are typically retained for **3–6 months**, depending on your organization's retention policy. After expiration, they may be automatically deleted or archived to cold storage.

# Voice File Management

This page provides detailed instructions on uploading, managing, and using voice files, and explains how they are used in IVR scenarios.

### Overview

Voice files are audio prompts played during IVR self-service interactions, including welcome messages, menu prompts, and invalid input notifications. After uploading or generating a voice file, the system assigns it a unique identifier that can be referenced when configuring IVR flows to provide customized voice interactions.

### Accessing the Feature

1. After logging in to the Call Center platform, navigate to **Voice** &gt; **IVR Management** &gt; **Voice Files**.

### Feature Description

#### Upload Voice Files

1. On the **Voice Files** page, click **Add** to open the upload dialog box.
2. Enter the required information, upload the audio file, and then click **Confirm**.

- **Voice Name:** Required. Enter a name for the voice file (1–64 characters), for example, **Business Hours Announcement**.
- **Audio File:** Upload a local **.wav** or **.mp3** file. The recommended format is **8 kHz**, **16-bit**, **Mono**, with a maximum duration of **60 seconds**.
- **Description:** Optional. Enter a description of the voice file or its intended use. Up to **256** characters.

**Note:** Uploaded audio files must meet the required format and size limitations. Otherwise, the upload will fail. It is recommended to use professional audio editing software to export standard audio files.

#### View and Use Voice Files

After a voice file is uploaded successfully, the system automatically generates a unique **Voice File ID** (for example, **voice\_20260302\_abc123**).

The **Voice File ID** can be selected or searched when adding or editing an IVR configuration in **IVR Settings**.

A voice file cannot be deleted after it has been referenced by an IVR configuration to prevent playback failures.

#### Edit Voice Files

1. On the **Voice Files** page, locate the target voice file and click **Edit** in the **Actions** column.
2. Modify the **Voice Name** or **Description**, then click **Confirm** to save the changes.

#### Delete Voice Files

1. On the **Voice Files** page, locate the target voice file and click **Delete** in the **Actions** column.
2. In the confirmation dialog box, click **Confirm**.

**Important:** A voice file can be deleted only if it is not referenced by any IVR configuration. If the voice file is in use, the system displays the following message: **"This voice file is currently in use and cannot be deleted."**

### Additional Information

- All voice files are securely stored by the platform. No manual file maintenance is required.
- Language, voice, and speech rate settings for TTS-generated voice files are controlled by the platform's global configuration and cannot be configured individually.
- It is recommended to maintain separate voice files for different business scenarios, such as pre-sales, after-sales, and holiday services, to simplify management and future updates.

# 质检任务

本文档详细介绍了语音质检模块中质检任务的创建、配置、执行监控及结果分析全流程。系统支持基于话单与离线录音两种数据源，提供精细化的任务调度机制，并通过可视化的进度反馈与深度的转写详情，帮助管理员高效完成业务质检与复盘。

## 功能概述

质检任务是执行语音分析的核心载体。管理员可灵活指定待分析的录音范围（自动拉取话单或手动上传文件），配置执行策略（立即或定时）。任务执行后，系统实时反馈成功/失败进度，并提供从列表概览到单通电话时间轴分析的多层级结果查看功能，支持对通话内容进行深度挖掘。

## 功能入口

1. 登录后台管理系统。
2. 在左侧导航栏选择 **语音质检 &gt; 质检任务**，进入任务管理页面。
    
    [![](https://document.infin8linx.com/uploads/images/gallery/2026-08/scaled-1680-/image-1787884804451.png)](https://document.infin8linx.com/uploads/images/gallery/2026-08/image-1787884804451.png)

## 功能介绍

### 1. 查看任务列表

在质检任务列表中，可通过顶部筛选栏（创建时间、任务名称、状态、数据集来源）快速检索任务。列表核心字段含义如下：

- **任务名称**：自定义的任务标识。
- **数据集来源**：区分数据来源为“话单”或“离线录音”。
- **时间段**：任务覆盖的录音时间范围。
- **执行方式**：显示为“立即执行”或“定时执行”。
- **状态**：反映任务当前所处的生命周期阶段。 
    - **待执行**：任务已创建但尚未开始（需手动点击“开启”）。
    - **运行中**：任务正在处理数据。
    - **已完成**：所有数据处理完毕。
    - **失败**：任务执行过程中出现异常中断。
- **进度**：采用 `成功数/失败数/总数` 的格式展示。例如 `0/3/3` 表示总共3条录音，0条成功，3条失败；`0/1/1` 表示1条录音处理失败。
- **创建时间**：任务生成的具体时间。

### 2. 创建质检任务

1. 在任务列表页左上角，点击 **+ 创建任务**。 [![](https://document.infin8linx.com/uploads/images/gallery/2026-08/scaled-1680-/image-1787884885536.png)](https://document.infin8linx.com/uploads/images/gallery/2026-08/image-1787884885536.png)
2. 在弹出的对话框中，填写基础信息： [![](https://document.infin8linx.com/uploads/images/gallery/2026-08/scaled-1680-/image-1787884993905.png)](https://document.infin8linx.com/uploads/images/gallery/2026-08/image-1787884993905.png)
    
    
    - **任务名称**：输入易于辨识的名称。
    - **语言**：选择录音对应的语种（如“印尼语”）。
    - **执行方式**： 
        - **立即执行**：任务创建后进入“待启动”状态，需在列表页手动点击“开启”方可开始分析（以便修改确认）。
        - **定时执行**：设定未来的触发时间，系统将自动按时启动。
3. 根据业务需求选择 **数据集来源**：
    
    
    - **场景一：选择“话单”**
        - **话单时间段**：设置起始时间与结束时间，系统将自动拉取该时间段内的所有通话记录作为质检对象。
    - **场景二：选择“离线录音”**
        - **上传录音**：支持手动上传本地录音文件（格式支持 .wav, .mp3），适用于模型测试或特定案例复盘。

### 3. 查看执行结果

对于状态为“已完成”或包含部分成功数据的任务，点击操作列的 **结果** 按钮，可弹出该任务下的录音处理清单。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-08/scaled-1680-/image-1787885288860.png)](https://document.infin8linx.com/uploads/images/gallery/2026-08/image-1787885288860.png)

[![](https://document.infin8linx.com/uploads/images/gallery/2026-08/scaled-1680-/image-1787886517906.png)](https://document.infin8linx.com/uploads/images/gallery/2026-08/image-1787886517906.png)

**结果列表字段说明：**

- **被叫号码/分机号码**：通话双方的号码信息。
- **文件名**：原始录音文件的名称。
- **录音时长**：通话持续的秒数。
- **来源**：区分数据来源（如“自动”拉取或“手动”上传）。
- **识别类型**：显示语音识别的技术类型（如“只识别到一方”、“正常双向对话”）。
- **通话标签**：系统根据关键词命中的业务标签（如“正常通话”、“意向客户”、“回访客户”）。
- **内容**：转写后的文本摘要预览。
- **录音文件**：点击 **播放** 可直接试听原始录音。

### 4. 质检详情记录

在结果列表中点击 **详情**，进入单通电话的深度分析页面。该页面还原了通话全过程，并提供了精细化的时间轴分析。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-08/scaled-1680-/image-1787886802213.png)](https://document.infin8linx.com/uploads/images/gallery/2026-08/image-1787886802213.png)

[![](https://document.infin8linx.com/uploads/images/gallery/2026-08/scaled-1680-/image-1787886693188.png)](https://document.infin8linx.com/uploads/images/gallery/2026-08/image-1787886693188.png)

**核心信息区：**

- **基础数据**：展示被叫号码、录音时长、来源、识别耗时、创建时间等元数据。
- **通话标签**：高亮显示该通电话命中的业务分类标签（如“意向客户”）。
- **命中关键词**：列出触发标签的具体词汇（如截图中的 "tertarik"）。

**对话时间轴分析：**

页面底部以时间轴形式逐句展示对话内容，支持精细化复盘：

- **角色区分**：明确标识发言者为“坐席”或“客户”。
- **静音检测**：每句话旁边标注了静默时长（如 `1.0s`）和语音时长（如 `2ms`），帮助分析对话中的停顿与反应时间。
- **关键词高亮**：在转写文本中，命中的关键词会以高亮颜色显示，便于快速定位关键信息。

# Speech Analysis Tasks

This document provides a detailed overview of the entire workflow for speech analysis tasks, including creation, configuration, execution monitoring, and result analysis. The system supports two data sources: CDR-based (Call Detail Records) and offline recordings. It offers precise task scheduling mechanisms, visual progress feedback, and in-depth transcription details to help administrators efficiently conduct speech analysis and business reviews.

## Overview

Speech analysis tasks are the core vehicle for executing voice analysis. Administrators can flexibly specify the scope of recordings to be analyzed (by automatically pulling CDRs or manually uploading files) and configure execution strategies (immediate or scheduled). After execution, the system provides real-time feedback on success/failure progress and offers multi-level result viewing capabilities, ranging from list overviews to timeline analysis of individual calls, enabling deep mining of call content.

## Access

1. Log in to the backend management system.
2. In the left navigation bar, select **Speech Analysis &gt; Analysis Tasks** to enter the task management page.

## Features

### 1. View Task List

In the speech analysis task list, you can quickly search for tasks using the top filter bar (Creation Time, Task Name, Status, Data Source). The definitions of core fields in the list are as follows:

- **Task Name**: A custom identifier for the task.
- **Data Source**: Distinguishes whether the data source is "CDR" or "Offline Recording".
- **Time Range**: The time coverage of the recordings for the task.
- **Execution Method**: Displays as "Run Immediately" or "Scheduled Execution".
- **Status**: Reflects the current lifecycle stage of the task. 
    - **Pending**: The task has been created but has not started yet (requires manual click on "Start").
    - **Running**: The task is currently processing data.
    - **Completed**: All data processing is finished.
    - **Failed**: The task was interrupted due to an exception during execution.
- **Progress**: Displayed in the format of `Success Count/Failure Count/Total Count`. For example, `0/3/3` means a total of 3 recordings, 0 successful, and 3 failed; `0/1/1` means 1 recording failed to process.
- **Creation Time**: The specific time when the task was generated.

### 2. Create Speech Analysis Task

1. In the upper left corner of the task list page, click **+ Create Task**.
2. In the pop-up dialog box, fill in the basic information: 
    - **Task Name**: Enter an easily recognizable name.
    - **Language**: Select the language corresponding to the recording (e.g., "Indonesian").
    - **Execution Method**: 
        - **Run Immediately**: After creation, the task enters a "Pending" status. You need to manually click "Start" on the list page to begin analysis (to allow for modification and confirmation).
        - **Scheduled Execution**: Set a future trigger time, and the system will automatically start the task on schedule.
3. Select the **Data Source** according to business needs: 
    - **Scenario 1: Select "CDR"**
        - **CDR Time Range**: Set the start and end times. The system will automatically pull all call records within this time range as analysis objects.
    - **Scenario 2: Select "Offline Recording"**
        - **Upload Recording**: Supports manual uploading of local recording files (formats supported: .wav, .mp3), suitable for model testing or specific case reviews.

### 3. View Execution Results

For tasks with a status of "Completed" or containing partial successful data, click the **Results** button in the action column to pop up the recording processing list for that task.

**Result List Field Descriptions:**

- **Callee/Extension Number**: Number information of both parties in the call.
- **File Name**: The name of the original recording file.
- **Recording Duration**: The duration of the call in seconds.
- **Source**: Distinguishes the data source (e.g., "Automatic" pull or "Manual" upload).
- **Recognition Type**: Displays the technical type of speech recognition (e.g., "Single Party Recognized", "Normal Two-way Dialogue").
- **Call Tag**: Business tags matched by the system based on keywords (e.g., "Normal Call", "Prospective Customer", "Callback Customer").
- **Content**: A text summary preview of the transcription.
- **Recording File**: Click **Play** to directly listen to the original recording.

### 4. Analysis Detail Record

Click **Details** in the result list to enter the in-depth analysis page for a single call. This page restores the entire call process and provides refined timeline analysis.

**Core Information Area:**

- **Basic Data**: Displays metadata such as callee number, recording duration, source, recognition time consumption, and creation time.
- **Call Tag**: Highlights the business classification tag matched by the call (e.g., "Prospective Customer").
- **Matched Keywords**: Lists the specific words that triggered the tag (e.g., "tertarik" in the screenshot).

**Dialogue Timeline Analysis:**

The bottom of the page displays the dialogue content sentence by sentence in a timeline format, supporting refined review:

- **Role Identification**: Clearly identifies the speaker as "Agent" or "Customer".
- **Silence Detection**: Marks the silence duration (e.g., `1.0s`) and voice duration (e.g., `2ms`) next to each sentence to help analyze pauses and reaction times in the dialogue.
- **Keyword Highlighting**: Matched keywords are highlighted in the transcribed text for quick location of key information.

# 回调管理 - 设置回调

#### 接口说明

用于设置账号的数据回调地址

#### 请求方式

POST，form-data格式

#### 请求参数

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E6%98%AF%E5%90%A6%E5%BF%85%E9%A1%BB-%E8%AF%B4%E6%98%8E-servi"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">是否必须</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">service</td><td align="left">string</td><td align="left">是</td><td align="left">App.Sip\_Ywconfig.setYwConfig</td></tr><tr><td align="left">token</td><td align="left">string</td><td align="left">是</td><td align="left">通过授权接口获取的token</td></tr><tr><td align="left">name</td><td align="left">string</td><td align="left">是</td><td align="left">record (预测任务), callstatus (通话状态), cdr (通话记录)</td></tr><tr><td align="left">value</td><td align="left">string</td><td align="left">是</td><td align="left">回调地址；允许为空，非空时必须是合法的http://或https:// URL；空字符串表示未配置</td></tr><tr><td align="left">mark</td><td align="left">string</td><td align="left">是</td><td align="left">配置说明</td></tr><tr><td align="left">disabled</td><td align="left">string</td><td align="left">否</td><td align="left">状态：0启用、1禁用、2全部</td></tr></tbody></table>

#### 接口请求示例（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Ywconfig.setYwConfig',
        'token'     => 'ABCDEFG',
        'name'  => 'record',
        'value' => 'http://127.0.0.1/callback',
        'mark' => '预测任务'
    ];
    $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": {
            "id": 227,
            "name": "record",
            "created": false
        },
        "reqtime": 1789638674,
        "rsptime": 1789638674
    },
    "msg": ""
}


```

#### 返回参数说明

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-result-obj"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">result</td><td align="left">object</td><td align="left">对象类型</td></tr><tr><td align="left">name</td><td align="left">string</td><td align="left">类型</td></tr></tbody></table>

# 挂机短信任务列表

#### **请求URL**

- `https://{domain}/hangupSms/tasks`

#### **请求方式**

- POST

#### **请求参数**

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E5%BF%85%E9%80%89-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-appid-%E6%98%AF"><thead><tr><th align="left">参数名</th><th align="left">必选</th><th align="left">类型</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">appid</td><td align="left">是</td><td align="left">string</td><td align="left">鉴权 appid</td></tr><tr><td align="left">accesskey</td><td align="left">是</td><td align="left">string</td><td align="left">鉴权 accesskey</td></tr><tr><td align="left">page</td><td align="left">否</td><td align="left">string</td><td align="left">当前页码</td></tr><tr><td align="left">pageSize</td><td align="left">否</td><td align="left">string</td><td align="left">每页的显示的条数</td></tr></tbody></table>

#### **请求示例**

```
{
    "appid":"xxxx",
    "accesskey":"xxx",
}

```

#### **返回示例**

```
{
    "code": 0,
    "msg": "operation succeeded",
    "data": {
        "total": 51,
        "page": 1,
        "pageSize": 15,
        "list": [
            {
                "id": 4558,
                "name": "test11323",
                "status": 4,
                "current_batch": 1,
                "start_time": 1792565160,
                "offline_sms_tpl": 0,
                "no_answer_sms_tpl": 1,
                "created_at": "2026-10-21 13:45:57",
                "phone_total": 1
            },
            {
                "id": 4557,
                "name": "test11323",
                "status": 4,
                "current_batch": 1,
                "start_time": 1792490100,
                "offline_sms_tpl": 0,
                "no_answer_sms_tpl": 1,
                "created_at": "2026-10-20 16:54:37",
                "phone_total": 1
            }
        ]
    }
}

```

#### **返回参数说明**

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-code-int-%E8%BF%94"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">code</td><td align="left">int</td><td align="left">返回码 0 成功 其他为失败</td></tr><tr><td align="left">msg</td><td align="left">string</td><td align="left">返回信息</td></tr><tr><td align="left">data</td><td align="left">object</td><td align="left">返回数据</td></tr></tbody></table>

# Download Recording



# INCS 系统操作手册v1.0

概览

INCS 是一款全渠道智能客服系统平台，致力于通过统一整合语音、短信、即时通讯（IM）及电子邮件等多元化沟通渠道，为企业提供一站式的客户服务管理解决方案。该系统显著降低企业在多平台间切换的操作复杂度与人力成本，并大幅提升客服团队的整体响应效率与处理效能。 INCS 系统的核心架构由两大关键模块组成：

客服工作台： 作为一线客服人员的统一操作平台，支持客服代表高效处理来自各渠道的实时会话请求，并集成语音通话功能，实现无缝沟通。

管理后台： 面向管理员及客服主管，提供全面的团队管理、实时监控、任务分配及营销信息群发能力，赋能管理者进行高效的日常运营监督与资源调度。

客服工作台与管理后台协同运作，共同构成了 INCS 完整、高效的企业级客服管理体系。

第一章 INCS工作后台管理

1.1登录INCS后台管理

登录地址：https://saas.incsapp.com

使用用户名和密码登录

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762152054719.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762152054719.png)

1.2 后台管理配置

面向管理员及客服主管，提供全面的团队管理、实时监控、任务分配及营销信息群发能力，赋能管理者进行高效的日常运营监督与资源调度。后台管理设置支持：

企业管理：用户管理、模板管理、消息推送、订单列表、商品管理

账号管理：组织架构、员工列表、角色列表、通道管理

统计：数据列表

风控管理：聊天风控、风控统计

任务管理：任务分配、任务统计

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762152096405.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762152096405.png)

1.3用户管理

功能：用户列表、用户组、标签

1.3.1添加用户

管理员可以在“企业管理-用户管理-用户列表”添加用户

操作：点击“添加按钮”可以单独添加用户

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762152126356.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762152126356.png)

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762152134507.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762152134507.png)

1.3.2导入和导出用户

管理员可以在“企业管理-用户管理-用户列表”，导入导出用户。

操作：点击导入导出按钮，可以实现导入用户和导出用户的操作

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762152176607.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762152176607.png)

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762152185832.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762152185832.png)

1.3.3 查看用户聊天记录和用户日志

管理员可以在“企业管理-用户管理-用户列表”查看用户聊天记录和用户日志

操作：点击聊天详情和用户详情按钮

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762152207174.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762152207174.png)

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762152217877.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762152217877.png)

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762153099088.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762153099088.png)

1.3.4添加用户组和用户标签

管理员可以在“企业管理-用户管理-用户组”，“企业管理-用户管理-标签”添加用户标签，添加用户组

操作：点击添加按钮

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762153124319.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762153124319.png)

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762153135206.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762153135206.png)

1.4 模板管理

功能设置：话术管理、素材库、whatsapp模板、E-mail模板、

1.4.1 添加话术

管理员可以通过话术管理添加话术，企业话术（全部员工通用），个人话术（个人员工使用），添加完毕过后，客服人员就可以在客服工作台-快捷语句里面找到该话术并使用。

操作：点击添加按钮

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762153166853.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762153166853.png)

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762153178795.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762153178795.png)

1.4.3添加素材

管理员可以添加素材，在客服工作台的素材库里面可以快速发送，提高工作效率

操作：点击添加按钮

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762153199193.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762153199193.png)

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762153205729.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762153205729.png)

1.4.4添加whatsapp模板

管理员可以在“企业管理-模板管理-whatsapp模板”里面添加whatsapp模板，添加成功过后用作whatsapp模板发送时使用 （注意：whatsapp官方账号主动跟用户发消息的第一条消息只能发送模板消息，发送的模板消息在这里申请）

操作：点击添加或者批量添加按钮进行申请，查看模板详情页面。

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762153228196.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762153228196.png)

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762153239969.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762153239969.png)

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762153248995.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762153248995.png)

1.5消息推送

功能设置：批量推送、域名列表、发件人地址

1.5.1创建消息推送

管理员或者客服可以基于通道，创建一个消息群发任务推送给用户，并且可以查询到目标用户的发送状态。

操作：点击添加按钮，进入创建消息推送流程

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762153290908.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762153290908.png)

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762153300689.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762153300689.png)

1.5.2创建发件人地址

管理员与客服可以创建收件人地址，适用于E-mail消息推送使用，新建发件人地址需要有已验证的域名（验证域名的操作请联系我们的客服人员协助完整），添加完成过后就可以在群发消息推送时使用这个发件人地址。

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762153320204.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762153320204.png)

1.6 订单列表

订单列表可以查询到亚马逊或者其他渠道的订单信息以及订单详情与运输信息。

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762153338971.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762153338971.png)

1.7账号管理

功能设置：组织架构、员工列表、角色列表、通道管理

1.7.1组织架构

管理员可以在“账号管理-组织架构”针对组织架构进行设置，添加子部门，设立负责人。

操作：点击对应的组织

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762153363808.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762153363808.png)

1.7.2员工列表

管理员可以在“账号管理-员工列表”里添加员工，编辑更改员工信息

操作：点击添加按钮创建员工账号与密码，点击编辑可以更改信息。 [![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762153384933.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762153384933.png)

1.7.3通道管理

功能设置：通道列表、坐席列表、平台授权、whatsapp授权、机器人管理

1.7.3.1管理坐席

管理员可以在“账号管理-通道管理-坐席列表”里面绑定坐席

操作：在坐席列表里面，可以查看到相应的坐席的状态信息，可以进行编辑设置把坐席绑定到对应的客服人员，客服人员就可以在相应通道接收用户信息。 （注意：只有绑定坐席的客服员工账号才能正常的发送消息处理会话） [![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762153417013.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762153417013.png)

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762153423024.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762153423024.png)

1.7.3.2平台授权

平台授权：管理员可以在“账号管理-通道管理-平台授权”里面查看已授权的店铺信息并且能够对相应的店铺进行命名

操作：点击平台授权弹出相应的平台授权，跳转相应授权页面，授权成功就可以自动返回，即为授权成功。 [![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762153449642.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762153449642.png)

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762153461554.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762153461554.png)

1.7.3.3机器人管理

管理员可以在“账号管理-通道管理-机器人管理”里面配置机器人的知识库并且应用到客服聊天当中。

操作：点击添加按钮添加机器人，点击跳转配置，跳转到对应的机器人管理页面操作。 （注意：如果没有机器人，首先得点击机器人配置跳转机器人管理页面创建机器人拿到ID才能在这个页面点击添加，详细的机器人管理平台操作请见“机器人系统使用指南”） [![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762153483070.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762153483070.png)

1.7.3.4 whatsapp个号集中授权

管理员可以在“账号管理-通道管理-whatsapp授权”页面对客服人员的whatsapp个号集中绑定授权

操作：在列表点击对应的二维码图标

（注意：whatsapp授权需要客服工作台那边exe环境部署好才能成功获取到授权二维码，详情看工作台whatsapp个号绑定部分）

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762153503419.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762153503419.png)

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762153511846.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762153511846.png)

1.8统计

在统计页面，管理员可以在数据列表查看当前员工的工作状态，并且能够查看单个员工的工作日志，便于之后管理端的奖惩措施的实施提供数据支持。 [![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762153529794.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762153529794.png)[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762153537696.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762153537696.png)

1.9任务管理

1.9.1任务分配

管理员可以在“任务管理-任务分配”里面进行任务分配

介绍：该工作分配功能提供高效的任务管理解决方案，支持用户通过Excel或CSV文件批量导入任务工单，一键完成数据解析并自动生成待处理工单，大幅提升多任务创建效率；系统支持灵活的任务分配机制，可手动指定负责人或根据预设规则（如技能匹配、负载均衡）智能派发任务，同时允许动态调整优先级、截止日期及执行人员；所有工单的完整生命周期均被实时记录，用户可随时追踪任务状态流转（如待处理、进行中、已完成），并查看详细的操作日志，包括每一步修改记录、执行人、时间戳及备注信息，确保流程透明可追溯，助力团队协同精准高效。

操作：点击导入按钮 [![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762153562125.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762153562125.png)

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762153568329.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762153568329.png)

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762153577763.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762153577763.png)

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762153584528.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762153584528.png)

2.1风控管理

2.1.1添加敏感词

管理员可以在“风控管理-聊天风控-敏感词管理”里面添加敏感词

操作：点击添加或者导入按钮

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762153610867.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762153610867.png)

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762153617582.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762153617582.png)

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762153628275.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762153628275.png)

第二章INCS客服工作台

1.功能介绍

客服工作台是INCS系统中面向一线客服人员的核心任务处理中枢，通过聚合接入WhatsApp、LINE、Viber等主流即时通讯平台及传统语音通话渠道，构建统一的全渠道会话管理界面。该平台支持客服代表在单一操作环境中完成以下关键职能：

跨渠道会话整合

- 实时接收并处理来自多通讯平台的客户咨询，消除平台切换冗余操作；
- 通过标准化视图统一展示异构渠道会话流，降低信息认知负荷。

全链路客户服务流程闭环

- 基于内置工单系统实现咨询-响应-追踪-归档的全流程管理；
- 集成智能路由引擎，自动分配会话至对应技能组客服。
- 

多媒体交互协同

- 支持在会话界面无缝发起或接听语音通话，保留通话记录与关联会话的上下文关联；
- 提供富媒体消息（图文/文件/快捷回复模板）高效交互能力。 该工作台通过渠道无关性架构设计与操作动线深度优化，使客服人员能够聚焦于服务本身而非工具操作，显著缩短响应时长（RTAT）并提升首次接触解决率（FCR），最终实现客户服务产能与质量的双重跃升。

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762153675589.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762153675589.png)

1.1官方号消息

点击官方号消息可以看到官方号的消息列表以及选中的会话的功能页面

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762153694014.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762153694014.png)

官号消息功能的会话列表首先最上方有许多的通道的筛选栏，点击对应的图 标就可以筛选出对应通道的会话列表进行查看，或者在会话列表上方的搜索栏根 据用户的 id 进行搜索。

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762153708448.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762153708448.png)

中间的会话窗口可以进行转单操作，当前客服完成不了当前对话可以把当前对话转给其他客服或者其他客服组进行处理。 （注意：转单只能转给当 前在线的客服人员进行处理，已转出的会话会显示已转出的标签在会话列表里面显示，之后该客服不会再接收到这个会话的消息）。

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762153727250.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762153727250.png)

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762153734169.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762153734169.png)

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762153740331.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762153740331.png)

聊天的右边侧边栏可以查看与该用户聊天的用户详情，聊天记录，还可以查找改用户的订单与用户进行绑定，并且在用户信息下面可以根据当前聊天的情况添加用户日志，方便后续的聊天任务。

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762153752805.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762153752805.png)

1.2 个人号消息-如何绑定个人 whatsapp

个人号的页面布局和官号功能布局基本一致，但是个号消息必须绑定个号whatsapp 才能 使用和接收消息，接下来教程如何绑定个人 whatsapp 账号。

第一步：先点击个人消息的通道添加按钮，下载 exe

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762153773175.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762153773175.png)

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762153780220.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762153780220.png)

第二步：下载完插件后，解压过后点击运行 exe. ，输入 INCS 的客服号和密码就可以完成 exe 的运行，再去工作台完成扫码操作就行（注意：如果是中国内地运行 exe，请先打开 vpn再进行登录）

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762153795443.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762153795443.png)

```
                             安装完插件会自动弹出一个页面

```

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762153836133.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762153836133.png)登陆成功过后会自动跳转回工作台，就可以用whatsapp个号进行聊天了。

1.3 任务大厅模块

1.3.1 任务大厅介绍

在任务大厅模块客服可以查看到自己分配的任务，统计客服的工作完成情况，方便客服人员 统一进行任务的完成。

客服点击操作的第一个图标就可以跳转到该用户的 whtasapp 的个号聊天框，进行任务工单的处理，工作处理完成过后可以对当前的工单任务进行变更，变更完成会记录在后台的工单任务记录当中。

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762153886405.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762153886405.png)

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762153895424.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762153895424.png)

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762153905796.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762153905796.png)

1.3.2 转单申请

当客服人员对这个工单任务有疑问或者处理不了的时候可以向管理员提交转单审批申请， 当管理员同意该转单申请时，这个工单就自动转走了，就不会出现在该客服人员的任务工单列表里面

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762153922312.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762153922312.png)

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762153936374.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762153936374.png)

1.4添加联系人，查看通话记录

点击通讯录和通话记录可以添加联系人和查看通话记录。

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762153952693.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762153952693.png)

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762153960352.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762153960352.png)

1.5电话通讯

工作台只要部署了我们软电话，就可以直接拨打用户的电话进行沟通。（具体操作细节请联系我们INCS产品工作人员）

[![](https://document.infin8linx.com/uploads/images/gallery/2025-11/scaled-1680-/image-1762153976853.png)](https://document.infin8linx.com/uploads/images/gallery/2025-11/image-1762153976853.png)

# 发送邮件

#### 接口说明

请求方式: `post`

请求路径: `waba.infin8linx.com/sendEmail`

参数格式：`content type: application/json`

#### 参数说明

<table id="bkmrk-%E5%AD%97%E6%AE%B5-%E7%B1%BB%E5%9E%8B-%E6%98%AF%E5%90%A6%E5%BF%85%E5%A1%AB-%E5%90%8D%E7%A7%B0-%E8%AF%B4%E6%98%8E-app"><thead><tr><th>字段</th><th>类型</th><th>是否必填</th><th>名称</th><th>说明</th></tr></thead><tbody><tr><td>appid</td><td>string</td><td>是</td><td>appid</td><td></td></tr><tr><td>accesskey</td><td>string</td><td>是</td><td>accesskey</td><td></td></tr><tr><td>toAddress</td><td>string</td><td>是</td><td>接收地址 例：123@qq.com</td><td></td></tr><tr><td>code</td><td>int</td><td>是</td><td>验证码</td><td></td></tr><tr><td>lang</td><td>string</td><td>是</td><td>语言</td><td>en=英语，id=印尼，vn=越南</td></tr></tbody></table>

#### 响应结果

```
 {
    "code": 0,  //0=成功，1=失败
    "msg": "operation succeeded",
    "data": {
        "uuid": "5d90a5f9"
    }
}

```

# Common API - API for getting call records

# API for getting call records

#### Interface description: the interface for the customer to actively pull the list of call records.

#### Request method: POST, form-data format

#### Get call record interface request parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th align="left">parameter name</th><th align="left">type</th><th align="left">Is it necessary</th><th align="left">illustrate</th></tr></thead><tbody><tr><td align="left">service</td><td align="left">string</td><td align="left">yes</td><td align="left">App.Sip\_Cdr.GetBill</td></tr><tr><td align="left">token</td><td align="left">string</td><td align="left">yes</td><td align="left">The token obtained through the authorization interface</td></tr><tr><td align="left">starttime</td><td align="left">string</td><td align="left">yes</td><td align="left">(Dial) start time, format：yyyy-mm-dd hh:mm:ss</td></tr><tr><td align="left">endtime</td><td align="left">string</td><td align="left">yes</td><td align="left">(Dial) end time, format：yyyy-mm-dd hh:mm:ss</td></tr><tr><td align="left">syncflag</td><td align="left">int</td><td align="left">yes</td><td align="left">Get record type: 1. Get unqueried records (default); 2. Get queried records; 3. Get all records.</td></tr><tr><td align="left">direction</td><td align="left">int</td><td align="left">yes</td><td align="left">Call direction: 1. Incoming; 2. Outgoing; 3. All (default).</td></tr><tr><td align="left">callmethod</td><td align="left">int</td><td align="left">yes</td><td align="left">Call method: 0, unlimited; 1, mutual extension dial; 2, extension direct dial (manual dial); 3, API call (default); 4, API double call; 5, predictive outbound call; 6, IVR/group call .</td></tr><tr><td align="left">currentpage</td><td align="left">int</td><td align="left">yes</td><td align="left">number of pages, default: 1</td></tr><tr><td align="left">itemsperpage</td><td align="left">int</td><td align="left">yes</td><td align="left">Number per page, default: 10, minimum: 1; maximum: 1000</td></tr><tr><td align="left">extnumber</td><td align="left">string</td><td align="left">yes</td><td align="left">Extension number, multiple extension numbers are separated by English commas, when passing a null value, it is all</td></tr><tr><td align="left">destnumber</td><td align="left">string</td><td align="left">yes</td><td align="left">The target number of the call, when passing a null value, it is all</td></tr><tr><td align="left">userid</td><td align="left">string</td><td align="left">yes</td><td align="left">Custom data (employee ID), nullable</td></tr><tr><td align="left">memberid</td><td align="left">string</td><td align="left">yes</td><td align="left">Custom data (member ID), can be empty</td></tr><tr><td align="left">chengshudu</td><td align="left">string</td><td align="left">no</td><td align="left">Custom Data (Maturity)</td></tr><tr><td align="left">customuuid</td><td align="left">string</td><td align="left">no</td><td align="left">Custom Data (Customer ID)</td></tr></tbody></table>

#### API Request Example for Obtaining Call Records（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);
?>


```

#### return data structure example

```
{
    "ret": 200,
    "data": {
        "status": 0,
        "desc": "get success",
        "result": {
            "totalitems": 8151,
            "currentpage": 1,
            "itemsperpage": 10,
            "bills": [
                {
                    "id": 22670,
                    "extnumber": "",
                    "destnumber": "13387525701",
                    "displaynumber": "2190170001",
                    "starttime": "2019-09-27 14:58:37",
                    "answertime": null,
                    "endtime": "2019-09-27 14:59:05",
                    "duration": 28,
                    "billsec": 0,
                    "direction": "callout",
                    "callmethod": 6,
                    "userid": "0",
                    "memberid": "0",
                    "chengshudu": "0",
                    "customuuid": "0",
                    "recordfilename": "",
                    "downloadip": "",
                    "hangupdirection": 10041,
                    "hangupcause": 10020,
                    "userkey":"#"
                }
            ]
        },
        "reqtime": 1581502410,
        "rsptime": 1581502410
    },
    "msg": ""
}


```

#### Return parameter description

<table id="bkmrk-parameter-name-type--1"><thead><tr><th align="left">parameter name</th><th align="left">type</th><th align="left">illustrate</th></tr></thead><tbody><tr><td align="left">result</td><td align="left">objest</td><td align="left">returned result set</td></tr><tr><td align="left">—totalitems</td><td align="left">int</td><td align="left">total number of records</td></tr><tr><td align="left">—currentpage</td><td align="left">int</td><td align="left">current page number</td></tr><tr><td align="left">—itemsperpage</td><td align="left">int</td><td align="left">Quantity per page</td></tr><tr><td align="left">—bills</td><td align="left">array</td><td align="left">record array</td></tr><tr><td align="left">——id</td><td align="left">int</td><td align="left">record id</td></tr><tr><td align="left">——extnumber</td><td align="left">string</td><td align="left">Ext</td></tr><tr><td align="left">——destnumber</td><td align="left">string</td><td align="left">target number</td></tr><tr><td align="left">——displaynumber</td><td align="left">string</td><td align="left">display number</td></tr><tr><td align="left">——starttime</td><td align="left">string</td><td align="left">call time</td></tr><tr><td align="left">——answertime</td><td align="left">string</td><td align="left">response time</td></tr><tr><td align="left">——endtime</td><td align="left">string</td><td align="left">call end time</td></tr><tr><td align="left">——duration</td><td align="left">int</td><td align="left">call waiting time</td></tr><tr><td align="left">——billsec</td><td align="left">int</td><td align="left">call time</td></tr><tr><td align="left">——direction</td><td align="left">string</td><td align="left">call direction</td></tr><tr><td align="left">——callmethod</td><td align="left">int</td><td align="left">call method</td></tr><tr><td align="left">——userid</td><td align="left">string</td><td align="left">Custom parameter (user id)</td></tr><tr><td align="left">——memberid</td><td align="left">string</td><td align="left">Custom parameters (member id)</td></tr><tr><td align="left">——chengshudu</td><td align="left">string</td><td align="left">Custom parameters (maturity)</td></tr><tr><td align="left">——customuuid</td><td align="left">string</td><td align="left">Custom parameters (customer id)</td></tr><tr><td align="left">——recordfilename</td><td align="left">string</td><td align="left">call log file name</td></tr><tr><td align="left">——downloadip</td><td align="left">string</td><td align="left">download ip</td></tr><tr><td align="left">——hangupdirection</td><td align="left">int</td><td align="left">hang up directions</td></tr><tr><td align="left">——hangupcause</td><td align="left">int</td><td align="left">hang up reason</td></tr><tr><td align="left">——userkey</td><td align="left">string</td><td align="left">user button</td></tr></tbody></table>

#### Postman Example request parameters

![](https://doc-admin.infin8linx.com/uploads/202503/c65b2c52d15ac1a4f5775e9b19f9cfe5.jpg)

# 单条短信发送

### 请求URL

```
https://{domain}/sms/send?spid=xx&pwd=xx&das=xx&timestamp=xx&sm=x

```

### 请求方法

GET

### 参数说明

<table id="bkmrk-%E5%AD%97%E6%AE%B5-%E7%B1%BB%E5%9E%8B-%E5%90%8D%E7%A7%B0-%E8%AF%B4%E6%98%8E-spid-str"><thead><tr><th>字段</th><th>类型</th><th>名称</th><th>说明</th></tr></thead><tbody><tr><td>spid</td><td>string</td><td>接口账号</td><td></td></tr><tr><td>pwd</td><td>string</td><td>加密后密码</td><td>[接口说明3](/books/message-cn-api/page/4f6ff "接口说明")</td></tr><tr><td>das</td><td>string</td><td>手机号</td><td>需加国际区码如：0062</td></tr><tr><td>sm</td><td>string</td><td>发送内容</td><td>需转换为16进制码（计算字符长度以原文为准） [附录3](/books/message-cn-api/page/java16#3)</td></tr><tr><td>timestamp</td><td>string</td><td>当前Unix timestamp（秒）</td><td>例： 1601028870</td></tr><tr><td>senderid</td><td>string</td><td>非必填</td><td>合作伙伴后启用字段</td></tr></tbody></table>

### 响应

```json
{
  "code": 0,
  "msg": "Success",
  "data": {
    "msgid": "100123",
    "parts": 1  //当前短信计费条数,如对计费有疑问请及时联系我们
  }
}

```

### 状态码(code)说明

- 0 -- 提交成功
- 101 -- 必填字段不能空（注意请求方式为GET）
- 102 -- 验证失败（Unix timestamp不分时区，要验证时间，确保误差范围 \[-10s, 10s\]）
- 103 -- spid 不存在
- 104 -- 密码不匹配（参数必须包含timestamp）
- 105 -- 无可用通道(请联系管理员确认通道配置情况)
- 106 -- 配置错误
- 107 -- 手机已在黑名单
- 108 -- 内容超过最大字数
- 109 -- 解析失败，请确认接口参数
- 110 -- 请求IP限制
- 111 -- 该手机号发送限制（发送次数过多）
- 120 -- 系统错误，请稍后再试 （**重要提示1.1**）

# 通用API - 获取通话记录

#### 接口说明

客户主动拉取通话记录列表的接口。

#### 请求方式

POST，form-data格式

#### 获取通话记录接口请求参数

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E6%98%AF%E5%90%A6%E5%BF%85%E9%A1%BB-%E8%AF%B4%E6%98%8E-servi"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">是否必须</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">service</td><td align="left">string</td><td align="left">是</td><td align="left">App.Sip\_Cdr.GetBill</td></tr><tr><td align="left">token</td><td align="left">string</td><td align="left">是</td><td align="left">通过授权接口获取的token</td></tr><tr><td align="left">starttime</td><td align="left">string</td><td align="left">是</td><td align="left">(拔打)起始时间，格式：yyyy-mm-dd hh:mm:ss</td></tr><tr><td align="left">endtime</td><td align="left">string</td><td align="left">是</td><td align="left">(拔打)结束时间，格式：yyyy-mm-dd hh:mm:ss</td></tr><tr><td align="left">syncflag</td><td align="left">int</td><td align="left">是</td><td align="left">获取记录类型:1、获取未查询过的记录(默认)；2、获取已查询过的记录；3、获取全部记录。</td></tr><tr><td align="left">direction</td><td align="left">int</td><td align="left">是</td><td align="left">呼叫方向：1、呼入； 2、呼出；3、全部（默认）。</td></tr><tr><td align="left">callmethod</td><td align="left">int</td><td align="left">是</td><td align="left">呼叫方法：0、不限；1、分机互拨；2、分机直拨（手拨）；3、API呼叫（默认）；4、API双呼；5、预测式外呼；6、IVR/群呼。</td></tr><tr><td align="left">currentpage</td><td align="left">int</td><td align="left">是</td><td align="left">页数，默认：1</td></tr><tr><td align="left">itemsperpage</td><td align="left">int</td><td align="left">是</td><td align="left">每页数量，默认：10，最小：1；最大：1000</td></tr><tr><td align="left">extnumber</td><td align="left">string</td><td align="left">是</td><td align="left">分机号，多个分机号用英文逗号隔开，传空值时为全部</td></tr><tr><td align="left">destnumber</td><td align="left">string</td><td align="left">是</td><td align="left">呼叫的目标号码，传空值时为全部</td></tr><tr><td align="left">userid</td><td align="left">string</td><td align="left">是</td><td align="left">自定义数据(员工ID)，可为空值</td></tr><tr><td align="left">memberid</td><td align="left">string</td><td align="left">是</td><td align="left">自定义数据(会员ID)，可为空值</td></tr><tr><td align="left">ext</td><td align="left">string</td><td align="left">否</td><td align="left">自定义数据(扩展参数)</td></tr><tr><td align="left">customuuid</td><td align="left">string</td><td align="left">否</td><td align="left">自定义数据(客户ID)</td></tr></tbody></table>

#### 获取通话记录接口请求示例（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,
                    "hangupcause": 10020,
                    "uuid": "a526e04e-aa68-11f0-96ea-5ba23668545d",
                    "userkey": "",
                    "customuuid": "SIcqy3Bu-qBxv-hquJ-B80W-QaOpFkWMHe8h",
                    "taskid": "20251016161536503802",
                    "round": "1",
                    "recordurl": ""
                }
            ]
        },
        "reqtime": 1581502410,
        "rsptime": 1581502410
    },
    "msg": ""
}


```

#### 返回参数说明

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-result-obj"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">result</td><td align="left">objest</td><td align="left">返回的结果集</td></tr><tr><td align="left">—totalitems</td><td align="left">int</td><td align="left">记录总数</td></tr><tr><td align="left">—currentpage</td><td align="left">int</td><td align="left">当前页码</td></tr><tr><td align="left">—itemsperpage</td><td align="left">int</td><td align="left">每页数量</td></tr><tr><td align="left">—bills</td><td align="left">array</td><td align="left">记录数组</td></tr><tr><td align="left">——id</td><td align="left">int</td><td align="left">记录id</td></tr><tr><td align="left">——companycode</td><td align="left">string</td><td align="left">企业code</td></tr><tr><td align="left">——extnumber</td><td align="left">string</td><td align="left">分机号</td></tr><tr><td align="left">——destnumber</td><td align="left">string</td><td align="left">目标号码</td></tr><tr><td align="left">——disnumber</td><td align="left">string</td><td align="left">显示号码</td></tr><tr><td align="left">——starttime</td><td align="left">string</td><td align="left">呼叫时间</td></tr><tr><td align="left">——answertime</td><td align="left">string</td><td align="left">应答时间</td></tr><tr><td align="left">——endtime</td><td align="left">string</td><td align="left">通话结束时间</td></tr><tr><td align="left">——duration</td><td align="left">int</td><td align="left">呼叫等待时长</td></tr><tr><td align="left">——billsec</td><td align="left">int</td><td align="left">通话时长</td></tr><tr><td align="left">——direction</td><td align="left">string</td><td align="left">呼叫方向</td></tr><tr><td align="left">——callmethod</td><td align="left">int</td><td align="left">呼叫方式</td></tr><tr><td align="left">——userid</td><td align="left">string</td><td align="left">自定义参数(用户id)</td></tr><tr><td align="left">——memberid</td><td align="left">string</td><td align="left">自定义参数(会员id)</td></tr><tr><td align="left">——chengshudu</td><td align="left">string</td><td align="left">自定义参数(和ext值一样)</td></tr><tr><td align="left">——ext</td><td align="left">string</td><td align="left">自定义参数(扩展参数)</td></tr><tr><td align="left">——customuuid</td><td align="left">string</td><td align="left">自定义参数(客户id)</td></tr><tr><td align="left">——recordfilename</td><td align="left">string</td><td align="left">通话记录文件名</td></tr><tr><td align="left">——downloadip</td><td align="left">string</td><td align="left">下载ip</td></tr><tr><td align="left">——hangupdirection</td><td align="left">int</td><td align="left">挂断方向</td></tr><tr><td align="left">——hangupcause</td><td align="left">int</td><td align="left">挂断原因</td></tr><tr><td align="left">——userkey</td><td align="left">string</td><td align="left">用户按键</td></tr><tr><td align="left">——taskid</td><td align="left">string</td><td align="left">预测外呼任务id</td></tr><tr><td align="left">——round</td><td align="left">string</td><td align="left">预测外呼轮次</td></tr><tr><td align="left">——recordurl</td><td align="left">string</td><td align="left">录音下载url</td></tr></tbody></table>

#### Postman请求参数示例

![](https://doc-admin.infin8linx.com/uploads/202503/c65b2c52d15ac1a4f5775e9b19f9cfe5.jpg)

# 语音文件管理 - 上传语音文件

#### 接口说明

**用于上传语音文件到后台，用于ivr语音播放**

#### 请求方式

POST，form-data格式

#### 请求参数

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E6%98%AF%E5%90%A6%E5%BF%85%E9%A1%BB-%E8%AF%B4%E6%98%8E-servi"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">是否必须</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">service</td><td align="left">string</td><td align="left">是</td><td align="left">App.Sip\_Voice.UploadAudio</td></tr><tr><td align="left">token</td><td align="left">string</td><td align="left">是</td><td align="left">登录token</td></tr><tr><td align="left">filename</td><td align="left">file</td><td align="left">是</td><td align="left">上传的文件</td></tr><tr><td align="left">voicename</td><td align="left">string</td><td align="left">是</td><td align="left">语音名称</td></tr><tr><td align="left">mark</td><td align="left">file</td><td align="left">否</td><td align="left">备注描述</td></tr></tbody></table>

#### 接口请求示例（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
    'service'    => 'App.Sip_Auth.Login',
    'token'      => 'ABCDEFG',
    'filename'  => 'ABCDEFG',
    'voicename'  => '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": "upload success",
        "result": {
            "id": 1897,
            "filename": "welcome.mp3",
            "voicename": "欢迎语音",
            "mark": null
        },
        "reqtime": 1788924778,
        "rsptime": 1788924779
    },
    "msg": ""
}


```

#### 返回参数说明

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-id-int-%E8%AF%AD%E9%9F%B3%E6%96%87"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">id</td><td align="left">int</td><td align="left">语音文件id</td></tr><tr><td align="left">filename</td><td align="left">string</td><td align="left">语音文件</td></tr><tr><td align="left">voicename</td><td align="left">string</td><td align="left">语音文件名称</td></tr></tbody></table>

# 发送 RCS 消息

### 域名

- https://chat-api.incsapp.com

### 请求路由

- /external/messages/rcs

### 请求方式

- **POST**

### 请求头

- Content-Type: application/json
- certification-code: af92196e-0d07-3c1d-a631-a71c...

### 请求限流

- 单 Sender 最大 **5 rps** (每秒5请求)

### 请求参数

#### 请求参数列表

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E5%BF%85%E5%A1%AB-%E6%8F%8F%E8%BF%B0-to-stri"><thead><tr><th>参数名</th><th>类型</th><th>必填</th><th>描述</th></tr></thead><tbody><tr><td>to</td><td>string</td><td>是</td><td>收信人手机号，必须是国家码+手机号的纯数字格式，如 "8526841511234"</td></tr><tr><td>type</td><td>string</td><td>是</td><td>消息类型，支持模板消息：template，和普通消息（需要用户回复的24小时内可以发送）：text, image, video, document</td></tr><tr><td>ttl</td><td>string</td><td>否</td><td>消息失效时间（单位秒，如"60s"，默认24小时-"86400s"，最短设置为"10s"，最长设置为10天-"864000s"）：超过这个时间消息未投递成功（如用户设备不在线等情况），则平台会停止投递消息，并返回"failed"状态回调，失败原因为："TTL\_EXPIRATION\_REVOKED"</td></tr></tbody></table>

- 每种消息需要的参数见请求示例

#### 请求示例

##### **不包含参数**的模板消息请求示例

```json
{
    "to": "85268411234",
    "type": "template",
    "template": {
        "name": "test_button_reply_1"
    },
    "ttl": "300s"
}

```

##### **包含参数**的模板消息请求示例

- 填写所有模板部位的参数名和参数值

```json
{
    "to": "85268411234",
    "type": "template",
    "template": {
        "name": "test_button_reply_1",
        "parameters": {
            "username": "jack",
            "service_name": "promotion"
        }
    }
}

```

##### text 消息示例

```json
{
    "to": "85268411234",
    "type": "text",
    "text": "Hello"
}

```

##### image 消息示例

```json
{
    "to": "85268411234",
    "type": "image",
    "image": {
        "link": "https://static.incsapp.com/chat/images/header-98403274893.png"
    }
}

```

##### video 消息示例

```json
{
    "to": "85268411234",
    "type": "video",
    "video": {
        "link": "https://static.incsapp.com/chat/videos/abc.mp4"
    }
}

```

##### document 消息示例

- 支持类型：.pdf

```json
{
    "to": "85268411234",
    "type": "document",
    "document": {
        "link": "https://static.incsapp.com/chat/files/template.pdf"
    }
}

```

### 响应

#### 成功响应示例

```json
{
    "status": "success",
    "code": 200,
    "message": "",
    "data": {
        "msg_id": "019b8d8e-c4e7-73fe-b333-470c51e61f9f" // Msg ID
    },
    "error": {}
}

```

#### 失败响应示例

```json
{
    "status": "error",
    "code": 10004,
    "message": "Template with the code [api_4_standalone_image] and bot [Wk3rZWBx435KKATY] received with insufficient custom params", // 模板包含参数与消息传递参数不一致
    "data": {},
    "error": {}
}

```

# 新消息回调 -- WhatsApp

### 回调地址

- **需要在 INCS 设置您的回调地址**

### 回调请求方式

- **POST**

### 回调内容

#### 参数说明

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E5%BF%85%E4%BC%A0-%E6%8F%8F%E8%BF%B0-event-s"><thead><tr><th>参数名</th><th>类型</th><th>必传</th><th>描述</th></tr></thead><tbody><tr><td>event</td><td>string</td><td>是</td><td>回调事件名称，这里为 "new\_message"</td></tr><tr><td>channel\_id</td><td>int</td><td>是</td><td>INCS 消息通道 ID</td></tr><tr><td>business\_phone</td><td>string</td><td>是</td><td>whatsapp business phone number</td></tr><tr><td>message</td><td>object</td><td>是</td><td>WhatsApp 消息内容，不同的消息内容会有所差别</td></tr></tbody></table>

##### Message Object

<table id="bkmrk-name-description-con" style="width: 100%; border-collapse: collapse; font-size: 14px; margin-bottom: 20px;"> <thead> <tr style="background-color: #f5f5f5;"> <th style="width: 20%; padding: 10px; border: 1px solid #e0e0e0; text-align: left; vertical-align: top;">Name</th> <th style="width: 80%; padding: 10px; border: 1px solid #e0e0e0; text-align: left; vertical-align: top;">Description</th> </tr> </thead> <tbody> <tr> <td style="padding: 10px; border: 1px solid #e0e0e0; vertical-align: top;"> `contacts`*\*array of objects\** </td> <td style="padding: 10px; border: 1px solid #e0e0e0; vertical-align: top;"> Array of contact objects with information for the customer who sent a message to the business. Contact objects have the following properties: - `wa_id` — *String*. The customer's WhatsApp ID. A business can respond to a customer using this ID. This ID may not match the customer's phone number, which is returned by the API as `input` when sending a message to the customer.
- `profile` — *Object*. A customer profile object. Profile objects have the following properties: 
    - `name` — *String*. The customer's name.
 
 </td> </tr> <tr> <td style="padding: 10px; border: 1px solid #e0e0e0; vertical-align: top;"> `messaging_product`*\*string\** </td> <td style="padding: 10px; border: 1px solid #e0e0e0; vertical-align: top;"> Product used to send the message. Value is always `whatsapp`. </td> </tr> <tr style="background-color: #fafafa;"> <td style="padding: 10px; border: 1px solid #e0e0e0; vertical-align: top;"> `messages`*\*array of objects\** </td> <td style="padding: 10px; border: 1px solid #e0e0e0; vertical-align: top;"> Information about a message received by the business that is subscribed to the webhook. </td> </tr> <tr> <td style="padding: 10px; border: 1px solid #e0e0e0; vertical-align: top;"> `metadata`*\*object\** </td> <td style="padding: 10px; border: 1px solid #e0e0e0; vertical-align: top;"> A metadata object describing the business subscribed to the webhook. Metadata objects have the following properties: - `display_phone_number` — *String*. The phone number that is displayed for a business.
- `phone_number_id` — *String*. ID for the phone number. A business can respond to a message using this ID.
 
 </td> </tr> </tbody></table>

##### Message.Messages Objects

<table id="bkmrk-name-description-aud" style="width: 100%; border-collapse: collapse; font-size: 14px;"> <thead> <tr style="background-color: #f5f5f5;"> <th style="width: 20%; padding: 10px; border: 1px solid #e0e0e0; text-align: left; vertical-align: top;">Name</th> <th style="width: 80%; padding: 10px; border: 1px solid #e0e0e0; text-align: left; vertical-align: top;">Description</th> </tr> </thead> <tbody> <tr> <td style="padding: 10px; border: 1px solid #e0e0e0; vertical-align: top;"> `audio`*\*object\** </td> <td style="padding: 10px; border: 1px solid #e0e0e0; vertical-align: top;"> When the `messages` `type` is set to `audio`, including voice messages, this object is included in the `messages` object: - `id` — *String*. ID for the audio file.
- `mime_type` — *String*. Mime type of the audio file.
 
 </td> </tr> <tr style="background-color: #fafafa;"> <td style="padding: 10px; border: 1px solid #e0e0e0; vertical-align: top;"> `button`*\*object\** </td> <td style="padding: 10px; border: 1px solid #e0e0e0; vertical-align: top;"> When the `messages` `type` field is set to `button`, this object is included in the `messages` object: - `payload` – *String*. The payload for a button set up by the business that a customer clicked as part of an interactive message.
- `text` — *String*. Button text.
 
 </td> </tr> <tr> <td style="padding: 10px; border: 1px solid #e0e0e0; vertical-align: top;"> `context`*\*object\** </td> <td style="padding: 10px; border: 1px solid #e0e0e0; vertical-align: top;"> Context object. Only included when a user replies or interacts with one of your messages. Context objects can have the following properties: - `forwarded` — *Boolean*. Set to `true` if the message received by the business has been forwarded.
- `frequently_forwarded` — *Boolean*. Set to `true` if the message received by the business has been forwarded more than 5 times.
- `from` — *String*. The WhatsApp ID for the customer who replied to an inbound message.
- `id` — *String*. The message ID for the sent message for an inbound reply.
- `referred_product` — *Object*. Referred product object describing the product the user is requesting information about. **You must parse this value if you support Product Enquiry Messages** Referred product objects have the following properties: 
    - `catalog_id` — *String*. Unique identifier of the Meta catalog linked to the WhatsApp Business Account.
    - `product_retailer_id` — *String*. Unique identifier of the product in a catalog.
 
 </td> </tr> <tr style="background-color: #fafafa;"> <td style="padding: 10px; border: 1px solid #e0e0e0; vertical-align: top;"> `document`*\*object\** </td> <td style="padding: 10px; border: 1px solid #e0e0e0; vertical-align: top;"> A document object. When `messages type` is set to `document`, this object is included in the `messages` object. Document objects can have the following properties: - `caption` — *String*. Caption for the document, if provided.
- `filename` — *String*. Name for the file on the sender's device.
- `sha256` — *String*. SHA 256 hash.
- `mime_type` — *String*. Mime type of the document file.
- `id` — *String*. ID for the document.
 
 </td> </tr> <tr> <td style="padding: 10px; border: 1px solid #e0e0e0; vertical-align: top;"> `errors`*\*array of objects\** </td> <td style="padding: 10px; border: 1px solid #e0e0e0; vertical-align: top;"> An array of error objects describing the error. Error objects have the following properties. - `code` — *Integer*. Error code. Example: `130429`.
- `title` — *String*. Error code title. Example: `Rate limit hit`.
- `message` — *String*. Error code message. This value is the same as the `title` value. For example: `Rate limit hit`. Note that the message property in API error response payloads pre-pends this value with the a `#` symbol and the error code in parenthesis. For example: `(#130429) Rate limit hit`.
- `error_data` — *Object*. An error data object with the following properties: 
    - `details` — *String*. Describes the error. Example: `Message failed to send because there were too many messages sent from this phone number in a short period of time`.
 
 </td> </tr> <tr style="background-color: #fafafa;"> <td style="padding: 10px; border: 1px solid #e0e0e0; vertical-align: top;"> `from`*\*string\** </td> <td style="padding: 10px; border: 1px solid #e0e0e0; vertical-align: top;"> The customer's WhatsApp ID. A business can respond to a customer using this ID. This ID may not match the customer's phone number, which is returned by the API as `input` when sending a message to the customer. </td> </tr> <tr> <td style="padding: 10px; border: 1px solid #e0e0e0; vertical-align: top;"> `id`*\*string\** </td> <td style="padding: 10px; border: 1px solid #e0e0e0; vertical-align: top;"> The ID for the message that was received by the business. </td> </tr> <tr style="background-color: #fafafa;"> <td style="padding: 10px; border: 1px solid #e0e0e0; vertical-align: top;"> `identity`*\*object\** </td> <td style="padding: 10px; border: 1px solid #e0e0e0; vertical-align: top;"> An identity object. See `messages system identity`. Identity objects can have the following properties: - `acknowledged` — State of acknowledgment for the `messages system customer_identity_changed`.
- `created_timestamp` — *String*. The time when the WhatsApp Business Management API detected the customer may have changed their profile information.
- `hash` — *String*. The ID for the `messages system customer_identity_changed`.
 
 </td> </tr> <tr> <td style="padding: 10px; border: 1px solid #e0e0e0; vertical-align: top;"> `image`*\*object\** </td> <td style="padding: 10px; border: 1px solid #e0e0e0; vertical-align: top;"> When `messages type` is set to `image`, this object is included in the `messages` object. - `caption` — *String*. Caption for the image, if provided.
- `sha256` — *String*. Image hash.
- `id` — *String*. ID for the image.
- `mime_type` — *String*. Mime type for the image.
 
 </td> </tr> <tr style="background-color: #fafafa;"> <td style="padding: 10px; border: 1px solid #e0e0e0; vertical-align: top;"> `interactive`*\*object\** </td> <td style="padding: 10px; border: 1px solid #e0e0e0; vertical-align: top;"> When a customer has interacted with your message, this object is included in the `messages` object. Interactive objects have the following properties: - `type` — Object with the following properties: 
    - `button_reply` – Sent when a customer clicks a button. Object with the following properties: 
        - `id` — *String*. Unique ID of a button.
        - `title` — *String*. Title of a button.
    - `list_reply` — Sent when a customer selects an item from a list. Object with the following properties: 
        - `id` — *String*. Unique ID of the selected list item.
        - `title` — *String*. Title of the selected list item.
        - `description` — *String*. Description of the selected row.
 
 </td> </tr> <tr> <td style="padding: 10px; border: 1px solid #e0e0e0; vertical-align: top;"> `order`*\*object\** </td> <td style="padding: 10px; border: 1px solid #e0e0e0; vertical-align: top;"> Included in the `messages` object when a customer has placed an order. Order objects have the following properties: - `catalog_id` — *String*. ID for the catalog the ordered item belongs to.
- `text` — *String*. Text message from the user sent along with the order.
- `product_items` — Array of product item objects containing the following fields: 
    - `product_retailer_id` — *String*. Unique identifier of the product in a catalog.
    - `quantity` — *String*. Number of items.
    - `item_price` — *String*. Price of each item.
    - `currency` — *String*. Price currency.
 
 </td> </tr> <tr style="background-color: #fafafa;"> <td style="padding: 10px; border: 1px solid #e0e0e0; vertical-align: top;"> `referral`*\*object\** </td> <td style="padding: 10px; border: 1px solid #e0e0e0; vertical-align: top;"> Referral object. When a customer clicks an ad that redirects to WhatsApp, this object is included in the `messages` object. Referral objects have the following properties: - `source_url` – *String*. The Meta URL that leads to the ad or post clicked by the customer. Opening this url takes you to the ad viewed by your customer.
- `source_type` – *String*. The type of the ad’s source; `ad` or `post`.
- `source_id` – *String*. Meta ID for an ad or a post.
- `headline` – *String*. Headline used in the ad or post.
- `body` – *String*. Body for the ad or post.
- `media_type` – *String*. Media present in the ad or post; `image` or `video`.
- `image_url` – *String*. URL of the image, when `media_type` is an image.
- `video_url` – *String*. URL of the video, when `media_type` is a video.
- `thumbnail_url` – *String*. URL for the thumbnail, when `media_type` is a video.
- `ctwa_clid` – *String*. Click ID generated by Meta for ads that click to WhatsApp.
 
The referral object can be included in the following types of message: text, location, contact, image, video, document, voice, and sticker. Click-to-WhatsApp ads are only supported in the Android and iOS apps. If the customer is using the Web browser or their computer to click on an ad, then the resulting webhook will contain a `referral` object without some of the above properties.

 </td> </tr> <tr> <td style="padding: 10px; border: 1px solid #e0e0e0; vertical-align: top;"> `sticker`*\*object\** </td> <td style="padding: 10px; border: 1px solid #e0e0e0; vertical-align: top;"> When `messages type` is set to `sticker`, this object is included in the `messages` object. Sticker objects have the following properties: - `mime_type` – *String*. image/webp.
- `sha256` – *String*. Hash for the sticker.
- `id` – *String*. ID for the sticker.
- `animated` – *Boolean*. Set to `true` if the sticker is animated; `false` otherwise.
 
 </td> </tr> <tr style="background-color: #fafafa;"> <td style="padding: 10px; border: 1px solid #e0e0e0; vertical-align: top;"> `system`*\*object\** </td> <td style="padding: 10px; border: 1px solid #e0e0e0; vertical-align: top;"> When `messages type` is set to `system`, a customer has updated their phone number or profile information, this object is included in the `messages` object. System objects have the following properties: - `body` – *String*. Describes the change to the customer's identity or phone number.
- `identity` – *String*. Hash for the identity fetched from server.
- `new_wa_id` – *String*. New WhatsApp ID for the customer when their phone number is updated. Available on webhook versions v11.0 and earlier.
- `wa_id` – *String*. New WhatsApp ID for the customer when their phone number is updated. Available on webhook versions v12.0 and later.
- `type` – *String*. Type of system update. Will be one of the following: 
    - `customer_changed_number` – A customer changed their phone number.
    - `customer_identity_changed` – A customer changed their profile information.
- `customer` – *String*. The WhatsApp ID for the customer prior to the update.
- `group_id` - *String*. If set, corresponds to which thread the system message was sent in. If you share multiple groups with this user, you will receive multiple webhooks.
 
 </td> </tr> <tr> <td style="padding: 10px; border: 1px solid #e0e0e0; vertical-align: top;"> `text`*\*object\** </td> <td style="padding: 10px; border: 1px solid #e0e0e0; vertical-align: top;"> When `messages type` is set to `text`, this object is included. Text objects have the following properties: - `body` — *String*. The text of the message.
 
 </td> </tr> <tr style="background-color: #fafafa;"> <td style="padding: 10px; border: 1px solid #e0e0e0; vertical-align: top;"> `timestamp`*\*string\** </td> <td style="padding: 10px; border: 1px solid #e0e0e0; vertical-align: top;"> Unix timestamp indicating when the WhatsApp server received the message from the customer. </td> </tr> <tr> <td style="padding: 10px; border: 1px solid #e0e0e0; vertical-align: top;"> `type`*\*string\** </td> <td style="padding: 10px; border: 1px solid #e0e0e0; vertical-align: top;"> The type of message that has been received by the business that has subscribed to Webhooks. Possible value can be one of the following: `audio` `button` `document` `text` `image` `interactive` `order` `sticker` `system` – for customer number change messages `unknown` `video` </td> </tr> <tr style="background-color: #fafafa;"> <td style="padding: 10px; border: 1px solid #e0e0e0; vertical-align: top;"> `video`*\*object\** </td> <td style="padding: 10px; border: 1px solid #e0e0e0; vertical-align: top;"> When `messages type` is set to `video`, this object is included in `messages` object. Video objects have the following properties: - `caption` – *String*. The caption for the video, if provided.
- `sha256` – *String*. The hash for the video.
- `id` – *String*. The ID for the video.
- `mime_type` – *String*. The mime type for the video file.
 
 </td> </tr> </tbody></table>

#### 回调示例

##### text 纯文本

```json
{
    "event": "new_message",
    "business_phone": "6281519236680",
    "message": {
        "messaging_product": "whatsapp",
        "metadata": {
            "display_phone_number": "6281519236680",
            "phone_number_id": "302702419599374"
        },
        "contacts": [ // 发信人信息
            {
                "profile": {
                    "name": "Lessie Laytoya"
                },
                "wa_id": "85268415026"
            }
        ],
        "messages": [
            {
                "from": "85268415026",
                "id": "wamid.HBgLODUyNjg0MTUwMjYVAgASGBQzQUY1Qjc4MUQzNjM3OTk1QUVENQA=",
                "timestamp": "1756109460",
                "text": {
                    "body": "hello"
                },
                "type": "text"
            }
        ]
    }
}

```

##### reaction 引用回复

```json
{
    "event": "new_message",
    "business_phone": "6281519236680",
    "message": {
        "messaging_product": "whatsapp",
        "metadata": {
            "display_phone_number": "6281519236680",
            "phone_number_id": "302702419599374"
        },
        "contacts": [
            {
                "profile": {
                    "name": "Lessie Laytoya"
                },
                "wa_id": "85268415026"
            }
        ],
        "messages": [
            {
                "context": { // 引用的消息
                    "from": "6281519236680",
                    "id": "wamid.HBgLODUyNjg0MTUwMjYVAgARGBI5RkEyNjU2NEUwMDhBRDMxNTEA"
                },
                "from": "85268415026",
                "id": "wamid.HBgLODUyNjg0MTUwMjYVAgASGBQzQTY5OUZERjU5MDZBQzUyN0Y0MgA=",
                "timestamp": "1756113398",
                "text": {
                    "body": "OK"
                },
                "type": "text"
            }
        ]
    }
}

```

##### image 图片

```json
{
    "event": "new_message",
    "business_phone": "6281519236680",
    "message": {
        "messaging_product": "whatsapp",
        "metadata": {
            "display_phone_number": "6281519236680",
            "phone_number_id": "302702419599374"
        },
        "contacts": [
            {
                "profile": {
                    "name": "Lessie Laytoya"
                },
                "wa_id": "85268415026"
            }
        ],
        "messages": [
            {
                "from": "85268415026",
                "id": "wamid.HBgLODUyNjg0MTUwMjYVAgASGBQzQUZCMzlCREIwMDdCMkYzRjZBQgA=",
                "timestamp": "1756111162",
                "type": "image",
                "image": {
                    "mime_type": "image\/jpeg",
                    "sha256": "X+rJ8sVYdTYG9nD3JOGjJAb4GE3qw89S8kQNQ2fRj1w=",
                    "id": "2173590463051074",
                    "link": "https:\/\/static.incsapp.com\/chat\/images\/2173590463051074.jpg"
                }
            }
        ]
    }
}

```

##### sticker 贴纸

```json
{
    "event": "new_message",
    "business_phone": "6281519236680",
    "message": {
        "messaging_product": "whatsapp",
        "metadata": {
            "display_phone_number": "6281519236680",
            "phone_number_id": "302702419599374"
        },
        "contacts": [
            {
                "profile": {
                    "name": "Lessie Laytoya"
                },
                "wa_id": "85268415026"
            }
        ],
        "messages": [
            {
                "from": "85268415026",
                "id": "wamid.HBgLODUyNjg0MTUwMjYVAgASGBQzQUM4MzBCOUIzNTk4RTI1MUE5OQA=",
                "timestamp": "1756111078",
                "type": "sticker",
                "sticker": {
                    "mime_type": "image\/webp",
                    "sha256": "1RgjeZcCQQjyzYnvcvInvzes\/n9ThHJ4Ndr3dzGUeP0=",
                    "id": "782472500814983",
                    "animated": false,
                    "link": "https:\/\/static.incsapp.com\/chat\/images\/782472500814983.webp"
                }
            }
        ]
    }
}

```

##### video 视频

```json
{
    "event": "new_message",
    "business_phone": "6281519236680",
    "message": {
        "messaging_product": "whatsapp",
        "metadata": {
            "display_phone_number": "6281519236680",
            "phone_number_id": "302702419599374"
        },
        "contacts": [
            {
                "profile": {
                    "name": "Lessie Laytoya"
                },
                "wa_id": "85268415026"
            }
        ],
        "messages": [
            {
                "from": "85268415026",
                "id": "wamid.HBgLODUyNjg0MTUwMjYVAgASGBQzQTA3Qzg2MTAyQTgxRDBCQkQ0RgA=",
                "timestamp": "1756111347",
                "type": "video",
                "video": {
                    "caption": "beautiful\uff1f", // 用户添加的描述
                    "mime_type": "video\/mp4",
                    "sha256": "8m71YIxOHqc3HYGthZiquLeeE0N1Cv0MeTc25ahf4sU=",
                    "id": "1277927410543839",
                    "link": "https:\/\/static.incsapp.com\/chat\/videos\/1277927410543839.mp4"
                }
            }
        ]
    }
}

```

##### audio 语音

```json
{
    "event": "new_message",
    "business_phone": "6281519236680",
    "message": {
        "messaging_product": "whatsapp",
        "metadata": {
            "display_phone_number": "6281519236680",
            "phone_number_id": "302702419599374"
        },
        "contacts": [
            {
                "profile": {
                    "name": "Lessie Laytoya"
                },
                "wa_id": "85268415026"
            }
        ],
        "messages": [
            {
                "from": "85268415026",
                "id": "wamid.HBgLODUyNjg0MTUwMjYVAgASGBQzQUFBQzc3RUVCQTRCNDMxOTNBMgA=",
                "timestamp": "1756112512",
                "type": "audio",
                "audio": {
                    "mime_type": "audio\/ogg; codecs=opus",
                    "sha256": "pp0SvItSzmvP6mRp1mR\/4tn9ydbnv72YWiZ9XxaxTZg=",
                    "id": "1082985930630339",
                    "voice": true,
                    "link": "https:\/\/static.incsapp.com\/chat\/audios\/1082985930630339.ogg"
                }
            }
        ]
    }
}

```

##### document 文档

```json
{
    "event": "new_message",
    "business_phone": "6281519236680",
    "message": {
        "messaging_product": "whatsapp",
        "metadata": {
            "display_phone_number": "6281519236680",
            "phone_number_id": "302702419599374"
        },
        "contacts": [
            {
                "profile": {
                    "name": "Lessie Laytoya"
                },
                "wa_id": "85268415026"
            }
        ],
        "messages": [
            {
                "from": "85268415026",
                "id": "wamid.HBgLODUyNjg0MTUwMjYVAgASGBQzQTg3MUUyRjA4RDA3RTdFQzUyNwA=",
                "timestamp": "1756112790",
                "type": "document",
                "document": {
                    "filename": "email_template_en.xls",
                    "mime_type": "application\/vnd.ms-excel",
                    "sha256": "0WWrm0sDQYStNhqArO7uRiViw40SbSP+QALrNGyi4pE=",
                    "id": "797337589311657",
                    "link": "https:\/\/static.incsapp.com\/chat\/files\/797337589311657.xls"
                }
            }
        ]
    }
}

```

##### contacts 联系人

```json
{
    "event": "new_message",
    "business_phone": "6281519236680",
    "message": {
        "messaging_product": "whatsapp",
        "metadata": {
            "display_phone_number": "6281519236680",
            "phone_number_id": "302702419599374"
        },
        "contacts": [
            {
                "profile": {
                    "name": "Lessie Laytoya"
                },
                "wa_id": "85268415026"
            }
        ],
        "messages": [
            {
                "from": "85268415026",
                "id": "wamid.HBgLODUyNjg0MTUwMjYVAgASGBQzQTdCQzYyMEM0NjcxQkYzN0VFOQA=",
                "timestamp": "1756112662",
                "type": "contacts",
                "contacts": [
                    {
                        "name": {
                            "first_name": "Lessie Laytoya",
                            "formatted_name": "Lessie Laytoya"
                        },
                        "phones": [
                            {
                                "phone": "+85268415026",
                                "wa_id": "85268415026",
                                "type": "CELL"
                            }
                        ]
                    }
                ]
            }
        ]
    }
}

```

##### button 按钮选项

```json
{
    "event": "new_message",
    "business_phone": "6281519236680",
    "message": {
        "messaging_product": "whatsapp",
        "metadata": {
            "display_phone_number": "6281519236680",
            "phone_number_id": "302702419599374"
        },
        "contacts": [
            {
                "profile": {
                    "name": "Lessie Laytoya"
                },
                "wa_id": "85268415026"
            }
        ],
        "messages": [
            {
                "context": { // 选项关联的某条消息
                    "from": "6281519236680",
                    "id": "wamid.HBgLODUyNjg0MTUwMjYVAgARGBJGNDY4NjdEN0I3QkZCMzg5QjMA"
                },
                "from": "85268415026",
                "id": "wamid.HBgLODUyNjg0MTUwMjYVAgASGBQzQUM5MzJGN0EwRThCNTgyRTVFNAA=",
                "timestamp": "1756112962",
                "type": "button",
                "button": {
                    "payload": "\u8fd8\u6709\u5176\u4ed6\u95ee\u9898",
                    "text": "\u8fd8\u6709\u5176\u4ed6\u95ee\u9898"
                }
            }
        ]
    }
}

```

##### location 位置

```json
{
    "event": "new_message",
    "business_phone": "6281519236680",
    "message": {
        "messaging_product": "whatsapp",
        "metadata": {
            "display_phone_number": "6281519236680",
            "phone_number_id": "302702419599374"
        },
        "contacts": [
            {
                "profile": {
                    "name": "Lessie Laytoya"
                },
                "wa_id": "85268415026"
            }
        ],
        "messages": [
            {
                "from": "85268415026",
                "id": "wamid.HBgLODUyNjg0MTUwMjYVAgASGBQzQTczMTRCMzNDNjgwMzExNkUyNgA=",
                "timestamp": "1756113235",
                "location": {
                    "latitude": 22.570337295532,
                    "longitude": 113.87411499023,
                    "name": "\u534e\u4e30\u91d1\u878d\u6e2f" // 选填
                },
                "type": "location"
            }
        ]
    }
}

```

##### order 订单

- A WhatsApp user orders one or more products via a catalog, single-, or multi-product message.

```json
{
    "event": "new_message",
    "business_phone": "6281519236680",
    "message": {
        "messaging_product": "whatsapp",
        "metadata": {
            "display_phone_number": "15550783881",
            "phone_number_id": "106540352242922"
        },
        "contacts": [
            {
                "profile": {
                    "name": "Sheena Nelson"
                },
                "wa_id": "16505551234"
            }
        ],
        "messages": [
            {
                "from": "16505551234",
                "id": "wamid.HBgLMTY1MDM4Nzk0MzkVAgASGBQzQUFERjg0NDEzNDdFODU3MUMxMAA=",
                "timestamp": "1750096325",
                "type": "order",
                "order": {
                    "catalog_id": "194836987003835",
                    "text": "Love these!",
                    "product_items": [
                        {
                            "product_retailer_id": "di9ozbzfi4",
                            "quantity": 2,
                            "item_price": 30,
                            "currency": "USD"
                        },
                        {
                            "product_retailer_id": "nqryix03ez",
                            "quantity": 1,
                            "item_price": 25,
                            "currency": "USD"
                        }
                    ]
                }
            }
        ]
    }
}

```

##### Interactive 交互式消息

- A WhatsApp user taps a row in an interactive list message.
- A WhatsApp user taps a button in an interactive reply button message.

```json
{
    "event": "new_message",
    "business_phone": "6281519236680",
    "message": {
        "messaging_product": "whatsapp",
        "metadata": {
            "display_phone_number": "15550783881",
            "phone_number_id": "106540352242922"
        },
        "contacts": [
            {
                "profile": {
                    "name": "Sheena Nelson"
                },
                "wa_id": "16505551234"
            }
        ],
        "messages": [
            {
                "context": {
                    "from": "15550783881",
                    "id": "wamid.HBgLMTQxMjU1NTA4MjkVAgASGBQzQUNCNjk5RDUwNUZGMUZEM0VBRAA="
                },
                "from": "16505551234",
                "id": "wamid.HBgLMTY1MDM4Nzk0MzkVAgASGBQzQUFERjg0NDEzNDdFODU3MUMxMAA=",
                "timestamp": "1749854575",
                "type": "interactive",
                "interactive": {
                    "type": "list_reply",
                    "list_reply": {
                        "id": "priority_express",
                        "title": "Priority Mail Express",
                        "description": "Next Day to 2 Days"
                    }
                }
            }
        ]
    }
}

```

##### Unsupported 不支持的消息类型

- META API 不支持的消息类型

```json
{
    "event": "new_message",
    "business_phone": "6281519236680",
    "message": {
        "messaging_product": "whatsapp",
        "metadata": {
            "display_phone_number": "6281519236680",
            "phone_number_id": "302702419599374"
        },
        "contacts": [
            {
                "profile": {
                    "name": "Lessie Laytoya"
                },
                "wa_id": "85268415026"
            }
        ],
        "messages": [
            {
                "from": "85268415026",
                "id": "wamid.HBgLODUyNjg0MTUwMjYVAgASGBQzQUQ1NzI3MTZFMDlBNEE0RkU4RQA=",
                "timestamp": "1756113604",
                "errors": [
                    {
                        "code": 131051,
                        "title": "Message type unknown",
                        "message": "Message type unknown",
                        "error_data": {
                            "details": "Message type is currently not supported."
                        }
                    }
                ],
                "type": "unsupported"
            }
        ]
    }
}

```

# 预测式外呼 - 创建预测试外呼任务接口

#### 接口说明

创建一个预测试外呼任务。注：单个任务的号码数不要超过10000个，如果需要再增加号码，请通过追加接口提交。

#### 请求参数

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E6%98%AF%E5%90%A6%E5%BF%85%E9%A1%BB-%E8%AF%B4%E6%98%8E-servi"><thead><tr><th>参数名</th><th>类型</th><th>是否必须</th><th>说明</th></tr></thead><tbody><tr><td>service</td><td>string</td><td>是</td><td>App.Sip\_Yccall.TaskCreat</td></tr><tr><td>token</td><td>string</td><td>是</td><td>通过授权接口获取的token</td></tr><tr><td>assigntype</td><td>int</td><td>是</td><td>分配类型 1：分机 3:分机组</td></tr><tr><td>assignagent</td><td>string</td><td>是</td><td>设置为分机，直接填写分机;设置为群组，填写群组名称</td></tr><tr><td>telphone</td><td>string（JSON）</td><td>是</td><td>手机号码、预设呼叫时间(时间戳)(默认当前时间戳，大于此时间则不呼)等。示例：\[{“phone”:18012345678,”time”:1500000000,”userid”:””,”memberid”:””,”chengshudu”:””,”customuuid”:””}\]</td></tr><tr><td>taskscale</td><td>string</td><td>是</td><td>空闲坐席呼叫比 格式 1:1</td></tr><tr><td>concurrent</td><td>string</td><td>否</td><td>任务并发 默认100</td></tr><tr><td>scheduledtime</td><td>string</td><td>否</td><td>任务计划执行时间,任务开启状态下有效 格式：yyyy-mm-dd hh:mm:ss</td></tr><tr><td>pausedtime</td><td>string</td><td>否</td><td>任务运行截止时间,任务开启状态下有效 格式：yyyy-mm-dd hh:mm:ss</td></tr><tr><td>isscale</td><td>string</td><td>否</td><td>是否固定呼叫比例 auto：动态计算，manual：手动指定，sequential：按顺序呼叫</td></tr><tr><td>disnumber</td><td>string</td><td>否</td><td>主叫号码(用户手机上显示的来电号码），必须使用系统配置的主叫号码，否则呼叫失败，多个号码用逗号隔开(为空则系统随机选取主叫号码)</td></tr><tr><td>taskname</td><td>string</td><td>否</td><td>任务名，最大长度32位</td></tr><tr><td>status</td><td>string</td><td>否</td><td>任务是否开启 0不开启、1开启、默认是0</td></tr><tr><td>customtaskid</td><td>string</td><td>否</td><td>自定义任务id</td></tr><tr><td>is\_multi\_call</td><td>int</td><td>否</td><td>是否开启多轮呼叫 (0:关闭, 1:开启) 默认0</td></tr><tr><td>multi\_call\_type</td><td>int</td><td>否</td><td>重呼类型 (1:全量重呼, 2:未接通重呼) 默认2</td></tr><tr><td>multi\_call\_max\_rounds</td><td>int</td><td>否</td><td>最大重呼次数（包含首轮呼叫）</td></tr><tr><td>multi\_call\_interval</td><td>int</td><td>否</td><td>多轮呼叫间隔时间 秒, 默认值3600秒 否</td></tr></tbody></table>

#### 接口请求示例（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    foreach ($phoneArr as $phone){
        $telphoneArr[] = [
            'phone' => trim($phone),
            'time'  => $start_time,
            'memberid'  => '',
            'chengshudu'  => '',
            'customuuid'  => '',
            ];
    }
    $postFields = [
        'service'   => 'App.Sip_Yccall.TaskCreat',
        'token'     => 'ABCDEFG',
        'assigntype'    => 2,
        'assignagent'   => 'queue-1',
        'telphone'      => json_encode($telphoneArr),
        'taskscale'     => '1:1',
        'disnumber'     => ''
    ];
    $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": {
            "taskid": "20200212163504393460",
            "invaliddata": []
        },
        "reqtime": 1581496504,
        "rsptime": 1581496504
    },
    "msg": ""
}

```

#### 返回参数说明

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-result-obj"><thead><tr><th>参数名</th><th>类型</th><th>说明</th></tr></thead><tbody><tr><td>result</td><td>object</td><td>返回结果</td></tr><tr><td>taskid</td><td>string</td><td>任务唯一id</td></tr><tr><td>invaliddata</td><td>array</td><td>无效数据</td></tr></tbody></table>

# 短信任务管理

本文详细介绍了短信批量发送任务的创建与配置过程，并对任务名称、号码导入、发送时间及通道选择等关键环节进行了全面阐述。

### 功能概述

短信任务用于执行批量短信发送，支持即时或定时触发，适用于通知、营销、验证码等场景。通过规范的号码格式、通道匹配和时间设置，确保任务高效、合规地投递至目标用户。

### 功能入口

登录短信业务平台，在左侧导航栏选择 **短信 &gt; 短信任务**，进入短信任务管理界面。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1772587619998.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1772587619998.png)

### 功能介绍

#### 创建新任务

在短信任务管理页面，点击 **添加** 按钮，进入任务创建页面。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1772587671903.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1772587671903.png)

#### 设置任务名称

为任务填写一个清晰、可识别的名称（如“3月账单提醒”“业务结清通知”）； 名称将用于任务列表展示及后续查询，建议包含业务类型与日期。

#### 导入接收号码

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1772587961146.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1772587961146.png)[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1772587843139.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1772587843139.png)

务必先点击“下载模板”按钮，获取标准号码导入模板； [![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1772588062155.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1772588062155.png)

按照模板要求填写接收号码，必须满足以下格式：

采用 00 + 国家码 + 手机号码 格式；

示例：印尼号码应填写为 006281234567890。

完成填写后，点击 **确认** 按钮上传文件，系统将自动校验号码合法性。

#### 设定发送时间

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1772588299676.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1772588299676.png)

系统支持两种发送模式：

- 即时发送：选择时间为Now
- 定时发送：选择具体的日期和时间（精确到分钟），系统将在指定时刻自动启动发送。

💡 定时任务建议提前至少 10 分钟创建，避免因系统调度延迟错过预期时间，发送时间为**北京时间**。

#### 选择通道并提交任务

[![](https://document.infin8linx.com/uploads/images/gallery/2026-04/scaled-1680-/image-1777345241731.png)](https://document.infin8linx.com/uploads/images/gallery/2026-04/image-1777345241731.png)

根据短信内容类型，从下拉列表中选择合适的发送通道：

- OTP 验证码短信：请选择账户名以 otp 结尾的通道；
- 营销推广短信：请选择账户名以 mkt 结尾的通道。

> 温馨提示：在提交任务之前可以先通过点击**预检测**按钮，检查短信内容计费条数。
> 
> [![](https://document.infin8linx.com/uploads/images/gallery/2026-04/scaled-1680-/image-1777345516934.png)](https://document.infin8linx.com/uploads/images/gallery/2026-04/image-1777345516934.png)

确认所有配置无误后，点击 **确认** 按钮，完成任务创建。

⚠️ 通道选择错误可能导致短信被拦截或审核失败，请务必按内容类型匹配通道。

# 删除模板

### 域名

- https://api.incsapp.com

### 请求路由

- /external/templates/{template\_id}

### 请求方式

- **DELETE**

### 请求头

- certification-code: f484bd42-4a0c-39d....

### 请求参数

- 无

### 响应

#### 成功响应示例

```json
{
    "status": "success",
    "code": 200,
    "message": "",
    "data": {},
    "error": {}
}

```

#### 失败响应示例

```json
{
    "status": "error",
    "code": 400,
    "message": "The template is not found.",
    "data": {},
    "error": {}
}

```

# 分机组管理  - 获取分机组列表

#### 接口说明

获取当前用户拥有的分机组列表

#### 请求方式

POST，form-data格式

#### 请求参数

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E6%98%AF%E5%90%A6%E5%BF%85%E9%A1%BB-%E8%AF%B4%E6%98%8E-servi"><thead><tr><th>参数名</th><th>类型</th><th>是否必须</th><th>说明</th></tr></thead><tbody><tr><td>service</td><td>string</td><td>是</td><td>App.Sip\_Extgroup.GetExtgroupInfo</td></tr><tr><td>token</td><td>string</td><td>是</td><td>通过授权接口获取的token</td></tr><tr><td>name</td><td>string</td><td>否</td><td>分机组名，为空则获取所有</td></tr><tr><td>currentpage</td><td>int</td><td>否</td><td>页数，默认：1</td></tr><tr><td>itemsperpage</td><td>int</td><td>否</td><td>每页数量，默认：10，最小：1；最大：1000</td></tr></tbody></table>

#### 接口请求示例（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Extgroup.GetExtgroupInfo',
        'token'     => 'ABCDEFG',
        'name'  => '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": {
        "totalitems": 2,
        "currentpage": 1,
        "itemsperpage": 20,
        "extgroups": [
            {
                "id": 226,
                "name": "kefu03",
                "status": 1041,
                "createtime": "2026-09-17 07:45:54",
                "message": "坐席组已启用"
            },
            {
                "id": 227,
                "name": "kefu01",
                "status": 1041,
                "createtime": "2026-09-17 09:00:50",
                "message": "坐席组已启用"
            }
        ]
    },
    "reqtime": 1789610690,
    "rsptime": 1789610690
  },
  "msg": ""
}

```

#### 返回字段说明

<table id="bkmrk-%E5%AD%97%E6%AE%B5-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-result-obje"><thead><tr><th>字段</th><th>类型</th><th>说明</th></tr></thead><tbody><tr><td>result</td><td>object</td><td>分机组对象</td></tr><tr><td>-totalitems</td><td>int</td><td>分机总数</td></tr><tr><td>-currentpage</td><td>int</td><td>当前页码</td></tr><tr><td>-itemsperpage</td><td>int</td><td>每页默认值</td></tr><tr><td>-extgroups</td><td>array</td><td>分机组列表数组</td></tr><tr><td>—id</td><td>string</td><td>分机组id</td></tr><tr><td>—name</td><td>string</td><td>分机组名</td></tr><tr><td>—status</td><td>string</td><td>分机组状态码，1041：启用、1042：禁用</td></tr></tbody></table>

# 分机管理 - 获取分机注册信息

#### 接口说明

获取用户拥有的分机列表信息。

#### 请求方式

POST，form-data格式

#### 请求参数

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E6%98%AF%E5%90%A6%E5%BF%85%E9%A1%BB-%E8%AF%B4%E6%98%8E-servi"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">是否必须</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">service</td><td align="left">string</td><td align="left">是</td><td align="left">App.Sip\_Status.GetSipRegisterStatus</td></tr><tr><td align="left">token</td><td align="left">string</td><td align="left">是</td><td align="left">通过授权接口获取的token</td></tr><tr><td align="left">extnumber</td><td align="left">string</td><td align="left">是</td><td align="left">分机号，多个分机号用英文逗号隔开</td></tr></tbody></table>

#### 接口请求示例（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Status.GetSipRegisterStatus',
        'token'     => 'ABCDEFG',
        'extnumber'  => '100001'
    ];
    $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": [
            {
                "extnumber": "90170002",
                "code": 1014,
                "clientip": null,
                "serverip": null
            }
        ],
        "reqtime": 1581507361,
        "rsptime": 1581507361
    },
    "msg": ""
}


```

#### 返回参数说明

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-result-arr"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">result</td><td align="left">array</td><td align="left">分机数据数组</td></tr><tr><td align="left">—extnumber</td><td align="left">string</td><td align="left">分机号</td></tr><tr><td align="left">—code</td><td align="left">int</td><td align="left">分机号状态</td></tr><tr><td align="left">—clientip</td><td align="left">string</td><td align="left">分机注册客户端IP</td></tr><tr><td align="left">—serverip</td><td align="left">string</td><td align="left">分机注册服务端Ip</td></tr></tbody></table>

# 语音呼叫API - 发起语音呼叫

#### 接口说明

对某个号码直接发起呼叫，多数适用于网页上点击“呼叫”后调用接口。

#### 请求方式

POST，form-data格式

#### 请求参数

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E6%98%AF%E5%90%A6%E5%BF%85%E9%A1%BB-%E8%AF%B4%E6%98%8E-servi"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">是否必须</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">service</td><td align="left">string</td><td align="left">是</td><td align="left">App.Sip\_Call.MakeCall</td></tr><tr><td align="left">token</td><td align="left">string</td><td align="left">是</td><td align="left">通过授权接口获取的token</td></tr><tr><td align="left">extnumber</td><td align="left">string</td><td align="left">是</td><td align="left">分机号</td></tr><tr><td align="left">destnumber</td><td align="left">string</td><td align="left">是</td><td align="left">目标号码</td></tr><tr><td align="left">disnumber</td><td align="left">string</td><td align="left">否</td><td align="left">主叫号码(用户手机上显示的来电号码)，必须使用系统配置的主叫号码，否则呼叫失败，留空则随机取一个主叫号码</td></tr><tr><td align="left">userid</td><td align="left">string</td><td align="left">否</td><td align="left">自定义参数(员工id)</td></tr><tr><td align="left">memberid</td><td align="left">string</td><td align="left">否</td><td align="left">自定义参数(会员id)</td></tr><tr><td align="left">customuuid</td><td align="left">string</td><td align="left">否</td><td align="left">自定义参数(客户id)</td></tr><tr><td align="left">ext</td><td align="left">string</td><td align="left">否</td><td align="left">自定义参数(扩展参数)</td></tr></tbody></table>

#### 接口请求示例（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Call.MakeCall',
        'token'     => 'ABCDEFG',
        'extnumber'  => 'abcdefg',
        'destnumber'  => 'abcdefg',
        'disnumber'  => 'abcdefg',
        'userid'  => 'abcdefg',
        'memberid'  => 'abcdefg',
        'customuuid'  => 'abcdefg',
        'ext'  => '{"aa":11}',
    ];
    $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": 1581389402,
        "rsptime": 1581389402
    },
    "msg": ""
}

```

#### 返回参数说明

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-status-int"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">status</td><td align="left">int</td><td align="left">0修改成功，1修改失败</td></tr><tr><td align="left">desc</td><td align="left">string</td><td align="left">描述信息</td></tr><tr><td align="left">result</td><td align="left">object</td><td align="left">对象信息当前为空</td></tr></tbody></table>

# 3.执行任务

任务创建后，系统会根据任务配置的信息，在设定的时间内开始执行预测式外呼任务。当任务开始执行时，任务会处于执行进行中的状态。

[![](https://document.infin8linx.com/uploads/images/gallery/2025-12/scaled-1680-/image-1766646108778.png)](https://document.infin8linx.com/uploads/images/gallery/2025-12/image-1766646108778.png)

没有设定预测式外呼任务执行时间段，需手动进行任务的开启。

[![](https://document.infin8linx.com/uploads/images/gallery/2025-12/scaled-1680-/image-1766648918120.png)](https://document.infin8linx.com/uploads/images/gallery/2025-12/image-1766648918120.png)

# 全局错误码和状态码

#### 一、接口异常错误

说明：ret为非200，msg为异常的错误信息。

```
{
    "ret":400, // 状态码
    "data":[],
    "msg":"非法请求：参数不合法"
}


```

<table id="bkmrk-ret-msg-%E8%AF%B4%E6%98%8E-400-%E9%9D%9E%E6%B3%95%E8%AF%B7%E6%B1%82-"><thead><tr><th align="left">ret</th><th align="left">msg</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">400</td><td align="left">非法请求</td><td align="left">一般为参数不合法</td></tr><tr><td align="left">500</td><td align="left"></td><td align="left">服务器错误</td></tr><tr><td align="left">600</td><td align="left"></td><td align="left">token无效请重新登陆验证</td></tr><tr><td align="left">601</td><td align="left">appid未授权</td><td align="left">请检查appid或联系客服人员是否授权</td></tr><tr><td align="left">602</td><td align="left"></td><td align="left">appid授权已到期</td></tr><tr><td align="left">603</td><td align="left"></td><td align="left">模块未授权</td></tr><tr><td align="left">604</td><td align="left">IP未授权</td><td align="left">请联系厂商授权访问</td></tr></tbody></table>

#### 二、接口请求正常,内部处理错误

说明：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": ""
}


```

<table id="bkmrk-code-codemsg-%E8%AF%B4%E6%98%8E-1001"><thead><tr><th align="left">code</th><th align="left">codemsg</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">1001</td><td align="left">服务器连接失败</td><td align="left">一般为网络原因</td></tr><tr><td align="left">1002</td><td align="left">操作异常</td><td align="left">一般为校验异常等</td></tr><tr><td align="left">1003</td><td align="left">操作失败</td><td align="left">一般是授权失败、注销失败、命令发送失败、服务器连接异常等</td></tr><tr><td align="left">1010</td><td align="left">分机异常</td><td align="left">可能是新加的分机，需要重新登陆获取新token</td></tr><tr><td align="left">1011</td><td align="left">非法分机</td><td align="left">非本公司所有</td></tr><tr><td align="left">1012</td><td align="left">分机不存在</td><td align="left">分机号码状态</td></tr><tr><td align="left">1013</td><td align="left">分机已停用</td><td align="left">分机号码状态</td></tr><tr><td align="left">1014</td><td align="left">分机未注册</td><td align="left">分机号码状态</td></tr><tr><td align="left">1015</td><td align="left">分机不在通话中</td><td align="left">分机号码状态</td></tr><tr><td align="left">1016</td><td align="left">分机已启用</td><td align="left">分机号码状态</td></tr><tr><td align="left">1017</td><td align="left">分机已注册</td><td align="left">分机号码状态</td></tr><tr><td align="left">1018</td><td align="left">号码已启用</td><td align="left">主叫号码状态</td></tr><tr><td align="left">1019</td><td align="left">号码已禁用</td><td align="left">主叫号码状态</td></tr><tr><td align="left">1020</td><td align="left">号码不存在</td><td align="left">主叫号码状态</td></tr><tr><td align="left">1021</td><td align="left">非法号码</td><td align="left">非本公司所有</td></tr><tr><td align="left">1024</td><td align="left">任务不存在</td><td align="left">预测式任务接口返回状态</td></tr><tr><td align="left">1025</td><td align="left">未开始</td><td align="left">预测式任务接口返回状态</td></tr><tr><td align="left">1026</td><td align="left">进行中</td><td align="left">预测式任务接口返回状态</td></tr><tr><td align="left">1027</td><td align="left">暂停</td><td align="left">预测式任务接口返回状态</td></tr><tr><td align="left">1028</td><td align="left">已结束</td><td align="left">预测式任务接口返回状态</td></tr><tr><td align="left">1201</td><td align="left">空闲</td><td align="left">分机合法、已启用并已注册</td></tr><tr><td align="left">1202</td><td align="left">振铃</td><td align="left">分机呼叫状态</td></tr><tr><td align="left">1203</td><td align="left">摘机</td><td align="left">分机呼叫状态</td></tr><tr><td align="left">1204</td><td align="left">通话中</td><td align="left">分机呼叫状态</td></tr><tr><td align="left">1205</td><td align="left">用户拒接</td><td align="left">被叫方拒接</td></tr><tr><td align="left">1210</td><td align="left">队列异常</td><td align="left">预测式外呼中返回</td></tr><tr><td align="left">1211</td><td align="left">非法队列</td><td align="left">不存在或非本公司所有</td></tr><tr><td align="left">1212</td><td align="left">未接听</td><td align="left">已分配未接听</td></tr><tr><td align="left">1213</td><td align="left">等待中</td><td align="left">等待分配(示闲)</td></tr><tr><td align="left">1214</td><td align="left">接收中</td><td align="left">队列中的分机状态</td></tr><tr><td align="left">1215</td><td align="left">已接听</td><td align="left">队列里的分机状态</td></tr><tr><td align="left">1216</td><td align="left">拒接</td><td align="left">队列里的分机状态</td></tr><tr><td align="left">1217</td><td align="left">暂停</td><td align="left">示忙</td></tr><tr><td align="left">1218</td><td align="left">已签入</td><td align="left">队列中已签入该分机</td></tr><tr><td align="left">10001</td><td align="left">正常挂断</td><td align="left">挂机原因</td></tr><tr><td align="left">10002</td><td align="left">呼叫取消</td><td align="left">挂机原因</td></tr><tr><td align="left">10003</td><td align="left">拒绝接听</td><td align="left">挂机原因</td></tr><tr><td align="left">10004</td><td align="left">外呼通道线路失败</td><td align="left">挂机原因</td></tr><tr><td align="left">10005</td><td align="left">用户超时未接听</td><td align="left">挂机原因</td></tr><tr><td align="left">10006</td><td align="left">用户忙</td><td align="left">挂机原因</td></tr><tr><td align="left">10007</td><td align="left">服务器端挂断</td><td align="left">挂机原因</td></tr><tr><td align="left">10008</td><td align="left">号码未注册</td><td align="left">挂机原因</td></tr><tr><td align="left">10009</td><td align="left">目标不可达</td><td align="left">挂机原因</td></tr><tr><td align="left">10011</td><td align="left">定时器超时</td><td align="left">挂机原因</td></tr><tr><td align="left">10012</td><td align="left">呼入时回调接口错误</td><td align="left">挂机原因</td></tr><tr><td align="left">10013</td><td align="left">分机不存在</td><td align="left">挂机原因</td></tr><tr><td align="left">10014</td><td align="left">未发现</td><td align="left">挂机原因</td></tr><tr><td align="left">10015</td><td align="left">请求超时</td><td align="left">挂机原因</td></tr><tr><td align="left">10016</td><td align="left">无人接听</td><td align="left">挂机原因</td></tr><tr><td align="left">10017</td><td align="left">呼叫失效</td><td align="left">挂机原因</td></tr><tr><td align="left">10019</td><td align="left">归属地未知</td><td align="left">挂机原因</td></tr><tr><td align="left">10020</td><td align="left">其它原因</td><td align="left">挂机原因</td></tr><tr><td align="left">10024</td><td align="left">错误请求</td><td align="left">挂机原因</td></tr><tr><td align="left">10025</td><td align="left">呼叫被禁止</td><td align="left">挂机原因</td></tr><tr><td align="left">10027</td><td align="left">号码被改变</td><td align="left">挂机原因</td></tr><tr><td align="left">10028</td><td align="left">呼叫拦截</td><td align="left">挂机原因</td></tr><tr><td align="left">10031</td><td align="left">未知</td><td align="left">挂机原因</td></tr><tr><td align="left">10040</td><td align="left">主叫挂机</td><td align="left">挂机方向</td></tr><tr><td align="left">10041</td><td align="left">被叫挂机</td><td align="left">挂机方向</td></tr></tbody></table>

# Common API - Clear the Token interface

#### Interface Description

Note: When there is a new extension or an abnormality occurs after the extension is adjusted, you can clear the Token through this interface, and then obtain the Token again to continue the operation.

#### Request method

POST, form-data format

#### request parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th align="left">parameter name</th><th align="left">type</th><th align="left">Is it necessary</th><th align="left">illustrate</th></tr></thead><tbody><tr><td align="left">service</td><td align="left">string</td><td align="left">yes</td><td align="left">App.Sip\_Auth.Logout</td></tr><tr><td align="left">token</td><td align="left">string</td><td align="left">yes</td><td align="left">Token string</td></tr></tbody></table>

#### Interface request example（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);
?>


```

#### return data structure example

```
{
    "ret": 200,
    "data": {
        "status": 0,
        "desc": "logout successful",
        "reqtime": 1602655204,
        "rsptime": 1602655204
    },
    "msg": ""
}

```

# Common API - Global error and status codes

#### Interface exception error

##### Description

ret is not 200, msg is abnormal error message.

```
{
    "ret":400, // status code
    "data":[],
    "msg":"Illegal request: invalid parameter"
}


```

<table id="bkmrk-ret-msg-illustrate-4"><thead><tr><th align="left">ret</th><th align="left">msg</th><th align="left">illustrate</th></tr></thead><tbody><tr><td align="left">400</td><td align="left">illegal request</td><td align="left">Generally, the parameters are invalid</td></tr><tr><td align="left">500</td><td align="left"></td><td align="left">Server Error</td></tr><tr><td align="left">600</td><td align="left"></td><td align="left">The token is invalid, please log in again to verify</td></tr><tr><td align="left">601</td><td align="left">appid is not authorized</td><td align="left">Please check the appid or contact Yunhu Technology for authorization</td></tr><tr><td align="left">602</td><td align="left"></td><td align="left">appid authorization has expired</td></tr><tr><td align="left">603</td><td align="left"></td><td align="left">Module not licensed</td></tr><tr><td align="left">604</td><td align="left">IP is not authorized</td><td align="left">Please contact the manufacturer to authorize access</td></tr></tbody></table>

#### The interface request is normal, but the internal processing error

##### Description

ret is 200. In the data structure, the status is 1, desc is the Chinese description of the failure, and errors is the detailed error information. For the code code, please refer to the corresponding description. msg is empty.

```
{
    "ret": 200,
    "data": {
        "status": 1,
        "desc": "xxxfail",
        "errors": {
            "code": "1003",
            "codemsg": "Authorization failed"
        },
        "reqtime": 1507529858,
        "rsptime": 1507529858
    },
    "msg": ""
}


```

<table id="bkmrk-code-codemsg-illustr"><thead><tr><th align="left">code</th><th align="left">codemsg</th><th align="left">illustrate</th></tr></thead><tbody><tr><td align="left">1001</td><td align="left">Server connection failed</td><td align="left">Usually due to network</td></tr><tr><td align="left">1002</td><td align="left">Abnormal operation</td><td align="left">Generally, it is a check exception, etc.</td></tr><tr><td align="left">1003</td><td align="left">operation failed</td><td align="left">Generally, authorization failure, logout failure, command sending failure, server connection exception, etc.</td></tr><tr><td align="left">1010</td><td align="left">Extension exception</td><td align="left">It may be a newly added extension, you need to log in again to get a new token</td></tr><tr><td align="left">1011</td><td align="left">illegal extension</td><td align="left">not owned by the company</td></tr><tr><td align="left">1012</td><td align="left">extension does not exist</td><td align="left">Extension Number Status</td></tr><tr><td align="left">1013</td><td align="left">extension disabled</td><td align="left">Extension Number Status</td></tr><tr><td align="left">1014</td><td align="left">extension not registered</td><td align="left">Extension Number Status</td></tr><tr><td align="left">1015</td><td align="left">The extension is not in a call</td><td align="left">Extension Number Status</td></tr><tr><td align="left">1016</td><td align="left">extension enabled</td><td align="left">Extension Number Status</td></tr><tr><td align="left">1017</td><td align="left">extension is registered</td><td align="left">Extension Number Status</td></tr><tr><td align="left">1018</td><td align="left">Number is enabled</td><td align="left">Caller ID status</td></tr><tr><td align="left">1019</td><td align="left">number disabled</td><td align="left">Caller ID status</td></tr><tr><td align="left">1020</td><td align="left">number does not exist</td><td align="left">Caller ID status</td></tr><tr><td align="left">1021</td><td align="left">illegal number</td><td align="left">not owned by the company</td></tr><tr><td align="left">1024</td><td align="left">task does not exist</td><td align="left">Predictive task interface return status</td></tr><tr><td align="left">1025</td><td align="left">has not started</td><td align="left">Predictive task interface return status</td></tr><tr><td align="left">1026</td><td align="left">in progress</td><td align="left">Predictive task interface return status</td></tr><tr><td align="left">1027</td><td align="left">pause</td><td align="left">Predictive task interface return status</td></tr><tr><td align="left">1028</td><td align="left">over</td><td align="left">Predictive task interface return status</td></tr><tr><td align="left">1201</td><td align="left">idle</td><td align="left">Extension is legal, enabled and registered</td></tr><tr><td align="left">1202</td><td align="left">ringing</td><td align="left">extension return</td></tr><tr><td align="left">1203</td><td align="left">off-hook</td><td align="left">extension return</td></tr><tr><td align="left">1204</td><td align="left">calling</td><td align="left">extension return</td></tr><tr><td align="left">1205</td><td align="left">User rejects</td><td align="left">Called party rejects</td></tr><tr><td align="left">1210</td><td align="left">Queue exception</td><td align="left">return in predictive outbound</td></tr><tr><td align="left">1211</td><td align="left">illegal queue</td><td align="left">Does not exist or is not owned by the company</td></tr><tr><td align="left">1212</td><td align="left">did not answer</td><td align="left">Assigned unanswered</td></tr><tr><td align="left">1213</td><td align="left">Waiting</td><td align="left">Waiting for assignment (idle)</td></tr><tr><td align="left">1214</td><td align="left">receiving</td><td align="left">Status of extensions in queue</td></tr><tr><td align="left">1215</td><td align="left">answered</td><td align="left">Status of extensions in the queue</td></tr><tr><td align="left">1216</td><td align="left">Reject</td><td align="left">Status of extensions in the queue</td></tr><tr><td align="left">1217</td><td align="left">pause</td><td align="left">show busy</td></tr><tr><td align="left">1218</td><td align="left">checked in</td><td align="left">The extension is already checked into the queue</td></tr><tr><td align="left">10001</td><td align="left">hang up normally</td><td align="left">call state</td></tr><tr><td align="left">10002</td><td align="left">call cancel</td><td align="left">call state</td></tr><tr><td align="left">10003</td><td align="left">refuse to answer</td><td align="left">call state</td></tr><tr><td align="left">10004</td><td align="left">Outbound channel line failure</td><td align="left">Usually due to wiring</td></tr><tr><td align="left">10005</td><td align="left">User timed out</td><td align="left">call state</td></tr><tr><td align="left">10006</td><td align="left">User is busy</td><td align="left">call state</td></tr><tr><td align="left">10040</td><td align="left">caller hang up</td><td align="left">call state</td></tr><tr><td align="left">10041</td><td align="left">Called hang up</td><td align="left">call state</td></tr></tbody></table>

# Extension Manage - Get extension list information

#### Interface Description

Get the extension list information owned by the user。

#### Request method

POST, form-data format

#### request parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th>parameter name</th><th>type</th><th>Is it necessary</th><th>illustrate</th></tr></thead><tbody><tr><td>service</td><td>string</td><td>yes</td><td>App.Sip\_Sipnum.GetSipnumberInfo</td></tr><tr><td>token</td><td>string</td><td>yes</td><td>The token obtained through the authorization interface</td></tr><tr><td>status</td><td>int</td><td>yes</td><td>extension status. 1: enable (default), 2: disable, 3: all</td></tr><tr><td>extnumber</td><td>string</td><td>yes</td><td>Extension number, empty to get all</td></tr></tbody></table>

#### Interface request example（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Sipnum.GetSipnumberInfo',
        'token'     => 'ABCDEFG',
        'status'    => 3,
        'extnumber'  => '100001'
    ];
    $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);
?>


```

#### return data structure example

```
{
    "ret": 200,
    "data": {
        "status": 0,
        "desc": "get success",
        "result": [
            {
                "extnumber": "100001",
                "password": "100001",
                "status": 1016,
                "register": "nreg"
            }
        ],
        "reqtime": 1581506241,
        "rsptime": 1581506241
    },
    "msg": ""
}


```

#### Return parameter description

<table id="bkmrk-parameter-name-type--1"><thead><tr><th align="left">parameter name</th><th align="left">type</th><th align="left">illustrate</th></tr></thead><tbody><tr><td align="left">result</td><td align="left">array</td><td align="left">extension list array</td></tr><tr><td align="left">—extnumber</td><td align="left">string</td><td align="left">Ext</td></tr><tr><td align="left">—password</td><td align="left">string</td><td align="left">Extension login password</td></tr><tr><td align="left">—status</td><td align="left">int</td><td align="left">Extension Status</td></tr><tr><td align="left">—register</td><td align="left">string</td><td align="left">Extension registration status. nreg: not registered; reg: registered</td></tr></tbody></table>

# Commo API - API for getting call records

#### Interface description

the interface for the customer to actively pull the list of call records.

#### Request method

POST, form-data format

#### Get call record interface request parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th align="left">parameter name</th><th align="left">type</th><th align="left">Is it necessary</th><th align="left">illustrate</th></tr></thead><tbody><tr><td align="left">service</td><td align="left">string</td><td align="left">yes</td><td align="left">App.Sip\_Cdr.GetBill</td></tr><tr><td align="left">token</td><td align="left">string</td><td align="left">yes</td><td align="left">The token obtained through the authorization interface</td></tr><tr><td align="left">starttime</td><td align="left">string</td><td align="left">yes</td><td align="left">(Dial) start time, format：yyyy-mm-dd hh:mm:ss</td></tr><tr><td align="left">endtime</td><td align="left">string</td><td align="left">yes</td><td align="left">(Dial) end time, format：yyyy-mm-dd hh:mm:ss</td></tr><tr><td align="left">syncflag</td><td align="left">int</td><td align="left">yes</td><td align="left">Get record type: 1. Get unqueried records (default); 2. Get queried records; 3. Get all records.</td></tr><tr><td align="left">direction</td><td align="left">int</td><td align="left">yes</td><td align="left">Call direction: 1. Incoming; 2. Outgoing; 3. All (default).</td></tr><tr><td align="left">callmethod</td><td align="left">int</td><td align="left">yes</td><td align="left">Call method: 0, unlimited; 1, mutual extension dial; 2, extension direct dial (manual dial); 3, API call (default); 4, API double call; 5, predictive outbound call; 6, IVR/group call .</td></tr><tr><td align="left">currentpage</td><td align="left">int</td><td align="left">yes</td><td align="left">number of pages, default: 1</td></tr><tr><td align="left">itemsperpage</td><td align="left">int</td><td align="left">yes</td><td align="left">Number per page, default: 10, minimum: 1; maximum: 1000</td></tr><tr><td align="left">extnumber</td><td align="left">string</td><td align="left">yes</td><td align="left">Extension number, multiple extension numbers are separated by English commas, when passing a null value, it is all</td></tr><tr><td align="left">destnumber</td><td align="left">string</td><td align="left">yes</td><td align="left">The target number of the call, when passing a null value, it is all</td></tr><tr><td align="left">userid</td><td align="left">string</td><td align="left">yes</td><td align="left">Custom data (employee ID), nullable</td></tr><tr><td align="left">memberid</td><td align="left">string</td><td align="left">yes</td><td align="left">Custom data (member ID), can be empty</td></tr><tr><td align="left">chengshudu</td><td align="left">string</td><td align="left">no</td><td align="left">Custom Data (Maturity)</td></tr><tr><td align="left">customuuid</td><td align="left">string</td><td align="left">no</td><td align="left">Custom Data (Customer ID)</td></tr></tbody></table>

#### API Request Example for Obtaining Call Records（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);
?>


```

#### return data structure example

```
{
    "ret": 200,
    "data": {
        "status": 0,
        "desc": "get success",
        "result": {
            "totalitems": 8151,
            "currentpage": 1,
            "itemsperpage": 10,
            "bills": [
                {
                    "id": 22670,
                    "extnumber": "",
                    "destnumber": "13387525701",
                    "displaynumber": "2190170001",
                    "starttime": "2019-09-27 14:58:37",
                    "answertime": null,
                    "endtime": "2019-09-27 14:59:05",
                    "duration": 28,
                    "billsec": 0,
                    "direction": "callout",
                    "callmethod": 6,
                    "userid": "0",
                    "memberid": "0",
                    "chengshudu": "0",
                    "customuuid": "0",
                    "recordfilename": "",
                    "downloadip": "",
                    "hangupdirection": 10041,
                    "hangupcause": 10020,
                    "userkey":"#"
                }
            ]
        },
        "reqtime": 1581502410,
        "rsptime": 1581502410
    },
    "msg": ""
}


```

#### Return parameter description

<table id="bkmrk-parameter-name-type--1"><thead><tr><th align="left">parameter name</th><th align="left">type</th><th align="left">illustrate</th></tr></thead><tbody><tr><td align="left">result</td><td align="left">objest</td><td align="left">returned result set</td></tr><tr><td align="left">—totalitems</td><td align="left">int</td><td align="left">total number of records</td></tr><tr><td align="left">—currentpage</td><td align="left">int</td><td align="left">current page number</td></tr><tr><td align="left">—itemsperpage</td><td align="left">int</td><td align="left">Quantity per page</td></tr><tr><td align="left">—bills</td><td align="left">array</td><td align="left">record array</td></tr><tr><td align="left">——id</td><td align="left">int</td><td align="left">record id</td></tr><tr><td align="left">——extnumber</td><td align="left">string</td><td align="left">Ext</td></tr><tr><td align="left">——destnumber</td><td align="left">string</td><td align="left">target number</td></tr><tr><td align="left">——displaynumber</td><td align="left">string</td><td align="left">display number</td></tr><tr><td align="left">——starttime</td><td align="left">string</td><td align="left">call time</td></tr><tr><td align="left">——answertime</td><td align="left">string</td><td align="left">response time</td></tr><tr><td align="left">——endtime</td><td align="left">string</td><td align="left">call end time</td></tr><tr><td align="left">——duration</td><td align="left">int</td><td align="left">call waiting time</td></tr><tr><td align="left">——billsec</td><td align="left">int</td><td align="left">call time</td></tr><tr><td align="left">——direction</td><td align="left">string</td><td align="left">call direction</td></tr><tr><td align="left">——callmethod</td><td align="left">int</td><td align="left">call method</td></tr><tr><td align="left">——userid</td><td align="left">string</td><td align="left">Custom parameter (user id)</td></tr><tr><td align="left">——memberid</td><td align="left">string</td><td align="left">Custom parameters (member id)</td></tr><tr><td align="left">——chengshudu</td><td align="left">string</td><td align="left">Custom parameters (maturity)</td></tr><tr><td align="left">——customuuid</td><td align="left">string</td><td align="left">Custom parameters (customer id)</td></tr><tr><td align="left">——recordfilename</td><td align="left">string</td><td align="left">call log file name</td></tr><tr><td align="left">——downloadip</td><td align="left">string</td><td align="left">download ip</td></tr><tr><td align="left">——hangupdirection</td><td align="left">int</td><td align="left">hang up directions</td></tr><tr><td align="left">——hangupcause</td><td align="left">int</td><td align="left">hang up reason</td></tr><tr><td align="left">——userkey</td><td align="left">string</td><td align="left">user button</td></tr></tbody></table>

#### Postman Example request parameters

![](https://doc-admin.infin8linx.com/uploads/202503/c65b2c52d15ac1a4f5775e9b19f9cfe5.jpg)

# Interface Description

## Interface Description

**Important Notes:**

1. The message content (UTF-8 encoded) needs to be converted to hexadecimal code before sending, for example, "你好" converts to "e4bda0e5a5bd"
2. Phone numbers must include international country codes (e.g., 00628131565741)
3. Password encryption rule: md5(spid+"00000000"+"plaintext password"+timestamp) For example: Before MD5: testspid00000000testpwd1601029303 After MD5: a14e201f22aafbae74c4d72030ad5a8d

# 2. SMS Task Submission

### 2.1. SMS Task Entry

Click the "SMS Task" menu button in the upper left corner of the page to enter the SMS task management interface. [![m_1904162891058a82e0590cc0de49d546_r.png](https://document.infin8linx.com/uploads/images/gallery/2025-12/scaled-1680-/m-1904162891058a82e0590cc0de49d546-r.png)](https://document.infin8linx.com/uploads/images/gallery/2025-12/m-1904162891058a82e0590cc0de49d546-r.png)

### 2.2. Creating a New Task

On the SMS task interface, click the "Add Task" button to enter the task creation page.

[![m_0732fa55dd71d2e742b54dbcf4ef7d8f_r.png](https://document.infin8linx.com/uploads/images/gallery/2025-12/scaled-1680-/m-0732fa55dd71d2e742b54dbcf4ef7d8f-r.png)](https://document.infin8linx.com/uploads/images/gallery/2025-12/m-0732fa55dd71d2e742b54dbcf4ef7d8f-r.png)

### 2.3. Task Name Setting

Set a clear and identifiable task name for the new task, such as "Business Settlement Notice".

[![m_ed6ab9af92b7742562ae290301a12635_r.png](https://document.infin8linx.com/uploads/images/gallery/2025-12/scaled-1680-/m-ed6ab9af92b7742562ae290301a12635-r.png)](https://document.infin8linx.com/uploads/images/gallery/2025-12/m-ed6ab9af92b7742562ae290301a12635-r.png)

### 2.4. Recipient Number Import

**Important Note**: Before importing numbers, please first obtain the standard template by clicking the "Download Template" button. When filling out the template, please strictly follow the specified format.

[![m_afdf5bf24fe060d74a9d49f040acf0fd_r.png](https://document.infin8linx.com/uploads/images/gallery/2025-12/scaled-1680-/m-afdf5bf24fe060d74a9d49f040acf0fd-r.png)](https://document.infin8linx.com/uploads/images/gallery/2025-12/m-afdf5bf24fe060d74a9d49f040acf0fd-r.png)

Number format requirements: Must include country code, using the format 00+country code+phone number. For example, Indonesian numbers should be: 0062+mobile number. [![m_bf13bd9c4818e617c3d7ad18c274d9e7_r.png](https://document.infin8linx.com/uploads/images/gallery/2025-12/scaled-1680-/m-bf13bd9c4818e617c3d7ad18c274d9e7-r.png)](https://document.infin8linx.com/uploads/images/gallery/2025-12/m-bf13bd9c4818e617c3d7ad18c274d9e7-r.png)

After completing the template, click the submit button to upload the file.

### 2.5. Sending Time Configuration

The system supports two sending modes:

- Immediate sending: Leave the time field empty, and the system will process the sending immediately after task submission
- Scheduled sending: Select a specific scheduled sending time, and the system will automatically start the sending task at the specified time

[![m_3b7252057dd8846ee64dc7ad039a3a2a_r.png](https://document.infin8linx.com/uploads/images/gallery/2025-12/scaled-1680-/m-3b7252057dd8846ee64dc7ad039a3a2a-r.png)](https://document.infin8linx.com/uploads/images/gallery/2025-12/m-3b7252057dd8846ee64dc7ad039a3a2a-r.png)

### 2.6. Channel Selection and Submission

Select the appropriate sending channel based on the SMS content type:

- OTP verification code SMS: Select accounts ending with "otp"
- Marketing promotion SMS: Select accounts ending with "mkt"

After selection, click the "Submit" button to complete task creation. [![m_5f7a4de7faf71f1e86c272a7d16ed3b3_r.png](https://document.infin8linx.com/uploads/images/gallery/2025-12/scaled-1680-/m-5f7a4de7faf71f1e86c272a7d16ed3b3-r.png)](https://document.infin8linx.com/uploads/images/gallery/2025-12/m-5f7a4de7faf71f1e86c272a7d16ed3b3-r.png)

[![
](https://document.infin8linx.com/uploads/images/gallery/2025-12/scaled-1680-/fLnm-c103a7653583cfe01235ab8802638f73-r.png)](https://document.infin8linx.com/uploads/images/gallery/2025-12/fLnm-c103a7653583cfe01235ab8802638f73-r.png)

# Global error and status codes

#### Interface exception error

Description: ret is not 200, msg is abnormal error message.

```
{
    "ret":400, // status code
    "data":[],
    "msg":"Illegal request: invalid parameter"
}


```

<table id="bkmrk-ret-msg-illustrate-4"><thead><tr><th align="left">ret</th><th align="left">msg</th><th align="left">illustrate</th></tr></thead><tbody><tr><td align="left">400</td><td align="left">illegal request</td><td align="left">Generally, the parameters are invalid</td></tr><tr><td align="left">500</td><td align="left"></td><td align="left">Server Error</td></tr><tr><td align="left">600</td><td align="left"></td><td align="left">The token is invalid, please log in again to verify</td></tr><tr><td align="left">601</td><td align="left">appid is not authorized</td><td align="left">Please check the appid or contact Yunhu Technology for authorization</td></tr><tr><td align="left">602</td><td align="left"></td><td align="left">appid authorization has expired</td></tr><tr><td align="left">603</td><td align="left"></td><td align="left">Module not licensed</td></tr><tr><td align="left">604</td><td align="left">IP is not authorized</td><td align="left">Please contact the manufacturer to authorize access</td></tr></tbody></table>

#### The interface request is normal, but the internal processing error

Description: ret is 200. In the data structure, the status is 1, desc is the Chinese description of the failure, and errors is the detailed error information. For the code code, please refer to the corresponding description. msg is empty.

```
{
    "ret": 200,
    "data": {
        "status": 1,
        "desc": "xxxfail",
        "errors": {
            "code": "1003",
            "codemsg": "Authorization failed"
        },
        "reqtime": 1507529858,
        "rsptime": 1507529858
    },
    "msg": ""
}


```

<table id="bkmrk-code-codemsg-illustr"><thead><tr><th align="left">code</th><th align="left">codemsg</th><th align="left">illustrate</th></tr></thead><tbody><tr><td align="left">1001</td><td align="left">Server connection failed</td><td align="left">Usually due to network</td></tr><tr><td align="left">1002</td><td align="left">Abnormal operation</td><td align="left">Generally, it is a check exception, etc.</td></tr><tr><td align="left">1003</td><td align="left">operation failed</td><td align="left">Generally, authorization failure, logout failure, command sending failure, server connection exception, etc.</td></tr><tr><td align="left">1010</td><td align="left">Extension exception</td><td align="left">It may be a newly added extension, you need to log in again to get a new token</td></tr><tr><td align="left">1011</td><td align="left">illegal extension</td><td align="left">not owned by the company</td></tr><tr><td align="left">1012</td><td align="left">extension does not exist</td><td align="left">Extension Number Status</td></tr><tr><td align="left">1013</td><td align="left">extension disabled</td><td align="left">Extension Number Status</td></tr><tr><td align="left">1014</td><td align="left">extension not registered</td><td align="left">Extension Number Status</td></tr><tr><td align="left">1015</td><td align="left">The extension is not in a call</td><td align="left">Extension Number Status</td></tr><tr><td align="left">1016</td><td align="left">extension enabled</td><td align="left">Extension Number Status</td></tr><tr><td align="left">1017</td><td align="left">extension is registered</td><td align="left">Extension Number Status</td></tr><tr><td align="left">1018</td><td align="left">Number is enabled</td><td align="left">Caller ID status</td></tr><tr><td align="left">1019</td><td align="left">number disabled</td><td align="left">Caller ID status</td></tr><tr><td align="left">1020</td><td align="left">number does not exist</td><td align="left">Caller ID status</td></tr><tr><td align="left">1021</td><td align="left">illegal number</td><td align="left">not owned by the company</td></tr><tr><td align="left">1024</td><td align="left">task does not exist</td><td align="left">Predictive task interface return status</td></tr><tr><td align="left">1025</td><td align="left">has not started</td><td align="left">Predictive task interface return status</td></tr><tr><td align="left">1026</td><td align="left">in progress</td><td align="left">Predictive task interface return status</td></tr><tr><td align="left">1027</td><td align="left">pause</td><td align="left">Predictive task interface return status</td></tr><tr><td align="left">1028</td><td align="left">over</td><td align="left">Predictive task interface return status</td></tr><tr><td align="left">1201</td><td align="left">idle</td><td align="left">Extension is legal, enabled and registered</td></tr><tr><td align="left">1202</td><td align="left">ringing</td><td align="left">extension return</td></tr><tr><td align="left">1203</td><td align="left">off-hook</td><td align="left">extension return</td></tr><tr><td align="left">1204</td><td align="left">calling</td><td align="left">extension return</td></tr><tr><td align="left">1205</td><td align="left">User rejects</td><td align="left">Called party rejects</td></tr><tr><td align="left">1210</td><td align="left">Queue exception</td><td align="left">return in predictive outbound</td></tr><tr><td align="left">1211</td><td align="left">illegal queue</td><td align="left">Does not exist or is not owned by the company</td></tr><tr><td align="left">1212</td><td align="left">did not answer</td><td align="left">Assigned unanswered</td></tr><tr><td align="left">1213</td><td align="left">Waiting</td><td align="left">Waiting for assignment (idle)</td></tr><tr><td align="left">1214</td><td align="left">receiving</td><td align="left">Status of extensions in queue</td></tr><tr><td align="left">1215</td><td align="left">answered</td><td align="left">Status of extensions in the queue</td></tr><tr><td align="left">1216</td><td align="left">Reject</td><td align="left">Status of extensions in the queue</td></tr><tr><td align="left">1217</td><td align="left">pause</td><td align="left">show busy</td></tr><tr><td align="left">1218</td><td align="left">checked in</td><td align="left">The extension is already checked into the queue</td></tr><tr><td align="left">10001</td><td align="left">hang up normally</td><td align="left">call state</td></tr><tr><td align="left">10002</td><td align="left">call cancel</td><td align="left">call state</td></tr><tr><td align="left">10003</td><td align="left">refuse to answer</td><td align="left">call state</td></tr><tr><td align="left">10004</td><td align="left">Outbound channel line failure</td><td align="left">Usually due to wiring</td></tr><tr><td align="left">10005</td><td align="left">User timed out</td><td align="left">call state</td></tr><tr><td align="left">10006</td><td align="left">User is busy</td><td align="left"></td></tr><tr><td align="left">10007</td><td align="left">Server Hangup</td><td align="left">call state</td></tr><tr><td align="left">10008</td><td align="left">Extension Not Registered</td><td align="left">call state</td></tr><tr><td align="left">10009</td><td align="left">Destination Unreachable</td><td align="left">call state</td></tr><tr><td align="left">10011</td><td align="left">Timer Timeout</td><td align="left">call state</td></tr><tr><td align="left">10012</td><td align="left">Inbound Callback Interface Error</td><td align="left">call state</td></tr><tr><td align="left">10013</td><td align="left">Extension Does Not Exist</td><td align="left">call state</td></tr><tr><td align="left">10014</td><td align="left">Not Found</td><td align="left">call state</td></tr><tr><td align="left">10015</td><td align="left">Request Timeout</td><td align="left">call state</td></tr><tr><td align="left">10016</td><td align="left">No Answer</td><td align="left">call state</td></tr><tr><td align="left">10017</td><td align="left">Call Invalid</td><td align="left">call state</td></tr><tr><td align="left">10019</td><td align="left">Origin Unknown</td><td align="left">call state</td></tr><tr><td align="left">10020</td><td align="left">Other Reason</td><td align="left">call state</td></tr><tr><td align="left">10024</td><td align="left">Bad Request</td><td align="left">call state</td></tr><tr><td align="left">10025</td><td align="left">Call Forbidden</td><td align="left">call state</td></tr><tr><td align="left">10027</td><td align="left">Number Changed</td><td align="left">call state</td></tr><tr><td align="left">10028</td><td align="left">Call Intercepted</td><td align="left">call state</td></tr><tr><td align="left">10031</td><td align="left">Unknown</td><td align="left">call state</td></tr><tr><td align="left">10040</td><td align="left">caller hang up</td><td align="left">call state</td></tr><tr><td align="left">10041</td><td align="left">Called hang up</td><td align="left">call state</td></tr></tbody></table>

# 3.Task Progress Monitoring

#### Feature Access

1.Log in to the admin console, select **Voice** from the left-hand navigation menu, then click Predictive Outbound Dialing in the expanded submenu, and choose **Scheduler**. In the task list, click **View &gt; Call Details** in the action column to view the progress of the task.

[![](https://document.infin8linx.com/uploads/images/gallery/2026-06/scaled-1680-/image-1782787958642.png)](https://document.infin8linx.com/uploads/images/gallery/2026-06/image-1782787958642.png)

#### Task Execution Monitoring

While the task is running, you can refresh the page at any time to get the latest execution status. Through the task progress panel, you can view the following key metrics in real time:

[![](https://document.infin8linx.com/uploads/images/gallery/2026-06/scaled-1680-/image-1782788042129.png)](https://document.infin8linx.com/uploads/images/gallery/2026-06/image-1782788042129.png)

- Called: Number of calls already made / Total number of phone numbers
- Answered: Number of successfully connected calls
- Unanswered: Number of dialed calls that were not answered
- Answer Rate: Number of answered calls / Number of calls dialed

# 删除模板

### 域名

- https://api.incsapp.com

### 请求路由

- /external/templates/rcs/{template\_id}

### 请求方式

- **DELETE**

### 请求头

- certification-code: f484bd42-4a0c-39d....

### 请求参数

- 无

### 响应

#### 成功响应示例

```json
{
    "status": "success",
    "code": 200,
    "message": "",
    "data": {},
    "error": {}
}

```

#### 失败响应示例

```json
{
    "status": "error",
    "code": 404,
    "message": "The template is not found.",
    "data": {},
    "error": {}
}

```

# 呼叫名单管理

### 功能概述

呼叫名单管理用于集中维护自动外呼任务所需的客户号码数据。通过上传标准化的号码文件，系统可自动校验号码格式并生成呼叫名单，确保外呼任务的高效、精准执行。

### 功能入口

登录语音后台 → 进入 **「语音」** → **「自动外呼」** → **「任务名单」**

#### 添加呼叫名单

1.在任务名单页面，点击“添加”按钮。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-04/scaled-1680-/image-1777346021902.png)](https://document.infin8linx.com/uploads/images/gallery/2026-04/image-1777346021902.png)

2.在弹出的对话框中，填写任务信息。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-04/scaled-1680-/image-1777346172769.png)](https://document.infin8linx.com/uploads/images/gallery/2026-04/image-1777346172769.png)

- 任务名称：输入名称（例：2026年1月促销活动）
- 上传号码文件 ：在“号码文件”区域，点击“下载模板”获取标准格式文件，并按照以下要求填写内容： 
    - 手机号码无需添加国家前缀（例如印尼号码直接填写：87630021323）。
    - 仅支持 .xlsx 格式（Excel 工作簿）。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-04/scaled-1680-/image-1777346222817.png)](https://document.infin8linx.com/uploads/images/gallery/2026-04/image-1777346222817.png)

填写完成后，点击 **“选择文件”** 上传已编辑好的表格。

文件上传成功后，系统将自动校验号码格式。

#### 编辑呼叫名单

1.在呼叫名单列表中，点击对应名单操作列的 **“编辑”** 按钮。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-07/scaled-1680-/image-1782981912980.png)](https://document.infin8linx.com/uploads/images/gallery/2026-07/image-1782981912980.png)

2.在弹出的对话框中，修改名单名称或描述信息。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-07/scaled-1680-/image-1782981962281.png)](https://document.infin8linx.com/uploads/images/gallery/2026-07/image-1782981962281.png)

3.确认无误后，点击 **“确认”** 以更新名单信息。

#### 删除呼叫名单

1.在呼叫名单列表中，点击对应名单操作列的 **“删除”** 按钮。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-07/scaled-1680-/image-1782982015431.png)](https://document.infin8linx.com/uploads/images/gallery/2026-07/image-1782982015431.png)

2.在弹出的确认提示框中点击 **“确认”**，即可永久删除该名单。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-07/scaled-1680-/image-1782982044834.png)](https://document.infin8linx.com/uploads/images/gallery/2026-07/image-1782982044834.png)

# Fetch templates list

## Request

### API Domain

- https://api.incsapp.com

### API Route

- /external/templates/rcs

### Method

- **GET**

### Headers

- certification-code: f484bd42-4a0c-39d....

### Parameters

<table id="bkmrk-parameter-type-manda"><thead><tr><th>Parameter</th><th>Type</th><th>Mandatory</th><th>Description</th></tr></thead><tbody><tr><td>last\_id</td><td>string</td><td>No</td><td>template\_id of the last record on the previous page</td></tr><tr><td>count</td><td>int</td><td>No</td><td>Number of items per page. Default is 10, maximum is 100.</td></tr></tbody></table>

## Response

### Sample Successful Response

```json
{
    "status": "success",
    "code": 200,
    "message": "",
    "data": [
        {
            "template_id": "2217670963801515124",
            "name": "api_4_carousel_image",
            "type": "carousel",
            "category": "PROMOTION",
            "status": "APPROVED",
            "content": {
                "height": "SHORT",
                "width": "MEDIUM",
                "carouselCard": [
                    {
                        "cardTitle": "New watches",
                        "cardDescription": "Dear [name] brand new watches for less price",
                        "mediaUrl": "https://incs-test.oss-ap-southeast-1.aliyuncs.com/chat/images/eb9872d5-b1d3-4e97-8c86-75b0495fa8f1.png?x-oss-process=image/crop,w_1200,h_480,g_center",
                        "suggestions": [
                            {
                                "suggestionType": "url_action",
                                "url": "https://www.infin80linx.co.id",
                                "text": "Buy Now at [offer_1]",
                                "postbackData": "shop_url"
                            }
                        ]
                    },
                    {
                        "cardTitle": "New perfumes",
                        "cardDescription": "Dear [name], Choose from brand new perfumes.",
                        "mediaUrl": "https://incs-test.oss-ap-southeast-1.aliyuncs.com/chat/images/eb9872d5-b1d3-4e97-8c86-75b0495fa8f1.png?x-oss-process=image/crop,w_1200,h_480,g_center",
                        "suggestions": [
                            {
                                "suggestionType": "dialer_action",
                                "phoneNumber": "+6281519140200",
                                "text": "Call now",
                                "postbackData": "call_click"
                            }
                        ]
                    }
                ]
            },
            "created_time": 1767096381,
            "updated_time": 1767337736,
            "status_updated_time": 1767337733
        },
        {
            "template_id": "2217670951241515121",
            "name": "api_4_standalone_image",
            "type": "richcard",
            "category": "PROMOTION",
            "status": "APPROVED",
            "content": {
                "orientation": "VERTICAL",
                "height": "SHORT",
                "standaloneCard": {
                    "cardTitle": "Keep calm & BAT on!",
                    "cardDescription": "Dear [name], time to participate in lucky draw and win prizes",
                    "mediaUrl": "https://incs-test.oss-ap-southeast-1.aliyuncs.com/chat/videos/6943e9cea07d7.mp4",
                    "thumbnailUrl": "",
                    "suggestions": [
                        {
                            "suggestionType": "reply",
                            "text": "Avail offer [offer_name]",
                            "postbackData": "offer_reply"
                        }
                    ]
                }
            },
            "created_time": 1767095125,
            "updated_time": 1767337727,
            "status_updated_time": 1767337724
        },
        {
            "template_id": "2217670929841515117",
            "name": "api_3",
            "type": "text",
            "category": "PROMOTION",
            "status": "APPROVED",
            "content": {
                "textMessage": "text template with parameters [name] and suggestions",
                "suggestions": [
                    {
                        "suggestionType": "reply",
                        "text": "Need [service_name]?",
                        "postbackData": "click_reply"
                    },
                    {
                        "suggestionType": "url_action",
                        "url": "https://www.infin80linx.co.id/",
                        "text": "Visit our Website",
                        "postbackData": "url_click"
                    },
                    {
                        "suggestionType": "dialer_action",
                        "phoneNumber": "+6281519236680",
                        "text": "Call Now",
                        "postbackData": "call_now"
                    }
                ]
            },
            "created_time": 1767092985,
            "updated_time": 1767337721,
            "status_updated_time": 1767337718
        }
    ],
    "error": {}
}

```

# 分机组管理（数据权限隔离）

本文档详细定义了“分机组”的管理逻辑与配置流程。该功能旨在通过逻辑分组实现企业内部的数据隔离，确保不同部门、区域或层级的管理员仅能查看和管理其授权范围内的分机数据。

> ⚠️ 重要提示：概念区分
> 
> 分机组 (Data Scope Group)：用于数据权限控制。决定管理员在报表、录音、监控中看到哪些分机的数据（看得到谁）。
> 
> 技能组 (Skill Group)：用于话务路由分配。决定客户电话打进来时，优先分配给哪些坐席接听（电话打给谁）。
> 
> 两者关系：相互独立。一个分机可以属于“销售部数据组”（只能被销售总监看到），同时属于“售前咨询技能组”（接收咨询电话）。

### 功能概述

分机组管理模块允许超级管理员创建虚拟的组织架构单元（即“分机组”），将分散的分机账号按业务属性（如：华东大区、售后部、VIP项目组）进行归类，并指派特定的组管理员。

**数据隔离：** 组管理员登录后，系统自动过滤数据，其视图中的通话统计、录音文件、实时监控等仅限本组内分机。

**权限下放：** 实现分级管理，超级管理员无需事必躬亲，各部门负责人可独立管理本部门话务质量。

**灵活配置：** 支持分机跨组可见（特殊场景）或严格独占，适应复杂的矩阵式管理结构。

### 功能入口

登录呼叫中心控制台。在左侧导航栏选择 **通话&gt; 分机管理 &gt; 分机组管理**（仅超级管理员可见此菜单）。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1774425908998.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1774425908998.png)

### 功能介绍

#### 创建分机组

1.在分机组列表，点击顶部**添加**按钮。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1774425947955.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1774425947955.png)

2.在弹出的 **“添加”** 窗口中，填写基本信息，点击**确认**进行保存。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1774426242443.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1774426242443.png)

2.1 基础信息配置

- **名称 (必填)**\*：输入分机组的业务名称，如“华东销售大区”、“售后技术支持组”。
- **关联账号 (可选)**： 从下拉列表中选择一名或多名系统用户，直接指派为该组的“组管理员”。被选中的账号登录后，其视图将自动过滤，仅能查看本组内的分机数据。若不选择，则需后续单独配置管理员。
- **备注 (可选)** ：输入关于该组的补充描述，如“包含所有试用期坐席”或“仅限查看近半年数据”。仅供内部记录，不影响系统逻辑。

2.2 分机成员分配 (核心交互)

通过穿梭框 (Transfer Box) 机制，灵活选择纳入该组的分机号码：

- 左侧：剩余分机
    
    
    - 显示当前系统中尚未加入任何组（或未加入本组）的所有可用分机列表。
    - 顶部显示剩余数量（如截图中的 5）。
    - 支持通过搜索框输入关键词（分机号或姓名）快速筛选目标分机。
    - 支持勾选单个复选框或点击表头复选框进行全选/取消全选。
- 中间：操作按钮
    
    
    - (&gt; 向右箭头)：将左侧“剩余分机”中已勾选的分机移入右侧“已选分机”。
    - (&lt; 向左箭头)：将右侧“已选分机”中已勾选的分机移回左侧“剩余分机”（即移除出组）。
- 右侧：已选分机
    
    
    - 显示当前即将加入该分机组的分机列表。
    - 顶部显示已选数量（如截图中的 0）。
    - 若为空，显示“No data”占位图。
    - 同样支持搜索和批量操作。

#### 编辑分机组

1.在分机组列表，找到要操作的数据行，点击操作列的**编辑**。 [![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1774432288400.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1774432288400.png)

2.在弹出的编辑窗口，可以对名称，关联账号，备注等信息进行修改。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1774432532277.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1774432532277.png)

#### 删除分机组

1.在分机组列表，找到要操作的数据行，点击操作列的**删除**。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-06/scaled-1680-/image-1782293752976.png)](https://document.infin8linx.com/uploads/images/gallery/2026-06/image-1782293752976.png)

2.在弹出的对话框点击**确认**即可进行删除。 [![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1774432677119.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1774432677119.png)

#### 数据隔离生效规则

配置完成后，系统在以下场景严格执行隔离逻辑：

<table id="bkmrk-%E5%8A%9F%E8%83%BD%E6%A8%A1%E5%9D%97-%E9%9A%94%E7%A6%BB%E8%A1%A8%E7%8E%B0-%E5%88%86%E6%9C%BA%E9%80%9A%E8%AF%9D%E7%BB%9F%E8%AE%A1-%E7%BB%84%E7%AE%A1%E7%90%86"><thead><tr><th align="left">功能模块</th><th align="left">隔离表现</th></tr></thead><tbody><tr><td align="left">分机通话统计</td><td align="left">组管理员查看报表时，“分机号码”筛选下拉框仅显示本组分机；统计总数、图表趋势仅基于本组数据计算。</td></tr><tr><td align="left">通话详情与录音</td><td align="left">列表仅展示本组分机的通话记录；点击“播放录音”时，若录音所属分机不在本组，系统直接拦截并提示“无权限”。</td></tr><tr><td align="left">实时监控大屏</td><td align="left">仅展示本组分机的实时状态（通话中、空闲、小休等）；其他组坐席状态对该管理员隐藏。</td></tr><tr><td align="left">批量导出</td><td align="left">导出的 Excel/PDF 文件中，仅包含本组分机的明细数据，无法通过技术手段恢复出非授权数据。</td></tr></tbody></table>

#### 操作示例

场景：超级管理员需要为“北京分公司”创建一个独立的数据组，并指定张三为负责人，纳入分机 8001-8005。

进入 分机组管理，点击 “添加”。

**名称：** 输入 北京分公司数据组。

**关联账号：** 下拉选择用户 张三 (zhangsan)。

**分机号码：**

- 在左侧“剩余分机”列表中，勾选 8001, 8002, 8003, 8004, 8005。
- 点击中间的 &gt; 按钮，将这 5 个分机移入右侧“已选分机”。
- 备注：输入 仅限北京区域经理查看。
- 点击 “确认”。

结果：张三登录后，只能看到这 5 个分机的通话记录和录音，其他分机对其不可见。

注意事项

- **互斥性检查：** 若系统配置为“独占模式”，当尝试将已属于其他组的分机移入本组时，系统可能会提示冲突或要求先从原组移除（具体视系统全局策略而定）。
- **即时生效：** 分机归属关系变更后，组管理员的视图通常在 1-2分钟内 刷新生效。
- **账号权限：** 被“关联账号”选中的用户，必须拥有基础的“查看报表”角色权限，否则即使加入分组也无法访问对应菜单。
- **删除保护：** 若分机组内仍有分机成员或被指派了管理员，系统禁止直接删除该组，需先清空成员或解绑管理员。

# 获取任务列表

### 域名

- https://api.incsapp.com

### 请求路由

- /external/tasks

### 请求方式

- **GET**

### 请求头

- Content-Type: application/json
- Authorization: Bearer a06b3b2d7f762....

### 请求参数

#### 请求参数列表

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E5%BF%85%E5%A1%AB-%E6%8F%8F%E8%BF%B0-task_id"><thead><tr><th>参数名</th><th>类型</th><th>必填</th><th>描述</th></tr></thead><tbody><tr><td>task\_id</td><td>int</td><td>否</td><td>查询任务id</td></tr><tr><td>creation\_id</td><td>int</td><td>否</td><td>查询任务批次id</td></tr><tr><td>task\_template\_id</td><td>int</td><td>否</td><td>按任务模板 id 筛选</td></tr><tr><td>status</td><td>int</td><td>否</td><td>任务状态：-1 创建失败 / 0 待处理 / 1 处理中 / 2 已解决 / 3 已取消 / 4 退回待审批 / 5 退回驳回</td></tr><tr><td>name</td><td>string</td><td>否</td><td>任务名称搜索</td></tr><tr><td>start\_at</td><td>string</td><td>否</td><td>按任务创建时间搜索，如 "2026-04-07 17:00:00"</td></tr><tr><td>end\_at</td><td>string</td><td>否</td><td>按任务创建时间搜索，如 "2026-04-07 18:00:00"</td></tr><tr><td>page</td><td>int</td><td>否</td><td>分页页号</td></tr><tr><td>page\_size</td><td>int</td><td>是</td><td>分页大小，默认20，最大100</td></tr></tbody></table>

### 响应示例

```json
{
    "status": "success",
    "code": 200,
    "message": "",
    "data": {
        "total": 1,
        "data": [
            {
                "id": 3622,
                "creation_id": 178,
                "name": "新会话测试",
                "description": "新会话测试",
                "channels": [
                    {
                        "channel_name": "voice",
                        "auth_id": 30078,
                        "conversation_id": 5575
                    },
                    {
                        "channel_name": "whatsapp-meta",
                        "auth_id": 30058,
                        "conversation_id": 5576
                    }
                ],
                "user_name": "假人A",
                "user_phone": "628347389124",
                "assignee_username": "incs_1",
                "status": 1,
                "task_template_id": 11,
                "task_template": {
                    "id": 11,
                    "name": "testing93",
                    "language": "en-US",
                    "custom_module_id": 18,
                    "creator": {
                        "id": 1041,
                        "username": "test_1",
                        "nickname": "测试号1",
                        "avatar": ""
                    }
                },
                "custom_data": {
                    "data": "2026-09-10",
                    "money": "100000",
                    "name": "www",
                    "number": "432526436436"
                },
                "created_at": "2026-09-11 17:20:36",
                "updated_at": "2026-09-11 18:32:51",
                "logs": [
                    {
                        "id": 10795,
                        "type": 1,
                        "status": 0,
                        "pre_status": 0,
                        "assignee_username": "",
                        "comment": "",
                        "created_at": "2026-09-11 17:20:37",
                        "updated_at": "2026-09-11 17:20:37"
                    },
                    {
                        "id": 10796,
                        "type": 2,
                        "status": 0,
                        "pre_status": 0,
                        "assignee_username": "incs_1",
                        "comment": "",
                        "created_at": "2026-09-11 17:20:41",
                        "updated_at": "2026-09-11 17:20:41"
                    },
                    {
                        "id": 10801,
                        "type": 3,
                        "status": 1,
                        "pre_status": 0,
                        "assignee_username": "incs_1",
                        "comment": "",
                        "created_at": "2026-09-11 18:32:51",
                        "updated_at": "2026-09-11 18:32:51"
                    }
                ]
            }
        ]
    },
    "error": {}
}

```

# Extension Group Management (Data Permission Isolation)

This document outlines the management logic and configuration workflow for "Extension Groups." This feature is designed to achieve logical data isolation within an enterprise through grouping. It ensures that administrators from different departments, regions, or organizational levels can only view and manage extension data within their authorized scope.

> ⚠️ Important Note: Concept Distinction
> 
> Data Scope Group: Used for data permission control. It determines which extension data an administrator can see in reports, recordings, and monitoring (i.e., who can be seen).
> 
> Skill Group: Used for call routing. It determines which agents receive incoming customer &gt;calls (i.e., who receives the call).
> 
> Relationship Between the Two: They are completely independent. A single extension can belong to a "Sales Data Scope Group" (visible only to the Sales Director) while simultaneously belonging to a "Pre-sales Consulting Skill Group" (to receive consultation calls).

### Feature Overview

The Extension Group Management module allows super administrators to create virtual organizational units (i.e., "Extension Groups"). This enables the categorization of dispersed extension accounts based on business attributes (e.g., East China Region, After-sales Department, VIP Project Team) and the assignment of dedicated group administrators.

**Data Isolation:** Upon logging in, the system automatically filters data for group administrators. Their views for call statistics, recording files, and real-time monitoring are strictly limited to extensions within their respective groups.

**Delegated Administration:** Enables hierarchical management, freeing super administrators from micromanaging daily tasks. Department heads can independently manage the call quality of their own departments.

**Flexible Configuration:** Supports either cross-group visibility for extensions (for special scenarios) or strict exclusivity, accommodating complex matrix management structures.

### Feature Access

Log in to the Call Center Console. In the left navigation pane, go to **Voice &gt; Agents &gt; Group** (this menu is visible only to super administrators).

[![](https://document.infin8linx.com/uploads/images/gallery/2026-06/scaled-1680-/image-1782288617534.png)](https://document.infin8linx.com/uploads/images/gallery/2026-06/image-1782288617534.png)

### Feature Details

#### Create an Extension Group

1.On the Extension Group list page, click the **Add** button at the top.

[![](https://document.infin8linx.com/uploads/images/gallery/2026-06/scaled-1680-/image-1782288751772.png)](https://document.infin8linx.com/uploads/images/gallery/2026-06/image-1782288751772.png)

2.In the Add dialog box that appears, fill in the basic information and click **Confirm** to save.

[![](https://document.infin8linx.com/uploads/images/gallery/2026-06/scaled-1680-/image-1782288840255.png)](https://document.infin8linx.com/uploads/images/gallery/2026-06/image-1782288840255.png)

2.1 Basic Information Configuration

- **Name (Required)\*:** Enter the business name for the extension group, such as "East China Sales Region" or "After-sales Technical Support".
- **Associated Accounts (Optional):** Select one or more system users from the drop-down list to assign them directly as "Group Administrators" for this group. Once logged in, the selected accounts will have their views automatically filtered to display only the extension data within this group. If no accounts are selected, administrators will need to be configured separately later.
- **Remarks (Optional):** Enter supplementary descriptions about this group, such as "Includes all probationary agents" or "View data from the past six months only". This is strictly for internal record-keeping and does not affect system logic.

2.2 Assign Extension Members (Core Interaction)

Use the Transfer Box mechanism to flexibly select extensions to be added to this group:

- **Left Panel: Available Extensions**
    
    
    - Displays a list of all available extensions in the current system that have not been added to any group (or have not been added to this specific group).
    - The total number of available extensions is displayed at the top (e.g., 5 as shown in the screenshot).
    - Use the search box to enter keywords (extension number or name) to quickly filter for target extensions.
    - Check individual checkboxes or click the header checkbox to select or deselect all.
- **Center Panel: Action Buttons**
    
    
    - (&gt; Right Arrow): Moves the checked extensions from the "Available Extensions" on the left to the "Selected Extensions" on the right.
    - (&lt; Left Arrow): Moves the checked extensions from the "Selected Extensions" on the right back to the "Available Extensions" on the left (i.e., removes them from the group).
- **Right Panel: Selected Extensions**
    
    
    - Displays the list of extensions that are pending addition to this extension group.
    - The total number of selected extensions is displayed at the top (e.g., 0 as shown in the screenshot).
    - If the list is empty, a "No data" placeholder will be displayed.
    - Search and batch operations are also supported in this panel.

#### Edit an Extension Group

1.On the Extension Group list page, locate the row you want to modify and click **Edit** in the Action column.

[![](https://document.infin8linx.com/uploads/images/gallery/2026-06/scaled-1680-/image-1782293578981.png)](https://document.infin8linx.com/uploads/images/gallery/2026-06/image-1782293578981.png)

2.In the Edit dialog box that appears, you can modify the Name, Associated Accounts, Remarks, and other information.

[![](https://document.infin8linx.com/uploads/images/gallery/2026-06/scaled-1680-/image-1782289099635.png)](https://document.infin8linx.com/uploads/images/gallery/2026-06/image-1782289099635.png)

#### Delete an Extension Group

1.On the Extension Group list page, locate the row you want to delete and click **Delete** in the Action column.

[![](https://document.infin8linx.com/uploads/images/gallery/2026-06/scaled-1680-/image-1782293628371.png)](https://document.infin8linx.com/uploads/images/gallery/2026-06/image-1782293628371.png)

2.In the confirmation dialog box that appears, click **Confirm** to delete the group.

[![](https://document.infin8linx.com/uploads/images/gallery/2026-06/scaled-1680-/image-1782289213149.png)](https://document.infin8linx.com/uploads/images/gallery/2026-06/image-1782289213149.png)

### Data Isolation Rules

Once configured, the system strictly enforces the isolation logic in the following scenarios:

<table id="bkmrk-feature-module-isola"><thead><tr><th>Feature Module</th><th>Isolation Behavior</th></tr></thead><tbody><tr><td>Extension Call Statistics</td><td>When a Group Administrator views reports, the "Extension Number" filter drop-down will only display extensions belonging to their group. Total statistics and chart trends are calculated based solely on this group's data.</td></tr><tr><td>Call Details &amp; Recordings</td><td>The list displays call records exclusively for extensions within the group. If an administrator clicks "Play Recording" for a recording that does not belong to an extension in their group, the system will block access and display a "No permission" message.</td></tr><tr><td>Real-time Monitoring Dashboard</td><td>Only the real-time status (e.g., In Call, Idle, Break) of extensions within the group is displayed. The status of agents in other groups is hidden from this administrator.</td></tr><tr><td>Batch Export</td><td>Exported Excel/PDF files contain detailed data strictly for extensions within the group. Unauthorized data cannot be recovered through any technical means.</td></tr></tbody></table>

### Operation Example

Scenario: A Super Administrator needs to create an independent data group for the "Beijing Branch," assign Zhang San as the person in charge, and include extensions 8001-8005.

Go to Extension Group Management and click Add.

**Name:** Enter "Beijing Branch Data Group".

**Associated Accounts:** Select the user "Zhang San (zhangsan)" from the drop-down list.

**Extension Numbers:**

- In the "Available Extensions" list on the left, check the boxes for 8001, 8002, 8003, 8004, and 8005.
- Click the &gt; button in the center to move these 5 extensions to the "Selected Extensions" list on the right.
- Remarks: Enter "Viewable only by Beijing Regional Managers".
- Click Confirm.

Result: Once logged in, Zhang San will only be able to view the call records and recordings for these 5 extensions. All other extensions will be invisible to them.

**Notes**

- **Exclusivity Check:** If the system is configured in "Exclusive Mode," attempting to move an extension that already belongs to another group into this group may trigger a conflict prompt or require removing it from the original group first (depending on the global system policy).
- **Instant Effect:** After an extension's group affiliation is changed, the Group Administrator's view typically refreshes and takes effect within 1 to 2 minutes.
- **Account Permissions:** Users selected as "Associated Accounts" must possess the basic "View Reports" role permission. Otherwise, they will not be able to access the corresponding menu even if added to the group.
- **Deletion Protection:** If an extension group still contains members or has an assigned administrator, the system prohibits direct deletion of the group. You must first clear the members or unbind the administrator before deleting.

# Upload Call List

1.Log in to the Voice Backend → Go to Voice &gt; Automatic Outbound Call &gt; Call List.

2.Click Add.

3.Fill in Task Information:

Task Name: Enter a name (e.g., Jan 2026 Promotional Campaign).

4.Upload Number File:

In the Number File section → Click Download Template to get the standard format file.

Fill in the content according to the template requirements:

- Do not include the country code for mobile numbers (e.g., for Indonesian numbers: 87630021323).
- After completing the form, click Select File to upload the edited file.

> ⚠️ Only .xlsx format (Excel Workbook) is supported.

5.After the file is successfully uploaded, the system will automatically verify the number format.

# SMS Template Management

### Overview

The **SMS Template Management** module is used to create, manage, and maintain SMS templates for automatic outbound call tasks. By creating standardized SMS templates in advance and supporting dynamic variable replacement, the system can automatically send the appropriate SMS messages to customers based on different business scenarios, such as unanswered call notifications and promotional campaigns, improving outbound call efficiency and ensuring consistent customer communications.

### Accessing the Feature

After logging in to the Call Center platform, navigate to **Voice** &gt; **Auto-Call** &gt; **SMS Templates**.

#### Add a Template

1. On the **SMS Templates** page, click **Add** in the **Actions** column.
2. In the dialog box, enter a template name (e.g., **Unanswered Call Notification\_2026 Promotion**) and the SMS message content.

#### Edit a Template

1. On the **SMS Templates** page, locate the target template and click **Edit** in the **Actions** column.
2. In the dialog box, modify the template name or SMS content.
3. After confirming that all information is correct, click **Confirm** to update the template information.

#### Delete a Template

1. On the **SMS Templates** page, locate the target template and click **Delete** in the **Actions** column.
2. In the confirmation dialog box, click **Confirm** to permanently delete the template.

# Text-to-Speech (TTS) Voice Generation

This page provides detailed instructions on generating voice assets using Text-to-Speech (TTS) technology, including text configuration, variable insertion, and pronunciation rules for special formats.

#### Overview

The **Text-to-Speech (TTS) Voice Generation** module converts text into speech and generates audio files in real time, making it ideal for dynamic voice scenarios such as bill amount notifications and verification code announcements. Users can configure both fixed text and parameter variables, preview the generated audio before saving, and add the synthesized audio to the **Voice Assets** library for use in outbound call tasks.

### Accessing the Feature

After logging in to the Call Center platform, navigate to **Voice** &gt; **Voice Assets** &gt; **Generate Voice**.

### Feature Description

#### Create a TTS Voice

1. On the **Generate Voice** page, click **Add**.
2. In the dialog box, configure the following information:

- **Voice Name:** Required. It is recommended to include the business scenario and version in the name (e.g., **Double 11 Promotion Notification\_Male Voice\_V2**). The name must be between 1 and 20 characters.
- **Text Type:** Required. Select one of the following modes:
    
    
    - **Static Text:** Enter fixed text that remains unchanged during playback.
    - **Variable Text:** Enter template text containing variables, which are dynamically replaced during outbound calls.
- **Language:** Required. Select the target language from the drop-down list (e.g., **Chinese (China)**, **English (United States)**, or **Japanese (Japan)**). The system loads the corresponding speech engine based on your selection.
- **Text Editor:** Enter the text to be converted into speech.
    
    
    - **Insert Variable:** Click **Insert** on the toolbar to insert predefined variables (e.g., **{name}** or **{amount}**) for dynamic replacement.
    - **Insert Pause:** Click the **Pause** icon on the toolbar to insert pauses of a specified duration (e.g., **0.5 s** or **1 s**) between sentences for more natural playback.
    - **Reading Mode:** For the selected variable or text, choose one of the following reading rules:
        
        
        - **Default:** Reads the text naturally based on the context.
        - **Number:** Reads a sequence of digits as a complete number, suitable for phone numbers or card numbers.
        - **Read Characters Individually:** Reads each letter or digit separately (e.g., **ABC123** is read as **A, B, C, 1, 2, 3**), suitable for verification codes or serial numbers.
        - **Date:** Automatically recognizes and reads dates in the appropriate format.
        - **Currency:** Automatically converts and reads monetary amounts using the appropriate currency format.
- **Preview (Recommended):**
    
    
    - Before saving, click **Preview** below the editor.
    - The system generates and plays the audio immediately using the current text, sample variable values, pauses, and reading rules.
    - You can adjust the configuration and preview the audio repeatedly until you are satisfied.

After confirming that all settings are correct, click **Generate and Save**.

**Note:** The generated content must meet the following requirements:

- **Text Length:** Up to 500 characters, including variable placeholders.
- **Variable Names:** Variable names must exactly match the column headers in the outbound call data file; otherwise, the values cannot be replaced.
- **Special Characters:** Complex mathematical expressions and unsupported special symbols or emojis are not supported and may be filtered or cause an error.
- **Audio Duration:** The generated audio must not exceed 60 seconds.

#### View and Play a Generated TTS Voice

1. On the **Generate Voice** page, locate the target entry and click **Play Voice** in the **Actions** column.
2. The system plays the generated audio file associated with the selected entry.

You can use the player controls to pause playback, adjust the volume, or download the audio file.

#### Delete a TTS Voice

1. On the **Generate Voice** page, locate the target entry and click **Delete** in the **Actions** column.
2. In the confirmation dialog box, click **Confirm**.

If the TTS voice is deleted successfully, the entry is removed from the list.

**Important:** A TTS voice can be deleted only if it is not referenced by any automatic outbound call or predictive outbound call task. If the TTS voice is in use, the system displays the following message: **"This voice asset is currently in use and cannot be deleted."**

# Security Settings

This page describes the security settings available in the voice platform, with a focus on protecting sensitive customer information such as phone numbers.

### Phone Number Masking

To enhance customer privacy, you can enable **Phone Number Masking**. When enabled, the platform automatically masks sensitive phone number information (such as caller and callee numbers) when displaying or pushing data.

## Accessing the Feature

1. After logging in to the Call Center platform, navigate to **Voice** &gt; **Settings** &gt; **System Settings**.
2. On the **System Settings** page, select the **Security Settings** tab.

## Configuration Items

### Phone Number Masking

When enabled, phone numbers are partially masked (for example, **138\*\*\*\*1234**) in the following scenarios:

- Call records displayed in the console
- Phone numbers included in exported reports

**Note:** This setting affects only the displayed data. The original call data is still stored in the system for billing and auditing purposes.

## Procedure

1. Turn the **Phone Number Masking** switch **On** or **Off** as required.
2. Click **Save** to apply the configuration.

**Tip:** It is recommended to enable this feature in scenarios involving customer privacy, such as outbound customer service calls and call recording playback, to help meet data security and compliance requirements.

# Call Statistics

This page provides detailed instructions on using the **Call Statistics** page. It presents key daily call metrics, including call volume, answered calls, and service performance indicators, enabling administrators to quickly monitor overall operational trends.

### Overview

The **Call Statistics** feature aggregates call data by day for the entire call center or within the user's authorized scope, providing a high-level view of key performance metrics. This page enables users to evaluate daily call volume, agent performance, and line quality, making it easy to identify abnormal trends, such as a sudden decrease in the answer rate, without reviewing individual call records.

### Accessing the Feature

After logging in to the Call Center platform, navigate to **Calls** &gt; **Call Statistics** (or **Reports** &gt; **Daily Overview**) to open the statistics page.

### Feature Description

#### View Call Statistics

At the top of the page, the filter bar provides the following search option:

- **Date Range:** Required. Select a start and end date (for example, **Last 7 Days**, **This Month**, or a **Custom Range**).

After configuring the search criteria, click **Search**. The statistics list is refreshed immediately to display the results for the selected period.

The statistics list includes the following fields:

- **Date:** The reporting date in **YYYY-MM-DD** format. Records can be displayed in ascending or descending order.
- **Total Calls:** The total number of calls initiated on the selected date, including inbound calls, outbound calls, and internal calls. All initiated calls are counted, regardless of whether they were answered.
- **Answered Calls:** The total number of successfully connected calls that generated talk time, including calls answered by agents, customers, IVR, or voicemail.
- **Unanswered Calls:** The total number of calls that were not successfully connected, including busy, no answer, caller hang-up, system failures, and other unsuccessful call outcomes. **Total Calls = Answered Calls + Unanswered Calls**
- **Answer Rate:** A key performance indicator used to evaluate call connectivity and agent efficiency. The calculation is: **(Answered Calls ÷ Total Calls) × 100%**. The result is typically displayed with two decimal places (for example, **95.20%**).

**Note:** If **Total Calls** is 0, this field displays **"-"** or **"0%"**.

# IVR Settings

This page provides detailed instructions on creating and configuring IVR settings, and explains the purpose of each IVR configuration parameter.

### Overview

**IVR (Interactive Voice Response)** provides self-service voice interactions for inbound calls. By configuring IVR rules, the system can automatically play the appropriate voice prompts based on the caller's input, enabling services such as business hours announcements and service navigation without agent intervention.

### Accessing the Feature

1. After logging in to the Call Center platform, navigate to **Voice** &gt; **IVR Management** &gt; **IVR Settings** to view the list of configured IVR rules.

### Feature Description

#### Create and Configure an IVR

##### Create an IVR

1. On the **IVR Settings** page, click **Add** to open the IVR creation dialog box.
2. Enter the IVR configuration information, then click **Confirm** to create the IVR.

- **Name:** Required. Enter a name for the IVR rule (1–64 characters), for example, **Customer Service Hotline Main IVR**.
- **Confirmation Key:** Specifies the key that callers must press to confirm their input (for example, **\#**). Leave this field blank if no confirmation key is required.
- **Initial Timeout (Seconds):** The maximum time the system waits for the caller's first key press. The default value is **1** second. The recommended range is **1–30** seconds.
- **Inter-digit Timeout (Seconds):** The maximum interval allowed between two consecutive key presses. The default value is **1** second. If the timeout is exceeded, the system treats the input as complete.
- **Maximum Retry Attempts:** The number of times callers can retry after entering invalid input or exceeding the timeout. The default value is 0, which means no retries are allowed and the ending prompt is played immediately.
- **Input Length:** Specifies the minimum and maximum number of digits allowed (for example, **4–6**). The default value is 0, indicating that no length restriction is applied.
- **Welcome Prompt:** The first voice prompt played after the caller connects (for example, **"Welcome to XXX."**). Select a previously uploaded voice file.
- **Menu Prompt:** The voice prompt that instructs callers which keys to press (for example, **"Press 1 for business hours."**).
- **Invalid Input Prompt:** The voice prompt played when the caller enters invalid input (for example, **"The number you entered is invalid."**).
- **Ending Prompt:** The voice prompt played before the IVR session ends (for example, **"Thank you for calling."**).
- **Description:** Optional. Enter information such as the purpose, applicable scenario, or maintenance notes for the IVR rule.

**Note:** All voice files must be uploaded in **Voice File Management** before they can be selected in the IVR configuration.

#### Edit an IVR

1. On the **IVR Settings** page, locate the target IVR rule and click **Edit** in the **Actions** column.
2. In the dialog box, modify any IVR configuration, such as the **Name**, timeout settings, or voice prompts, and then click **Confirm** to save the changes.

**Tip:** Changes take effect immediately after they are saved. Any inbound numbers associated with this IVR rule automatically use the updated configuration.

#### Delete an IVR

1. On the **IVR Settings** page, locate the target IVR rule and click **Delete** in the **Actions** column.
2. In the confirmation dialog box, click **Confirm** to delete the IVR rule.

**Important:** If the IVR rule is associated with any inbound numbers in **Number Management**, remove the association before deleting the IVR rule. Otherwise, inbound calls may fail to play the configured voice prompts or may be disconnected unexpectedly.

#### IVR Key Settings

##### Add an IVR Key

1. On the **IVR Settings** page, locate the target IVR rule and click **Keys** in the **Actions** column to open the key configuration page.
2. On the **IVR Keys** page, click **Add** to open the key creation dialog box.
3. Enter the following information, then click **Confirm**.

- **Key:** The digit that callers need to press (for example, **1**).
- **Description:** A brief description of the key's function (for example, **Check Account Balance**).

##### Edit an IVR Key

1. On the **IVR Keys** page, locate the target key and click **Edit** in the **Actions** column.
2. Modify the required settings, such as the **Key**, **Description**, or **Voice Prompt**, then click **Confirm** to save the changes.

##### Delete an IVR Key

1. On the **IVR Keys** page, locate the target key and click **Delete** in the **Actions** column.
2. In the confirmation dialog box, click **Confirm** to delete the key.

**Note:** Deleting an IVR key removes only its association with the IVR rule. Any voice prompts associated with the key remain available in the system.

### Additional Information

- All timeout values are measured in **seconds**. Setting a timeout that is too short may negatively affect the caller experience. For example, a **1-second** timeout may cause the system to incorrectly treat valid input as timed out.
- If no **Invalid Input Prompt** or **Ending Prompt** is configured, the system ends the call without playing any voice prompt.
- The current IVR implementation supports only **single-level DTMF input** and does not support multi-level IVR menus.

# 质检报表

本文详细介绍了语音质检模块中的报表统计功能。该模块通过可视化的数据概览、趋势分析及明细查询，帮助管理员全面掌握通话质检情况，快速识别高意向客户与需跟进事项，从而优化业务策略。

## 功能概述

质检报表是对已完成的质检任务进行数据聚合与分析的窗口。系统基于关键词匹配规则，自动将录音分类为“留言”、“高意向”、“需回拨”等类别，并提供多维度的筛选与导出功能，支持管理者对业务结果进行量化评估。

## 功能入口

1. 登录后台管理系统，在左侧导航栏选择 **语音质检 &gt; 质检报表**，进入报表查看页面。 [![](https://document.infin8linx.com/uploads/images/gallery/2026-08/scaled-1680-/image-1787887064698.png)](https://document.infin8linx.com/uploads/images/gallery/2026-08/image-1787887064698.png)

## 功能介绍

### 1. 数据概览

页面顶部展示了当前统计周期内的核心指标汇总，帮助管理员快速了解整体业务概况：

- **总数**：统计周期内所有成功转写并参与质检的录音总数量。
- **留言**：命中“语音信箱/留言”类关键词的录音数量。
- **高意向**：命中“高意向”类关键词（如购买、价格、合作等）的录音数量，通常代表潜在商机。
- **需回拨**：命中“需回拨”类关键词（如稍后联系、在开会等）的录音数量，提示需要人工跟进。
- **其他**：不属于上述三类的其余录音数量（计算公式：总数 - 留言 - 高意向 - 需回拨）。 [![](https://document.infin8linx.com/uploads/images/gallery/2026-08/scaled-1680-/image-1787887204620.png)](https://document.infin8linx.com/uploads/images/gallery/2026-08/image-1787887204620.png)

### 2. 筛选与时间控制

报表顶部提供灵活的时间筛选工具，支持自定义查看特定时间段的数据表现：

- **日期范围**：点击日历图标选择起始日期和结束日期。
- **快捷选项**：提供 **近7天**、**近30天** 快速切换按钮。
- **刷新**：点击 **刷新** 按钮重新加载最新统计数据。 [![](https://document.infin8linx.com/uploads/images/gallery/2026-08/scaled-1680-/image-1787887338153.png)](https://document.infin8linx.com/uploads/images/gallery/2026-08/image-1787887338153.png)

### 3. 通话质检趋势

该区域以表格形式展示每日的数据变化趋势，支持按日维度监控业务波动。鼠标悬停在表头图标上可查看具体指标定义：

<table id="bkmrk-%E6%8C%87%E6%A0%87%E5%90%8D%E7%A7%B0-%E5%AE%9A%E4%B9%89%E8%AF%B4%E6%98%8E-%E6%97%A5%E6%9C%9F-%E6%95%B0%E6%8D%AE%E7%BB%9F%E8%AE%A1%E7%9A%84%E5%85%B7%E4%BD%93"><thead><tr><th align="left">指标名称</th><th align="left">定义说明</th></tr></thead><tbody><tr><td align="left">**日期**</td><td align="left">数据统计的具体日期。</td></tr><tr><td align="left">**总数**</td><td align="left">统计周期内录音转写成功的记录总数。</td></tr><tr><td align="left">**留言**</td><td align="left">成功转写录音中，客户留言/语音信箱的数量。</td></tr><tr><td align="left">**高意向**</td><td align="left">成功转写录音中，命中高意向关键词的数量。</td></tr><tr><td align="left">**需回拨**</td><td align="left">成功转写录音中，需坐席回拨的数量。</td></tr><tr><td align="left">**其他**</td><td align="left">成功转写录音中，不属于留言/高意向/需回拨的其余数量。</td></tr></tbody></table>

[![](https://document.infin8linx.com/uploads/images/gallery/2026-08/scaled-1680-/image-1787887421511.png)](https://document.infin8linx.com/uploads/images/gallery/2026-08/image-1787887421511.png)

### 4. 质检告警明细

页面底部提供针对关键业务场景（高意向、需回拨）的详细记录查询功能，支持对具体通话进行溯源分析： [![](https://document.infin8linx.com/uploads/images/gallery/2026-08/scaled-1680-/image-1787887473717.png)](https://document.infin8linx.com/uploads/images/gallery/2026-08/image-1787887473717.png)

- **搜索条件**： 
    - **坐席**：输入或选择特定坐席账号进行筛选。
    - **被叫号码**：输入客户电话号码进行精确查找。
    - **命中标签**：下拉选择具体的质检标签类型。
- **操作功能**： 
    - **搜索/重置**：执行查询或清空筛选条件。
    - **导出**：将当前查询结果导出为文件，便于线下统计或汇报。
- **列表字段**：包含分机号码、被叫号码、通话时长、命中标签及命中通道等详细信息。

> ⚠️ **注意：**报表数据的准确性依赖于“质检任务”的执行状态。只有状态为“已完成”的任务数据才会被纳入统计；正在运行或失败的任务数据不会实时反映在报表中。

# Keyword Rule

This document provides a detailed introduction to the configuration and management mechanism of keyword matching rules within the Speech Analytics module. It focuses on elaborating the collaborative working logic between the system default dictionary and custom rules, ensuring that quality inspection analysis can accurately cover general scenarios and specific business needs.

## Feature Overview

Keyword rules are the fundamental basis for intent recognition and content analysis in Speech Analytics. The system adopts a **"System Default + User Custom"** superposition matching strategy:

- **System Default Rules**: A general keyword library preset by the platform (e.g., voicemail recognition words), which takes effect without configuration to guarantee basic quality inspection capabilities.
- **Custom Rules**: Supports administrators in adding specific business terms or sensitive words according to actual business scenarios.

When a user configures custom rules, the system will simultaneously load the default dictionary and the custom list for comprehensive matching, achieving full coverage of recording content.

## Access

1. Log in to the backend management system. In the left navigation bar, select **Speech Analytics &gt; Keyword Rule** to enter the rule configuration page.

## Feature Introduction

### Rule Mode Description

The top of the page provides display and configuration entries for two rule sources:

- **System Default**: Displays the basic keyword library uniformly maintained by the platform. This section is read-only and aims to provide general business recognition capabilities (e.g., automatically identifying common terms like "voicemail" or "anti-spam" in languages such as Indonesian). Users can use it directly without self-configuration.
- **Custom**: Supports users in using their own keyword lists. Entries configured here will **take effect together** with the system default dictionary (i.e., Final Matching Logic = System Default Dictionary + Custom Dictionary) to cover specific business scenarios or personalized quality inspection needs.

### View System Default Words (Read-Only)

In the "System Default Words" area, you can view all basic keyword information currently preset by the platform, mainly including the following fields:

- **Tag Category**: The business category to which the keyword belongs (e.g., "Voicemail"). The number on the right represents the count of entries under this category.
- **Language**: The language to which the keyword belongs (e.g., "Indonesian"), used to distinguish matching logic in multi-language environments.
- **Keyword**: The specific text content to be matched (e.g., "tekan", "anti spam", etc.).

### Configure Custom Rules

1. In the "Custom" area, click **Add** to enter the editing state.
2. Enter the business keyword to be added, and select the corresponding language or category.
3. Click **Save**. The new rule will immediately join the matching queue and work in parallel with the system default dictionary.

> ️ **Important:**Custom rules follow an **incremental superposition** mode, not an overwrite mode. Configuring custom rules **will not** cause the system's default basic recognition capabilities to become invalid. Please feel free to configure specific business vocabulary to enhance the quality inspection effect.

# 挂机短信任务详情

#### **请求URL**

- `https://{domain}/hangupSms/task/{taskId}`

#### **请求方式**

- POST

#### **请求参数**

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E5%BF%85%E9%80%89-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-appid-%E6%98%AF"><thead><tr><th align="left">参数名</th><th align="left">必选</th><th align="left">类型</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">appid</td><td align="left">是</td><td align="left">string</td><td align="left">鉴权 appid</td></tr><tr><td align="left">accesskey</td><td align="left">是</td><td align="left">string</td><td align="left">鉴权 accesskey</td></tr><tr><td align="left">page</td><td align="left">否</td><td align="left">string</td><td align="left">当前页码</td></tr><tr><td align="left">pageSize</td><td align="left">否</td><td align="left">string</td><td align="left">每页的显示的条数</td></tr></tbody></table>

#### **请求示例**

```
{
    "appid":"xxxx",
    "accesskey":"xxx"
}

```

#### **返回示例**

```
{
    "code": 0,
    "msg": "operation succeeded",
    "data": {
        "total": 1,
        "answered": 0,
        "no_answer": 1,
        "page": 1,
        "pageSize": 15,
        "list": [
            {
                "id": 39081067,
                "destnumber": "82227457998",
                "voicefile": "https://{domain}/offlineSound/filename=Tips.mp3",
                "status": 4,
                "current_batch": 1
            }
        ]
    }
}

```

#### **返回参数说明**

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-code-int-%E8%BF%94"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">code</td><td align="left">int</td><td align="left">返回码 0 成功 其他为失败</td></tr><tr><td align="left">msg</td><td align="left">string</td><td align="left">返回信息</td></tr><tr><td align="left">data</td><td align="left">object</td><td align="left">返回数据</td></tr></tbody></table>

# 回调参数

### 说明

```
回调方式：post
回调地址：提供给平台进行配置

```

### 回调数据

```

{
    "status":1,   //状态：1=成功，0=失败
    "uuid": "9f82416"
}


```

# INCS 系统操作手册V1.1

# ****概览****

INCS 是一款全渠道智能客服系统平台，致力于通过统一整合语音、短信、即时通讯（IM）及电子邮件等多元化沟通渠道，为企业提供一站式的客户服务管理解决方案。该系统显著降低企业在多平台间切换的操作复杂度与人力成本，并大幅提升客服团队的整体响应效率与处理效能。

INCS系统的核心架构由两大关键模块组成：

<span style="white-space: pre-wrap;"></span>

- l客服工作台： 作为一线客服人员的统一操作平台，支持客服代表高效处理来自各渠道的实时会话请求，并集成语音通话功能，实现无缝沟通。

<span style="white-space: pre-wrap;"></span>

- <span style="white-space: pre-wrap;"> 管理后台： 面向管理员及客服主管，提供全面的团队管理、实时监控、任务分配及营销信息群发能力，赋能管理者进行高效的日常运营监督与资源调度。</span>

<span style="white-space: pre-wrap;"></span>

客服工作台与管理后台协同运作，共同构成了 INCS完整、高效的企业级客服管理体系。

## <span style="white-space: pre-wrap;"> </span>****INCS管理后台****

<span style="white-space: pre-wrap;"> 第一章 </span> ****INCS工作后台管理****

### ****1.1登录INCS后台管理****

- 登录地址：<u>****https://saas.incsapp.com****</u>
- 使用用户名和密码登录
- [![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/8Bdimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/8Bdimage.png)

### ****1.2 后台管理配置****

面向管理员及客服主管，提供全面的团队管理、实时监控、任务分配及营销信息群发能力，赋能管理者进行高效的日常运营监督与资源调度。后台管理设置支持：

l 企业管理：用户管理、模板管理、消息推送、订单列表、商品管理

l 账号管理：组织架构、员工列表、角色列表、通道管理

l 统计：数据列表

l 工单管理：工单列表

l 风控管理：聊天风控、风控统计

l 任务管理：任务分配、任务统计

l 系统公道：公告列表

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/QEbimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/QEbimage.png)

<span style="white-space: pre-wrap;"></span>

### ****1.3用户管理****

l 功能：用户列表、用户组、标签

#### ****1.3.1添加用户****

l 管理员可以在“企业管理-用户管理-用户列表”添加用户

l 操作：点击“添加按钮”可以单独添加用户

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/vg9image.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/vg9image.png)<span style="white-space: pre-wrap;"></span>

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/gciimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/gciimage.png)

#### ****1.3.2导入和导出用户****

l 管理员可以在“企业管理-用户管理-用户列表”，导入导出用户。

l 操作：点击导入导出按钮，可以实现导入用户和导出用户的操作

<span style="white-space: pre-wrap;"> </span>[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/7U6image.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/7U6image.png)

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/ntgimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/ntgimage.png)

<span style="white-space: pre-wrap;"></span>

#### ****1.3.3查看用户聊天记录和用户日志****

l 管理员可以在“企业管理-用户管理-用户列表”查看用户详情

l 操作：点击用户详情按钮

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/l8jimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/l8jimage.png)

<span style="white-space: pre-wrap;"> </span>[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/uCCimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/uCCimage.png)

<span style="white-space: pre-wrap;"></span>

#### ****1.3.4添加用户组和用户标签****

l 管理员可以在“企业管理-用户管理-用户组”，“企业管理-用户管理-标签”添加用户标签，添加用户组

l 操作：点击添加按钮

<span style="white-space: pre-wrap;"> </span>[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/nTnimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/nTnimage.png)

<span style="white-space: pre-wrap;"> </span>[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/hBRimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/hBRimage.png)

### ****1.4 模板管理****

l 功能设置：话术管理、素材库、whatsapp模板、E-mail模板

#### ****1.4.1 添加话术****

l 管理员可以通过话术管理添加话术，企业话术（全部员工通用），个人话术（个人员工使用），添加完毕过后，客服人员就可以在客服工作台-快捷语句里面找到该话术并使用。

l 操作：点击添加按钮

<span style="white-space: pre-wrap;"> </span>[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/DuVimage.png)<span style="white-space: pre-wrap;"></span>](https://document.infin8linx.com/uploads/images/gallery/2026-02/DuVimage.png)

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/Jd4image.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/Jd4image.png)

<span style="white-space: pre-wrap;"></span>

#### ****1.4.3添加素材****

l 管理员可以添加素材，在客服工作台的素材库里面可以快速发送，提高工作效率

l 操作：点击添加按钮

l 添加的素材可以添加的素材类别为text，Image、Video

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/SSGimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/SSGimage.png)

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/upfimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/upfimage.png)

<span style="white-space: pre-wrap;"></span>

<span style="white-space: pre-wrap;"></span>

#### ****1.4.4添加whatsapp模板****

l 管理员可以在“企业管理-模板管理-whatsapp模板”里面添加whatsapp模板，添加成功过后用作whatsapp模板发送时使用

（注意：whatsapp官方账号主动跟用户发消息的第一条消息只能发送模板消息，发送的模板消息在这里申请）

l 操作：点击添加或者批量添加按钮进行申请。

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/PbGimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/PbGimage.png)

<span style="white-space: pre-wrap;"></span>

1\. 通道选择whatsapp通道，填写模板名称，选择申请模板的语言，选择模板类别（注：whatsapp模板的类别一共有MARKETING、UTILITY、AUTHENTICATION三种）

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/Q5Dimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/Q5Dimage.png)

2\. 根据提示按要求填写对应的页眉，正文，页脚和按钮。

<span style="white-space: pre-wrap;"> </span>[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/B1Cimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/B1Cimage.png)

3\. 根据预览效果，确认好模板内容是否有填错误的地方，没有的话直接提交审核，如果有问题及时返回上一步进行修改。

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/gFfimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/gFfimage.png)

4\. 完成上述模板提交过程之后，查看模板是否审核通过可在模板列表里面进行查看模板状态的图标。

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/qXhimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/qXhimage.png)

#### ****1.4.5添加邮件模板****

l 管理员可以在“企业管理-模板管理-邮件模板”里面添加邮件模板，添加成功过后用作于消息推送的邮件模板发送使用

（注意：邮件模板暂时不支持客户自主添加模板，等待后续功能更新）

l 操作：点击下载查看邮件模板。

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/tDgimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/tDgimage.png)

#### ****1.4.6添加RCS模板****

l 管理员可以在“企业管理-模板管理-RCS模板”里面添加RCS模板，添加成功过后用作于消息推送的RCS模板发送使用

![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image.png)点击添加按钮可以添加RCS模板[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/ipMimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/ipMimage.png)

第一步：创建模板，选择通道，选择模板类型等

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/7Ugimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/7Ugimage.png)

第二步：设置模板内容，模板内容请根据每个字段所要求的限制条件进行正确的填写

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/LnRimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/LnRimage.png)

第三步：确认模板，确认模板内容是否提交正确，如果有需要修改的地方，返回上一步修改。

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/1e2image.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/1e2image.png)

第四步：完成上面的步骤后，直接提交审核就可以了。

### ****1.5消息推送****

l 功能设置：批量推送、域名列表、发件人地址、模板消息记录

#### ****1.5.1创建消息推送****

l 管理员或者客服可以基于通道，创建一个消息群发任务推送给用户，并且可以查询到目标用户的发送状态。

l 操作：点击添加按钮，进入创建消息推送流程

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/sK2image.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/sK2image.png)<span style="white-space: pre-wrap;"></span>

1\. 弹出创建一个新的消息推送页面，填写任务名称，选择通道，选择要发送的账户，没有问题就点击下一步

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/c72image.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/c72image.png)

2\. 选择您需要发送的模板名称，支持模板名称搜索查找。

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/TNeimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/TNeimage.png)

3\. 选择需要发送的时间，发送名单的方式，可以选择直接导入名单或者根据用户的标签名单导入，然后下载对应的模板导入文件，填写模板对应的参数导入成功即可。

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/I63image.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/I63image.png)

4\. 发送成功过后可以在批量推送列表里面查看对应的推送任务进程，点击查看详情可以看到具体的推送任务的细节。

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/BmKimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/BmKimage.png)

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/T5vimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/T5vimage.png)

#### ****1.5.2创建发件人地址****

l 管理员与客服可以创建收件人地址，适用于E-mail消息推送使用，新建发件人地址需要有已验证的域名（验证域名的操作请联系我们的客服人员协助完整），添加完成过后就可以在群发消息推送时使用这个发件人地址。

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/aLwimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/aLwimage.png)

#### ****1.5.3查看模板消息记录****

l 管理员可以在企业管理-消息推送-模板消息记录，里面查找所有模板发送的消息记录。

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/MPgimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/MPgimage.png)<span style="white-space: pre-wrap;"></span>

<span style="white-space: pre-wrap;"></span>

### ****1.6 订单列表****

l 订单列表可以查询到亚马逊或者其他渠道的订单信息以及订单详情与运输信息。

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/77Uimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/77Uimage.png)

<span style="white-space: pre-wrap;"></span>

### ****1.7账号管理****

l 功能设置：组织架构、员工列表、角色列表、通道管理

#### ****1.7.1组织架构****

l 管理员可以在“账号管理-组织架构”针对组织架构进行设置，添加子部门，设立负责人。

l 操作：点击对应的组织

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/uQGimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/uQGimage.png)

#### ****1.7.2员工列表****

l 管理员可以在“账号管理-员工列表”里添加员工，编辑更改员工信息

l 操作：点击添加按钮创建员工账号与密码，点击编辑可以更改信息。

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/hgzimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/hgzimage.png)

#### ****1.7.3通道管理****

l 功能设置：通道列表、坐席列表、平台授权、whatsapp授权、机器人管理

#### ****1.7.3.1管理坐席****

l 管理员可以在“账号管理-通道管理-坐席列表”里面绑定坐席

l 操作：在坐席列表里面，可以查看到相应的坐席的状态信息，可以进行编辑设置把坐席绑定到对应的客服人员，客服人员就可以在相应通道接收用户信息。

（注意：只有绑定坐席的客服员工账号才能正常的发送消息处理会话）

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/HOiimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/HOiimage.png)

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/SpDimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/SpDimage.png)

<span style="white-space: pre-wrap;"></span>

#### ****1.7.3.2平台授权****

l 平台授权：管理员可以在“账号管理-通道管理-平台授权”里面查看已授权的店铺信息并且能够对相应的店铺进行命名，

l 操作：点击平台授权弹出相应的平台授权，跳转相应授权页面，授权成功就可以自动返回，即为授权成功。

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/dO0image.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/dO0image.png)

<span style="white-space: pre-wrap;"></span>

#### ****1.7.3.3机器人管理****

l 管理员可以在“账号管理-通道管理-机器人管理”里面配置机器人的知识库并且应用到客服聊天当中。

l 操作：点击添加按钮添加机器人，点击跳转配置，跳转到对应的机器人管理页面操作。

（注意：如果没有机器人，首先得点击机器人配置跳转机器人管理页面创建机器人拿到ID才能在这个页面点击添加，详细的机器人管理平台操作请见“机器人系统使用指南”）

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/Enjimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/Enjimage.png)

#### ****1.7.3.4 whatsapp个号集中授权****

l 管理员可以在“账号管理-通道管理-whatsapp授权”页面对客服人员的whatsapp个号集中绑定授权

l 操作：在列表点击对应的二维码图标

（注意：whatsapp授权需要客服工作台那边exe环境部署好才能成功获取到授权二维码，详情看工作台whatsapp个号绑定部分）

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/Q3Yimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/Q3Yimage.png)

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/9LCimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/9LCimage.png)

<span style="white-space: pre-wrap;"></span>

****1.8统计****

l 在统计页面，管理员可以在数据列表查看当前员工的工作状态，并且能够查看单个员工的工作日志，便于之后管理端的奖惩措施的实施提供数据支持。

l 数据列表一共分为三类，wa个号报表、工单统计、通话记录，可以点击对应的功能页面查看数据统计。

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/46Qimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/46Qimage.png)

<span style="white-space: pre-wrap;"></span>

### ****1.9任务管理****

1.9.1任务分配

l 管理员可以在“任务管理-任务分配”里面进行任务分配

l 介绍：该工作分配功能提供高效的任务管理解决方案，支持用户通过Excel或CSV文件批量导入任务工单，一键完成数据解析并自动生成待处理工单，大幅提升多任务创建效率；系统支持灵活的任务分配机制，可手动指定负责人或根据预设规则（如技能匹配、负载均衡）智能派发任务，同时允许动态调整优先级、截止日期及执行人员；所有工单的完整生命周期均被实时记录，用户可随时追踪任务状态流转（如待处理、进行中、已完成），并查看详细的操作日志，包括每一步修改记录、执行人、时间戳及备注信息，确保流程透明可追溯，助力团队协同精准高效。

l 操作：点击导入按钮

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/nkgimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/nkgimage.png)<span style="white-space: pre-wrap;"></span>

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/UBFimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/UBFimage.png)

<span style="white-space: pre-wrap;"> </span>[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/EQiimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/EQiimage.png)

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/GlZimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/GlZimage.png)

<span style="white-space: pre-wrap;"></span>

<span style="white-space: pre-wrap;"></span>

### ****2.1风控管理****

#### ****2.1.1添加敏感词****

l 管理员可以在“风控管理-聊天风控-敏感词管理”里面添加敏感词

l 操作：点击添加或者导入按钮

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/eT0image.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/eT0image.png)

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/nmaimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/nmaimage.png)

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/dbnimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/dbnimage.png)

## <span style="white-space: pre-wrap;"> </span>****INCS客服工作台****

<span style="white-space: pre-wrap;">1. </span>****功能介绍****

客服工作台是INCS系统中面向一线客服人员的核心任务处理中枢，通过聚合接入WhatsApp、LINE、Viber等主流即时通讯平台及传统语音通话渠道，构建统一的全渠道会话管理界面。该平台支持客服代表在单一操作环境中完成以下关键职能：

l 跨渠道会话整合  
-实时接收并处理来自多通讯平台的客户咨询，消除平台切换冗余操作；  
-通过标准化视图统一展示异构渠道会话流，降低信息认知负荷。

l 全链路客户服务流程闭环  
-基于内置工单系统实现咨询-响应-追踪-归档的全流程管理；  
-集成智能路由引擎，自动分配会话至对应技能组客服。

l 多媒体交互协同  
-支持在会话界面无缝发起或接听语音通话，保留通话记录与关联会话的上下文关联；  
-提供富媒体消息（图文/文件/快捷回复模板）高效交互能力。

该工作台通过渠道无关性架构设计与操作动线深度优化，使客服人员能够聚焦于服务本身而非工具操作，显著缩短响应时长（RTAT）并提升首次接触解决率（FCR），最终实现客户服务产能与质量的双重跃升。

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/lZpimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/lZpimage.png)<span style="white-space: pre-wrap;"></span>

### ****1.1官方号消息****

点击官方号消息可以看到官方号的消息列表以及选中的会话的功能页面

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/fDZimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/fDZimage.png)

官号消息功能的会话列表首先最上方有许多的通道的筛选栏，点击对应的图标就可以筛选出对应通道的会话列表进行查看，或者在会话列表上方的搜索栏根据用户的id进行搜索。

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/FUGimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/FUGimage.png)

中间的会话窗口可以进行转单操作，当前客服完成不了当前对话可以把当前对话转给其他客服或者其他客服组进行处理。

（注意：转单只能转给当 前在线的客服人员进行处理，已转出的会话会显示已转出的标签在会话列表里面显示，之后该客服不会再接收到这个会话的消息）。

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/2Kfimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/2Kfimage.png)

<span style="white-space: pre-wrap;"></span>

聊天的右边侧边栏可以查看与该用户聊天的用户详情，聊天记录，还可以查找改用户的订单与用户进行绑定，并且在用户信息下面可以根据当前聊天的情况添加用户日志，方便后续的聊天任务。

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/dFbimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/dFbimage.png)

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/4TRimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/4TRimage.png)

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/lvnimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/lvnimage.png)

聊天框的最下放的输入框可以发送快捷语句和模板消息，可以添加快捷语句，但是模板消息不能在工作台添加只能在后台whatsapp模板里面添加。

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/Fhhimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/Fhhimage.png)

<span style="white-space: pre-wrap;"> 快捷语句</span>

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/XUTimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/XUTimage.png)

<span style="white-space: pre-wrap;"> 模板消息</span>

<span style="white-space: pre-wrap;"></span>

### ****1.2个人号消息-如何绑定个人whatsapp****

个人号的页面布局和官号功能布局基本一致，但是个号消息必须绑定个号whatsapp 才能 使用和接收消息，接下来教程如何绑定个人 whatsapp 账号。

<span style="white-space: pre-wrap;"></span>

第一步：先点击个人消息的通道添加按钮，下载 exe

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/FwCimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/FwCimage.png)

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/Nalimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/Nalimage.png)

第二步：下载完插件后，解压过后点击运行 exe. ，输入 INCS 的客服号和密码就可以完成 exe 的运行，再去工作台完成扫码操作就行（注意：如果是中国内地运行 exe，请先打开 vpn再进行登录）

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/bGuimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/bGuimage.png)

安装完插件会自动弹出一个页面

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/wHrimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/wHrimage.png)

登陆成功过后会自动跳转回工作台，就可以用whatsapp个号进行聊天了。

### ****1.3任务大厅模块****

****1.3.1 任务大厅介绍****

在任务大厅模块客服可以查看到自己分配的任务，统计客服的工作完成情况，方便客服人员 统一进行任务的完成。

客服点击操作的第一个图标就可以跳转到该用户的 whtasapp 的聊天框，进行任务工单的处理，工作处理完成过后可以对当前的工单任务点击编辑进行变更，变更完成会记录在后台的工单任务记录当中。

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/3NRimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/3NRimage.png)<span style="white-space: pre-wrap;"></span>

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/3jTimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/3jTimage.png)

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/sHnimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/sHnimage.png)

****1.3.2 转单申请****

当客服人员对这个工单任务有疑问或者处理不了的时候可以向管理员提交转单审批申请， 当管理员同意该转单申请时，这个工单就自动转走了，就不会出现在该客服人员的任务工单列表里面。

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/rIDimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/rIDimage.png)

### ****1.4添加联系人，查看通话记录****

点击通讯录和通话记录可以添加联系人和查看通话记录。

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/CBjimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/CBjimage.png)

添加联系人

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/HZiimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/HZiimage.png)

<span style="white-space: pre-wrap;"></span>

### ****1.5电话通讯****

工作台只要部署了我们软电话，就可以直接拨打用户的电话进行沟通，可以在通话中心查看通话记录。（具体操作细节请联系我们INCS产品工作人员）

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/5qVimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/5qVimage.png)

### ****1.6电子邮件通讯****

工作台只要开通了电子邮件通道，就可以在工作台进行邮件的收发。

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/et2image.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/et2image.png)

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/Ysfimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/Ysfimage.png)

### ****1.7工单中心****

工作台只要绑定了工单列表，就可以在工单中心查看对应的工单数据，工单详情页有记录这个工单的历史变更记录和历史聊天记录。

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/tv7image.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/tv7image.png)

[![image.png](https://document.infin8linx.com/uploads/images/gallery/2026-02/scaled-1680-/YRrimage.png)](https://document.infin8linx.com/uploads/images/gallery/2026-02/YRrimage.png)

# 多条短信发送

### 请求URL

```
https://{domain}/sms/rsend

```

### 请求方法

POST Content-Type: application/x-www-form-urlencoded

### 参数说明

<table id="bkmrk-%E5%AD%97%E6%AE%B5-%E7%B1%BB%E5%9E%8B-%E5%90%8D%E7%A7%B0-%E8%AF%B4%E6%98%8E-spid-str"><thead><tr><th>字段</th><th>类型</th><th>名称</th><th>说明</th></tr></thead><tbody><tr><td>spid</td><td>string</td><td>接口账号</td><td></td></tr><tr><td>pwd</td><td>string</td><td>密码</td><td>[接口说明3](/books/message-cn-api/page/4f6ff "接口说明")</td></tr><tr><td>timestamp</td><td>string</td><td>当前Unix timestamp（秒）</td><td>例： 1601028870</td></tr><tr><td>dasm</td><td>string</td><td>发送内容（单次不超过 200个手机号）</td><td>内容格式如下：  
手机号,发送内容/手机号,发送内容 ...   
[接口说明1，2](/books/message-cn-api/page/4f6ff "接口说明")</td></tr><tr><td>senderid</td><td>string</td><td>非必填</td><td>合作伙伴后启用字段</td></tr></tbody></table>

### 响应

```json
{
  "code": 0,
  "msg": "Success",
  "data": [{
    "das": "00628131565746",
    "msgid": "100123",
    "parts": 1, //计算分条数
    "state": 0
  }]
}

```

### 状态码(code)说明

[附录1,2](/books/message-cn-api/page/java16#3)

# 通用API - 企业话务统计

#### 接口说明

汇总或按天统计当前企业指定时间范围内的呼叫量、接通率和通话时长

#### 请求参数

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E6%98%AF%E5%90%A6%E5%BF%85%E9%A1%BB-%E8%AF%B4%E6%98%8E-servi"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">是否必须</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">service</td><td align="left">string</td><td align="left">是</td><td align="left">App.Sip\_Cdr.GetCompanyStats</td></tr><tr><td align="left">token</td><td align="left">string</td><td align="left">是</td><td align="left">通过授权接口获取的token</td></tr><tr><td align="left">starttime</td><td align="left">string</td><td align="left">是</td><td align="left">统计起始时间，格式：yyyy-mm-dd hh:mm:ss，时间范围最长31天</td></tr><tr><td align="left">endtime</td><td align="left">string</td><td align="left">是</td><td align="left">统计结束时间，格式：yyyy-mm-dd hh:mm:ss，时间范围最长31天</td></tr><tr><td align="left">granularity</td><td align="left">string</td><td align="left">否</td><td align="left">统计粒度：total时间范围汇总、day按天统计</td></tr></tbody></table>

#### 接口请求示例（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Cdr.GetRecodeFile',
        'token'     => 'ABCDEFG',
        'starttime'  => 'yyyy-mm-dd hh:mm:ss',
        'endtime'  => 'yyyy-mm-dd hh:mm:ss',
        'granularity'  => 'day',
    ];
    $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": "success",
        "result": {
            "stats": [
                {
                    "active_extnumbers": 1,
                    "total_calls": 4,
                    "answered_calls": 0,
                    "unanswered_calls": 4,
                    "answer_rate": 0,
                    "total_talk_seconds": 0,
                    "avg_talk_seconds": 0,
                    "avg_wait_seconds": 10.25,
                    "inbound_calls": 0,
                    "outbound_calls": 4
                }
            ]
        },
        "reqtime": 1788933086,
        "rsptime": 1788933086
    },
    "msg": ""
}


```

#### 返回参数说明

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-result-obj"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">result</td><td align="left">objest</td><td align="left">返回的结果集</td></tr></tbody></table>

# 语音文件管理 - 获取语音文件

#### 接口说明

获取语音文件列表。

#### 请求方式

POST，form-data格式

#### 请求参数

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E6%98%AF%E5%90%A6%E5%BF%85%E9%A1%BB-%E8%AF%B4%E6%98%8E-servi"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">是否必须</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">service</td><td align="left">string</td><td align="left">是</td><td align="left">App.Sip\_Voice.GetAudioList</td></tr><tr><td align="left">token</td><td align="left">string</td><td align="left">是</td><td align="left">通过授权接口获取的token</td></tr><tr><td align="left">filename</td><td align="left">string</td><td align="left">否</td><td align="left">文件名</td></tr><tr><td align="left">voicename</td><td align="left">string</td><td align="left">否</td><td align="left">语音名称，支持模糊查询</td></tr><tr><td align="left">status</td><td align="left">int</td><td align="left">否</td><td align="left">0:启用、1:禁用、2:全部</td></tr><tr><td align="left">currentpage</td><td align="left">int</td><td align="left">否</td><td align="left">页数，默认：1</td></tr><tr><td align="left">itemsperpage</td><td align="left">int</td><td align="left">否</td><td align="left">每页数量，默认：10，最小：1；最大：1000</td></tr></tbody></table>

#### 接口请求示例（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": "success",
        "result": {
            "totalitems": 4,
            "currentpage": 1,
            "itemsperpage": 20,
            "audios": [
                {
                    "id": 1897,
                    "createtime": "2026-09-09 11:32:59",
                    "updatetime": "2026-09-09 11:32:59",
                    "status": 0,
                    "filename": "welcome.mp3",
                    "voicename": "欢迎语音",
                    "mark": null
                },
                {
                    "id": 32,
                    "createtime": "2020-04-05 12:24:32",
                    "updatetime": "2020-04-05 12:24:32",
                    "status": 0,
                    "filename": "162729test_Telat3hari.mp3",
                    "voicename": "test",
                    "mark": null
                },
                {
                    "id": 30,
                    "createtime": "2020-04-05 12:24:32",
                    "updatetime": "2020-04-05 12:24:32",
                    "status": 0,
                    "filename": "d0bc00b05d3e.mp3",
                    "voicename": "apply_pass_voice2",
                    "mark": null
                },
                {
                    "id": 6,
                    "createtime": "2020-04-05 12:24:32",
                    "updatetime": "2020-04-05 12:24:32",
                    "status": 0,
                    "filename": "pylv8-favv2.mp3",
                    "voicename": "apply_pass_voice",
                    "mark": null
                }
            ]
        },
        "reqtime": 1788924914,
        "rsptime": 1788924914
    },
    "msg": ""
}


```

#### 返回参数说明

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-result-obj"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">result</td><td align="left">objest</td><td align="left">返回的结果集</td></tr><tr><td align="left">—totalitems</td><td align="left">int</td><td align="left">记录总数</td></tr><tr><td align="left">—currentpage</td><td align="left">int</td><td align="left">当前页码</td></tr><tr><td align="left">—itemsperpage</td><td align="left">int</td><td align="left">每页数量</td></tr><tr><td align="left">—audios</td><td align="left">array</td><td align="left">记录数组</td></tr><tr><td align="left">——id</td><td align="left">int</td><td align="left">记录id</td></tr><tr><td align="left">——filename</td><td align="left">string</td><td align="left">文件名</td></tr><tr><td align="left">——voicename</td><td align="left">string</td><td align="left">语音文件名称</td></tr><tr><td align="left">——mark</td><td align="left">string</td><td align="left">备注说明</td></tr><tr><td align="left">——status</td><td align="left">string</td><td align="left">状态</td></tr><tr><td align="left">——createtime</td><td align="left">string</td><td align="left">创建时间</td></tr><tr><td align="left">——updatetime</td><td align="left">string</td><td align="left">更新时间</td></tr></tbody></table>

# 获取消息状态

### 域名

- https://chat-api.incsapp.com

### 请求路由

- /external/messages/status

### 请求方式

- **GET**

### 请求头

- certification-code: af92196e-0d07-3c1d-a631-a71c...

### 请求限流

- 单 Sender 最大 **1 rps** (每秒1请求)

### 请求参数

#### 请求参数列表

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E5%BF%85%E5%A1%AB-%E6%8F%8F%E8%BF%B0-message"><thead><tr><th>参数名</th><th>类型</th><th>必填</th><th>描述</th></tr></thead><tbody><tr><td>message\_ids</td><td>string</td><td>是</td><td>消息id列表，必须是以英文逗号分隔的字符串，最多100个消息id。如：message\_ids=wamid.HBgNNjI4MTUxOTE0MDMyNxUCABEYEkUwMzZEMDc4RURERDlFQzFBNQA=,wamid.HBgLODUyNjg0MTUwMjYVAgARGBI4QTJBNjQ5MzA5NTgwRTBBMkQA</td></tr></tbody></table>

### 响应

- 请注意该接口获取的消息状态可能会有数分钟延迟

#### 成功响应示例

```json
{
    "status": "success",
    "code": 200,
    "message": "",
    "data": {
        "data": [
            {
                "message_id": "wamid.HBgNNjI4MTUxOTE0MDMyNxUCABEYEkUwMzZEMDc4RURERDlFQzFBNQA=",
                "message_status": "read", // 消息最终状态
                "created_at": 1774249921, // 消息创建时间戳
                "delivered_at": 0, // 消息送达时间戳（这里被read覆盖所以没有记录delivered_at）
                "read_at": 1774249929 // 消息已读时间戳
            },
            {
                "message_id": "wamid.HBgLODUyNjg0MTUwMjYVAgARGBI4QTJBNjQ5MzA5NTgwRTBBMkQA",
                "message_status": "read",
                "created_at": 1773907696,
                "delivered_at": 1773907751,
                "read_at": 1773907751
            }
        ]
    },
    "error": {}
}

```

# 新消息回调 -- RCS

### 回调地址

- **需要在 INCS 设置您的回调地址**

### 回调请求方式

- **POST**

### 回调内容

#### 参数说明

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E5%BF%85%E4%BC%A0-%E6%8F%8F%E8%BF%B0-event-s"><thead><tr><th>参数名</th><th>类型</th><th>必传</th><th>描述</th></tr></thead><tbody><tr><td>event</td><td>string</td><td>是</td><td>回调事件名称，这里为 "new\_message"</td></tr><tr><td>channel\_id</td><td>int</td><td>是</td><td>INCS 的消息通道ID</td></tr><tr><td>message</td><td>object</td><td>是</td><td>RCS 消息内容，不同的消息内容会有所差别</td></tr></tbody></table>

#### 回调示例

```json
{
    "event": "new_message",
    "channel_id": 30058,
    "business_phone": "",
    "message": {
        "senderPhoneNumber": "+6281519140000",
        "messageId": "da220bf7-e15b-4b2b-90af-1860eb335872",
        "sendTime": "2026-02-02T08:11:41.193204Z",
        "agentId": "infinity_links_indo_test_promo_tqzwtuox_agent@rbm.goog",
        "suggestionResponse": {
            "postbackData": "shop_url",
            "text": "Buy Now at INCS",
            "type": "ACTION"
        }
    }
}

```

#### message 内容示例

##### 1. Text Message

```json
{
    "senderPhoneNumber": "+628XXXXXXXXX",
    "messageId": "5312df2b-54e3-457d-8654-49a4f3ba1a19",
    "sendTime": "2024-04-20T10:11:02.589915Z",
    "text": "Hiii",
    "agentId": "test_vhbgamhn_agent@rbm.goog"
}

```

##### 2. File Message

```json
{
    "senderPhoneNumber": "+628XXXXXXXXX",
    "messageId": "5312df2b-54e3-457d-8654-49a4f3ba1a19",
    "sendTime": "2024-04-20T10:58:29.951141Z",
    "userFile": {
        "thumbnail": {
            "mimeType": "image/jpeg",
            "fileSizeBytes": 8001,
            "fileUri": "https://rcs-user-content-ap.storage.googleapis.com/baf60d40-f197-497f-83f8-5a52fd081262/54b9a1aae33ff62d14ea58db59f43ff04cf62d2329041b110b724b7447a7"
        },
        "payload": {
            "mimeType": "image/jpeg",
            "fileSizeBytes": 144594,
            "fileName": "1000002217.jpg",
            "fileUri": "https://rcs-user-content-ap.storage.googleapis.com/f7cdd990-83ea-4b8d-ba89-73eacf8d7d8a/d63d8f295248fc67cc1716658c169bba70f98b0513798c3c60f56f52734f"
        }
    },
    "agentId": "test_vhbgamhn_agent@rbm.goog"
}

```

##### 3. Response to suggestion – REPLY

```json
{
    "senderPhoneNumber": "+628XXXXXXXXX",
    "messageId": "5312df2b-54e3-457d-8654-49a4f3ba1a19",
    "sendTime": "2024-04-05T13:15:40.152413Z",
    "agentId": "test_vhbgamhn_agent@rbm.goog",
    "suggestionResponse": {
        "postbackData": "user_reply_what_is_rcs",
        "text": "what is RCS?",
        "trackdata": {
            "suggestionType": "reply",
            "msgType": "richcard",
            "cardIndex": 0,
            "suggestionIndex": 1,
            "msgId": "019cc232-229a-7353-b860-87709fa4d7d4",
            "msgDate": "2026-03-06T08:09:51.895Z",
            "template": "2217703609111640005"
        },
        "type": "REPLY"
    }
}

```

##### 4. Response to suggestion – ACTION

```json
{
    "senderPhoneNumber": "+628XXXXXXXXX",
    "messageId": "5312df2b-54e3-457d-8654-49a4f3ba1a19",
    "sendTime": "2024-04-05T13:16:42.183829Z",
    "agentId": "test_vhbgamhn_agent@rbm.goog",
    "suggestionResponse": {
        "postbackData": "user_action_open_url",
        "text": "visit our website",
        "trackdata": {
            "suggestionType": "url_action",
            "msgType": "richcard",
            "cardIndex": 0,
            "suggestionIndex": 0,
            "msgId": "019cc232-229a-7353-b860-87709fa4d7d4",
            "msgDate": "2026-03-06T08:09:51.895Z",
            "template": "2217703609111640005"
        },
        "type": "ACTION"
    }
}

```

##### 5. Location message

```json
{
    "senderPhoneNumber": "+62XXXXXXXXXX",
    "messageId": "b0d0ea18-c809-4206-9ca2-5baf02707fe0",
    "sendTime": "2025-07-29T06:08:36.741050Z",
    "agentId": "test_dev_vhbgamhn_agent@rbm.goog",
    "location": {
        "longitude": 78.3861501,
        "latitude": 17.4370557
    }
}

```

# 预测式外呼 - 设置预测试外呼任务状态接口

#### 接口说明

设置预测试外呼任务的状态。

#### 请求参数

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E6%98%AF%E5%90%A6%E5%BF%85%E9%A1%BB-%E8%AF%B4%E6%98%8E-servi"><thead><tr><th>参数名</th><th>类型</th><th>是否必须</th><th>说明</th></tr></thead><tbody><tr><td>service</td><td>string</td><td>是</td><td>App.Sip\_Yccall.TaskSet</td></tr><tr><td>token</td><td>string</td><td>是</td><td>通过授权接口获取的token</td></tr><tr><td>taskid</td><td>string</td><td>是</td><td>创建任务时返回的唯一id</td></tr><tr><td>taskstatus</td><td>int</td><td>是</td><td>设置任务状态 1:开启、2:暂停、3:结束</td></tr></tbody></table>

#### 接口请求示例（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Yccall.TaskSet',
        'token'     => 'ABCDEFG',
        'taskid'    => 'ABCDEFG',
        'taskstatus' => 1,
    ];
    $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": 1581496800,
        "rsptime": 1581496800
    },
    "msg": ""
}

```

#### 失败返回数据结构示例

```
{
    "ret": 200,
    "data": {
        "status": 1,
        "desc": "失败",
        "errors": {
            "code": 1002,
            "codemsg": "非进行中的任务无法暂停，当前任务状态(暂停)"
        },
        "reqtime": 1784876669,
        "rsptime": 1784876669
    },
    "msg": ""
}

```

#### 返回参数说明

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-desc-strin"><thead><tr><th>参数名</th><th>类型</th><th>说明</th></tr></thead><tbody><tr><td>desc</td><td>string</td><td>返回描述</td></tr></tbody></table>

# 发送状态查询

本文详细介绍了短信发送记录的多维度查询与导出过程，并对时间、号码、发送方式等检索条件及数据导出规则进行了全面阐述。

### 功能概述

发送状态查询用于追踪短信的投递详情，支持按时间范围、接收号码或发送方式（如 API、后台）进行灵活检索。通过本功能，您可以精准定位特定场景下的发送记录，确认状态、排查失败原因，并满足审计与运维需求。

### 功能入口

登录云联络中心控制台，在左侧导航栏选择 短信 &gt; 发送详情，进入发送状态查询界面。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1772590939896.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1772590939896.png)

### 功能介绍

#### 查询发送记录

系统支持以下三种组合筛选方式：

1.按日期范围查询 选择 **开始日期** 与 **结束日期**； 可与其他条件叠加使用。

2.按接收号码查询 在 **号码搜索框** 中输入完整的手机号码；

3.按发送方式筛选 在 **发送方式** 下拉框中选择：

- API：通过程序调用接口自动发送的短信；
- WEB：在控制台手动提交的短信； 支持与日期、号码条件组合使用。

💡 示例：选择“API 发送 + 今日 + 通道A”，可快速定位某接口今日通过指定通道的调用记录。

点击 **查询**后，系统将展示匹配的发送记录列表，每条包含：

- 接收号码
- 发送内容
- 发送时间
- 发送状态（成功 / 失败 / 发送中）
- 回执状态
- 发送方式（API / WEB）
- 发送渠道

#### 数据导出

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1772591061411.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1772591061411.png)完成筛选后，点击 **导出** 按钮；系统将导出当前查询结果为 CS V 文件；

导出字段包含：接收号码、完整短信内容、发送时间、状态、发送方式、通道、返回码等。

# 获取模板详情

### 域名

- https://api.incsapp.com

### 请求路由

- /external/templates/{template\_id}

### 请求方式

- **GET**

### 请求头

- certification-code: f484bd42-4a0c-39d....

### 请求参数

- 无

### 响应

#### 成功响应示例

- 响应说明参见**模板资源说明**

```json
{
    "status": "success",
    "code": 200,
    "message": "",
    "data": {
        "template_id": "4166201267033543",
        "name": "test_api_2",
        "language": "en_US",
        "category": "MARKETING",
        "status": "PENDING",
        "quality": "",
        "components": [
            {
                "type": "BODY",
                "text": "A API test template without variables"
            }
        ],
        "created_time": 1755076188,
        "updated_time": 1755077570,
        "status_updated_time": 1755077464,
        "quality_updated_time": 0,
        "category_updated_time": 0
    },
    "error": {}
}

```

#### 失败响应示例

```json
{
    "status": "error",
    "code": 400,
    "message": "The template is not found.",
    "data": {},
    "error": {}
}

```

# 分机组管理 - 分机签出分机组

#### 接口说明

将当前用户下的分机从分机组中签出

#### 请求方式

POST，form-data格式

#### 请求参数

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E6%98%AF%E5%90%A6%E5%BF%85%E9%A1%BB-%E8%AF%B4%E6%98%8E-servi"><thead><tr><th>参数名</th><th>类型</th><th>是否必须</th><th>说明</th></tr></thead><tbody><tr><td>service</td><td>string</td><td>是</td><td>App.Sip\_Extgroup.DelExtnumber</td></tr><tr><td>token</td><td>string</td><td>是</td><td>通过授权接口获取的token</td></tr><tr><td>name</td><td>string</td><td>是</td><td>分机组名</td></tr><tr><td>extnumber</td><td>string</td><td>是</td><td>分机号，多个以逗号分隔</td></tr></tbody></table>

#### 接口请求示例（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Extgroup.DelExtnumber',
        'token'     => 'ABCDEFG',
        'name'  => 'abcdefg',
        'extnumber'  => '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": 1581409508,
        "rsptime": 1581409508
    },
    "msg": ""
}

```

#### 返回数据字段说明

<table id="bkmrk-%E5%AD%97%E6%AE%B5-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-desc-string"><thead><tr><th>字段</th><th>类型</th><th>说明</th></tr></thead><tbody><tr><td>desc</td><td>string</td><td>返回描述</td></tr></tbody></table>

# 分机管理 - 获取分机列表

#### 接口说明

获取用户拥有的分机列表信息。

#### 请求方式

POST，form-data格式

#### 请求参数

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E6%98%AF%E5%90%A6%E5%BF%85%E9%A1%BB-%E8%AF%B4%E6%98%8E-servi"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">是否必须</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">service</td><td align="left">string</td><td align="left">是</td><td align="left">App.Sip\_Sipnum.GetSipnumberInfo</td></tr><tr><td align="left">token</td><td align="left">string</td><td align="left">是</td><td align="left">通过授权接口获取的token</td></tr><tr><td align="left">status</td><td align="left">int</td><td align="left">是</td><td align="left">分机状态。1:启用（默认）、2:禁用、3:全部</td></tr><tr><td align="left">extnumber</td><td align="left">string</td><td align="left">否</td><td align="left">分机号，为空获取所有</td></tr><tr><td align="left">currentpage</td><td align="left">int</td><td align="left">否</td><td align="left">页数，默认：1</td></tr><tr><td align="left">itemsperpage</td><td align="left">int</td><td align="left">否</td><td align="left">每页数量，默认：10，最小：1；最大：1000</td></tr></tbody></table>

#### 接口请求示例（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Sipnum.GetSipnumberInfo',
        'token'     => 'ABCDEFG',
        'status'    => 3,
        'extnumber'  => '100001'
    ];
    $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": 5,
            "currentpage": 1,
            "itemsperpage": 100,
            "sipusers": [
                {
                    "extnumber": "9002004",
                    "password": "CNAA9002004",
                    "username": "9002004",
                    "status": 1016,
                    "manualdial": 1,
                    "record": 1,
                    "register": null,
                    "createtime": "2026-09-08 14:47:02",
                    "updatetime": "2026-09-17 11:43:01",
                    "message": "坐席已启用"
                },
                {
                    "extnumber": "9002005",
                    "password": "CNAA9002005",
                    "username": "9002005",
                    "status": 1016,
                    "manualdial": 1,
                    "record": 1,
                    "register": null,
                    "createtime": "2026-09-08 14:47:02",
                    "updatetime": "2026-09-17 11:43:01",
                    "message": "坐席已启用"
                }
            ]
        },
        "reqtime": 1789628957,
        "rsptime": 1789628957
    },
    "msg": ""
}


```

#### 返回参数说明

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-result-obj"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">result</td><td align="left">object</td><td align="left">分机列表分页信息</td></tr><tr><td align="left">-totalitems</td><td align="left">int</td><td align="left">分机总数</td></tr><tr><td align="left">-currentpage</td><td align="left">int</td><td align="left">当前页码</td></tr><tr><td align="left">-itemsperpage</td><td align="left">int</td><td align="left">每页默认值</td></tr><tr><td align="left">-sipusers</td><td align="left">array</td><td align="left">分机列表数组</td></tr><tr><td align="left">—extnumber</td><td align="left">string</td><td align="left">分机号</td></tr><tr><td align="left">—password</td><td align="left">string</td><td align="left">分机号登陆密码</td></tr><tr><td align="left">—status</td><td align="left">int</td><td align="left">分机状态码，1016：启用、1013：禁用</td></tr><tr><td align="left">—register</td><td align="left">string</td><td align="left">分机号注册状态。nreg：未注册；reg：已注册</td></tr><tr><td align="left">—manualdial</td><td align="left">int</td><td align="left">直拨状态，1：启用、2：禁用</td></tr><tr><td align="left">—record</td><td align="left">int</td><td align="left">录音状态，1：启用、2：禁用</td></tr></tbody></table>

# 语音呼叫API - 通话监听

#### 接口说明

指定分机监听其它正在通话的分机。

#### 请求方式

POST，form-data格式

#### 请求参数

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E6%98%AF%E5%90%A6%E5%BF%85%E9%A1%BB-%E8%AF%B4%E6%98%8E-servi"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">是否必须</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">service</td><td align="left">string</td><td align="left">是</td><td align="left">App.Sip\_Call.SpyCall</td></tr><tr><td align="left">token</td><td align="left">string</td><td align="left">是</td><td align="left">通过授权接口获取的token</td></tr><tr><td align="left">monitortype</td><td align="left">string</td><td align="left">是</td><td align="left">监听方式，1:监听分机，2：监听切换耳语，3：耳语恢复监听</td></tr><tr><td align="left">extnumber</td><td align="left">string</td><td align="left">是</td><td align="left">监听者坐席</td></tr><tr><td align="left">destnumber</td><td align="left">string</td><td align="left">是</td><td align="left">被监听者坐席</td></tr></tbody></table>

#### 接口请求示例（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Call.MakeCall',
        'token'     => 'ABCDEFG',
		'monitortype'  => '1',
        'extnumber'  => '70001',
        'destnumber'  => '7008',
    ];
    $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": 1581389402,
        "rsptime": 1581389402
    },
    "msg": ""
}

```

#### 返回参数说明

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-status-int"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">status</td><td align="left">int</td><td align="left">0修改成功，1修改失败</td></tr><tr><td align="left">desc</td><td align="left">string</td><td align="left">描述信息</td></tr><tr><td align="left">result</td><td align="left">object</td><td align="left">对象信息当前为空</td></tr></tbody></table>

# 4.任务管理

#### 任务管理

管理员可以在任务列表查看不同任务的概览情况，支持对单个任务的查看、暂停、追加号码、移除号码与结束操作。

[![](https://document.infin8linx.com/uploads/images/gallery/2025-12/scaled-1680-/image-1766646674557.png)](https://document.infin8linx.com/uploads/images/gallery/2025-12/image-1766646674557.png)

#### 任务搜索与筛选

预测式外呼任务支持筛选查看操作，管理员可以进行任务名称与任务 ID 的搜索查找，也可以根据不同的任务的状态和技能组进行筛选来查看任务列表。

[![](https://document.infin8linx.com/uploads/images/gallery/2025-12/scaled-1680-/image-1766646759459.png)](https://document.infin8linx.com/uploads/images/gallery/2025-12/image-1766646759459.png)

#### 任务状态介绍

任务列表会展示不同状态的任务情况，预测式外呼的任务共有以下四种状态，详细说明如下：

<table id="bkmrk-%E7%8A%B6%E6%80%81%E5%90%8D%E7%A7%B0-%E7%8A%B6%E6%80%81%E6%8F%8F%E8%BF%B0-%E6%9C%AA%E5%BC%80%E5%A7%8B-%E4%BB%BB%E5%8A%A1%E5%BC%80%E5%A7%8B%E5%89%8D%EF%BC%8C"><thead><tr><th align="left">状态名称</th><th align="left">状态描述</th></tr></thead><tbody><tr><td align="left">未开始</td><td align="left">任务开始前，处于未开始的状态，管理员可以进行任务的编辑和追加号码，移除号码操作。</td></tr><tr><td align="left">运行中</td><td align="left">任务开始执行，处于进行中的状态，管理员可以查看任务进展，也可以对进行任务的暂停和中止的操作。</td></tr><tr><td align="left">暂停</td><td align="left">任务被暂停，处于已暂停状态，管理员可以进行任务的继续、终止操作。</td></tr><tr><td align="left">结束</td><td align="left">任务执行完成，处于已完成状态，管理员可以进行任务的查看</td></tr></tbody></table>

# 通话状态回调参数说明

分机通话状态回调需要给对应的账号配置上回调地址即可。 分机通话状态的回调地址配置：由客户提供一个可以接收json数据的接口地址，由我们配置或客户自行在后台配置都可以。

###### 分机通话状态回调数据格式

```
{
	"callee": "6285962532631",
	"caller": "3462831075",
	"chengshudu": "ext",
	"companycode": "3462831",
	"customuuid": "77167815_Y9O0S-TNWH5-GP3Z6-M47AC",
	"direction": "callout",
	"disnumber": "213462831001",
	"ext": "ext",
	"extnumber": "3462831075",
	"isbleg": "false",
	"memberid": "260724130120_d1fajarforlizegar",
	"method": "5",
	"starttime": "1784875218",
	"status": "hangup",
	"taskid": "20260724140118897473",
	"type": "call",
	"userid": "crmid",
	"uuid": "7aa8ac22-872a-11f1-93ea-b5925a93bfc5"
}

```

###### 分机通话状态回调参数说明

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-buuid-stri"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">buuid</td><td align="left">string</td><td align="left">通话b侧被叫号码的uuid</td></tr><tr><td align="left">callee</td><td align="left">int</td><td align="left">被叫号码（客户号码/目标号码）。指最终与坐席建立通话的外部用户号码。</td></tr><tr><td align="left">caller</td><td align="left">int</td><td align="left">主叫号码（坐席号码)。指实际发起通话或进行沟通的坐席真实号码（或分机号）。</td></tr><tr><td align="left">companycode</td><td align="left">int</td><td align="left">账号对应的公司id</td></tr><tr><td align="left">customuuid</td><td align="left">string</td><td align="left">自定义参数-客户id</td></tr><tr><td align="left">taskid</td><td align="left">string</td><td align="left">任务id（预测外呼任务的时候存在）</td></tr><tr><td align="left">ext</td><td align="left">string</td><td align="left">自定义参数</td></tr><tr><td align="left">direction</td><td align="left">string</td><td align="left">呼叫方向：1、呼入； 2、呼出；</td></tr><tr><td align="left">disnumber</td><td align="left">int</td><td align="left">显示主叫（外显号码)。指客户手机上看到的来电号码。</td></tr><tr><td align="left">extnumber</td><td align="left">int</td><td align="left">分机号</td></tr><tr><td align="left">isbleg</td><td align="left">string</td><td align="left">true为手机侧响铃；false为坐席侧响铃；</td></tr><tr><td align="left">method</td><td align="left">string</td><td align="left">呼叫方法：0、不限；1、分机互拨；2、分机直拨；3、API呼叫（默认）；4、API双呼；5、预测式外呼；6、IVR/群呼。</td></tr><tr><td align="left">starttime</td><td align="left">string</td><td align="left">呼叫时间</td></tr><tr><td align="left">status</td><td align="left">string</td><td align="left">呼叫状态：ring 响铃、 answer 应答、 hangup 挂机</td></tr><tr><td align="left">type</td><td align="left">string</td><td align="left">呼叫类型</td></tr><tr><td align="left">uuid</td><td align="left">string</td><td align="left">通话uuid</td></tr></tbody></table>

# Common API - Global error and status codes

#### Interface exception error

##### Description

ret is not 200, msg is abnormal error message.

```
{
    "ret":400, // status code
    "data":[],
    "msg":"Illegal request: invalid parameter"
}


```

<table id="bkmrk-ret-msg-illustrate-4"><thead><tr><th align="left">ret</th><th align="left">msg</th><th align="left">illustrate</th></tr></thead><tbody><tr><td align="left">400</td><td align="left">illegal request</td><td align="left">Generally, the parameters are invalid</td></tr><tr><td align="left">500</td><td align="left"></td><td align="left">Server Error</td></tr><tr><td align="left">600</td><td align="left"></td><td align="left">The token is invalid, please log in again to verify</td></tr><tr><td align="left">601</td><td align="left">appid is not authorized</td><td align="left">Please check the appid or contact Yunhu Technology for authorization</td></tr><tr><td align="left">602</td><td align="left"></td><td align="left">appid authorization has expired</td></tr><tr><td align="left">603</td><td align="left"></td><td align="left">Module not licensed</td></tr><tr><td align="left">604</td><td align="left">IP is not authorized</td><td align="left">Please contact the manufacturer to authorize access</td></tr></tbody></table>

#### The interface request is normal, but the internal processing error

##### Description

ret is 200. In the data structure, the status is 1, desc is the Chinese description of the failure, and errors is the detailed error information. For the code code, please refer to the corresponding description. msg is empty.

```
{
    "ret": 200,
    "data": {
        "status": 1,
        "desc": "xxxfail",
        "errors": {
            "code": "1003",
            "codemsg": "Authorization failed"
        },
        "reqtime": 1507529858,
        "rsptime": 1507529858
    },
    "msg": ""
}


```

<table id="bkmrk-code-codemsg-illustr"><thead><tr><th align="left">code</th><th align="left">codemsg</th><th align="left">illustrate</th></tr></thead><tbody><tr><td align="left">1001</td><td align="left">Server connection failed</td><td align="left">Usually due to network</td></tr><tr><td align="left">1002</td><td align="left">Abnormal operation</td><td align="left">Generally, it is a check exception, etc.</td></tr><tr><td align="left">1003</td><td align="left">operation failed</td><td align="left">Generally, authorization failure, logout failure, command sending failure, server connection exception, etc.</td></tr><tr><td align="left">1010</td><td align="left">Extension exception</td><td align="left">It may be a newly added extension, you need to log in again to get a new token</td></tr><tr><td align="left">1011</td><td align="left">illegal extension</td><td align="left">not owned by the company</td></tr><tr><td align="left">1012</td><td align="left">extension does not exist</td><td align="left">Extension Number Status</td></tr><tr><td align="left">1013</td><td align="left">extension disabled</td><td align="left">Extension Number Status</td></tr><tr><td align="left">1014</td><td align="left">extension not registered</td><td align="left">Extension Number Status</td></tr><tr><td align="left">1015</td><td align="left">The extension is not in a call</td><td align="left">Extension Number Status</td></tr><tr><td align="left">1016</td><td align="left">extension enabled</td><td align="left">Extension Number Status</td></tr><tr><td align="left">1017</td><td align="left">extension is registered</td><td align="left">Extension Number Status</td></tr><tr><td align="left">1018</td><td align="left">Number is enabled</td><td align="left">Caller ID status</td></tr><tr><td align="left">1019</td><td align="left">number disabled</td><td align="left">Caller ID status</td></tr><tr><td align="left">1020</td><td align="left">number does not exist</td><td align="left">Caller ID status</td></tr><tr><td align="left">1021</td><td align="left">illegal number</td><td align="left">not owned by the company</td></tr><tr><td align="left">1024</td><td align="left">task does not exist</td><td align="left">Predictive task interface return status</td></tr><tr><td align="left">1025</td><td align="left">has not started</td><td align="left">Predictive task interface return status</td></tr><tr><td align="left">1026</td><td align="left">in progress</td><td align="left">Predictive task interface return status</td></tr><tr><td align="left">1027</td><td align="left">pause</td><td align="left">Predictive task interface return status</td></tr><tr><td align="left">1028</td><td align="left">over</td><td align="left">Predictive task interface return status</td></tr><tr><td align="left">1201</td><td align="left">idle</td><td align="left">Extension is legal, enabled and registered</td></tr><tr><td align="left">1202</td><td align="left">ringing</td><td align="left">extension return</td></tr><tr><td align="left">1203</td><td align="left">off-hook</td><td align="left">extension return</td></tr><tr><td align="left">1204</td><td align="left">calling</td><td align="left">extension return</td></tr><tr><td align="left">1205</td><td align="left">User rejects</td><td align="left">Called party rejects</td></tr><tr><td align="left">1210</td><td align="left">Queue exception</td><td align="left">return in predictive outbound</td></tr><tr><td align="left">1211</td><td align="left">illegal queue</td><td align="left">Does not exist or is not owned by the company</td></tr><tr><td align="left">1212</td><td align="left">did not answer</td><td align="left">Assigned unanswered</td></tr><tr><td align="left">1213</td><td align="left">Waiting</td><td align="left">Waiting for assignment (idle)</td></tr><tr><td align="left">1214</td><td align="left">receiving</td><td align="left">Status of extensions in queue</td></tr><tr><td align="left">1215</td><td align="left">answered</td><td align="left">Status of extensions in the queue</td></tr><tr><td align="left">1216</td><td align="left">Reject</td><td align="left">Status of extensions in the queue</td></tr><tr><td align="left">1217</td><td align="left">pause</td><td align="left">show busy</td></tr><tr><td align="left">1218</td><td align="left">checked in</td><td align="left">The extension is already checked into the queue</td></tr><tr><td align="left">10001</td><td align="left">hang up normally</td><td align="left">call state</td></tr><tr><td align="left">10002</td><td align="left">call cancel</td><td align="left">call state</td></tr><tr><td align="left">10003</td><td align="left">refuse to answer</td><td align="left">call state</td></tr><tr><td align="left">10004</td><td align="left">Outbound channel line failure</td><td align="left">Usually due to wiring</td></tr><tr><td align="left">10005</td><td align="left">User timed out</td><td align="left">call state</td></tr><tr><td align="left">10006</td><td align="left">User is busy</td><td align="left">call state</td></tr><tr><td align="left">10040</td><td align="left">caller hang up</td><td align="left">call state</td></tr><tr><td align="left">10041</td><td align="left">Called hang up</td><td align="left">call state</td></tr></tbody></table>

# Common API - API for getting call records

#### Interface description

the interface for the customer to actively pull the list of call records.

#### Request method

POST, form-data format

#### Get call record interface request parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th align="left">parameter name</th><th align="left">type</th><th align="left">Is it necessary</th><th align="left">illustrate</th></tr></thead><tbody><tr><td align="left">service</td><td align="left">string</td><td align="left">yes</td><td align="left">App.Sip\_Cdr.GetBill</td></tr><tr><td align="left">token</td><td align="left">string</td><td align="left">yes</td><td align="left">The token obtained through the authorization interface</td></tr><tr><td align="left">starttime</td><td align="left">string</td><td align="left">yes</td><td align="left">(Dial) start time, format：yyyy-mm-dd hh:mm:ss</td></tr><tr><td align="left">endtime</td><td align="left">string</td><td align="left">yes</td><td align="left">(Dial) end time, format：yyyy-mm-dd hh:mm:ss</td></tr><tr><td align="left">syncflag</td><td align="left">int</td><td align="left">yes</td><td align="left">Get record type: 1. Get unqueried records (default); 2. Get queried records; 3. Get all records.</td></tr><tr><td align="left">direction</td><td align="left">int</td><td align="left">yes</td><td align="left">Call direction: 1. Incoming; 2. Outgoing; 3. All (default).</td></tr><tr><td align="left">callmethod</td><td align="left">int</td><td align="left">yes</td><td align="left">Call method: 0, unlimited; 1, mutual extension dial; 2, extension direct dial (manual dial); 3, API call (default); 4, API double call; 5, predictive outbound call; 6, IVR/group call .</td></tr><tr><td align="left">currentpage</td><td align="left">int</td><td align="left">yes</td><td align="left">number of pages, default: 1</td></tr><tr><td align="left">itemsperpage</td><td align="left">int</td><td align="left">yes</td><td align="left">Number per page, default: 10, minimum: 1; maximum: 1000</td></tr><tr><td align="left">extnumber</td><td align="left">string</td><td align="left">yes</td><td align="left">Extension number, multiple extension numbers are separated by English commas, when passing a null value, it is all</td></tr><tr><td align="left">destnumber</td><td align="left">string</td><td align="left">yes</td><td align="left">The target number of the call, when passing a null value, it is all</td></tr><tr><td align="left">userid</td><td align="left">string</td><td align="left">yes</td><td align="left">Custom data (employee ID), nullable</td></tr><tr><td align="left">memberid</td><td align="left">string</td><td align="left">yes</td><td align="left">Custom data (member ID), can be empty</td></tr><tr><td align="left">chengshudu</td><td align="left">string</td><td align="left">no</td><td align="left">Custom Data (Maturity)</td></tr><tr><td align="left">customuuid</td><td align="left">string</td><td align="left">no</td><td align="left">Custom Data (Customer ID)</td></tr></tbody></table>

#### API Request Example for Obtaining Call Records（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);
?>


```

#### return data structure example

```
{
    "ret": 200,
    "data": {
        "status": 0,
        "desc": "get success",
        "result": {
            "totalitems": 8151,
            "currentpage": 1,
            "itemsperpage": 10,
            "bills": [
                {
                    "id": 22670,
                    "extnumber": "",
                    "destnumber": "13387525701",
                    "displaynumber": "2190170001",
                    "starttime": "2019-09-27 14:58:37",
                    "answertime": null,
                    "endtime": "2019-09-27 14:59:05",
                    "duration": 28,
                    "billsec": 0,
                    "direction": "callout",
                    "callmethod": 6,
                    "userid": "0",
                    "memberid": "0",
                    "chengshudu": "0",
                    "customuuid": "0",
                    "recordfilename": "",
                    "downloadip": "",
                    "hangupdirection": 10041,
                    "hangupcause": 10020,
                    "userkey":"#"
                }
            ]
        },
        "reqtime": 1581502410,
        "rsptime": 1581502410
    },
    "msg": ""
}


```

#### Return parameter description

<table id="bkmrk-parameter-name-type--1"><thead><tr><th align="left">parameter name</th><th align="left">type</th><th align="left">illustrate</th></tr></thead><tbody><tr><td align="left">result</td><td align="left">objest</td><td align="left">returned result set</td></tr><tr><td align="left">—totalitems</td><td align="left">int</td><td align="left">total number of records</td></tr><tr><td align="left">—currentpage</td><td align="left">int</td><td align="left">current page number</td></tr><tr><td align="left">—itemsperpage</td><td align="left">int</td><td align="left">Quantity per page</td></tr><tr><td align="left">—bills</td><td align="left">array</td><td align="left">record array</td></tr><tr><td align="left">——id</td><td align="left">int</td><td align="left">record id</td></tr><tr><td align="left">——extnumber</td><td align="left">string</td><td align="left">Ext</td></tr><tr><td align="left">——destnumber</td><td align="left">string</td><td align="left">target number</td></tr><tr><td align="left">——displaynumber</td><td align="left">string</td><td align="left">display number</td></tr><tr><td align="left">——starttime</td><td align="left">string</td><td align="left">call time</td></tr><tr><td align="left">——answertime</td><td align="left">string</td><td align="left">response time</td></tr><tr><td align="left">——endtime</td><td align="left">string</td><td align="left">call end time</td></tr><tr><td align="left">——duration</td><td align="left">int</td><td align="left">call waiting time</td></tr><tr><td align="left">——billsec</td><td align="left">int</td><td align="left">call time</td></tr><tr><td align="left">——direction</td><td align="left">string</td><td align="left">call direction</td></tr><tr><td align="left">——callmethod</td><td align="left">int</td><td align="left">call method</td></tr><tr><td align="left">——userid</td><td align="left">string</td><td align="left">Custom parameter (user id)</td></tr><tr><td align="left">——memberid</td><td align="left">string</td><td align="left">Custom parameters (member id)</td></tr><tr><td align="left">——chengshudu</td><td align="left">string</td><td align="left">Custom parameters (maturity)</td></tr><tr><td align="left">——customuuid</td><td align="left">string</td><td align="left">Custom parameters (customer id)</td></tr><tr><td align="left">——recordfilename</td><td align="left">string</td><td align="left">call log file name</td></tr><tr><td align="left">——downloadip</td><td align="left">string</td><td align="left">download ip</td></tr><tr><td align="left">——hangupdirection</td><td align="left">int</td><td align="left">hang up directions</td></tr><tr><td align="left">——hangupcause</td><td align="left">int</td><td align="left">hang up reason</td></tr><tr><td align="left">——userkey</td><td align="left">string</td><td align="left">user button</td></tr></tbody></table>

#### Postman Example request parameters

![](https://doc-admin.infin8linx.com/uploads/202503/c65b2c52d15ac1a4f5775e9b19f9cfe5.jpg)

# Extension Manage - Extension checkout extension group

#### Interface Description

Check out the extension under the current user from the extension group

#### Request method

POST, form-data format

#### request parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th>parameter name</th><th>type</th><th>Is it necessary</th><th>illustrate</th></tr></thead><tbody><tr><td>service</td><td>string</td><td>yes</td><td>App.Sip\_Extgroup.DelExtnumber</td></tr><tr><td>token</td><td>string</td><td>yes</td><td>The token obtained through the authorization interface</td></tr><tr><td>name</td><td>string</td><td>yes</td><td>extension group name</td></tr><tr><td>extnumber</td><td>string</td><td>yes</td><td>Ext</td></tr></tbody></table>

#### Interface request example（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Extgroup.DelExtnumber',
        'token'     => 'ABCDEFG',
        'name'  => 'abcdefg',
        'extnumber'  => '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);
?>

```

#### return data structure example

```
{
    "ret": 200,
    "data": {
        "status": 0,
        "desc": "successfully deleted",
        "reqtime": 1581409508,
        "rsptime": 1581409508
    },
    "msg": ""
}

```

#### Return data field description

<table id="bkmrk-field-type-illustrat"><thead><tr><th>field</th><th>type</th><th>illustrate</th></tr></thead><tbody><tr><td>desc</td><td>string</td><td>return description</td></tr></tbody></table>

# Common API - Call recording download link interface

#### Interface Description

Get the download link for the call log file. At present, call recordings are saved for 3 months, and it is recommended to save them locally。

#### request parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th align="left">parameter name</th><th align="left">type</th><th align="left">Is it necessary</th><th align="left">illustrate</th></tr></thead><tbody><tr><td align="left">service</td><td align="left">string</td><td align="left">yes</td><td align="left">App.Sip\_Cdr.GetRecodeFile</td></tr><tr><td align="left">token</td><td align="left">string</td><td align="left">yes</td><td align="left">The token obtained through the authorization interface</td></tr><tr><td align="left">filename</td><td align="left">string</td><td align="left">yes</td><td align="left">The recording file name returned in the call recording callback</td></tr></tbody></table>

#### Interface request example（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);
?>


```

#### return data structure example

```
{
    "ret": 200,
    "data": {
        "status": 0,
        "desc": "get success",
        "result": {
            "downurl": "http://127.0.0.1:8080/abcdefg",
            "expiredtime": "Expiration time：2020-02-11 17:27:23"
        },
        "reqtime": 1581412943,
        "rsptime": 1581412943
    },
    "msg": ""
}


```

#### Return parameter description

<table id="bkmrk-parameter-name-type--1"><thead><tr><th align="left">parameter name</th><th align="left">type</th><th align="left">illustrate</th></tr></thead><tbody><tr><td align="left">result</td><td align="left">objest</td><td align="left">returned result set</td></tr><tr><td align="left">downurl</td><td align="left">string</td><td align="left">Call recording file download link</td></tr><tr><td align="left">expiredtime</td><td align="left">string</td><td align="left">Download link expiration time</td></tr></tbody></table>

# Single SMS Sending

### Request URL

```
https://{domain}/sms/send?spid=xx&pwd=xx&das=xx&timestamp=xx&sm=x

```

### Request Method

GET

### Parameter Description

<table id="bkmrk-field-type-name-desc"><thead><tr><th>Field</th><th>Type</th><th>Name</th><th>Description</th></tr></thead><tbody><tr><td>spid</td><td>string</td><td>Interface account</td><td></td></tr><tr><td>pwd</td><td>string</td><td>Encrypted password</td><td>**Important note 3**</td></tr><tr><td>das</td><td>string</td><td>Phone number</td><td>Must include international code, e.g., 0062</td></tr><tr><td>sm</td><td>string</td><td>Message content</td><td>Must be converted to hexadecimal (character length is based on original text)</td></tr><tr><td>timestamp</td><td>string</td><td>Current Unix timestamp (seconds)</td><td>Example: 1601028870</td></tr><tr><td>senderid</td><td>string</td><td>Optional</td><td>Field enabled for partners</td></tr></tbody></table>

### Response

```json
{
  "code": 0,
  "msg": "Success",
  "data": {
    "msgid": "100123",
    "parts": 1  //Current SMS calculated number of segments
  }
}

```

### Status Code (code) Description

- 0 -- Submission successful
- 101 -- Required fields cannot be empty (note request method is GET)
- 102 -- Verification failed (Unix timestamp is time zone independent, ensure error range \[-10s, 10s\])
- 103 -- spid does not exist
- 104 -- Password does not match (parameter must include timestamp)
- 105 -- No available channel (please contact administrator to confirm channel configuration)
- 106 -- Configuration error
- 107 -- Phone number is blacklisted
- 108 -- Content exceeds maximum character count
- 109 -- Parsing failed, please confirm interface parameters
- 110 -- Request IP restricted
- 111 -- Phone number sending restricted (too many attempts)
- 120 -- System error, please try again later (**Important note 1.1**)

# 3. SMS Record

### 3.1. Viewing Sending Status

Click the "Sending Details" menu to enter the sending status query interface. Query sending status through the following methods:

- Check the username and select a date range to view all sending records within the specified time period
- Enter the complete number in the number search box to query the sending status of a single number

[![m_57f3d57530009bbaeb5abf8ad8d788f5_r.png](https://document.infin8linx.com/uploads/images/gallery/2025-12/scaled-1680-/m-57f3d57530009bbaeb5abf8ad8d788f5-r.png)](https://document.infin8linx.com/uploads/images/gallery/2025-12/m-57f3d57530009bbaeb5abf8ad8d788f5-r.png)

[![m_c37cbe8d66133b61bd91544aee080191_r.png](https://document.infin8linx.com/uploads/images/gallery/2025-12/scaled-1680-/m-c37cbe8d66133b61bd91544aee080191-r.png)](https://document.infin8linx.com/uploads/images/gallery/2025-12/m-c37cbe8d66133b61bd91544aee080191-r.png)

### 3.2. Data Export

Click the "Export" button to export the current query results as a file. To export specific types of SMS records (such as OTP verification code SMS), select the corresponding account in the sending channel options before executing the export operation.

[![m_a9ea72c3fb72b76f7c7e956d2fb85513_r.png](https://document.infin8linx.com/uploads/images/gallery/2025-12/scaled-1680-/m-a9ea72c3fb72b76f7c7e956d2fb85513-r.png)](https://document.infin8linx.com/uploads/images/gallery/2025-12/m-a9ea72c3fb72b76f7c7e956d2fb85513-r.png)

[![m_ccb225906ab0db56ba16062c1a682d47_r.png](https://document.infin8linx.com/uploads/images/gallery/2025-12/scaled-1680-/m-ccb225906ab0db56ba16062c1a682d47-r.png)](https://document.infin8linx.com/uploads/images/gallery/2025-12/m-ccb225906ab0db56ba16062c1a682d47-r.png)

# Extension call state callback parameters

#### Description

To call back the call status of an extension, you need to configure a callback address for the corresponding account. Callback address configuration for extension call status: The customer provides an interface address that can receive json data, which can be configured by us or by the customer in the background.

#### Extension call status callback data format

```
{
"buuid":"526d643a-e8fe-11ea-a84a-cf6e45e88543",
"callee":"87847569524",
"caller":"90240005",
"companycode":"9024",
"customuuid":"123Abc",
"direction":"callout",
"disnumber":"2190240001",
"extnumber":"90240005",
"isbleg":"false",
"method":"3",
"starttime":"1598598959",
"status":"ring",
"type":"call",
"uuid":"526d637c-e8fe-11ea-a849-cf6e45e88543"
}


```

#### Explanation of extension call status callback parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th align="left">parameter name</th><th align="left">type</th><th align="left">illustrate</th></tr></thead><tbody><tr><td align="left">buuid</td><td align="left">string</td><td align="left">The uuid of the called number on side b of the call</td></tr><tr><td align="left">callee</td><td align="left">int</td><td align="left">called number</td></tr><tr><td align="left">caller</td><td align="left">int</td><td align="left">calling number</td></tr><tr><td align="left">companycode</td><td align="left">int</td><td align="left">The company id corresponding to the account</td></tr><tr><td align="left">customuuid</td><td align="left">string</td><td align="left">Custom parameter - customer id</td></tr><tr><td align="left">direction</td><td align="left">string</td><td align="left">Call direction: 1. Incoming; 2. Outgoing;</td></tr><tr><td align="left">disnumber</td><td align="left">int</td><td align="left">Destination number to call</td></tr><tr><td align="left">extnumber</td><td align="left">int</td><td align="left">Ext</td></tr><tr><td align="left">isbleg</td><td align="left">string</td><td align="left">true is ringing on the mobile phone side; false is ringing on the seat side;</td></tr><tr><td align="left">method</td><td align="left">string</td><td align="left">Call method: 0, unlimited; 1, mutual extension dial; 2, extension direct dial; 3, API call (default); 4, API double call; 5, predictive outbound call; 6, IVR/group call.</td></tr><tr><td align="left">starttime</td><td align="left">string</td><td align="left">call time</td></tr><tr><td align="left">status</td><td align="left">string</td><td align="left">call type</td></tr><tr><td align="left">type</td><td align="left">string</td><td align="left">call type</td></tr><tr><td align="left">uuid</td><td align="left">string</td><td align="left">call uuid</td></tr></tbody></table>

# 获取模板详情

### 域名

- https://api.incsapp.com

### 请求路由

- /external/templates/rcs/{template\_id}

### 请求方式

- **GET**

### 请求头

- certification-code: f484bd42-4a0c-39d....

### 请求参数

- 无

### 响应

#### 成功响应示例

```json
{
    "status": "success",
    "code": 200,
    "message": "",
    "data": {
        "template_id": "2217670951241515121",
        "name": "api_4_standalone_image",
        "type": "richcard",
        "category": "PROMOTION",
        "status": "APPROVED",
        "content": {
            "orientation": "VERTICAL",
            "height": "SHORT",
            "standaloneCard": {
                "cardTitle": "Keep calm & BAT on!",
                "cardDescription": "Dear [name], time to participate in lucky draw and win prizes",
                "mediaUrl": "https://incs-test.oss-ap-southeast-1.aliyuncs.com/chat/videos/6943e9cea07d7.mp4",
                "thumbnailUrl": "",
                "suggestions": [
                    {
                        "suggestionType": "reply",
                        "text": "Avail offer [offer_name]",
                        "postbackData": "offer_reply"
                    }
                ]
            }
        },
        "created_time": 1767095125,
        "updated_time": 1767337727,
        "status_updated_time": 1767337724
    },
    "error": {}
}

```

#### 失败响应示例

```json
{
    "status": "error",
    "code": 400,
    "message": "The template is not found.",
    "data": {},
    "error": {}
}

```

# 上传录音文件

1.登录语音后台 → 进入 **「语音」** → **「语音资源」** → **「录音文件」**

2.点击 **「添加」**

[![](https://document.infin8linx.com/uploads/images/gallery/2026-04/scaled-1680-/image-1777346412470.png)](https://document.infin8linx.com/uploads/images/gallery/2026-04/image-1777346412470.png)

3.填写录音文件信息：

名称：输入录音名称（例：2026年1月促销活动）

录音文件：点击 **「选择文件」**，上传已录制好的 MP3 格式音频文件

⚠️ 文件要求：

格式：仅支持 .mp3

时长：建议 ≤30 秒

文件大小：建议 ≤1 MB

上传完成后，点击 **「确认」**，录音即存入模板库，可在创建外呼任务时调用。

# Delete a Template

## Request

### API Domain

- https://api.incsapp.com

### API Route

- /external/templates/rcs/{template\_id}

### Method

- **DELETE**

### Headers

- certification-code: f484bd42-4a0c-39d....

### Parameters

-

## Response

### Sample Successful Response

```json
{
    "status": "success",
    "code": 200,
    "message": "",
    "data": {},
    "error": {}
}

```

### Sample Error Response

```json
{
    "status": "error",
    "code": 404,
    "message": "The template is not found.",
    "data": {},
    "error": {}
}

```

# 分机组通话统计

本文档详细介绍了“分机组通话统计”功能。该页面是分机组管理员的核心工作视图，用于查看其管辖范围内所有分机的聚合通话数据。

> ⚠️ 权限说明
> 
> 超级管理员：可见系统中所有分机组的统计数据。
> 
> 组管理员：仅可见其被授权的单个分机组数据（列表中通常只显示一行），且无法切换或查看其他组。
> 
> 普通坐席：无此页面访问权限

### 功能概述

分机组通话统计模块将“分机组”作为第一维度的统计对象。系统自动聚合组内所有分机的通话记录，生成多维度的报表与图表。

**核心价值：** 帮助部门经理/组长快速掌握本团队的整体话务负载、服务质量（接通率、平均时长）及人员绩效排行，无需手动筛选每个分机。

**数据隔离：** 页面所有数据（概览、图表、明细、导出）均严格限制在当前用户所属的分机组范围内，不可跨组查看。

### 功能入口

登录呼叫中心控制台。在左侧导航栏选择 **语音 &gt; 分机管理 &gt; 分机组统计（或 报表中心 &gt; 分机组维度）**。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1774427581979.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1774427581979.png)

> 注：普通坐席无此菜单；超级管理员可见全量数据；组管理员仅见本组数据。

#### 查看分机组通话概览

在分机组统计列表页面顶部提供针对“分机组”维度的组合筛选条件：

分机组选择（核心字段）：

- 超级管理员：下拉列表显示系统中所有分机组，支持多选或单选，也可选择“全部”查看全局汇总。

时间范围：支持自定义起止时间。

点击 **查询** 刷新数据。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1774430409082.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1774430409082.png)

- **分机数：** 分机组内的分机数量。
- **呼叫总数：** 该分机组内所有分机呼叫的总数量。
- **已接通次数：** 组内所有分机成功接通的通话总数。
- **未接通次数：** 组内所有分机未接通的通话总数。
- **接通率 ：** (已接通次数 / 呼叫总数) × 100%。
- **总通话时长 ：** 组内所有成功接通通话累计时长之和。

#### 查看分机组通话详情

1.在分机组统计列表页面，点击需要查看详情的分机组操作列的**详情**按钮

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1774428659316.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1774428659316.png)

2.在弹出的分机组通话详情页面我们可以看到分机组内各个分机的通话数据概览。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1774428803743.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1774428803743.png)

#### 查看分机通话详情

1.在分机组通话详情页面，点击需要查看的分机操作列**通话详情**按钮。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1774428987716.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1774428987716.png)

2.在弹出的通话详情对话框，可以查看分机每通电话的呼叫数据。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1774429398623.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1774429398623.png)

#### 数据导出

在分机组统计列表，设置查询范围，点击**导出** 按钮，浏览器自动触发下载。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1774430022084.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1774430022084.png)

**导出范围：** 导出当前筛选条件下（受分机组权限限制）的所有明细数据。

**权限控制：**

- 组管理员：导出的文件中仅包含本组数据，且敏感字段（如手机号）根据权限策略自动脱敏。
- 超级管理员：可导出全量数据，并可选择按“分机组”列进行透视分类。

**格式：** 支持 CSV 格式。

**跨组不可见：** 在“明细列表”中，无法搜索到非本组的分机号或对端号码（若对端号码也受隐私策略保护）。

# Extension Group Call Statistics

This document provides a detailed introduction to the "Extension Group Call Statistics" feature. This page serves as the core workspace for Extension Group Administrators, enabling them to view aggregated call data for all extensions within their jurisdiction.

> ⚠️ Permission Description
> 
> **Super Administrator:** Has access to statistical data for all extension groups within the system.
> 
> **Group Administrator:** Can only view data for their specifically authorized extension group (typically displaying only a single row in the list) and cannot switch to or view other groups.
> 
> **Regular Agent:** No access to this page.

The Extension Group Call Statistics module uses the "Extension Group" as its primary dimension for statistical analysis. The system automatically aggregates call records for all extensions within a group to generate multi-dimensional reports and charts.

**Core Value:** Helps Department Managers and Team Leaders quickly grasp their team's overall call traffic load, service quality metrics (e.g., Answer Rate, Average Handling Time), and agent performance rankings, without the need to manually filter each individual extension.

**Data Isolation:** All data on this page (including overviews, charts, detailed records, and exports) is strictly restricted to the user's assigned extension group. Cross-group viewing is not permitted.

### Feature Access

Log in to the Call Center Console. In the left navigation pane, select **Voice &gt; Agents &gt; Group Statistics**.

[![](https://document.infin8linx.com/uploads/images/gallery/2026-06/scaled-1680-/image-1782289388338.png)](https://document.infin8linx.com/uploads/images/gallery/2026-06/image-1782289388338.png)

> Note: Regular Agents do not have access to this menu. Super Administrators can view all data, while Group Administrators can only view data for their own group.

### View Extension Group Call Overview

At the top of the Extension Group Statistics list page, combined filter conditions for the "Extension Group" dimension are provided:

Extension Group Selection (Core Field):

- Super Administrators: The drop-down list displays all extension groups in the system. You can select one or multiple groups, or choose "All" to view the global summary.

Time Range: Custom start and end times are supported.

Click **Search** to refresh the data.

[![](https://document.infin8linx.com/uploads/images/gallery/2026-06/scaled-1680-/image-1782289472387.png)](https://document.infin8linx.com/uploads/images/gallery/2026-06/image-1782289472387.png)

- **Extension Count:** The number of extensions within the extension group.
- **Total Calls:** The total number of calls made by all extensions within this extension group.
- **Answered Calls:** The total number of successfully answered calls by all extensions within the group.
- **Missed Calls:** The total number of unanswered calls by all extensions within the group.
- **Answer Rate:** (Answered Calls / Total Calls) × 100%.
- **Total Talk Time:** The sum of the duration of all successfully answered calls within the group.

#### View Extension Group Call Details

1.On the Extension Group Statistics list page, click the **Detail** button in the Actions column for the specific extension group you want to view.

[![](https://document.infin8linx.com/uploads/images/gallery/2026-06/scaled-1680-/image-1782289568677.png)](https://document.infin8linx.com/uploads/images/gallery/2026-06/image-1782289568677.png)

2.In the pop-up Extension Group Call Details page, you can view an overview of the call data for each extension within the group.

[![](https://document.infin8linx.com/uploads/images/gallery/2026-06/scaled-1680-/image-1782289641498.png)](https://document.infin8linx.com/uploads/images/gallery/2026-06/image-1782289641498.png)

#### View Extension Call Details

1.On the Extension Group Call Details page, click the **Call Details** button in the Actions column for the specific extension you want to view.

[![](https://document.infin8linx.com/uploads/images/gallery/2026-06/scaled-1680-/image-1782289696137.png)](https://document.infin8linx.com/uploads/images/gallery/2026-06/image-1782289696137.png)

2.In the pop-up Call Details dialog box, you can view the call data for each individual call of the extension.

[![](https://document.infin8linx.com/uploads/images/gallery/2026-06/scaled-1680-/image-1782289817251.png)](https://document.infin8linx.com/uploads/images/gallery/2026-06/image-1782289817251.png)

#### Data Export

On the Extension Group Statistics list page, set the query range and click the **Export** button to automatically trigger a download in your browser.

[![](https://document.infin8linx.com/uploads/images/gallery/2026-06/scaled-1680-/image-1782289869689.png)](https://document.infin8linx.com/uploads/images/gallery/2026-06/image-1782289869689.png)

**Export Scope:** Exports all detailed records under the current filter criteria (subject to extension group permission restrictions).

**Permission Control:**

- **Group Administrators:** The exported file contains only data for their own group. Sensitive fields (e.g., phone numbers) are automatically masked based on permission policies.
- **Super Administrators:** Can export all data and optionally categorize it by pivoting on the "Extension Group" column.

**Format:** CSV format is supported.

**Cross-Group Invisibility:** In the detailed list, it is not possible to search for extension numbers or peer numbers (if protected by privacy policies) that do not belong to the current group.

# Upload Audio File

1.Log in to the Voice Backend → Go to Voice &gt; Voice Resources &gt; Audio Files.

2.Click Add.

Fill in Audio File Information:

- **Name:** Enter the audio file name (e.g., Jan 2026 Promotional Campaign).
- **Audio File:** Click Select File to upload a pre-recorded MP3 audio file.

⚠️ File Requirements:

- **Format:** Only .mp3 format is supported.
- **Duration:** Recommended ≤ 30 seconds.
- **File Size:** Recommended ≤ 1 MB.

After the upload is complete, click Confirm. The audio file will be saved to the template library and can be used when creating an outbound call task.

# Call Roster Management

### Overview

The **Call Roster Management** module is used to centrally manage customer phone number data for automatic outbound call tasks. By uploading standardized phone number files, the system automatically validates the phone number format and generates call rosters, ensuring efficient and accurate execution of outbound call tasks.

#### Accessing the Feature

After logging in to the Call Center platform, navigate to **Voice** &gt; **Auto Outbound Calls** &gt; **Task Roster**.

#### Add a Call Roster

1. On the **Task Roster** page, click **Add**.
2. In the dialog box, enter the roster information.

- **Roster Name:** Enter a roster name (e.g., **January 2026 Promotional Campaign**).
- **Upload Phone Number File:** In the **Phone Number File** section, click **Download Template** to download the standard template, then complete the file according to the following requirements:
    
    
    - Enter phone numbers without the country code prefix (e.g., for Indonesian phone numbers, enter **87630021323**).
    - Only **.xlsx** (Microsoft Excel Workbook) files are supported.

After completing the template, click **Select File** to upload the completed file.

After the file is uploaded successfully, the system automatically validates the phone number format.

#### Edit a Call Roster

1. On the **Call Roster** page, locate the target roster and click **Edit** in the **Actions** column.
2. In the dialog box, modify the roster name or description.
3. After confirming that all information is correct, click **Confirm** to update the roster information.

#### Delete a Call Roster

1. On the **Call Roster** page, locate the target roster and click **Delete** in the **Actions** column.
2. In the confirmation dialog box, click **Confirm** to permanently delete the roster.

# Analytics Report

This document provides a detailed introduction to the report statistics feature within the Speech Analytics module. This module helps administrators comprehensively grasp call quality inspection status, quickly identify high-intent customers and items requiring follow-up, and optimize business strategies through visual data overviews, trend analysis, and detailed queries.

## Feature Overview

The Analytics Report is a window for aggregating and analyzing data from completed quality inspection tasks. Based on keyword matching rules, the system automatically categorizes recordings into classes such as "Voicemail", "High Intent", and "Callback Required". It also provides multi-dimensional filtering and export functions to support managers in quantitatively evaluating business results.

## Access

1. Log in to the backend management system.
2. In the left navigation bar, select **Speech Analytics &gt; Analytics Report** to enter the report viewing page.

## Feature Introduction

### 1. Data Overview

The top of the page displays a summary of core metrics for the current statistical period, helping administrators quickly understand the overall business status:

- **Total**: The total number of recordings successfully transcribed and participating in quality inspection within the statistical period.
- **Voicemail**: The number of recordings that matched "Voicemail/Message" keywords.
- **High Intent**: The number of recordings that matched "High Intent" keywords (e.g., purchase, price, cooperation), usually representing potential business opportunities.
- **Callback Required**: The number of recordings that matched "Callback Required" keywords (e.g., call back later, in a meeting), indicating a need for manual follow-up.
- **Others**: The number of remaining recordings that do not belong to the above three categories (Calculation formula: Total - Voicemail - High Intent - Callback Required).

### 2. Filtering and Time Control

The top of the report provides flexible time filtering tools, supporting custom viewing of data performance for specific time periods:

- **Date Range**: Click the calendar icon to select the start and end dates.
- **Quick Options**: Provides **Last 7 Days** and **Last 30 Days** quick switch buttons.
- **Refresh**: Click the **Refresh** button to reload the latest statistical data.

### 3. Call Quality Inspection Trends

This area displays daily data trends in a table format, supporting daily monitoring of business fluctuations. Hover over the header icons to view specific metric definitions:

<table id="bkmrk-metric-name-definiti"><thead><tr><th align="left">Metric Name</th><th align="left">Definition</th></tr></thead><tbody><tr><td align="left">**Date**</td><td align="left">The specific date of data statistics.</td></tr><tr><td align="left">**Total**</td><td align="left">The total number of successfully transcribed recording records within the statistical period.</td></tr><tr><td align="left">**Voicemail**</td><td align="left">The number of customer messages/voicemails among successfully transcribed recordings.</td></tr><tr><td align="left">**High Intent**</td><td align="left">The number of recordings matching high-intent keywords among successfully transcribed recordings.</td></tr><tr><td align="left">**Callback Required**</td><td align="left">The number of recordings requiring agent callback among successfully transcribed recordings.</td></tr><tr><td align="left">**Others**</td><td align="left">The number of recordings not belonging to Voicemail/High Intent/Callback Required among successfully transcribed recordings.</td></tr></tbody></table>

### 4. Quality Inspection Alert Details

The bottom of the page provides a detailed list for key business scenarios (High Intent / Callback Required), supporting precise positioning of recordings that need attention:

- **Search Criteria**: 
    - **Agent**: Enter or select a specific agent account for filtering.
    - **Callee Number**: Enter a customer phone number for exact search.
    - **Matched Tag**: Dropdown to select specific quality inspection tag types.
- **Operation Functions**: 
    - **Search/Reset**: Execute query or clear filter criteria.
    - **Export**: Export the current query results to a file for offline statistics or reporting.
- **List Fields**: Includes detailed information such as Extension Number, Callee Number, Call Duration, Matched Tag, and Matched Channel.

> ⚠️ **Note:**The accuracy of report data depends on the execution status of "Analytics Tasks". Only data from tasks with a status of "Completed" will be included in the statistics; data from tasks that are running or failed will not be reflected in the report in real-time.

# 挂机短信发送记录

#### **请求URL**

- `https://{domain}/hangupSms/smsRecords`

#### **请求方式**

- POST

#### **请求参数**

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E5%BF%85%E9%80%89-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-appid-%E6%98%AF"><thead><tr><th align="left">参数名</th><th align="left">必选</th><th align="left">类型</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">appid</td><td align="left">是</td><td align="left">string</td><td align="left">鉴权 appid</td></tr><tr><td align="left">accesskey</td><td align="left">是</td><td align="left">string</td><td align="left">鉴权 accesskey</td></tr><tr><td align="left">taskId</td><td align="left">是</td><td align="left">string</td><td align="left">任务Id</td></tr><tr><td align="left">page</td><td align="left">否</td><td align="left">string</td><td align="left">当前页码</td></tr><tr><td align="left">pageSize</td><td align="left">否</td><td align="left">string</td><td align="left">每页的显示的条数</td></tr></tbody></table>

#### **请求示例**

```
{   
    "appid":"xxx",
    "accesskey":"xxx",
    "taskId":"45423458"
}

```

#### **返回示例**

```
{
    "code": 0,
    "msg": "operation succeeded",
    "data": {
        "task": {
            "id": 4558,
            "name": "test11323"
        },
        "total": 1,
        "list": [
            {
                "id": 39081067,
                "destnumber": "8222xxxx998",
                "trigger_type": "no_answer",
                "message_id": 214xxx647,
                "send_status": 4
            }
        ]
    }
}

```

#### **返回参数说明**

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-code-int-%E8%BF%94"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">code</td><td align="left">int</td><td align="left">返回码 0 成功 其他为失败</td></tr><tr><td align="left">msg</td><td align="left">string</td><td align="left">返回信息</td></tr><tr><td align="left">data</td><td align="left">object</td><td align="left">返回数据</td></tr></tbody></table>

# 短信回执状态查询（推送）

### 1 短信回执状态查询

#### 请求URL

```
https://{domain}/sms/state?spid=xx&pwd=xx&timestamp=xx&msgid=xx

```

#### 请求方法

GET

#### 参数说明

<table id="bkmrk-%E5%AD%97%E6%AE%B5-%E7%B1%BB%E5%9E%8B-%E5%90%8D%E7%A7%B0-%E8%AF%B4%E6%98%8E-spid-str"><thead><tr><th>字段</th><th>类型</th><th>名称</th><th>说明</th></tr></thead><tbody><tr><td>spid</td><td>string</td><td>接口账号</td><td></td></tr><tr><td>pwd</td><td>string</td><td>密码</td><td>[接口说明3](/books/message-cn-api/page/4f6ff "接口说明")</td></tr><tr><td>timestamp</td><td>string</td><td>当前Unix timestamp（秒）</td><td>例： 1601028870</td></tr><tr><td>msgid</td><td>string</td><td>消息ID（单次不超过100个）</td><td>查询多个回执可用逗号连接如:100123,100124</td></tr></tbody></table>

#### 响应

```json
{
  "code": 0,
  "msg": "Success",
  "data": [{
    "msgid": "100123",
    "state": 0
  }]
}

```

#### 回执状态说明

state 0-无回执(已提交通道)，1-回执成功，2-回执失败

### 2 短信回执状态推送

#### 接口说明

通道返回回执后，通过配置的url通知客户短信回执内容，如需要可将url告诉我们进行配置

#### 请求URL

```
http(s)://{your_callback_url}?msgid=36160109669&das=628131565746&state=1

```

#### 请求方法

GET

#### 参数说明

- msgid 消息ID
- state 0-无回执(已提交通道)，1-回执成功，2-回执失败

# 通用API - 录音识别结果

#### 接口说明

客户主动获取录音识别接口。

#### 请求方式

POST，form-data格式

#### 获取通话记录接口请求参数

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E6%98%AF%E5%90%A6%E5%BF%85%E9%A1%BB-%E8%AF%B4%E6%98%8E-servi"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">是否必须</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">service</td><td align="left">string</td><td align="left">是</td><td align="left">App.Sip\_Cdr.GetAsrRecord</td></tr><tr><td align="left">token</td><td align="left">string</td><td align="left">是</td><td align="left">通过授权接口获取的token</td></tr><tr><td align="left">starttime</td><td align="left">string</td><td align="left">是</td><td align="left">起始时间，格式：yyyy-mm-dd hh:mm:ss，最长31天</td></tr><tr><td align="left">endtime</td><td align="left">string</td><td align="left">是</td><td align="left">结束时间，格式：yyyy-mm-dd hh:mm:ss，最长31天</td></tr><tr><td align="left">cdrid</td><td align="left">int</td><td align="left">否</td><td align="left">CDR记录ID</td></tr><tr><td align="left">calluuid</td><td align="left">int</td><td align="left">否</td><td align="left">通话UUID</td></tr><tr><td align="left">calleenumber</td><td align="left">int</td><td align="left">否</td><td align="left">被叫号码</td></tr><tr><td align="left">callstatus</td><td align="left">string</td><td align="left">否</td><td align="left">通话识别状态：0待处理、1处理中、2成功、3失败、4跳过、5部分成功</td></tr><tr><td align="left">voicemailstatus</td><td align="left">string</td><td align="left">否</td><td align="left">0未知、1正常通话、2语音信箱</td></tr><tr><td align="left">currentpage</td><td align="left">int</td><td align="left">是</td><td align="left">页数，默认：1</td></tr><tr><td align="left">itemsperpage</td><td align="left">int</td><td align="left">是</td><td align="left">每页数量，默认：10，最小：1；最大：1000</td></tr></tbody></table>

#### 获取通话记录接口请求示例（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Cdr.GetAsrRecord',
        'token'     => 'ABCDEFG',
        'starttime'  => '2019-01-12 00:00:00',
        'endtime'    => '2020-12-12 00:00:00',
        'cdrid'  => 3
        'calluuid'   => 3,
        '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);
?>


```

#### 返回数据结构示例

```
{
    "status": 0,
    "desc": "成功",
    "result": {
      "totalitems": 1,
      "currentpage": 1,
      "itemsperpage": 20,
      "asrrecords": [
        {
          "id": 111,
          "cdrid": 6,
          "calluuid": "5adf71c4-bee0-11f0-8eb3-811da796b819",
          "calleenumber": "8179032525",
          "record_file":"",
          
          "preduration": 11,
          "prestatus": 3,
          "pretext": "",
  
  
          "callduration": 90,
          "callstatus": 2,
          "lefttext": "左声道识别文本",
          "righttext": "右声道识别文本",
  
          "voicemailstatus": 1,
          "voicemailevidence": null,
          "voicemailclassifiedat": null,
  
          "createdat": "2025-11-12 01:25:25"
        }
      ]
    }
}


```

#### 返回参数说明

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-result-obj"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">result</td><td align="left">objest</td><td align="left">返回的结果集</td></tr><tr><td align="left">—totalitems</td><td align="left">int</td><td align="left">记录总数</td></tr><tr><td align="left">—currentpage</td><td align="left">int</td><td align="left">当前页码</td></tr><tr><td align="left">—itemsperpage</td><td align="left">int</td><td align="left">每页数量</td></tr><tr><td align="left">—asrrecords</td><td align="left">array</td><td align="left">记录数组</td></tr><tr><td align="left">——id</td><td align="left">int</td><td align="left">记录id</td></tr><tr><td align="left">——cdrid</td><td align="left">string</td><td align="left">通话id</td></tr><tr><td align="left">——calluuid</td><td align="left">string</td><td align="left">呼叫uuid</td></tr><tr><td align="left">——calleenumber</td><td align="left">string</td><td align="left">目标号码</td></tr><tr><td align="left">——preduration</td><td align="left">string</td><td align="left">等待时长</td></tr><tr><td align="left">——prestatus</td><td align="left">string</td><td align="left">前置识别状态</td></tr><tr><td align="left">——pretext</td><td align="left">string</td><td align="left">前置文本</td></tr><tr><td align="left">——callduration</td><td align="left">string</td><td align="left">通话时间</td></tr><tr><td align="left">——callstatus</td><td align="left">int</td><td align="left">识别状态</td></tr><tr><td align="left">——lefttext</td><td align="left">int</td><td align="left">左侧识别文本</td></tr><tr><td align="left">——righttext</td><td align="left">string</td><td align="left">右侧识别文本</td></tr><tr><td align="left">——voicemailstatus</td><td align="left">int</td><td align="left">0未知、1正常通话、2语音信箱</td></tr><tr><td align="left">——voicemailevidence</td><td align="left">string</td><td align="left">分类命中的文本关键词</td></tr><tr><td align="left">——voicemailclassifiedat</td><td align="left">string</td><td align="left">质检时间</td></tr><tr><td align="left">——createdat</td><td align="left">string</td><td align="left">识别时间</td></tr></tbody></table>

# 语音文件管理 - 播放语音文件

#### 接口说明

当有新增分机或是分机进行调整后出现异常时，可以通过该接口清除Token后，再重新获取Token继续操作。

#### 请求方式

POST，form-data格式

#### 请求参数

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E6%98%AF%E5%90%A6%E5%BF%85%E9%A1%BB-%E8%AF%B4%E6%98%8E-servi"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">是否必须</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">service</td><td align="left">string</td><td align="left">是</td><td align="left">App.Sip\_Voice.GetAudio</td></tr><tr><td align="left">token</td><td align="left">string</td><td align="left">是</td><td align="left">Token字符串</td></tr><tr><td align="left">id</td><td align="left">int</td><td align="left">是</td><td align="left">语音记录ID</td></tr><tr><td align="left">download</td><td align="left">int</td><td align="left">否</td><td align="left">0:在线播放（默认）、1:下载文件</td></tr></tbody></table>

#### 接口请求示例（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => ' App.Sip_Voice.GetAudio',
        'token'     => 'ABCDEFG',
        'id'     => '111',
    ];
    $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": ""
}

```

# RCS 号码检查

### 域名

- https://chat-api.incsapp.com

### 请求路由

- /external/phones/rcs/capabilities

### 请求方式

- **POST**

### 请求头

- Content-Type: application/json
- certification-code: af92196e-0d07-3c1d-a631-a71c...

### 请求限流

- 单 Sender 最大 **1 rps** (每秒1请求)

### 请求参数

#### 请求参数列表

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E5%BF%85%E5%A1%AB-%E6%8F%8F%E8%BF%B0-phone_n"><thead><tr><th>参数名</th><th>类型</th><th>必填</th><th>描述</th></tr></thead><tbody><tr><td>phone\_numbers</td><td>array</td><td>是</td><td>要检查的号码数组，号码数量必须在500到5000范围内，号码格式必须是国家码+手机号的纯数字格式，如 "8526841511234"</td></tr></tbody></table>

#### 请求示例

```json
{
    "phone_numbers": [
        "62815111xxxxx",
        "62815222xxxxx",
        "62815333xxxxx",
        ...
    ]
}

```

### 响应

#### 成功响应示例

返回传入的号码中支持rcs功能的号码列表

```json
{
    "status": "success",
    "code": 200,
    "message": "",
    "data": {
        "reachable": [
            "6281185xxxxx",
            "6281199xxxxx",
            "6281214xxxxx",
            ...
        ]
    },
    "error": {}
}

```

#### 失败响应示例

```json
{
    "status": "error",
    "code": 10004,
    "message": "Bulk capability check requires between 500 and 5000 phone numbers.",
    "data": {},
    "error": {
        "message": "Bulk capability check requires between 500 and 5000 phone numbers."
    }
}

```

# INCS 消息回调

### 回调说明

- INCS 定义的消息格式
- 使用INCS工作台接收和回复消息时，可以设置该回调

### 回调请求方式

- **POST**

### 回调内容

- 回调分为 **消息创建** 和 **消息状态更新** 回调

#### 1. 消息创建（message\_created）

##### 参数说明

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E5%BF%85%E4%BC%A0-%E6%8F%8F%E8%BF%B0-event-s"><thead><tr><th>参数名</th><th>类型</th><th>必传</th><th>描述</th></tr></thead><tbody><tr><td>event</td><td>string</td><td>是</td><td>此处为 "message\_created"，发送和接收消息时触发该回调</td></tr><tr><td>message</td><td>object</td><td>是</td><td>INCS 定义的消息格式</td></tr></tbody></table>

##### message 结构说明

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E5%BF%85%E4%BC%A0-%E6%8F%8F%E8%BF%B0-id-bigi"><thead><tr><th>参数名</th><th>类型</th><th>必传</th><th>描述</th></tr></thead><tbody><tr><td>id</td><td>bigint</td><td>是</td><td>INCS 消息id</td></tr><tr><td>auth\_id</td><td>int</td><td>是</td><td>INCS 消息通道id</td></tr><tr><td>conversation\_id</td><td>int</td><td>是</td><td>INCS 会话id</td></tr><tr><td>session\_type</td><td>int</td><td>是</td><td>INCS 会话类型：1单聊，2群聊</td></tr><tr><td>sender</td><td>string</td><td>是</td><td>INCS 发信人，若是whatsapp用户则为手机号，若是客服则为客服账号</td></tr><tr><td>receiver</td><td>string</td><td>是</td><td>INCS 收信人，若是whatsapp用户则为手机号，若是客服则为客服账号</td></tr><tr><td>type</td><td>int</td><td>是</td><td>INCS 定义的消息类型，见下述</td></tr><tr><td>custom\_type</td><td>int</td><td>是</td><td>INCS 定义的自定义消息类型，type为110时有值</td></tr><tr><td>custom\_id</td><td>bigint</td><td>是</td><td>INCS 定义的自定义消息关联id</td></tr><tr><td>channel\_msg\_id</td><td>string</td><td>是</td><td>消息通道回传的id</td></tr><tr><td>channel\_status</td><td>int</td><td>是</td><td>发出去的消息状态：0 created, 1 sent, 2 failed, 3 delivered, 4 read</td></tr><tr><td>content</td><td>string</td><td>是</td><td>信息体json</td></tr><tr><td>error</td><td>string</td><td>是</td><td>错误信息</td></tr><tr><td>source</td><td>int</td><td>是</td><td>消息发送方式：0 INCS，1 API</td></tr><tr><td>created\_at</td><td>datetime string</td><td>是</td><td>消息创建时间，ISO 8601 格式</td></tr><tr><td>updated\_at</td><td>datetime string</td><td>是</td><td>消息更新时间，ISO 8601 格式</td></tr></tbody></table>

##### 消息类型（type）

<table id="bkmrk-%E6%9E%9A%E4%B8%BE%E5%80%BC-%E6%8F%8F%E8%BF%B0-101-%E6%96%87%E6%9C%AC%E6%B6%88%E6%81%AF-102-"><thead><tr><th>枚举值</th><th>描述</th></tr></thead><tbody><tr><td>101</td><td>文本消息</td></tr><tr><td>102</td><td>图片消息</td></tr><tr><td>103</td><td>音频消息</td></tr><tr><td>104</td><td>视频消息</td></tr><tr><td>105</td><td>文件消息</td></tr><tr><td>110</td><td>自定义消息</td></tr></tbody></table>

##### 自定义消息类型（custom\_type）

<table id="bkmrk-%E6%9E%9A%E4%B8%BE%E5%80%BC-%E6%8F%8F%E8%BF%B0-11002-whatsap"><thead><tr><th>枚举值</th><th>描述</th></tr></thead><tbody><tr><td>11002</td><td>whatsapp 模板消息</td></tr><tr><td>11006</td><td>whatsapp 回复按钮</td></tr><tr><td>11008</td><td>viber otp</td></tr><tr><td>11009</td><td>rcs 模板消息</td></tr><tr><td>11010</td><td>rcs 建议回复</td></tr></tbody></table>

##### message 内容示例

###### 1.1. 101 文本消息

```json
{
    "event": "message_created",
    "message": {
        "id": 260400000076,
        "auth_id": 30058,
        "conversation_id": 979,
        "session_type": 1,
        "sender": "6281519140327",
        "receiver": "incs_1",
        "type": 101,
        "custom_type": 0,
        "custom_id": 0,
        "channel_msg_id": "wamid.HBgNNjI4MTUxOTE0MDMyNxUCABIYIEFDQTgwMEZCMUFERjZDQzhDNUVDQzM0Qzg2Qjg0QkI0AA==",
        "channel_status": 0,
        "content": {
            "content": "Hi"
        },
        "error": "",
        "source": 0,
        "created_at": "2026-04-07T12:02:55.000000Z",
        "updated_at": "2026-04-07T12:02:55.000000Z"
    }
}

```

###### 1.2. 102 图片消息

```json
{
    "event": "message_created",
    "message": {
        "id": 260400000079,
        "auth_id": 30058,
        "conversation_id": 979,
        "session_type": 1,
        "sender": "incs_1",
        "receiver": "6281519140327",
        "type": 102,
        "custom_type": 0,
        "custom_id": 0,
        "channel_msg_id": "wamid.HBgNNjI4MTUxOTE0MDMyNxUCABEYEjI2NjgxQjgwMzkyRTQxMzQyMAA=",
        "channel_status": 1,
        "content": {
            "sourcePath": "https://incs-test.oss-ap-southeast-1.aliyuncs.com/chat/images/69d4fca3eede4.png",
            "sourcePicture": {
                "uuid": "rc-upload-1775565512163-6",
                "type": "image/png",
                "size": 806876,
                "width": 864,
                "height": 864,
                "url": "https://incs-test.oss-ap-southeast-1.aliyuncs.com/chat/images/69d4fca3eede4.png"
            },
            "bigPicture": {
                "uuid": "rc-upload-1775565512163-6",
                "type": "image/png",
                "size": 806876,
                "width": 864,
                "height": 864,
                "url": "https://incs-test.oss-ap-southeast-1.aliyuncs.com/chat/images/69d4fca3eede4.png"
            },
            "snapshotPicture": {
                "uuid": "rc-upload-1775565512163-6",
                "type": "image/png",
                "size": 806876,
                "width": 864,
                "height": 864,
                "url": "https://incs-test.oss-ap-southeast-1.aliyuncs.com/chat/images/69d4fca3eede4.png"
            }
        },
        "error": "",
        "source": 0,
        "created_at": "2026-04-07T12:46:29.000000Z",
        "updated_at": "2026-04-07T12:46:30.000000Z"
    }
}

```

###### 1.3. 103 音频消息

```json
{
    "event": "message_created",
    "message": {
        "id": 260400000081,
        "auth_id": 30058,
        "conversation_id": 980,
        "session_type": 1,
        "sender": "6281519140327",
        "receiver": "incs_1",
        "type": 103,
        "custom_type": 0,
        "custom_id": 0,
        "channel_msg_id": "wamid.HBgNNjI4MTUxOTE0MDMyNxUCABIYIEFDMzM1Nzc3RjRDQjkxODc1MzAzMUZFMDlDQTU1QjM4AA==",
        "channel_status": 0,
        "content": {
            "uuid": "2067977394126791",
            "soundPath": "https://incs-test.oss-ap-southeast-1.aliyuncs.com/chat/audios/2067977394126791.ogg",
            "sourceUrl": "https://incs-test.oss-ap-southeast-1.aliyuncs.com/chat/audios/2067977394126791.ogg",
            "dataSize": 3040,
            "duration": 1,
            "soundType": "audio/ogg; codecs=opus"
        },
        "error": "",
        "source": 0,
        "created_at": "2026-04-07T12:54:11.000000Z",
        "updated_at": "2026-04-07T12:54:11.000000Z"
    }
}

```

###### 1.4. 104 视频消息

```json
{
    "event": "message_created",
    "message": {
        "id": 260400000082,
        "auth_id": 30058,
        "conversation_id": 980,
        "session_type": 1,
        "sender": "incs_1",
        "receiver": "6281519140327",
        "type": 104,
        "custom_type": 0,
        "custom_id": 0,
        "channel_msg_id": "wamid.HBgNNjI4MTUxOTE0MDMyNxUCABEYEjJDQUE4NjU5RkQyRThEM0ZGRQA=",
        "channel_status": 1,
        "content": {
            "videoUUID": "rc-upload-1775565512163-13",
            "videoUrl": "https://incs-test.oss-ap-southeast-1.aliyuncs.com/chat/videos/69d4fecef09fa.mp4",
            "videoType": "video/mp4",
            "videoSize": 2828720,
            "duration": 39,
            "snapshotPath": "https://incs-test.oss-ap-southeast-1.aliyuncs.com/chat/videos/69d4fecef09fa.mp4?x-oss-process=video/snapshot,t_0,f_jpg,ar_auto",
            "snapshotUUID": "rc-upload-1775565512163-13",
            "snapshotSize": 147949,
            "snapshotUrl": "https://incs-test.oss-ap-southeast-1.aliyuncs.com/chat/videos/69d4fecef09fa.mp4?x-oss-process=video/snapshot,t_0,f_jpg,ar_auto",
            "snapshotWidth": 392,
            "snapshotHeight": 850,
            "snapshotType": "image/png"
        },
        "error": "",
        "source": 0,
        "created_at": "2026-04-07T12:55:46.000000Z",
        "updated_at": "2026-04-07T12:55:47.000000Z"
    }
}

```

###### 1.5. 105 文件消息

```json
{
    "event": "message_created",
    "message": {
        "id": 260400000080,
        "auth_id": 30058,
        "conversation_id": 979,
        "session_type": 1,
        "sender": "incs_1",
        "receiver": "6281519140327",
        "type": 105,
        "custom_type": 0,
        "custom_id": 0,
        "channel_msg_id": "",
        "channel_status": 0,
        "content": {
            "filePath": "https://incs-test.oss-ap-southeast-1.aliyuncs.com/chat/files/69d4fdd3bb80e.xlsx",
            "uuid": "rc-upload-1775565512163-8",
            "sourceUrl": "https://incs-test.oss-ap-southeast-1.aliyuncs.com/chat/files/69d4fdd3bb80e.xlsx",
            "fileName": "Rcs-user.xlsx",
            "fileSize": 9095,
            "fileType": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
        },
        "error": "",
        "source": 0,
        "created_at": "2026-04-07T12:51:32.000000Z",
        "updated_at": "2026-04-07T12:51:32.000000Z"
    }
}

```

###### 1.6.1 110 自定义消息-whatsapp模板消息

```json
{
    "event": "message_created",
    "message": {
        "id": 260400000085,
        "auth_id": 30058,
        "conversation_id": 972,
        "session_type": 1,
        "sender": "incs_1",
        "receiver": "6281519140327",
        "type": 110,
        "custom_type": 11002,
        "custom_id": 15775,
        "channel_msg_id": "wamid.HBgLODUyNjg0MTUwMjYVAgARGBIzRUMxQzAxQzMwMTNFRkVBN0UA",
        "channel_status": 1,
        "content": {
            "data": {
                "id": 15775,
                "enterprise_id": 100006,
                "auth_id": 30058,
                "account_id": "269238056283774",
                "template_id": "2773590159650487",
                "namespace_id": "",
                "name": "11qwer",
                "language": "en",
                "category": "AUTHENTICATION",
                "correct_category": "",
                "has_params": 1,
                "status": "APPROVED",
                "quality": "",
                "components": [
                    {
                        "type": "BODY",
                        "text": "*123456* is your verification code. For your security, do not share this code.",
                        "add_security_recommendation": true,
                        "example": {
                            "body_text": [
                                [
                                    "123456"
                                ]
                            ]
                        }
                    },
                    {
                        "type": "FOOTER",
                        "text": "Expires in 5 minutes.",
                        "code_expiration_minutes": 5
                    },
                    {
                        "type": "BUTTONS",
                        "buttons": [
                            {
                                "type": "URL",
                                "text": "Copy code",
                                "url": "https://www.whatsapp.com/otp/code/?otp_type=COPY_CODE&code_expiration_minutes=5&code=otp{{1}}",
                                "example": [
                                    "https://www.whatsapp.com/otp/code/?otp_type=COPY_CODE&code_expiration_minutes=5&code=otp123456"
                                ]
                            }
                        ]
                    }
                ],
                "error": "",
                "created_at": "2026-03-11 16:27:33",
                "updated_at": "2026-03-11 16:27:41",
                "deleted_at": null,
                "status_updated_at": "2026-03-11 16:27:41",
                "quality_updated_at": null,
                "category_updated_at": null,
                "custom_type": 11002,
                "raw_params": [
                    {
                        "type": "body",
                        "parameters": [
                            {
                                "type": "text",
                                "text": 123456
                            }
                        ]
                    },
                    {
                        "type": "button",
                        "sub_type": "url",
                        "index": "0",
                        "parameters": [
                            {
                                "type": "text",
                                "text": 123456
                            }
                        ]
                    }
                ]
            }
        },
        "error": "",
        "source": 1,
        "created_at": "2026-04-07T13:09:39.000000Z",
        "updated_at": "2026-04-07T13:09:40.000000Z"
    }
}

```

###### 1.6.2 110 自定义消息 - whatsapp 回复按钮

```json
{
    "event": "message_created",
    "message": {
        "id": 260400000086,
        "auth_id": 30058,
        "conversation_id": 981,
        "session_type": 1,
        "sender": "6281519140327",
        "receiver": "incs_1",
        "type": 110,
        "custom_type": 11006,
        "custom_id": 260400000084,
        "channel_msg_id": "wamid.HBgNNjI4MTUxOTE0MDMyNxUCABIYIEFDNTRDNTVERTE2M0QxNjhGQjQ4RTE4Q0YyMUE1QjE3AA==",
        "channel_status": 0,
        "content": {
            "data": {
                "custom_type": 11006,
                "replying_to": "Thank you for subscribing",
                "text": "1111"
            }
        },
        "error": "",
        "source": 0,
        "created_at": "2026-04-07T13:11:29.000000Z",
        "updated_at": "2026-04-07T13:11:29.000000Z"
    }
}

```

#### 2. 消息状态更新（message\_status\_updated）

##### 参数说明

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E5%BF%85%E4%BC%A0-%E6%8F%8F%E8%BF%B0-event-s-1"><thead><tr><th>参数名</th><th>类型</th><th>必传</th><th>描述</th></tr></thead><tbody><tr><td>event</td><td>string</td><td>是</td><td>此处为 "message\_status\_updated"，发送后触发该回调</td></tr><tr><td>message\_id</td><td>bigint</td><td>是</td><td>INCS 消息ID</td></tr><tr><td>message\_status</td><td>int</td><td>是</td><td>INCS 消息状态：1 sent, 2 failed, 3 delivered, 4 read</td></tr><tr><td>error</td><td>string</td><td>是</td><td>当消息状态为2时的错误信息描述</td></tr><tr><td>updated\_at</td><td>datetime string</td><td>是</td><td>消息更新时间，ISO 8601 格式</td></tr></tbody></table>

##### 回调示例

```json
{
    "event": "message_status_updated",
    "message_id": 260400000084,
    "message_status": 4,
    "error": "",
    "updated_at": "2026-04-07T13:11:27.000000Z"
}

```

# 预测式外呼 - 预测试外呼任务号码追加接口

#### 预测试外呼任务号码追加接口

##### 接口说明

已创建的预测式任务中，通过此接口可对任务中的号码进行增加，单次追加号码不要超过10000个。 只有未开始、进行中或已暂停的任务才能追加号码

##### 请求参数

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E6%98%AF%E5%90%A6%E5%BF%85%E9%A1%BB-%E8%AF%B4%E6%98%8E-servi"><thead><tr><th>参数名</th><th>类型</th><th>是否必须</th><th>说明</th></tr></thead><tbody><tr><td>service</td><td>string</td><td>是</td><td>App.Sip\_Yccall.TaskAdd</td></tr><tr><td>token</td><td>string</td><td>是</td><td>通过授权接口获取的token</td></tr><tr><td>taskid</td><td>string</td><td>是</td><td>预测式任务ID</td></tr><tr><td>customtaskid</td><td>string</td><td>否</td><td>自定义任务id</td></tr><tr><td>telphone</td><td>string（JSON）</td><td>是</td><td>手机号码、预设呼叫时间(时间戳)(默认当前时间戳，大于此时间则不呼)等。示例：\[{“phone”:18012345678,”time”:1500000000,”userid”:””,”memberid”:””,”chengshudu”:””,”customuuid”:””}\]</td></tr></tbody></table>

##### 请求接口示例（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Yccall.TaskAdd',
        'token'     => 'ABCDEFG',
        'taskid'    => 'ADSFNIDJN',
        'telphone'  => '[{"phone":18012345678,"time":1500000000,"userid":"","memberid":"","chengshudu":"","customuuid":""}]'
    ];
    $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": {
            "success": 7,
            "invaliddata": []
        },
        "reqtime": 1613962979,
        "rsptime": 1613962979
    },
    "msg": ""
}

```

##### 返回参数说明

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-result-obj"><thead><tr><th>参数名</th><th>类型</th><th>说明</th></tr></thead><tbody><tr><td>result</td><td>object</td><td>返回结果</td></tr><tr><td>success</td><td>int</td><td>追加成功的号码</td></tr><tr><td>invaliddata</td><td>array</td><td>无效数据</td></tr></tbody></table>

# 统计分析

本文详细介绍了短信发送数据的查询与分析过程，并对关键指标的含义及使用场景进行了全面阐述。

#### 功能概述

发送数量统计用于按天监控短信业务的执行效果与资源使用情况。通过选择发送日期和发送渠道，可查看每日的短信提交量、成功/失败分布、发送成功率及账户余额，帮助您评估通道稳定性并合理规划发送任务。

#### 功能入口

登录短信业务平台，在左侧导航栏选择 **短信 &gt; 统计**，进入数据统计界面。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1772590757668.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1772590757668.png)

##### 查询统计数据

在统计页面，依次设置以下筛选条件：

- 发送时间：选择单日或多日（最多可选连续 30 天），仅支持历史日期；
- 发送渠道：从下拉列表中选择目标通道（如“国内短信-通道A”），支持选择“全部”查看汇总数据。

点击 **查询**，系统将以表格形式展示所选日期范围内每天一行的统计结果，包含以下指标：

- 短信提交总量：当日向平台提交的短信总条数；
- 发送成功数量：当日由运营商确认成功投递的短信条数；
- 发送失败数量：当日因号码无效、内容违规、通道异常等原因未能送达的条数；
- 发送成功率：计算公式为 成功数量 / 提交总量 × 100%；
- 账户余额情况：该自然日结束时的账户可用余额（单位：元）。

⚠️ 报表数据按自然日生成，当日数据不可查，最新可查日期为昨日。

##### 导出统计数据

点击 **导出** 按钮，可将当前查询结果导出为 CSV 文件，便于存档或分析。

---

# 获取模板列表

### 域名

- https://api.incsapp.com

### 请求路由

- /external/templates

### 请求方式

- **GET**

### 请求头

- certification-code: f484bd42-4a0c-39d....

### 请求参数

#### 请求参数列表

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E5%BF%85%E5%A1%AB-%E6%8F%8F%E8%BF%B0-last_id"><thead><tr><th>参数名</th><th>类型</th><th>必填</th><th>描述</th></tr></thead><tbody><tr><td>last\_id</td><td>string</td><td>否</td><td>上一页的最后一条数据 template\_id</td></tr><tr><td>count</td><td>int</td><td>否</td><td>每页数据量，默认10，最大为100条</td></tr><tr><td>with\_analytics</td><td>bool</td><td>否</td><td>设置为 true 查看模板发送数据分析</td></tr></tbody></table>

### 响应

#### 成功响应示例

- 响应说明参见**模板资源说明**

```json
{
    "status": "success",
    "code": 200,
    "message": "",
    "data": [
        {
            "template_id": "4166201267033543",
            "name": "test_api_2",
            "language": "en_US",
            "category": "MARKETING",
            "status": "PENDING",
            "quality": "",
            "components": [
                {
                    "type": "BODY",
                    "text": "A API test template without variables"
                }
            ],
            "created_time": 1755076188,
            "updated_time": 1755077570,
            "status_updated_time": 1755077464,
            "quality_updated_time": 0,
            "category_updated_time": 0,
            "analytics": {
                "sent": 898,
                "delivered": 2334,
                "read": 873,
                "failed": 188
            }
        }
    ],
    "error": {}
}

```

# 分机组管理 - 分机签入分机组

#### 接口说明

将当前用户下的一个分机签入到用户拥有的一个分机组

#### 请求方式

POST，form-data格式

#### 请求参数

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E6%98%AF%E5%90%A6%E5%BF%85%E9%A1%BB-%E8%AF%B4%E6%98%8E-servi"><thead><tr><th>参数名</th><th>类型</th><th>是否必须</th><th>说明</th></tr></thead><tbody><tr><td>service</td><td>string</td><td>是</td><td>App.Sip\_Extgroup.AddExtnumber</td></tr><tr><td>token</td><td>string</td><td>是</td><td>通过授权接口获取的token</td></tr><tr><td>name</td><td>string</td><td>是</td><td>分机组名</td></tr><tr><td>extnumber</td><td>string</td><td>是</td><td>分机号，多个以逗号分隔</td></tr></tbody></table>

#### 接口请求示例（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Extgroup.AddExtnumber',
        'token'     => 'ABCDEFG',
        'name'  => 'abcdefg',
        'extnumber'  => '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": 1581409508,
        "rsptime": 1581409508
    },
    "msg": ""
}

```

#### 返回数据字段说明

<table id="bkmrk-%E5%AD%97%E6%AE%B5-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-desc-string"><thead><tr><th>字段</th><th>类型</th><th>说明</th></tr></thead><tbody><tr><td>desc</td><td>string</td><td>返回描述</td></tr></tbody></table>

# 分机管理 - 修改分机账号

#### 接口说明

修改用户分机信息。

#### 请求方式

POST，form-data格式

#### 请求参数

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E6%98%AF%E5%90%A6%E5%BF%85%E9%A1%BB-%E8%AF%B4%E6%98%8E-servi"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">是否必须</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">service</td><td align="left">string</td><td align="left">是</td><td align="left">App.Sip\_Sipnum.EditSipnumber</td></tr><tr><td align="left">token</td><td align="left">string</td><td align="left">是</td><td align="left">通过授权接口获取的token</td></tr><tr><td align="left">extnumber</td><td align="left">string</td><td align="left">是</td><td align="left">分机号</td></tr><tr><td align="left">password</td><td align="left">string</td><td align="left">否</td><td align="left">分机密码，8-16位，必须包含大写字母、小写字母和数字，不能包含空白字符</td></tr><tr><td align="left">username</td><td align="left">string</td><td align="left">否</td><td align="left">分机用户名</td></tr><tr><td align="left">status</td><td align="left">int</td><td align="left">否</td><td align="left">状态 1:启用、2:禁用</td></tr><tr><td align="left">manualdial</td><td align="left">int</td><td align="left">否</td><td align="left">是否直拨 1:启用、2:禁用</td></tr><tr><td align="left">record</td><td align="left">int</td><td align="left">否</td><td align="left">是否录音 1:启用、2:禁用</td></tr></tbody></table>

#### 接口请求示例（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Sipnum.EditSipnumber ',
        'token'     => 'ABCDEFG',
        'extnumber'  => '100001',
        'password'  => '100001',
        'username'  => '100001',
        'status'    => 1,
        'manualdial'    => 1,
        'record'    => 1,
    ];
    $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": {},
        "reqtime": 1789631259,
        "rsptime": 1789631259
    },
    "msg": ""
}


```

#### 返回参数说明

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-status-int"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">status</td><td align="left">int</td><td align="left">0修改成功，1修改失败</td></tr><tr><td align="left">desc</td><td align="left">string</td><td align="left">描述信息</td></tr><tr><td align="left">result</td><td align="left">object</td><td align="left">对象信息当前为空</td></tr></tbody></table>

# 语音呼叫API - 通话挂断

#### 接口说明

挂断指定通话分机。

#### 请求方式

POST，form-data格式

#### 请求参数

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E6%98%AF%E5%90%A6%E5%BF%85%E9%A1%BB-%E8%AF%B4%E6%98%8E-servi"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">是否必须</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">service</td><td align="left">string</td><td align="left">是</td><td align="left">App.Sip\_Call.HangupCall</td></tr><tr><td align="left">token</td><td align="left">string</td><td align="left">是</td><td align="left">通过授权接口获取的token</td></tr><tr><td align="left">extnumber</td><td align="left">string</td><td align="left">是</td><td align="left">分机号</td></tr></tbody></table>

#### 接口请求示例（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Call.HangupCall',
        'token'     => 'ABCDEFG',
        'extnumber'  => '70001',
    ];
    $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": 1581389402,
        "rsptime": 1581389402
    },
    "msg": ""
}

```

#### 返回参数说明

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-status-int"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">status</td><td align="left">int</td><td align="left">0修改成功，1修改失败</td></tr><tr><td align="left">desc</td><td align="left">string</td><td align="left">描述信息</td></tr><tr><td align="left">result</td><td align="left">object</td><td align="left">对象信息当前为空</td></tr></tbody></table>

# 5.任务进度监控

#### 任务详情查看

管理员可以单击任务列表的 **「详情」** 进入任务的执行情况统计页面。

[![](https://document.infin8linx.com/uploads/images/gallery/2025-12/scaled-1680-/image-1766646939930.png)](https://document.infin8linx.com/uploads/images/gallery/2025-12/image-1766646939930.png)

通过任务详情，可以看到任务的统计数据和任务的详情。

[![](https://document.infin8linx.com/uploads/images/gallery/2025-12/scaled-1680-/image-1766647034485.png)](https://document.infin8linx.com/uploads/images/gallery/2025-12/image-1766647034485.png)

#### 任务统计

任务执行过程中，可以刷新和查看当前任务的执行情况。通过任务进度，你可以看到以下数据：

- **已呼叫**：已拨打数量 / 号码总量
- **接通率：** 接通电话数 / 已拨打数量
- **已接通：** 成功接通的号码数量
- **未接通：** 已呼叫但未接通的号码数量

# 通话记录回调参数说明

#### 通话记录回调参数说明

话单回调需要给对应的账号配置上回调地址即可。 话单的回调地址配置：由客户提供一个可以接收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": ""
}


```

#### 通话记录回调参数说明

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-callmethod"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">callmethod</td><td align="left">int</td><td align="left">呼叫方法：0、不限；1、分机互拨；2、分机直拨（手拨）；3、API呼叫（默认）；4、API双呼；5、预测式外呼；6、IVR/群呼。</td></tr><tr><td align="left">starttime</td><td align="left">string</td><td align="left">呼叫时间</td></tr><tr><td align="left">answertime</td><td align="left">string</td><td align="left">应答时间</td></tr><tr><td align="left">endtime</td><td align="left">string</td><td align="left">通话结束时间</td></tr><tr><td align="left">duration</td><td align="left">int</td><td align="left">呼叫等待时长</td></tr><tr><td align="left">billsec</td><td align="left">int</td><td align="left">通话时长</td></tr><tr><td align="left">userid</td><td align="left">string</td><td align="left">员工工号</td></tr><tr><td align="left">chengshudu</td><td align="left">string</td><td align="left">自定义参数-(ext一致)</td></tr><tr><td align="left">ext</td><td align="left">string</td><td align="left">自定义参数-扩展参数</td></tr><tr><td align="left">hangupdirection</td><td align="left">int</td><td align="left">挂机方向: 10040 主叫挂机、10041 被叫挂机</td></tr><tr><td align="left">hangupcause</td><td align="left">int</td><td align="left">挂机原因代码: 10001 正常挂断、10002 呼叫取消、10003 拒绝接听、10004 外呼通道线路失败、10005 用户超时未接听、10006 用户忙</td></tr><tr><td align="left">memberid</td><td align="left">string</td><td align="left">自定义参数-会员id</td></tr><tr><td align="left">disnumber</td><td align="left">string</td><td align="left">主叫号码（最终显示在用户手机上的来电号码）</td></tr><tr><td align="left">destnumber</td><td align="left">string</td><td align="left">被叫号码 （呼叫的目标客户号码）。</td></tr><tr><td align="left">downloadip</td><td align="left">string</td><td align="left">录音下载ip</td></tr><tr><td align="left">recordfilename</td><td align="left">string</td><td align="left">录音文件名</td></tr><tr><td align="left">type</td><td align="left">string</td><td align="left">呼叫类型 callout呼出、callin呼入</td></tr><tr><td align="left">extnumber</td><td align="left">string</td><td align="left">分机号</td></tr><tr><td align="left">uuid</td><td align="left">string</td><td align="left">通话uuid</td></tr><tr><td align="left">userkey</td><td align="left">string</td><td align="left">用户按键</td></tr><tr><td align="left">customuuid</td><td align="left">string</td><td align="left">自定义参数-客户id</td></tr><tr><td align="left">taskid</td><td align="left">string</td><td align="left">预测外呼任务id</td></tr><tr><td align="left">round</td><td align="left">string</td><td align="left">预测外呼轮次</td></tr><tr><td align="left">recordurl</td><td align="left">string</td><td align="left">录音下载url</td></tr><tr><td align="left">id</td><td align="left">int</td><td align="left">数据id</td></tr><tr><td align="left">companycode</td><td align="left">string</td><td align="left">企业编号</td></tr></tbody></table>

# Common API - call record callback parameters

#### Description

Bill callback needs to be configured with a callback address for the corresponding account. Callback address configuration of bills: The customer provides an interface address that can receive json data, which can be configured by us or configured by the customer in the background.

#### Call record callback data format json

```
{
    "callmethod": 3, 
    "starttime": "2018-03-14 12:18:21", 
    "answertime": "", 
    "endtime": "2018-03-14 12:18:35",  
    "duration": 14,  
    "billsec": 0, 
    "crmid": "2001", 
    "hangupdirection": 10015, 
    "chengshudu": "0", 
    "hangupcause": 10001, 
    "memberid": "18533700187590656",  
    "disnumber": "02566823420",  
    "destnumber": "015029913692",  
    "downloadip": "120.76.152.137", 
    "recordfilename": "",  
    "companycode": 20000013,  
    "type": "callout",  
    "id": 982, 
    "extnumber": "7003" 
    "uuid": "cda5c6c4-0a17-11e8-b177-e7cbf2bd1f36" 
    "userkey":1  
    "customuuid": "customuuid"  
}


```

#### Description of Call Record Callback Parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th align="left">parameter name</th><th align="left">type</th><th align="left">illustrate</th></tr></thead><tbody><tr><td align="left">callmethod</td><td align="left">int</td><td align="left">Call method: 0, unlimited; 1, mutual extension dial; 2, extension direct dial (manual dial); 3, API call (default); 4, API double call; 5, predictive outbound call; 6, IVR/group call .</td></tr><tr><td align="left">starttime</td><td align="left">string</td><td align="left">call time</td></tr><tr><td align="left">answertime</td><td align="left">string</td><td align="left">response time</td></tr><tr><td align="left">endtime</td><td align="left">string</td><td align="left">call end time</td></tr><tr><td align="left">duration</td><td align="left">int</td><td align="left">call waiting time</td></tr><tr><td align="left">billsec</td><td align="left">int</td><td align="left">call time</td></tr><tr><td align="left">crmid</td><td align="left">string</td><td align="left">employee number</td></tr><tr><td align="left">hangupdirection</td><td align="left">int</td><td align="left">On-hook direction</td></tr><tr><td align="left">chengshudu</td><td align="left">string</td><td align="left">Custom Parameters - Maturity</td></tr><tr><td align="left">hangupcause</td><td align="left">int</td><td align="left">Hangup Reason Code</td></tr><tr><td align="left">memberid</td><td align="left">string</td><td align="left">Custom parameter - member id</td></tr><tr><td align="left">disnumber</td><td align="left">string</td><td align="left">calling number</td></tr><tr><td align="left">destnumber</td><td align="left">string</td><td align="left">called number</td></tr><tr><td align="left">downloadip</td><td align="left">string</td><td align="left">recording download ip</td></tr><tr><td align="left">recordfilename</td><td align="left">string</td><td align="left">recording file name</td></tr><tr><td align="left">companycode</td><td align="left">string</td><td align="left">company id</td></tr><tr><td align="left">type</td><td align="left">string</td><td align="left">call type</td></tr><tr><td align="left">extnumber</td><td align="left">string</td><td align="left">Ext</td></tr><tr><td align="left">uuid</td><td align="left">string</td><td align="left">call uuid</td></tr><tr><td align="left">userkey</td><td align="left">string</td><td align="left">user button</td></tr><tr><td align="left">customuuid</td><td align="left">string</td><td align="left">Custom parameter - customer id</td></tr></tbody></table>

# Common API - call record callback parameters

#### Description

Bill callback needs to be configured with a callback address for the corresponding account. Callback address configuration of bills: The customer provides an interface address that can receive json data, which can be configured by us or configured by the customer in the background.

#### Call record callback data format json

```
{
    "callmethod": 3, 
    "starttime": "2018-03-14 12:18:21", 
    "answertime": "", 
    "endtime": "2018-03-14 12:18:35",  
    "duration": 14,  
    "billsec": 0, 
    "crmid": "2001", 
    "hangupdirection": 10015, 
    "chengshudu": "0", 
    "hangupcause": 10001, 
    "memberid": "18533700187590656",  
    "disnumber": "02566823420",  
    "destnumber": "015029913692",  
    "downloadip": "120.76.152.137", 
    "recordfilename": "",  
    "companycode": 20000013,  
    "type": "callout",  
    "id": 982, 
    "extnumber": "7003" 
    "uuid": "cda5c6c4-0a17-11e8-b177-e7cbf2bd1f36" 
    "userkey":1  
    "customuuid": "customuuid"  
}


```

#### Description of Call Record Callback Parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th align="left">parameter name</th><th align="left">type</th><th align="left">illustrate</th></tr></thead><tbody><tr><td align="left">callmethod</td><td align="left">int</td><td align="left">Call method: 0, unlimited; 1, mutual extension dial; 2, extension direct dial (manual dial); 3, API call (default); 4, API double call; 5, predictive outbound call; 6, IVR/group call .</td></tr><tr><td align="left">starttime</td><td align="left">string</td><td align="left">call time</td></tr><tr><td align="left">answertime</td><td align="left">string</td><td align="left">response time</td></tr><tr><td align="left">endtime</td><td align="left">string</td><td align="left">call end time</td></tr><tr><td align="left">duration</td><td align="left">int</td><td align="left">call waiting time</td></tr><tr><td align="left">billsec</td><td align="left">int</td><td align="left">call time</td></tr><tr><td align="left">crmid</td><td align="left">string</td><td align="left">employee number</td></tr><tr><td align="left">hangupdirection</td><td align="left">int</td><td align="left">On-hook direction</td></tr><tr><td align="left">chengshudu</td><td align="left">string</td><td align="left">Custom Parameters - Maturity</td></tr><tr><td align="left">hangupcause</td><td align="left">int</td><td align="left">Hangup Reason Code</td></tr><tr><td align="left">memberid</td><td align="left">string</td><td align="left">Custom parameter - member id</td></tr><tr><td align="left">disnumber</td><td align="left">string</td><td align="left">calling number</td></tr><tr><td align="left">destnumber</td><td align="left">string</td><td align="left">called number</td></tr><tr><td align="left">downloadip</td><td align="left">string</td><td align="left">recording download ip</td></tr><tr><td align="left">recordfilename</td><td align="left">string</td><td align="left">recording file name</td></tr><tr><td align="left">companycode</td><td align="left">string</td><td align="left">company id</td></tr><tr><td align="left">type</td><td align="left">string</td><td align="left">call type</td></tr><tr><td align="left">extnumber</td><td align="left">string</td><td align="left">Ext</td></tr><tr><td align="left">uuid</td><td align="left">string</td><td align="left">call uuid</td></tr><tr><td align="left">userkey</td><td align="left">string</td><td align="left">user button</td></tr><tr><td align="left">customuuid</td><td align="left">string</td><td align="left">Custom parameter - customer id</td></tr></tbody></table>

# Extension Manage - Extension check-in extension group

#### Interface Description

Sign in an extension under the current user to an extension group owned by the user

#### Request method

POST, form-data format

#### request parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th>parameter name</th><th>type</th><th>Is it necessary</th><th>illustrate</th></tr></thead><tbody><tr><td>service</td><td>string</td><td>yes</td><td>App.Sip\_Extgroup.AddExtnumber</td></tr><tr><td>token</td><td>string</td><td>yes</td><td>The token obtained through the authorization interface</td></tr><tr><td>name</td><td>string</td><td>yes</td><td>extension group name</td></tr><tr><td>extnumber</td><td>string</td><td>yes</td><td>Ext</td></tr></tbody></table>

#### Interface request example（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Extgroup.AddExtnumber',
        'token'     => 'ABCDEFG',
        'name'  => 'abcdefg',
        'extnumber'  => '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);
?>

```

#### return data structure example

```
{
    "ret": 200,
    "data": {
        "status": 0,
        "desc": "Added successfully",
        "reqtime": 1581409508,
        "rsptime": 1581409508
    },
    "msg": ""
}

```

#### Return data field description

<table id="bkmrk-field-type-illustrat"><thead><tr><th>field</th><th>type</th><th>illustrate</th></tr></thead><tbody><tr><td>desc</td><td>string</td><td>return description</td></tr></tbody></table>

# Common API - Clear the Token interface

#### Description

Note: When there is a new extension or an abnormality occurs after the extension is adjusted, you can clear the Token through this interface, and then obtain the Token again to continue the operation.

#### Request method

POST, form-data format

#### request parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th align="left">parameter name</th><th align="left">type</th><th align="left">Is it necessary</th><th align="left">illustrate</th></tr></thead><tbody><tr><td align="left">service</td><td align="left">string</td><td align="left">yes</td><td align="left">App.Sip\_Auth.Logout</td></tr><tr><td align="left">token</td><td align="left">string</td><td align="left">yes</td><td align="left">Token string</td></tr></tbody></table>

#### Interface request example（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);
?>


```

#### return data structure example

```
{
    "ret": 200,
    "data": {
        "status": 0,
        "desc": "logout successful",
        "reqtime": 1602655204,
        "rsptime": 1602655204
    },
    "msg": ""
}

```

# Multiple SMS Sending

### Request URL

```
https://{domain}/sms/rsend

```

### Request Method

POST Content-Type: application/x-www-form-urlencoded

### Parameter Description

<table id="bkmrk-field-type-name-desc"><thead><tr><th>Field</th><th>Type</th><th>Name</th><th>Description</th></tr></thead><tbody><tr><td>spid</td><td>string</td><td>Interface account</td><td></td></tr><tr><td>pwd</td><td>string</td><td>Password</td><td>**Important note 3**</td></tr><tr><td>timestamp</td><td>string</td><td>Current Unix timestamp (seconds)</td><td>Example: 1601028870</td></tr><tr><td>dasm</td><td>string</td><td>Message content (no more than 200 phone numbers per request)</td><td>Format:  
phone number,content/phone number,content ...   
  
**Note the previous instructions**</td></tr><tr><td>senderid</td><td>string</td><td>Optional</td><td>Field enabled for partners</td></tr></tbody></table>

### Response

```json
{
  "code": 0,
  "msg": "Success",
  "data": [{
    "das": "00628131565746",
    "msgid": "100123",
    "parts": 1, //Calculated number of segments
    "state": 0
  }]
}

```

### Status Code (code) Description

Same as single SMS sending.

# 4. Statistical Analysis

### 4.1. Sending Volume Statistics

Click the "Statistics" menu to enter the data statistics interface. After selecting the username and statistics date, the system will display the following key indicators:

- Total SMS submissions
- Number of successful sends
- Number of failed sends
- Sending success rate
- Account balance status

Through these data, you can comprehensively understand SMS sending effectiveness and account usage.

[![m_7813673106aebe61f65bb824b6e291e5_r.png](https://document.infin8linx.com/uploads/images/gallery/2025-12/scaled-1680-/m-7813673106aebe61f65bb824b6e291e5-r.png)](https://document.infin8linx.com/uploads/images/gallery/2025-12/m-7813673106aebe61f65bb824b6e291e5-r.png)

[![m_03128d2edc11601ae268db9bcb3af9b2_r.png](https://document.infin8linx.com/uploads/images/gallery/2025-12/scaled-1680-/m-03128d2edc11601ae268db9bcb3af9b2-r.png)](https://document.infin8linx.com/uploads/images/gallery/2025-12/m-03128d2edc11601ae268db9bcb3af9b2-r.png)

---

# Call record callback parameters

#### Description

Bill callback needs to be configured with a callback address for the corresponding account. Callback address configuration of bills: The customer provides an interface address that can receive json data, which can be configured by us or configured by the customer in the background.

#### Call record callback data format json

```
{
    "callmethod": 3, 
    "starttime": "2018-03-14 12:18:21", 
    "answertime": "", 
    "endtime": "2018-03-14 12:18:35",  
    "duration": 14,  
    "billsec": 0, 
    "crmid": "2001", 
    "hangupdirection": 10015, 
    "chengshudu": "0", 
    "hangupcause": 10001, 
    "memberid": "18533700187590656",  
    "disnumber": "02566823420",  
    "destnumber": "015029913692",  
    "downloadip": "120.76.152.137", 
    "recordfilename": "",  
    "companycode": 20000013,  
    "type": "callout",  
    "id": 982, 
    "extnumber": "7003" 
    "uuid": "cda5c6c4-0a17-11e8-b177-e7cbf2bd1f36" 
    "userkey":1  
    "customuuid": "customuuid"  
}


```

#### Description of Call Record Callback Parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th align="left">parameter name</th><th align="left">type</th><th align="left">illustrate</th></tr></thead><tbody><tr><td align="left">callmethod</td><td align="left">int</td><td align="left">Call method: 0, unlimited; 1, mutual extension dial; 2, extension direct dial (manual dial); 3, API call (default); 4, API double call; 5, predictive outbound call; 6, IVR/group call .</td></tr><tr><td align="left">starttime</td><td align="left">string</td><td align="left">call time</td></tr><tr><td align="left">answertime</td><td align="left">string</td><td align="left">response time</td></tr><tr><td align="left">endtime</td><td align="left">string</td><td align="left">call end time</td></tr><tr><td align="left">duration</td><td align="left">int</td><td align="left">call waiting time</td></tr><tr><td align="left">billsec</td><td align="left">int</td><td align="left">call time</td></tr><tr><td align="left">crmid</td><td align="left">string</td><td align="left">employee number</td></tr><tr><td align="left">hangupdirection</td><td align="left">int</td><td align="left">On-hook direction 10040 Caller、10041 Callee</td></tr><tr><td align="left">chengshudu</td><td align="left">string</td><td align="left">Custom Parameters - Maturity</td></tr><tr><td align="left">hangupcause</td><td align="left">int</td><td align="left">Hangup Reason Code 10001：Normal Hangup、10002：Call Canceled、10003：Call Rejected、10004：Outbound Channel Line Failure、10005：User Did Not Answer (Timeout)、10006：User Busy</td></tr><tr><td align="left">memberid</td><td align="left">string</td><td align="left">Custom parameter - member id</td></tr><tr><td align="left">disnumber</td><td align="left">string</td><td align="left">calling number</td></tr><tr><td align="left">destnumber</td><td align="left">string</td><td align="left">called number</td></tr><tr><td align="left">downloadip</td><td align="left">string</td><td align="left">recording download ip</td></tr><tr><td align="left">recordfilename</td><td align="left">string</td><td align="left">recording file name</td></tr><tr><td align="left">companycode</td><td align="left">string</td><td align="left">company id</td></tr><tr><td align="left">type</td><td align="left">string</td><td align="left">call type</td></tr><tr><td align="left">extnumber</td><td align="left">string</td><td align="left">Ext</td></tr><tr><td align="left">uuid</td><td align="left">string</td><td align="left">call uuid</td></tr><tr><td align="left">userkey</td><td align="left">string</td><td align="left">user button</td></tr><tr><td align="left">customuuid</td><td align="left">string</td><td align="left">Custom parameter - customer id</td></tr></tbody></table>

# 获取模板列表

### 域名

- https://api.incsapp.com

### 请求路由

- /external/templates/rcs

### 请求方式

- **GET**

### 请求头

- certification-code: f484bd42-4a0c-39d....

### 请求参数

#### 请求参数列表

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E5%BF%85%E5%A1%AB-%E6%8F%8F%E8%BF%B0-last_id"><thead><tr><th>参数名</th><th>类型</th><th>必填</th><th>描述</th></tr></thead><tbody><tr><td>last\_id</td><td>string</td><td>否</td><td>上一页的最后一条数据 template\_id</td></tr><tr><td>count</td><td>int</td><td>否</td><td>每页数据量，默认10，最大为100条</td></tr></tbody></table>

### 响应

#### 成功响应示例

```json
{
    "status": "success",
    "code": 200,
    "message": "",
    "data": [
        {
            "template_id": "2217670963801515124",
            "name": "api_4_carousel_image",
            "type": "carousel",
            "category": "PROMOTION",
            "status": "APPROVED",
            "content": {
                "height": "SHORT",
                "width": "MEDIUM",
                "carouselCard": [
                    {
                        "cardTitle": "New watches",
                        "cardDescription": "Dear [name] brand new watches for less price",
                        "mediaUrl": "https://incs-test.oss-ap-southeast-1.aliyuncs.com/chat/images/eb9872d5-b1d3-4e97-8c86-75b0495fa8f1.png?x-oss-process=image/crop,w_1200,h_480,g_center",
                        "suggestions": [
                            {
                                "suggestionType": "url_action",
                                "url": "https://www.infin80linx.co.id",
                                "text": "Buy Now at [offer_1]",
                                "postbackData": "shop_url"
                            }
                        ]
                    },
                    {
                        "cardTitle": "New perfumes",
                        "cardDescription": "Dear [name], Choose from brand new perfumes.",
                        "mediaUrl": "https://incs-test.oss-ap-southeast-1.aliyuncs.com/chat/images/eb9872d5-b1d3-4e97-8c86-75b0495fa8f1.png?x-oss-process=image/crop,w_1200,h_480,g_center",
                        "suggestions": [
                            {
                                "suggestionType": "dialer_action",
                                "phoneNumber": "+6281519140200",
                                "text": "Call now",
                                "postbackData": "call_click"
                            }
                        ]
                    }
                ]
            },
            "created_time": 1767096381,
            "updated_time": 1767337736,
            "status_updated_time": 1767337733
        },
        {
            "template_id": "2217670951241515121",
            "name": "api_4_standalone_image",
            "type": "richcard",
            "category": "PROMOTION",
            "status": "APPROVED",
            "content": {
                "orientation": "VERTICAL",
                "height": "SHORT",
                "standaloneCard": {
                    "cardTitle": "Keep calm & BAT on!",
                    "cardDescription": "Dear [name], time to participate in lucky draw and win prizes",
                    "mediaUrl": "https://incs-test.oss-ap-southeast-1.aliyuncs.com/chat/videos/6943e9cea07d7.mp4",
                    "thumbnailUrl": "",
                    "suggestions": [
                        {
                            "suggestionType": "reply",
                            "text": "Avail offer [offer_name]",
                            "postbackData": "offer_reply"
                        }
                    ]
                }
            },
            "created_time": 1767095125,
            "updated_time": 1767337727,
            "status_updated_time": 1767337724
        },
        {
            "template_id": "2217670929841515117",
            "name": "api_3",
            "type": "text",
            "category": "PROMOTION",
            "status": "APPROVED",
            "content": {
                "textMessage": "text template with parameters [name] and suggestions",
                "suggestions": [
                    {
                        "suggestionType": "reply",
                        "text": "Need [service_name]?",
                        "postbackData": "click_reply"
                    },
                    {
                        "suggestionType": "url_action",
                        "url": "https://www.infin80linx.co.id/",
                        "text": "Visit our Website",
                        "postbackData": "url_click"
                    },
                    {
                        "suggestionType": "dialer_action",
                        "phoneNumber": "+6281519236680",
                        "text": "Call Now",
                        "postbackData": "call_now"
                    }
                ]
            },
            "created_time": 1767092985,
            "updated_time": 1767337721,
            "status_updated_time": 1767337718
        }
    ],
    "error": {}
}

```

# 在线生成录音文件

1.登录语音后台 → 进入 **「语音」** → **「语音资源」** → **「生成语音」**

[![](https://document.infin8linx.com/uploads/images/gallery/2026-04/scaled-1680-/image-1777346605403.png)](https://document.infin8linx.com/uploads/images/gallery/2026-04/image-1777346605403.png)

2.点击 **「添加」**

[![](https://document.infin8linx.com/uploads/images/gallery/2026-04/scaled-1680-/image-1777346676482.png)](https://document.infin8linx.com/uploads/images/gallery/2026-04/image-1777346676482.png)

3.填写录音文件信息：

[![](https://document.infin8linx.com/uploads/images/gallery/2026-04/scaled-1680-/image-1777346726644.png)](https://document.infin8linx.com/uploads/images/gallery/2026-04/image-1777346726644.png)

名称：输入录音名称（例：2026年1月促销活动）

类型： 选择语音内容的生成方式

- 固定文本：整段语音内容完全固定，所有客户听到的内容完全相同
- 内容中包含变量（如 {phone}、{name}），外呼时会根据名单动态替换

语言：选择语音播报的语言

语音内容：在文本框中输入要播报的文字（例：您好，感谢关注XX公司2026年1月促销活动，详情请回复1。）

插入变量（用于外呼时动态替换） 若呼叫名单中 手机号在 Excel 的 A 列，可在文本中插入变量：

```
您好，{phone}，您的订单已发货。

```

> 📌 系统将在外呼时自动将 {phone} 替换为实际拨打的号码（如 13800138000）
> 
> ⚠️ 变量名必须与名单列对应（A列 = {phone}，B列 = {name}，以此类推）

插入停顿

在需要停顿处插入：{stop:1s}

```
您好，{stop:1s}您的订单已发货。

```

设置特殊内容朗读方式

选中需特殊处理的文本 → 点击工具栏对应按钮：

<table id="bkmrk-%E5%86%85%E5%AE%B9%E7%B1%BB%E5%9E%8B-%E6%93%8D%E4%BD%9C%E6%96%B9%E5%BC%8F-%E6%95%88%E6%9E%9C%E7%A4%BA%E4%BE%8B-%E6%89%8B%E6%9C%BA%E5%8F%B7%2F%E6%95%B0"><thead><tr><th>内容类型</th><th>操作方式</th><th>效果示例</th></tr></thead><tbody><tr><td>手机号/数字</td><td>选中数字 → 点击 「逐位读出」</td><td>`13800138000` → “一 三 八 零 零 一 三 八 零 零 零”</td></tr><tr><td>字母</td><td>选中字母 → 点击 「逐字母读」</td><td>`VIP` → “V I P”</td></tr><tr><td>日期</td><td>选中日期 → 点击 「日期读法」</td><td>`2026-01-16` → “二零二六年一月十六日”</td></tr><tr><td>金额</td><td>选中数字+元 → 点击 「货币读法」</td><td>`199元` → “一百九十九元整”</td></tr></tbody></table>

点击 「试听」 预览效果 → 确认无误后点击 「保存」

⚠️ 注意事项：

- 变量仅在外呼任务执行时生效，试听时显示为占位符（如 {phone}）
- 停顿和朗读设置需先选中文本再点击按钮，否则无效
- 文本总长度建议 ≤120 字（含变量和停顿标记）

# Generate Audio Files Online

1.Log in to the Voice Backend → Go to Voice &gt; Voice Resources &gt; Generate Voice.

2.On the Generate Voice page, click Add in the operation column to open the dialog box.

3.Fill in the audio file information in the dialog box:

- Name: Enter the audio file name (e.g., Jan 2026 Promotional Campaign).
- Type: Select the generation method for the voice content.
- Fixed Text: The entire voice content is completely fixed, and all customers will hear the exact same message.
- Variables Included: The content contains variables (e.g., {phone}, {name}), which will be dynamically replaced based on the contact list during outbound calls.
- Language: Select the language for voice playback.
- Voice Content: Enter the text to be broadcasted in the text box (e.g., Hello, thank you for your interest in XX Company's Jan 2026 promotional campaign. Please reply with 1 for more details.).
- Insert Variables (Used for dynamic replacement during outbound calls): If the phone number in the contact list is located in Column A of the Excel file, you can insert the following variable into the text:

```
Hello, {phone}, your order has been shipped.

```

Insert Pause

To insert a pause, add: {stop:1s} at the desired location.

```
Hello, {stop:1s} your order has been shipped.

```

**Set the reading method for special content**

Select the text that requires special processing, and then click the corresponding button on the toolbar:

<table id="bkmrk-content-type-operati"><thead><tr><th align="left">Content Type</th><th align="left">Operation</th><th align="left">Example</th></tr></thead><tbody><tr><td align="left">Phone Number / Digits</td><td align="left">Select the digits → Click Read Digit by Digit</td><td align="left">13800138000 → "1 3 8 0 0 1 3 8 0 0 0"</td></tr><tr><td align="left">Letters</td><td align="left">Select the letters → Click Read Letter by Letter</td><td align="left">VIP → "V I P"</td></tr><tr><td align="left">Date</td><td align="left">Select the date → Click Read as Date</td><td align="left">2026-01-16 → "January 16th, 2026"</td></tr><tr><td align="left">Amount</td><td align="left">Select the number + currency → Click Read as Currency</td><td align="left">199 CNY → "One hundred and ninety-nine yuan"</td></tr></tbody></table>

Click Preview to check the effect → Click Save after confirmation.

⚠️ Notes:

- Variables only take effect when the outbound task is executed. During preview, they will be displayed as placeholders (e.g., {phone}).
- Pause and reading settings require you to select the text first before clicking the button; otherwise, the settings will not apply.
- It is recommended to keep the total text length ≤ 120 characters (including variables and pause tags).

# 添加短信模板

#### **请求URL**

- `https://{domain}/hangupSms/addSmsTpl`

#### **请求方式**

- POST

#### **请求参数**

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E5%BF%85%E9%80%89-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-appid-%E6%98%AF"><thead><tr><th align="left">参数名</th><th align="left">必选</th><th align="left">类型</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">appid</td><td align="left">是</td><td align="left">string</td><td align="left">鉴权 appid</td></tr><tr><td align="left">accesskey</td><td align="left">是</td><td align="left">string</td><td align="left">鉴权 accesskey</td></tr><tr><td align="left">name</td><td align="left">是</td><td align="left">string</td><td align="left">模板名称</td></tr><tr><td align="left">content</td><td align="left">是</td><td align="left">string</td><td align="left">短信内容</td></tr></tbody></table>

#### **请求示例**

```
{
    "appid":"xxxx",
    "accesskey":"xxx",
    "name":"test11323",
    "content":"hhhdedde"
}

```

#### **返回示例**

```
{
    "code": 0,
    "msg": "operation succeeded",
    "data": {
        "id": "91"
    }
}

```

#### **返回参数说明**

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-code-int-%E8%BF%94"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">code</td><td align="left">int</td><td align="left">返回码 0 成功 其他为失败</td></tr><tr><td align="left">msg</td><td align="left">string</td><td align="left">返回信息</td></tr><tr><td align="left">data</td><td align="left">object</td><td align="left">返回数据</td></tr></tbody></table>

# 上报短信状态

### 接口说明

客户业务平台单位时间内(start\_time~end\_time)短信状态统计，便于监控及发现问题

### 请求URL

```
https://{domain}/sms/monitor

```

### 请求方法

POST Content-Type: application/x-www-form-urlencoded

### 参数说明

<table id="bkmrk-%E5%AD%97%E6%AE%B5-%E7%B1%BB%E5%9E%8B-%E5%90%8D%E7%A7%B0-%E8%AF%B4%E6%98%8E-spid-str"><thead><tr><th>字段</th><th>类型</th><th>名称</th><th>说明</th></tr></thead><tbody><tr><td>spid</td><td>string</td><td>接口账号</td><td></td></tr><tr><td>start\_time</td><td>string</td><td>开始时间 Unix timestamp（秒）</td><td>数据统计开始时间, 例:1601028870</td></tr><tr><td>end\_time</td><td>string</td><td>结束时间 Unix timestamp（秒）</td><td>数据统计结束时间, 例:1601028870</td></tr><tr><td>total</td><td>int</td><td>提交记录总数</td><td></td></tr><tr><td>success</td><td>int</td><td>成功状态数</td><td></td></tr></tbody></table>

### 响应

```json
{
  "code": 0,
  "msg": "Success"
}

```

# 通用API - 录音识别统计

#### 接口说明

按时间范围汇总或按天统计识别总数、失败数、语音信箱数和正常通话数

#### 请求方式

POST，form-data格式

#### 获取通话记录接口请求参数

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E6%98%AF%E5%90%A6%E5%BF%85%E9%A1%BB-%E8%AF%B4%E6%98%8E-servi"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">是否必须</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">service</td><td align="left">string</td><td align="left">是</td><td align="left">App.Sip\_Cdr.GetAsrStats</td></tr><tr><td align="left">token</td><td align="left">string</td><td align="left">是</td><td align="left">通过授权接口获取的token</td></tr><tr><td align="left">starttime</td><td align="left">string</td><td align="left">是</td><td align="left">起始时间，格式：yyyy-mm-dd hh:mm:ss，最长31天</td></tr><tr><td align="left">endtime</td><td align="left">string</td><td align="left">是</td><td align="left">结束时间，格式：yyyy-mm-dd hh:mm:ss，最长31天</td></tr><tr><td align="left">granularity</td><td align="left">int</td><td align="left">否</td><td align="left">统计粒度：total汇总、day按天</td></tr><tr><td align="left"></td><td align="left"></td><td align="left"></td><td align="left"></td></tr></tbody></table>

#### 获取通话记录接口请求示例（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Cdr.GetAsrStats',
        'token'     => 'ABCDEFG',
        'starttime'  => '2019-01-12 00:00:00',
        'endtime'    => '2020-12-12 00:00:00',
        'cdrid'  => 3
        'calluuid'   => 3,
        '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": {
            "stats": [
                {
                    "totalcalls": 0,
                    "failedcalls": 0,
                    "voicemailcalls": 0,
                    "normalcalls": 0
                }
            ]
        },
        "reqtime": 1789459343,
        "rsptime": 1789459343
    },
    "msg": ""
}


```

#### 返回参数说明

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-result-obj"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">result</td><td align="left">objest</td><td align="left">返回的结果集</td></tr><tr><td align="left">—totalitems</td><td align="left">int</td><td align="left">记录总数</td></tr><tr><td align="left">—currentpage</td><td align="left">int</td><td align="left">当前页码</td></tr><tr><td align="left">—itemsperpage</td><td align="left">int</td><td align="left">每页数量</td></tr><tr><td align="left">—stats</td><td align="left">array</td><td align="left">记录数组</td></tr><tr><td align="left">——totalcalls</td><td align="left">int</td><td align="left">总数</td></tr><tr><td align="left">——failedcalls</td><td align="left">int</td><td align="left">失败数</td></tr><tr><td align="left">——voicemailcalls</td><td align="left">int</td><td align="left">语音信箱数</td></tr><tr><td align="left">——normalcalls</td><td align="left">int</td><td align="left">正常通话数</td></tr></tbody></table>

# 语音文件管理 - 编辑语音文件

#### 接口说明

用来编辑语音文件，修改相关属性

#### 请求方式

POST，form-data格式

#### 请求参数

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E6%98%AF%E5%90%A6%E5%BF%85%E9%A1%BB-%E8%AF%B4%E6%98%8E-servi"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">是否必须</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">service</td><td align="left">string</td><td align="left">是</td><td align="left">App.Sip\_Voice.EditAudio</td></tr><tr><td align="left">token</td><td align="left">string</td><td align="left">是</td><td align="left">Token字符串</td></tr><tr><td align="left">id</td><td align="left">int</td><td align="left">是</td><td align="left">语音记录ID</td></tr><tr><td align="left">voicename</td><td align="left">string</td><td align="left">否</td><td align="left">语音名称</td></tr><tr><td align="left">mark</td><td align="left">string</td><td align="left">否</td><td align="left">语音备注</td></tr><tr><td align="left">status</td><td align="left">int</td><td align="left">否</td><td align="left">0:启用、1:禁用</td></tr></tbody></table>

#### 接口请求示例（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Voice.EditAudio',
        'token'     => 'ABCDEFG',
        'id'     => '111',
        'voicename'     => '111',
    ];
    $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": ""
}

```

# 预测式外呼 - 删除预测任务中的号码

#### 接口说明

删除预测试外呼任务中的号码。

#### 请求参数

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E6%98%AF%E5%90%A6%E5%BF%85%E9%A1%BB-%E8%AF%B4%E6%98%8E-servi"><thead><tr><th>参数名</th><th>类型</th><th>是否必须</th><th>说明</th></tr></thead><tbody><tr><td>service</td><td>string</td><td>是</td><td>App.Sip\_Yccall.taskDelPhone</td></tr><tr><td>token</td><td>string</td><td>是</td><td>通过授权接口获取的token</td></tr><tr><td>taskid</td><td>string</td><td>是</td><td>创建任务时返回的唯一id</td></tr><tr><td>telphone</td><td>string</td><td>是</td><td>号码，多个号码用英文逗号隔开</td></tr></tbody></table>

#### 接口请求示例（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Yccall.taskDelPhone',
        'token'     => 'ABCDEFG',
        'taskid'    => 'ABCDEFG',
        'telphone' => 1,
    ];
    $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": 1581496800,
        "rsptime": 1581496800
    },
    "msg": ""
}

```

#### 返回参数说明

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-desc-strin"><thead><tr><th>参数名</th><th>类型</th><th>说明</th></tr></thead><tbody><tr><td>desc</td><td>string</td><td>返回描述</td></tr></tbody></table>

# 安全设置

本文专注于保障用户数据的安全性，特别是敏感信息如电话号码的保护措施。

#### 号码脱敏

为了增强客户隐私保护，在某些情况下可以启用号码脱敏功能。开启后，平台在展示号码时将自动进行脱敏处理。

##### 功能入口

1.登录短信业务平台。 2.在左侧导航栏依次选择 **短信 &gt; 系统设置**。

[![](https://document.infin8linx.com/uploads/images/gallery/2026-03/scaled-1680-/image-1772591240236.png)](https://document.infin8linx.com/uploads/images/gallery/2026-03/image-1772591240236.png)

# 获取WABA账号信息

### 域名

- https://api.incsapp.com

### 请求路由

- /external/account

### 请求方式

- **GET**

### 请求头

- certification-code: f484bd42-4a0c-39d....

### 请求参数

- 无

### 响应示例

```json
{
    "status": "success",
    "code": 200,
    "message": "",
    "data": {
        "display_phone_number": "+62 ...", // 显示号码
        "verified_name": "Interkoneksi Indo Teknologi (IIT)", // 显示名
        "name_status": "APPROVED", // 表示显示名的批准状态
        "status": "CONNECTED", // 业务电话号码的状态必须为“CONNECTED”，该号码才能通过 API 收发消息。
        "quality_rating": "GREEN", // 号码质量评分
        "messaging_limit_tier": "TIER_1K", // 每日发消息上限
        "id": "30270...." // phone id
    },
    "error": {}
}

```

# 分机组管理 -  分机示闲示忙状态设置

#### 接口说明

设置分机的闲忙状态

#### 请求方式

POST，form-data格式

#### 请求参数

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E6%98%AF%E5%90%A6%E5%BF%85%E9%A1%BB-%E8%AF%B4%E6%98%8E-servi"><thead><tr><th>参数名</th><th>类型</th><th>是否必须</th><th>说明</th></tr></thead><tbody><tr><td>service</td><td>string</td><td>是</td><td>App.Sip\_Extgroup.EditExtnumber</td></tr><tr><td>token</td><td>string</td><td>是</td><td>通过授权接口获取的token</td></tr><tr><td>name</td><td>string</td><td>是</td><td>分机组名</td></tr><tr><td>extnumber</td><td>string</td><td>是</td><td>分机号</td></tr><tr><td>state</td><td>string</td><td>是</td><td>分机状态 idle：示闲；busy：示忙</td></tr></tbody></table>

#### 接口请求示例（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Extgroup.EditExtnumber',
        'token'     => 'ABCDEFG',
        'name'  => 'abcdefg',
        'extnumber'  => '100001',
        'state'  => 'idle'
    ];
    $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": 1581409508,
        "rsptime": 1581409508
    },
    "msg": ""
}

```

#### 返回数据字段说明

<table id="bkmrk-%E5%AD%97%E6%AE%B5-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-desc-string"><thead><tr><th>字段</th><th>类型</th><th>说明</th></tr></thead><tbody><tr><td>desc</td><td>string</td><td>返回描述</td></tr></tbody></table>

# 语音双向呼叫 - API接入流程

#### 双向呼叫API接入流程

![](https://doc-admin.infin8linx.com/uploads/202503/c2d9b4edbd97ed2b86e4467a6a49e392.jpg)

# 6.坐席管理

#### 功能入口

- ###### 登录坐席人员[管理后台](http://agents.infin8linx.com/)，在左侧菜单栏中选择 **「通话记录」** ，进入通话列表页面
    
    [![](https://document.infin8linx.com/uploads/images/gallery/2025-09/scaled-1680-/image-1758868565700.png)](https://document.infin8linx.com/uploads/images/gallery/2025-09/image-1758868565700.png)

#### 功能概述

支持坐席手动切换分机状态，控制是否接收呼入电话，适用于临时无法接线的场景（如休息、处理事务等），提升工作灵活性与服务质量。

#### 操作步骤

- ###### 在通话列表页面顶部操作栏的右侧区域，可查看当前分机的登录状态（如：空闲、忙碌、离线等）。
- ###### 点击顶部操作栏中的 **「分机状态」** 下拉菜单，可手动切换分机状态。
    
    
    - 当设置为 **「忙碌」** 状态后，该分机将不再接收新的呼入电话，适用于暂时无法接听来电的场景（如休息、处理事务等）。状态变更实时生效，便于灵活管理个人接线能力。

#### 功能说明

- 可选状态通常包括：空闲、忙碌等（具体以系统配置为准）。
- 设置为“忙碌”后，ACD（自动呼叫分配）系统将跳过该坐席，优先分配给其他空闲坐席。

#### 使用建议

- 开始工作前，请确保软电话已成功登录，并将分机状态设置为 **「空闲」**，以便正常接收呼入电话。
- 暂时离开时建议设置为 **“忙碌”**，避免错失重要客户来电。

# 语音识别结果回调说明

###### 语音识别结果回调数据格式

```
{
  "id": 111,
  "cdrid": 217490166,
  "calluuid": "d1cf5d3c-b09e-11f1-b0c6-4da05e0e9a62",
  "calleenumber": "085784462956",
  "record_file": "20260915084559_085784462956_8320979170.mp3",
  "preduration": 11,
  "prestatus": 2,
  "pretext": "Welcome to voicemail service.",
  "callduration": 90,
  "callstatus": 2,
  "lefttext": "Selamat malam, selamat datang di layanan pesan suara.",
  "righttext": "Silakan rekam pesan suara setelah mendengar nada berikut.",
  "voicemailstatus": 2,
  "voicemailevidence": "layanan pesan suara | voicemail service",
  "voicemailclassifiedat": "2026-10-19 14:30:25",
  "createdat": "2026-10-19 14:28:40"
}

```

###### 语音识别结果参数说明

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-id-int-%E6%95%B0%E6%8D%AEi"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">id</td><td align="left">int</td><td align="left">数据id</td></tr><tr><td align="left">cdrid</td><td align="left">int</td><td align="left">关联通话记录id</td></tr><tr><td align="left">calluuid</td><td align="left">string</td><td align="left">呼叫uuid</td></tr><tr><td align="left">calleenumber</td><td align="left">string</td><td align="left">呼叫被叫号码</td></tr><tr><td align="left">record\_file</td><td align="left">string</td><td align="left">录音文件名</td></tr><tr><td align="left">preduration</td><td align="left">int</td><td align="left">等待接通时长</td></tr><tr><td align="left">prestatus</td><td align="left">int</td><td align="left">响铃录音识别状态：0待处理，1处理中，2成功，3失败，4跳过</td></tr><tr><td align="left">pretext</td><td align="left">string</td><td align="left">响铃录音识别文本</td></tr><tr><td align="left">callduration</td><td align="left">int</td><td align="left">通话时长，单位秒</td></tr><tr><td align="left">callstatus</td><td align="left">int</td><td align="left">通话录音识别状态：0待处理，1处理中，2成功，3失败，4跳过，5部分成功</td></tr><tr><td align="left">lefttext</td><td align="left">string</td><td align="left">音左声道识别文本</td></tr><tr><td align="left">righttext</td><td align="left">string</td><td align="left">右声道识别文本</td></tr><tr><td align="left">voicemailstatus</td><td align="left">int</td><td align="left">语音信箱分类状态：0未知或未判断，1正常通话，2进入语音信箱</td></tr><tr><td align="left">voicemailevidence</td><td align="left">string</td><td align="left">分类命中的文本证据，保存实际命中的规则短语；未命中时为空</td></tr><tr><td align="left">voicemailclassifiedat</td><td align="left">string</td><td align="left">完成语音信箱分类的时间；未执行分类时为空</td></tr><tr><td align="left">createdat</td><td align="left">string</td><td align="left">记录创建时间</td></tr></tbody></table>

# Common API - Call recording download link interface

#### Interface Description

Get the download link for the call log file. At present, call recordings are saved for 3 months, and it is recommended to save them locally。

#### request parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th align="left">parameter name</th><th align="left">type</th><th align="left">Is it necessary</th><th align="left">illustrate</th></tr></thead><tbody><tr><td align="left">service</td><td align="left">string</td><td align="left">yes</td><td align="left">App.Sip\_Cdr.GetRecodeFile</td></tr><tr><td align="left">token</td><td align="left">string</td><td align="left">yes</td><td align="left">The token obtained through the authorization interface</td></tr><tr><td align="left">filename</td><td align="left">string</td><td align="left">yes</td><td align="left">The recording file name returned in the call recording callback</td></tr></tbody></table>

#### Interface request example（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);
?>


```

#### return data structure example

```
{
    "ret": 200,
    "data": {
        "status": 0,
        "desc": "get success",
        "result": {
            "downurl": "http://127.0.0.1:8080/abcdefg",
            "expiredtime": "Expiration time：2020-02-11 17:27:23"
        },
        "reqtime": 1581412943,
        "rsptime": 1581412943
    },
    "msg": ""
}


```

#### Return parameter description

<table id="bkmrk-parameter-name-type--1"><thead><tr><th align="left">parameter name</th><th align="left">type</th><th align="left">illustrate</th></tr></thead><tbody><tr><td align="left">result</td><td align="left">objest</td><td align="left">returned result set</td></tr><tr><td align="left">downurl</td><td align="left">string</td><td align="left">Call recording file download link</td></tr><tr><td align="left">expiredtime</td><td align="left">string</td><td align="left">Download link expiration time</td></tr></tbody></table>

# Common API - Call recording download link interface

#### Interface Description

Get the download link for the call log file. At present, call recordings are saved for 3 months, and it is recommended to save them locally。

#### request parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th align="left">parameter name</th><th align="left">type</th><th align="left">Is it necessary</th><th align="left">illustrate</th></tr></thead><tbody><tr><td align="left">service</td><td align="left">string</td><td align="left">yes</td><td align="left">App.Sip\_Cdr.GetRecodeFile</td></tr><tr><td align="left">token</td><td align="left">string</td><td align="left">yes</td><td align="left">The token obtained through the authorization interface</td></tr><tr><td align="left">filename</td><td align="left">string</td><td align="left">yes</td><td align="left">The recording file name returned in the call recording callback</td></tr></tbody></table>

#### Interface request example（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);
?>


```

#### return data structure example

```
{
    "ret": 200,
    "data": {
        "status": 0,
        "desc": "get success",
        "result": {
            "downurl": "http://127.0.0.1:8080/abcdefg",
            "expiredtime": "Expiration time：2020-02-11 17:27:23"
        },
        "reqtime": 1581412943,
        "rsptime": 1581412943
    },
    "msg": ""
}


```

#### Return parameter description

<table id="bkmrk-parameter-name-type--1"><thead><tr><th align="left">parameter name</th><th align="left">type</th><th align="left">illustrate</th></tr></thead><tbody><tr><td align="left">result</td><td align="left">objest</td><td align="left">returned result set</td></tr><tr><td align="left">downurl</td><td align="left">string</td><td align="left">Call recording file download link</td></tr><tr><td align="left">expiredtime</td><td align="left">string</td><td align="left">Download link expiration time</td></tr></tbody></table>

# Extension Manage - Extension idle and busy state setting

#### Interface Description

Set the free/busy status of the extension

#### Request method

POST, form-data format

#### request parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th>parameter name</th><th>type</th><th>Is it necessary</th><th>illustrate</th></tr></thead><tbody><tr><td>service</td><td>string</td><td>yes</td><td>App.Sip\_Extgroup.EditExtnumber</td></tr><tr><td>token</td><td>string</td><td>yes</td><td>The token obtained through the authorization interface</td></tr><tr><td>name</td><td>string</td><td>yes</td><td>extension group name</td></tr><tr><td>extnumber</td><td>string</td><td>yes</td><td>Ext</td></tr><tr><td>state</td><td>string</td><td>yes</td><td>Extension status idle: idle; busy: busy</td></tr></tbody></table>

#### Interface request example（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Extgroup.EditExtnumber',
        'token'     => 'ABCDEFG',
        'name'  => 'abcdefg',
        'extnumber'  => '100001',
        'state'  => 'idle'
    ];
    $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);
?>

```

#### return data structure example

```
{
    "ret": 200,
    "data": {
        "status": 0,
        "desc": "Successfully modified",
        "reqtime": 1581409508,
        "rsptime": 1581409508
    },
    "msg": ""
}

```

#### Return data field description

<table id="bkmrk-field-type-illustrat"><thead><tr><th>field</th><th>type</th><th>illustrate</th></tr></thead><tbody><tr><td>desc</td><td>string</td><td>return description</td></tr></tbody></table>

# Common API - Global error and status codes

#### Interface exception error

##### Description:

ret is not 200, msg is abnormal error message.

```
{
    "ret":400, // status code
    "data":[],
    "msg":"Illegal request: invalid parameter"
}


```

<table id="bkmrk-ret-msg-illustrate-4"><thead><tr><th align="left">ret</th><th align="left">msg</th><th align="left">illustrate</th></tr></thead><tbody><tr><td align="left">400</td><td align="left">illegal request</td><td align="left">Generally, the parameters are invalid</td></tr><tr><td align="left">500</td><td align="left"></td><td align="left">Server Error</td></tr><tr><td align="left">600</td><td align="left"></td><td align="left">The token is invalid, please log in again to verify</td></tr><tr><td align="left">601</td><td align="left">appid is not authorized</td><td align="left">Please check the appid or contact Yunhu Technology for authorization</td></tr><tr><td align="left">602</td><td align="left"></td><td align="left">appid authorization has expired</td></tr><tr><td align="left">603</td><td align="left"></td><td align="left">Module not licensed</td></tr><tr><td align="left">604</td><td align="left">IP is not authorized</td><td align="left">Please contact the manufacturer to authorize access</td></tr></tbody></table>

#### 二、The interface request is normal, but the internal processing error

##### Description

ret is 200. In the data structure, the status is 1, desc is the Chinese description of the failure, and errors is the detailed error information. For the code code, please refer to the corresponding description. msg is empty.

```
{
    "ret": 200,
    "data": {
        "status": 1,
        "desc": "xxxfail",
        "errors": {
            "code": "1003",
            "codemsg": "Authorization failed"
        },
        "reqtime": 1507529858,
        "rsptime": 1507529858
    },
    "msg": ""
}


```

<table id="bkmrk-code-codemsg-illustr"><thead><tr><th align="left">code</th><th align="left">codemsg</th><th align="left">illustrate</th></tr></thead><tbody><tr><td align="left">1001</td><td align="left">Server connection failed</td><td align="left">Usually due to network</td></tr><tr><td align="left">1002</td><td align="left">Abnormal operation</td><td align="left">Generally, it is a check exception, etc.</td></tr><tr><td align="left">1003</td><td align="left">operation failed</td><td align="left">Generally, authorization failure, logout failure, command sending failure, server connection exception, etc.</td></tr><tr><td align="left">1010</td><td align="left">Extension exception</td><td align="left">It may be a newly added extension, you need to log in again to get a new token</td></tr><tr><td align="left">1011</td><td align="left">illegal extension</td><td align="left">not owned by the company</td></tr><tr><td align="left">1012</td><td align="left">extension does not exist</td><td align="left">Extension Number Status</td></tr><tr><td align="left">1013</td><td align="left">extension disabled</td><td align="left">Extension Number Status</td></tr><tr><td align="left">1014</td><td align="left">extension not registered</td><td align="left">Extension Number Status</td></tr><tr><td align="left">1015</td><td align="left">The extension is not in a call</td><td align="left">Extension Number Status</td></tr><tr><td align="left">1016</td><td align="left">extension enabled</td><td align="left">Extension Number Status</td></tr><tr><td align="left">1017</td><td align="left">extension is registered</td><td align="left">Extension Number Status</td></tr><tr><td align="left">1018</td><td align="left">Number is enabled</td><td align="left">Caller ID status</td></tr><tr><td align="left">1019</td><td align="left">number disabled</td><td align="left">Caller ID status</td></tr><tr><td align="left">1020</td><td align="left">number does not exist</td><td align="left">Caller ID status</td></tr><tr><td align="left">1021</td><td align="left">illegal number</td><td align="left">not owned by the company</td></tr><tr><td align="left">1024</td><td align="left">task does not exist</td><td align="left">Predictive task interface return status</td></tr><tr><td align="left">1025</td><td align="left">has not started</td><td align="left">Predictive task interface return status</td></tr><tr><td align="left">1026</td><td align="left">in progress</td><td align="left">Predictive task interface return status</td></tr><tr><td align="left">1027</td><td align="left">pause</td><td align="left">Predictive task interface return status</td></tr><tr><td align="left">1028</td><td align="left">over</td><td align="left">Predictive task interface return status</td></tr><tr><td align="left">1201</td><td align="left">idle</td><td align="left">Extension is legal, enabled and registered</td></tr><tr><td align="left">1202</td><td align="left">ringing</td><td align="left">extension return</td></tr><tr><td align="left">1203</td><td align="left">off-hook</td><td align="left">extension return</td></tr><tr><td align="left">1204</td><td align="left">calling</td><td align="left">extension return</td></tr><tr><td align="left">1205</td><td align="left">User rejects</td><td align="left">Called party rejects</td></tr><tr><td align="left">1210</td><td align="left">Queue exception</td><td align="left">return in predictive outbound</td></tr><tr><td align="left">1211</td><td align="left">illegal queue</td><td align="left">Does not exist or is not owned by the company</td></tr><tr><td align="left">1212</td><td align="left">did not answer</td><td align="left">Assigned unanswered</td></tr><tr><td align="left">1213</td><td align="left">Waiting</td><td align="left">Waiting for assignment (idle)</td></tr><tr><td align="left">1214</td><td align="left">receiving</td><td align="left">Status of extensions in queue</td></tr><tr><td align="left">1215</td><td align="left">answered</td><td align="left">Status of extensions in the queue</td></tr><tr><td align="left">1216</td><td align="left">Reject</td><td align="left">Status of extensions in the queue</td></tr><tr><td align="left">1217</td><td align="left">pause</td><td align="left">show busy</td></tr><tr><td align="left">1218</td><td align="left">checked in</td><td align="left">The extension is already checked into the queue</td></tr><tr><td align="left">10001</td><td align="left">hang up normally</td><td align="left">call state</td></tr><tr><td align="left">10002</td><td align="left">call cancel</td><td align="left">call state</td></tr><tr><td align="left">10003</td><td align="left">refuse to answer</td><td align="left">call state</td></tr><tr><td align="left">10004</td><td align="left">Outbound channel line failure</td><td align="left">Usually due to wiring</td></tr><tr><td align="left">10005</td><td align="left">User timed out</td><td align="left">call state</td></tr><tr><td align="left">10006</td><td align="left">User is busy</td><td align="left">call state</td></tr><tr><td align="left">10040</td><td align="left">caller hang up</td><td align="left">call state</td></tr><tr><td align="left">10041</td><td align="left">Called hang up</td><td align="left">call state</td></tr></tbody></table>

# SMS Delivery Status Query

### Request URL

```
https://{domain}/sms/state?spid=xx&pwd=xx&timestamp=xx&msgid=xx

```

### Request Method

GET

### Parameter Description

<table id="bkmrk-field-type-name-desc"><thead><tr><th>Field</th><th>Type</th><th>Name</th><th>Description</th></tr></thead><tbody><tr><td>spid</td><td>string</td><td>Interface account</td><td></td></tr><tr><td>pwd</td><td>string</td><td>Password</td><td>**Important note 3**</td></tr><tr><td>timestamp</td><td>string</td><td>Current Unix timestamp (seconds)</td><td>Example: 1601028870</td></tr><tr><td>msgid</td><td>string</td><td>Message ID (no more than 100 per request)</td><td>For multiple IDs, connect with commas, e.g.,100123,100124</td></tr></tbody></table>

### Response

```json
{
  "code": 0,
  "msg": "Success",
  "data": [{
    "msgid": "100123",
    "state": 0
  }]
}

```

### Delivery Status Description

state 0-No receipt (submitted to channel), 1-Delivery success, 2-Delivery failure

## Asynchronous Delivery Notification

### Interface Description

After the channel returns a receipt, notify the client of SMS delivery content through the configured URL. If needed, inform us of the URL for configuration.

### Request URL

```
http(s)://{your_callback_url}?msgid=36160109669&das=628131565746&state=1

```

### Request Method

GET

### Parameter Description

- msgid Message ID
- state 0-No receipt (submitted to channel), 1-Delivery success, 2-Delivery failure

## Report SMS Status

### Interface Description

Client business platform SMS status statistics within a specific time period (start\_time~end\_time) for monitoring and problem detection

### Request URL

```
https://{domain}/sms/monitor

```

### Request Method

POST Content-Type: application/x-www-form-urlencoded

### Parameter Description

<table id="bkmrk-field-type-name-desc-1"><thead><tr><th>Field</th><th>Type</th><th>Name</th><th>Description</th></tr></thead><tbody><tr><td>spid</td><td>string</td><td>Interface account</td><td></td></tr><tr><td>start\_time</td><td>string</td><td>Start time Unix timestamp (seconds)</td><td>Data statistics start time, example: 1601028870</td></tr><tr><td>end\_time</td><td>string</td><td>End time Unix timestamp (seconds)</td><td>Data statistics end time, example: 1601028870</td></tr><tr><td>total</td><td>int</td><td>Total submission records</td><td></td></tr><tr><td>success</td><td>int</td><td>Number of successful status</td><td></td></tr></tbody></table>

### Response

```json
{
  "code": 0,
  "msg": "Success"
}

```

# Call recording download link interface

#### Interface Description

Get the download link for the call log file. At present, call recordings are saved for 3 months, and it is recommended to save them locally。

#### request parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th align="left">parameter name</th><th align="left">type</th><th align="left">Is it necessary</th><th align="left">illustrate</th></tr></thead><tbody><tr><td align="left">service</td><td align="left">string</td><td align="left">yes</td><td align="left">App.Sip\_Cdr.GetRecodeFile</td></tr><tr><td align="left">token</td><td align="left">string</td><td align="left">yes</td><td align="left">The token obtained through the authorization interface</td></tr><tr><td align="left">filename</td><td align="left">string</td><td align="left">yes</td><td align="left">The recording file name returned in the call recording callback</td></tr></tbody></table>

#### Interface request example（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);
?>


```

#### return data structure example

```
{
    "ret": 200,
    "data": {
        "status": 0,
        "desc": "get success",
        "result": {
            "downurl": "http://127.0.0.1:8080/abcdefg",
            "expiredtime": "Expiration time：2020-02-11 17:27:23"
        },
        "reqtime": 1581412943,
        "rsptime": 1581412943
    },
    "msg": ""
}


```

#### Return parameter description

<table id="bkmrk-parameter-name-type--1"><thead><tr><th align="left">parameter name</th><th align="left">type</th><th align="left">illustrate</th></tr></thead><tbody><tr><td align="left">result</td><td align="left">objest</td><td align="left">returned result set</td></tr><tr><td align="left">downurl</td><td align="left">string</td><td align="left">Call recording file download link</td></tr><tr><td align="left">expiredtime</td><td align="left">string</td><td align="left">Download link expiration time</td></tr></tbody></table>

# 编辑短信模板

#### **请求URL**

- `https://{domain}/hangupSms/editSmsTpl`

#### **请求方式**

- POST

#### **请求参数**

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E5%BF%85%E9%80%89-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-appid-%E6%98%AF"><thead><tr><th align="left">参数名</th><th align="left">必选</th><th align="left">类型</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">appid</td><td align="left">是</td><td align="left">string</td><td align="left">鉴权 appid</td></tr><tr><td align="left">accesskey</td><td align="left">是</td><td align="left">string</td><td align="left">鉴权 accesskey</td></tr><tr><td align="left">id</td><td align="left">是</td><td align="left">string</td><td align="left">模板ID</td></tr><tr><td align="left">name</td><td align="left">否</td><td align="left">string</td><td align="left">模板名称</td></tr><tr><td align="left">content</td><td align="left">否</td><td align="left">string</td><td align="left">短信内容</td></tr></tbody></table>

#### **请求示例**

```
{
    "appid":"xxxx",
    "accesskey":"xxx",
    "id":"23",
    "name":"test11323",
    "content":"hhhdedde"
}

```

#### **返回示例**

```
{
    "code": 0,
    "msg": "operation succeeded",
    "data": ""
}

```

#### **返回参数说明**

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-code-int-%E8%BF%94"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">code</td><td align="left">int</td><td align="left">返回码 0 成功 其他为失败</td></tr><tr><td align="left">msg</td><td align="left">string</td><td align="left">返回信息</td></tr><tr><td align="left">data</td><td align="left">object</td><td align="left">返回数据</td></tr></tbody></table>

# 短信计费编码预检

本系统目前仅支持 GSM7 和 UCS2 两种短信字符编码，说明如下：

<table id="bkmrk-%E5%AD%97%E7%AC%A6%E9%9B%86-%E5%8D%95%E6%9D%A1%E5%AD%97%E7%AC%A6%E9%95%BF%E5%BA%A6-%E9%95%BF%E7%9F%AD%E4%BF%A1%E6%AF%8F%E6%9D%A1%E5%AD%97%E7%AC%A6%E9%95%BF%E5%BA%A6"><thead><tr><th>字符集</th><th>单条字符长度</th><th>长短信每条字符长度</th><th>说明</th></tr></thead><tbody><tr><td>GSM7</td><td>160</td><td>153</td><td>适用由26个英文字母组成的语言，如英文，印尼语等</td></tr><tr><td>UCS2</td><td>70</td><td>67</td><td>适用除GSM7外的语言，如西语，日语，汉语等</td></tr></tbody></table>

**特别说明**

1. “^“，”~“，”\\“, "{", "}", "\[", "\]", "|", "€"; 这些字符使用 GSM7 编码时占用两个字符长度
2. 对于HTTP接口，长短信按原文提交，不需要分条后提交
3. 为保证终端设备收到是整条长短信，系统需要使用UDH标识每条短信，因而：
    
    长短信每条长度 = 单条字符长度- UDH标识

### 短信内容编码检查接口

#### 接口说明

通过该接口可以检查当前内容使用的字符集 和计费条数

#### 请求URL

```
https://{domain}/sms/charset?spid=xx&pwd=xx&sm=xx&timestamp=xx

```

#### 请求方法

GET

#### 参数说明

<table id="bkmrk-%E5%AD%97%E6%AE%B5-%E7%B1%BB%E5%9E%8B-%E5%90%8D%E7%A7%B0-%E8%AF%B4%E6%98%8E-spid-str"><thead><tr><th>字段</th><th>类型</th><th>名称</th><th>说明</th></tr></thead><tbody><tr><td>spid</td><td>string</td><td>接口账号</td><td></td></tr><tr><td>pwd</td><td>string</td><td>加密后密码</td><td>[接口说明3](/books/message-cn-api/page/4f6ff "接口说明")</td></tr><tr><td>sm</td><td>string</td><td>送检内容</td><td>需转换为16进制码（Hex） [附录3](/books/message-cn-api/page/java16#3)</td></tr><tr><td>timestamp</td><td>string</td><td>当前Unix timestamp（秒）</td><td>例： 1601028870</td></tr></tbody></table>

#### 响应

```json
{
    "code": 0,
    "msg": "Success",
    "data": {
        "charset": "UCS2"
        "detail": "Content billed as 2 messages. Charset: UCS2, 70 chars/msg.",
        "parts": 2, 
        "single": 70
    }
}

```

**问题排查:如果短信内容都是英文字母但是返回UCS2,建议删除所有空格再重新输入后重试，如还有问题请及时联系我们**

#### 响应字段说明

1. charset 当前内容使用字符集合，GSM7/UCS2
2. parts 当前内容计费条数
3. single 单条计费长度(含UDH)

# 通用API - 获取IVR语音文件

#### 接口说明

用于获取通过后台上传的ivr语音文件下载链接，返回30分钟内有效的语音文件播放或下载地址

#### 请求参数

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E6%98%AF%E5%90%A6%E5%BF%85%E9%A1%BB-%E8%AF%B4%E6%98%8E-servi"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">是否必须</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">service</td><td align="left">string</td><td align="left">是</td><td align="left">App.Sip\_Cdr.GetVoiceFile</td></tr><tr><td align="left">token</td><td align="left">string</td><td align="left">是</td><td align="left">通过授权接口获取的token</td></tr><tr><td align="left">filename</td><td align="left">string</td><td align="left">是</td><td align="left">校验后台上传的文件名</td></tr></tbody></table>

#### 接口请求示例（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Cdr.GetVoiceFile',
        '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": ""
}


```

#### 返回参数说明

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-result-obj"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">result</td><td align="left">objest</td><td align="left">返回的结果集</td></tr><tr><td align="left">downurl</td><td align="left">string</td><td align="left">通话录音文件下载链接</td></tr><tr><td align="left">expiredtime</td><td align="left">string</td><td align="left">下载链接失效时间</td></tr></tbody></table>

# 语音文件管理 - 删除语音文件

#### 接口说明

用于删除语音文件

#### 请求方式

POST，form-data格式

#### 请求参数

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E6%98%AF%E5%90%A6%E5%BF%85%E9%A1%BB-%E8%AF%B4%E6%98%8E-servi"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">是否必须</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">service</td><td align="left">string</td><td align="left">是</td><td align="left">App.Sip\_Voice.DelAudio</td></tr><tr><td align="left">token</td><td align="left">string</td><td align="left">是</td><td align="left">Token字符串</td></tr><tr><td align="left">id</td><td align="left">int</td><td align="left">是</td><td align="left">语音记录ID</td></tr><tr><td align="left">download</td><td align="left">int</td><td align="left">否</td><td align="left">0:在线播放（默认）、1:下载文件</td></tr></tbody></table>

#### 接口请求示例（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => ' App.Sip_Voice.DelAudio',
        'token'     => 'ABCDEFG',
        'id'     => '111',
    ];
    $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": ""
}

```

# 预测式外呼 - 预测外呼任务列表

#### 接口说明

**获取任务列表**

#### 请求参数

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E6%98%AF%E5%90%A6%E5%BF%85%E9%A1%BB-%E8%AF%B4%E6%98%8E-servi"><thead><tr><th>参数名</th><th>类型</th><th>是否必须</th><th>说明</th></tr></thead><tbody><tr><td>service</td><td>string</td><td>是</td><td>App.Sip\_Yccall.TaskList</td></tr><tr><td>token</td><td>string</td><td>是</td><td>通过授权接口获取的token</td></tr><tr><td>createtime</td><td>datetime</td><td>否</td><td>任务创建时间，格式：yyyy-mm-dd hh:mm:ss</td></tr><tr><td>endtime</td><td>datetime</td><td>否</td><td>结束时间，格式：yyyy-mm-dd hh:mm:ss</td></tr><tr><td>taskid</td><td>string</td><td>否</td><td>任务ID</td></tr><tr><td>taskname</td><td>string</td><td>否</td><td>任务名称</td></tr><tr><td>status</td><td>string</td><td>否</td><td>任务状态 0:未开始、1:进行中、2:暂停、3:结束</td></tr><tr><td>tasktype</td><td>string</td><td>否</td><td>接听类型 transfer:分机、groups:群组</td></tr><tr><td>taskobject</td><td>string</td><td>否</td><td>群组或坐席</td></tr><tr><td>currentpage</td><td>int</td><td>否</td><td>页数，默认：1</td></tr><tr><td>itemsperpage</td><td>int</td><td>否</td><td>每页数量，默认：10，最小：1；最大：1000</td></tr></tbody></table>

#### 接口请求示例（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Yccall.TaskList',
        'token'     => 'ABCDEFG',
        'taskid'     => ''
    ];
    $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": 1,
          "currentpage": 1,
          "itemsperpage": 10,
          "task": [
              {
                  "taskid": "20250106150501420056", #任务id
                  "taskname": "20250106150501420056",  # 任务名称
                  "taskassign": "700000",  # 任务坐席
				"starttime": "2021-08-21 00:11:22",  # 启动时间
                  "taskscale": "1:2",  # 外呼比例
                  "nowscale": "", # 当前呼叫比例
                  "disnumber": "17328347742",  # 主叫号码
                  "status": 1025,  # 任务状态：1025=未开始，1026=进行中，1027=暂停，1028=已结束
                  "createtime": "2025-01-06 15:05:01",  # 创建时间
                  "total": 2,  # 任务总数
                  "called": 0,  # 已呼叫个数
                  "nocall": 2  # 未呼叫个数
              }
          ]
      },
      "reqtime": 1581496504,
      "rsptime": 1581496504
    },
    "msg": ""
}

```

#### 返回参数说明

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-result-obj"><thead><tr><th>参数名</th><th>类型</th><th>说明</th></tr></thead><tbody><tr><td>result</td><td>object</td><td>返回结果</td></tr></tbody></table>

# 分机组管理 - 获取分机组成员信息

#### 接口说明

获取分机组中的分机状态

#### 请求方式

POST，form-data格式

#### 请求参数

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E6%98%AF%E5%90%A6%E5%BF%85%E9%A1%BB-%E8%AF%B4%E6%98%8E-servi"><thead><tr><th>参数名</th><th>类型</th><th>是否必须</th><th>说明</th></tr></thead><tbody><tr><td>service</td><td>string</td><td>是</td><td>App.Sip\_Extgroup.GetGroupExt</td></tr><tr><td>token</td><td>string</td><td>是</td><td>通过授权接口获取的token</td></tr><tr><td>name</td><td>string</td><td>否</td><td>分机组名，为空则获取当前用户所有分机组数据</td></tr><tr><td>extnumber</td><td>string</td><td>否</td><td>分机号，为空则获取当前用户所有分机数据</td></tr><tr><td>currentpage</td><td>int</td><td>否</td><td>页数，默认：1</td></tr><tr><td>itemsperpage</td><td>int</td><td>否</td><td>每页数量，默认：10，最小：1；最大：1000</td></tr></tbody></table>

#### 接口请求示例（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Extgroup.GetGroupExt',
        'token'     => 'ABCDEFG',
        'name'  => 'abcdefg',
        'extnumber'  => '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": {
        "totalitems": 1,
        "currentpage": 1,
        "itemsperpage": 20,
        "extensions": [
            {
                "name": "kefu01",
                "extnumber": "6853880001",
                "status": "hangup",
                "weight": 1,
                "linkcount": 0,
                "date": null,
                "state": "idle"
            }
        ]
    },
    "reqtime": 1789612335,
    "rsptime": 1789612335
},
"msg": ""
}

```

#### 返回数据字段说明

<table id="bkmrk-%E5%AD%97%E6%AE%B5-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-result-obje"><thead><tr><th>字段</th><th>类型</th><th>说明</th></tr></thead><tbody><tr><td>result</td><td>object</td><td>分机列表分页信息</td></tr><tr><td>-totalitems</td><td>int</td><td>分机总数</td></tr><tr><td>-currentpage</td><td>int</td><td>当前页码</td></tr><tr><td>-itemsperpage</td><td>int</td><td>每页默认值</td></tr><tr><td>-extensions</td><td>string</td><td>分机号数据数组</td></tr><tr><td>—name</td><td>string</td><td>分机组名</td></tr><tr><td>—extnumber</td><td>string</td><td>分机号</td></tr><tr><td>—status</td><td>string</td><td>分机状态 answer：应答；hangup：挂断</td></tr><tr><td>—priority</td><td>string</td><td>优先级</td></tr><tr><td>—linkcount</td><td>string</td><td>通话时长</td></tr><tr><td>—date</td><td>string</td><td>更新时间</td></tr><tr><td>—state</td><td>string</td><td>分机闲忙状态 idle：示闲； busy：示忙</td></tr></tbody></table>

# 语音双向呼叫 - 双向呼叫接口

#### 接口说明：

双向呼叫主要用于先呼叫公司客服号码，接通后再对被叫客户号码进行呼叫。

#### 请求方式

POST，form-data格式

#### 请求参数

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E6%98%AF%E5%90%A6%E5%BF%85%E9%A1%BB-%E8%AF%B4%E6%98%8E-servi"><thead><tr><th>参数名</th><th>类型</th><th>是否必须</th><th>说明</th></tr></thead><tbody><tr><td>service</td><td>string</td><td>必须</td><td>App.Sip\_Call.DoubleCall</td></tr><tr><td>token</td><td>字符串</td><td>必须</td><td>Token，最小：32；最大32</td></tr><tr><td>extnumber</td><td>字符串</td><td>必须</td><td>分机号码</td></tr><tr><td>anumber</td><td>字符串</td><td>必须</td><td>员工手机号码</td></tr><tr><td>bnumber</td><td>字符串</td><td>必须</td><td>被叫客户号码</td></tr><tr><td>disnumber</td><td>字符串</td><td>可选</td><td>显示的主叫号码，留空随机取一个主叫</td></tr><tr><td>userid</td><td>字符串</td><td>可选</td><td>自定义数据(员工ID)</td></tr><tr><td>memberid</td><td>字符串</td><td>可选</td><td>自定义数据(会员ID)</td></tr><tr><td>chengshudu</td><td>字符串</td><td>可选</td><td>自定义数据(成熟度)</td></tr><tr><td>customuuid</td><td>字符串</td><td>可选</td><td>自定义数据(客户ID)</td></tr></tbody></table>

#### 接口请求示例（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Call.DoubleCall',
        'token'     => 'ABCDEFG',
        'extnumber'  => 'abcdefg',
        'anumber'  => 'abcdefg',
        'bnumber'  => 'abcdefg',
        'disnumber'  => 'abcdefg',
        'userid'  => 'abcdefg',
        'memberid'  => 'abcdefg',
        'chengshudu'  => 'abcdefg',
        'customuuid'  => '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": 1584953473,
        "rsptime": 1584953473
    },
    "msg": ""
}

```

#### 返回参数说明

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-status-int"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">status</td><td align="left">int</td><td align="left">0修改成功，1修改失败</td></tr><tr><td align="left">desc</td><td align="left">string</td><td align="left">描述信息</td></tr><tr><td align="left">result</td><td align="left">object</td><td align="left">对象信息当前为空</td></tr></tbody></table>

# Common API - Extension call state callback parameters

#### Interface Description

To call back the call status of an extension, you need to configure a callback address for the corresponding account. Callback address configuration for extension call status: The customer provides an interface address that can receive json data, which can be configured by us or by the customer in the background.

#### Extension call status callback data format

```
{
"buuid":"526d643a-e8fe-11ea-a84a-cf6e45e88543",
"callee":"87847569524",
"caller":"90240005",
"companycode":"9024",
"customuuid":"123Abc",
"direction":"callout",
"disnumber":"2190240001",
"extnumber":"90240005",
"isbleg":"false",
"method":"3",
"starttime":"1598598959",
"status":"ring",
"type":"call",
"uuid":"526d637c-e8fe-11ea-a849-cf6e45e88543"
}


```

#### Explanation of extension call status callback parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th align="left">parameter name</th><th align="left">type</th><th align="left">illustrate</th></tr></thead><tbody><tr><td align="left">buuid</td><td align="left">string</td><td align="left">The uuid of the called number on side b of the call</td></tr><tr><td align="left">callee</td><td align="left">int</td><td align="left">called number</td></tr><tr><td align="left">caller</td><td align="left">int</td><td align="left">calling number</td></tr><tr><td align="left">companycode</td><td align="left">int</td><td align="left">The company id corresponding to the account</td></tr><tr><td align="left">customuuid</td><td align="left">string</td><td align="left">Custom parameter - customer id</td></tr><tr><td align="left">direction</td><td align="left">string</td><td align="left">Call direction: 1. Incoming; 2. Outgoing;</td></tr><tr><td align="left">disnumber</td><td align="left">int</td><td align="left">Destination number to call</td></tr><tr><td align="left">extnumber</td><td align="left">int</td><td align="left">Ext</td></tr><tr><td align="left">isbleg</td><td align="left">string</td><td align="left">true is ringing on the mobile phone side; false is ringing on the seat side;</td></tr><tr><td align="left">method</td><td align="left">string</td><td align="left">Call method: 0, unlimited; 1, mutual extension dial; 2, extension direct dial; 3, API call (default); 4, API double call; 5, predictive outbound call; 6, IVR/group call.</td></tr><tr><td align="left">starttime</td><td align="left">string</td><td align="left">call time</td></tr><tr><td align="left">status</td><td align="left">string</td><td align="left">call type</td></tr><tr><td align="left">type</td><td align="left">string</td><td align="left">call type</td></tr><tr><td align="left">uuid</td><td align="left">string</td><td align="left">call uuid</td></tr></tbody></table>

# Extension Manage - Get extension idle(busy status)

#### Interface Description

Get the extension status in the extension group

#### Request method

POST, form-data format

#### request parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th>parameter name</th><th>type</th><th>Is it necessary</th><th>illustrate</th></tr></thead><tbody><tr><td>service</td><td>string</td><td>yes</td><td>App.Sip\_Extgroup.GetGroupExt</td></tr><tr><td>token</td><td>string</td><td>yes</td><td>The token obtained through the authorization interface</td></tr><tr><td>name</td><td>string</td><td>no</td><td>Extension group name, if it is empty, all extension group data of the current user will be obtained</td></tr><tr><td>extnumber</td><td>string</td><td>no</td><td>Extension number, if it is empty, all extension data of the current user will be obtained</td></tr></tbody></table>

#### Interface request example（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Extgroup.GetGroupExt',
        'token'     => 'ABCDEFG',
        'name'  => 'abcdefg',
        'extnumber'  => '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);
?>

```

#### return data structure example

```
{
    "ret": 200,
    "data": [
        {
            "name": "autocall-9026",
            "extnumber": "9026004",
            "status": "hangup",
            "priority": 1,
            "linkcount": 0,
            "date": null,
            "state": "idle"
        }
    ],
    "msg": ""
}

```

#### Return data field description

<table id="bkmrk-field-type-illustrat"><thead><tr><th>field</th><th>type</th><th>illustrate</th></tr></thead><tbody><tr><td>data</td><td>string</td><td>extension data array</td></tr><tr><td>—name</td><td>string</td><td>extension group name</td></tr><tr><td>—extnumber</td><td>string</td><td>Ext</td></tr><tr><td>—status</td><td>string</td><td>Extension status answer: answer; hangup: hang up</td></tr><tr><td>—priority</td><td>string</td><td>priority</td></tr><tr><td>—linkcount</td><td>string</td><td>call time</td></tr><tr><td>—date</td><td>string</td><td>update time</td></tr><tr><td>—state</td><td>string</td><td>Extension idle/busy status idle: idle; busy: busy</td></tr></tbody></table>

# Common API - Obtain authorization token interface

#### Interface Description：

Tokens required to access other interfaces must be obtained from this interface through the authorized Appid and Accesskey (except for the batch IVR interface). The timeliness of the interface authorization Token is 12 hours.

#### Request method

POST, form-data format

#### request parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th align="left">parameter name</th><th align="left">type</th><th align="left">Is it necessary</th><th align="left">illustrate</th></tr></thead><tbody><tr><td align="left">appid</td><td align="left">string</td><td align="left">yes</td><td align="left">authorized appid</td></tr><tr><td align="left">accesskey</td><td align="left">string</td><td align="left">yes</td><td align="left">authorized accesskey</td></tr><tr><td align="left">service</td><td align="left">string</td><td align="left">yes</td><td align="left">App.Sip\_Auth.Login</td></tr></tbody></table>

#### Interface request example（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":"Authorization successful",
        "result":{
            "companycode":"1",
            "companyname":"test",
            "token":"773a70dd02f0695d50205e9b267692b9",
            "authtime":"2020-01-01 00:00:00",
            "authmodel":""
        },
        "reqtime":1581240882,
        "rsptime":1581240882
    },
    "msg":""
}


```

#### Return parameter description

<table id="bkmrk-parameter-name-type--1"><thead><tr><th align="left">parameter name</th><th align="left">type</th><th align="left">illustrate</th></tr></thead><tbody><tr><td align="left">companycode</td><td align="left">int</td><td align="left">Company code</td></tr><tr><td align="left">companyname</td><td align="left">string</td><td align="left">Company Name</td></tr><tr><td align="left">token</td><td align="left">string</td><td align="left">Authorization token, used to access other interfaces</td></tr></tbody></table>

# Appendix-Hexadecimal conversion in Java and PHP

### Java String to Hexadecimal

```java
public static String strToHex(String str) {
    String st = "";
    try {
        byte[] by = str.getBytes("utf8");
        for (int i = 0; i < by.length; i++) {
            String strs = Integer.toHexString(by[i]);
            if (strs.length() > 2){
                strs = strs.substring(strs.length() - 2);
            } else if (strs.length() == 1) {
                //Add padding for hexadecimal 00~0F
                strs = String.format("%02x", by[i]);
            }
            st += strs;
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return st;
}

```

### PHP String to Hexadecimal

```php
bin2hex($utf8Str);

```

# 删除短信模板

#### **请求URL**

- `https://{domain}/hangupSms/delSmsTpl`

#### **请求方式**

- POST

#### **请求参数**

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E5%BF%85%E9%80%89-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-appid-%E6%98%AF"><thead><tr><th align="left">参数名</th><th align="left">必选</th><th align="left">类型</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">appid</td><td align="left">是</td><td align="left">string</td><td align="left">鉴权 appid</td></tr><tr><td align="left">accesskey</td><td align="left">是</td><td align="left">string</td><td align="left">鉴权 accesskey</td></tr><tr><td align="left">id</td><td align="left">是</td><td align="left">string</td><td align="left">模板ID</td></tr></tbody></table>

#### **请求示例**

```
{
    "appid":"xxxx",
    "accesskey":"xxx",
    "id":"23"
}

```

#### **返回示例**

```
{
    "code": 0,
    "msg": "operation succeeded",
    "data": ""
}

```

#### **返回参数说明**

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-code-int-%E8%BF%94"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">code</td><td align="left">int</td><td align="left">返回码 0 成功 其他为失败</td></tr><tr><td align="left">msg</td><td align="left">string</td><td align="left">返回信息</td></tr><tr><td align="left">data</td><td align="left">object</td><td align="left">返回数据</td></tr></tbody></table>

# 附录

### 1. 状态码(code)说明

- 0 -- 提交成功
- 101 -- 必填字段不能空（注意请求方式为GET）
- 102 -- 验证失败（Unix timestamp不分时区，要验证时间，确保误差范围 \[-10s, 10s\]）
- 103 -- spid 不存在
- 104 -- 密码不匹配（参数必须包含timestamp）
- 105 -- 无可用通道(请联系管理员确认通道配置情况)
- 106 -- 配置错误
- 107 -- 手机已在黑名单
- 108 -- 内容超过最大字数
- 109 -- 扣费失败，请确定账户金额
- 110 -- 请求IP限制
- 111 -- 该手机号发送限制（发送次数过多）
- 120 -- 系统错误，请稍后再试 （**重要提示1.1**）

### 2. 单条短信状态码(state)说明

- 0 -- 提交成功
- 105 -- 无可用通道（请联系管理员确认通道配置情况）
- 106 -- 模版错误
- 107 -- 手机已在黑名单
- 108 -- 内容超过最大字符
- 109 -- 扣费失败，请确定账户金额
- 120 -- 系统错误，请稍后再试
- 130 -- 内容无法解析

### 3 字符转16进制（Hex）示例代码

<span id="bkmrk--1"></span>

#### 3.1 Java

```java
public static String strToHex(String str) {
    String st = "";
    try {
        byte[] by = str.getBytes("utf8");
        for (int i = 0; i < by.length; i++) {
            String strs = Integer.toHexString(by[i]);
            if (strs.length() > 2){
                strs = strs.substring(strs.length() - 2);
            } else if (strs.length() == 1) {
                //补足16进制 00~0F补足
                strs = String.format("%02x", by[i]);
            }
            st += strs;
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return st;
}

```

#### 3.2 PHP

```php
bin2hex($utf8Str);

```

#### 3.2 Golang

```go
package main

import (
    "encoding/hex"
    "fmt"
)

func main() {
    // 转换字符串为字节切片
    byteData := []byte("测试数据")
    // 编码为十六进制字符串
    hexString := hex.EncodeToString(byteData)
    fmt.Println(hexString) // 输出十六进制表示
}


```

# IVR管理 - 播放ivr语音(异步批量)-v2

#### 接口说明

对于需要播放同一个IVR语音内容的不同号码，可以使用此接口批量呼出，单次提交不要超过5000个号码。

#### 请求方式

POST，form-data格式

#### 请求参数

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E6%98%AF%E5%90%A6%E5%BF%85%E9%A1%BB-%E8%AF%B4%E6%98%8E-servi"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">是否必须</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">service</td><td align="left">string</td><td align="left">是</td><td align="left">App.Sip\_Call.PlayVoiceBatch</td></tr><tr><td align="left">token</td><td align="left">string</td><td align="left">是</td><td align="left">通过授权接口获取的token</td></tr><tr><td align="left">destnumber</td><td align="left">string</td><td align="left">是</td><td align="left">目标号码，多个号码用“,”连接</td></tr><tr><td align="left">voicetype</td><td align="left">int</td><td align="left">是</td><td align="left">播放的语音文件类型。1:离线语音文件（自己录制的语音文件，上传到系统后台或者通过系统后台在线生成的）、2:在线语音(url) （提供一个可以访问的录音文件地址）</td></tr><tr><td align="left">voicefile</td><td align="left">string</td><td align="left">是</td><td align="left">voicetype=1 传后台的录音文件名；voicetype=2 传可以访问的语音url地址</td></tr><tr><td align="left">disnumber</td><td align="left">string</td><td align="left">否</td><td align="left">主叫号码(显示在用户手机上的来电号码），留空则系统会随机取一个主叫号码</td></tr><tr><td align="left">userid</td><td align="left">string</td><td align="left">否</td><td align="left">自定义数据(员工ID)</td></tr><tr><td align="left">memberid</td><td align="left">string</td><td align="left">否</td><td align="left">自定义数据(会员ID)</td></tr><tr><td align="left">ext</td><td align="left">string</td><td align="left">否</td><td align="left">自定义数据(可以是json字符串)</td></tr><tr><td align="left">customuuid</td><td align="left">string</td><td align="left">否</td><td align="left">客户自定义数据，在通话结束之后的回调数据中原样返回</td></tr><tr><td align="left">transfer</td><td align="left">int</td><td align="left">否</td><td align="left">是否转接到agent， 0不转、1转接，默认值为0，设置为转接agent不能为空</td></tr><tr><td align="left">agent</td><td align="left">string</td><td align="left">否</td><td align="left">坐席组或坐席号</td></tr><tr><td align="left">waittime</td><td align="left">int</td><td align="left">否</td><td align="left">呼叫等待时间，默认60s (秒)</td></tr><tr><td align="left">conntime</td><td align="left">int</td><td align="left">否</td><td align="left">呼叫通话时间, 播放多久后自动结束,默认60s (秒)</td></tr></tbody></table>

#### 接口请求示例（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Call.PlayVoiceBatch',
        'token'     => 'ABCDEFG',
        'destnumber'  => '133，134，135，135',
        'voicetype'  => 'abcdefg',
        'voicefile'  => 'abcdefg',
        'userid'  => 'abcdefg',
        'disnumber'  => 'abcdefg',
        'customuuid'  => 'abcdefg',
        'waittime'  => 60,
        'conntime'  => 60,
    ];
    $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": {
            "batch_id": "20260917114314491892",
            "count": 5
        },
        "reqtime": 1789616594,
        "rsptime": 1789616594
    },
    "msg": ""
}


```

#### 返回参数说明

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-code-int-%E8%BF%94"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">code</td><td align="left">int</td><td align="left">返回码 200 成功</td></tr><tr><td align="left">msg</td><td align="left">string</td><td align="left">返回提示信息</td></tr><tr><td align="left">data</td><td align="left">object</td><td align="left">返回数据对象</td></tr><tr><td align="left">—desc</td><td align="left">string</td><td align="left">请求提示信息</td></tr><tr><td align="left">—reqtime</td><td align="left">int</td><td align="left">请求时间戳</td></tr><tr><td align="left">—rsptime</td><td align="left">int</td><td align="left">返回时间戳</td></tr></tbody></table>

# 预测式外呼 - 预测外呼任务号码列表

#### 接口说明

**获取预测式外呼任务呼叫详情数据**

#### 请求参数

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E6%98%AF%E5%90%A6%E5%BF%85%E9%A1%BB-%E8%AF%B4%E6%98%8E-servi"><thead><tr><th>参数名</th><th>类型</th><th>是否必须</th><th>说明</th></tr></thead><tbody><tr><td>service</td><td>string</td><td>是</td><td>App.Sip\_Yccall.TaskInfo</td></tr><tr><td>token</td><td>string</td><td>是</td><td>通过授权接口获取的token</td></tr><tr><td>taskid</td><td>string</td><td>是</td><td>任务ID</td></tr><tr><td>currentpage</td><td>int</td><td>否</td><td>页数，默认：1</td></tr><tr><td>itemsperpage</td><td>int</td><td>否</td><td>每页数量，默认：10，最小：1；最大：1000</td></tr></tbody></table>

#### 接口请求示例（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Yccall.TaskInfo',
        'token'     => 'ABCDEFG',
        'taskid'     => 'taskid'
    ];
    $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": 1,
          "currentpage": 1,
          "itemsperpage": 1000,
          "task": [{
              "taskid": "20260917111445955230",
              "taskname": "20260917111445955230",
              "taskassign": "kefu01",
              "taskscale": "1:2",
              "nowscale": null,
              "concurrent": 200,
              "currentconcurrent": 0,
              "disnumber": "0",
              "status": 1025,
              "customtaskid": "8888723019",
              "createtime": "2026-09-17 10:14:48",
              "starttime": null,
              "endtime": null,
              "scheduledtime": null,
              "pausedtime": null,
              "round": 1,
              "isscale": "auto",
              "is_multi_call": 1,
              "multi_call_type": 2,
              "multi_call_interval": 60,
              "multi_call_max_rounds": 1,
              "message": "未开始",
              "runtime": "00:00:00",
              "total": 2,
              "called": 0,
              "nocall": 2,
              "answer": 0,
              "noanswer": 0,
              "losscall": 0
          }]
      },
      "reqtime": 1789614969,
      "rsptime": 1789614969
  },
  "msg": ""
} 

```

#### 返回参数说明

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-result-obj"><thead><tr><th>参数名</th><th>类型</th><th>说明</th></tr></thead><tbody><tr><td>result</td><td>object</td><td>返回结果</td></tr></tbody></table>

# 分机组管理 - 根据成员查询坐席组

#### 接口说明

根据坐席账号查询坐席所在的坐席组

#### 请求方式

POST，form-data格式

#### 请求参数

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E6%98%AF%E5%90%A6%E5%BF%85%E9%A1%BB-%E8%AF%B4%E6%98%8E-servi"><thead><tr><th>参数名</th><th>类型</th><th>是否必须</th><th>说明</th></tr></thead><tbody><tr><td>service</td><td>string</td><td>是</td><td>App.Sip\_Extgroup.GetAllExtGroup</td></tr><tr><td>token</td><td>string</td><td>是</td><td>通过授权接口获取的token</td></tr><tr><td>extnumber</td><td>string</td><td>是</td><td>坐席账号</td></tr></tbody></table>

#### 接口请求示例（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Extgroup.GetAllExtGroup',
        'token'     => 'ABCDEFG',
        'extnumber'  => '7001',
    ];
    $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": [
                {
                    "name": "kefu01"
                }
            ]
        "reqtime": 1789611195,
        "rsptime": 1789611195
    },
    "msg": ""
}

```

#### 返回字段说明

<table id="bkmrk-%E5%AD%97%E6%AE%B5-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-result-arra"><thead><tr><th>字段</th><th>类型</th><th>说明</th></tr></thead><tbody><tr><td>result</td><td>array</td><td>分机成员信息</td></tr><tr><td>—name</td><td>string</td><td>分机组名</td></tr></tbody></table>

# 分机管理 - 批量修改密码

#### 接口说明

批量修改密码，密码由系统自动生成

#### 请求方式

POST，form-data格式

#### 请求参数

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E6%98%AF%E5%90%A6%E5%BF%85%E9%A1%BB-%E8%AF%B4%E6%98%8E-servi"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">是否必须</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">service</td><td align="left">string</td><td align="left">是</td><td align="left">App.Sip\_Sipnum.BatchEditPassword</td></tr><tr><td align="left">token</td><td align="left">string</td><td align="left">是</td><td align="left">通过授权接口获取的token</td></tr><tr><td align="left">extnumber</td><td align="left">string</td><td align="left">否</td><td align="left">分机账号，多个用英文逗号分隔</td></tr></tbody></table>

#### 接口请求示例（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Sipnum.BatchEditPassword',
        'token'     => 'ABCDEFG',
        'extnumber'  => '100001',
    ];
    $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": {
            "updated": 3,
            "sipusers": [
                {
                    "extnumber": "9002006",
                    "password": "CNAA9002006"
                },
                {
                    "extnumber": "9002004",
                    "password": "CNAA9002004"
                },
                {
                    "extnumber": "9002005",
                    "password": "CNAA9002005"
                }
            ]
        },
        "reqtime": 1789631163,
        "rsptime": 1789631163
    },
    "msg": ""
}


```

#### 返回参数说明

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-status-int"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">status</td><td align="left">int</td><td align="left">0修改成功，1修改失败</td></tr><tr><td align="left">desc</td><td align="left">string</td><td align="left">说明信息</td></tr><tr><td align="left">result</td><td align="left">object</td><td align="left">添加分机对象</td></tr><tr><td align="left">-updated</td><td align="left">int</td><td align="left">添加成功数</td></tr><tr><td align="left">-sipusers</td><td align="left">object</td><td align="left">分机对象信息</td></tr><tr><td align="left">--extnumber</td><td align="left">object</td><td align="left">分机账号</td></tr><tr><td align="left">--password</td><td align="left">object</td><td align="left">分机秘密</td></tr></tbody></table>

# Predictive Outbound - Create a pre-test outbound task interface

#### Interface Description

Create a pre-test outbound task. Note: The number of numbers for a single task should not exceed 10,000. If you need to add more numbers, please submit through the additional interface。

#### request parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th>parameter name</th><th>type</th><th>Is it necessary</th><th>illustrate</th></tr></thead><tbody><tr><td>service</td><td>string</td><td>yes</td><td>App.Sip\_Yccall.TaskCreat</td></tr><tr><td>token</td><td>string</td><td>yes</td><td>Obtain token through interface authorization</td></tr><tr><td>assigntype</td><td>int</td><td>yes</td><td>Allocation Type 1: Extension; 2: Queue; 3: Group</td></tr><tr><td>assignagent</td><td>string</td><td>yes</td><td>Set as an extension, fill in the extension directly; set as a queue, fill in the queue name; set as a group, fill in the group name</td></tr><tr><td>telphone</td><td>string（JSON）</td><td>yes</td><td>Mobile phone number, preset call time (time stamp) (the current time stamp is the default, if the time is greater than this time, no call will be made), etc. example：\[{“phone”:18012345678,”time”:1500000000,”userid”:””,”memberid”:””,”chengshudu”:””,”customuuid”:””}\]</td></tr><tr><td>taskscale</td><td>string</td><td>yes</td><td>Idle agent call ratio Format 1:1</td></tr><tr><td>disnumber</td><td>string</td><td>yes</td><td>Calling number, multiple numbers separated by commas (empty means random)</td></tr><tr><td>taskname</td><td>string</td><td>no</td><td>task name</td></tr></tbody></table>

#### Interface request example（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    foreach ($phoneArr as $phone){
        $telphoneArr[] = [
            'phone' => trim($phone),
            'time'  => $start_time,
            'memberid'  => '',
            'chengshudu'  => '',
            'customuuid'  => '',
            ];
    }
    $postFields = [
        'service'   => 'App.Sip_Yccall.TaskCreat',
        'token'     => 'ABCDEFG',
        'assigntype'    => 2,
        'assignagent'   => 'queue-1',
        'telphone'      => json_encode($telphoneArr),
        'taskscale'     => '1:1',
        'disnumber'     => ''
    ];
    $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);
?>

```

#### return data structure example

```
{
    "ret": 200,
    "data": {
        "status": 0,
        "desc": "created successfully",
        "result": {
            "taskid": "20200212163504393460",
            "invaliddata": []
        },
        "reqtime": 1581496504,
        "rsptime": 1581496504
    },
    "msg": ""
}

```

#### Return parameter description

<table id="bkmrk-parameter-name-type--1"><thead><tr><th>parameter name</th><th>type</th><th>illustrate</th></tr></thead><tbody><tr><td>result</td><td>object</td><td>return result</td></tr><tr><td>taskid</td><td>string</td><td>task unique id</td></tr><tr><td>invaliddata</td><td>array</td><td>invalid data</td></tr></tbody></table>

# Extension Manage - Get the list of extension groups

#### Interface Description

Get the list of extension groups owned by the current user

#### Request method

POST, form-data format

#### request parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th>parameter name</th><th>type</th><th>Is it necessary</th><th>illustrate</th></tr></thead><tbody><tr><td>service</td><td>string</td><td>yes</td><td>App.Sip\_Extgroup.GetExtgroupInfo</td></tr><tr><td>token</td><td>string</td><td>yes</td><td>The token obtained through the authorization interface</td></tr><tr><td>name</td><td>string</td><td>no</td><td>Extension group name, if it is empty, get all</td></tr></tbody></table>

#### Interface request example（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Extgroup.GetExtgroupInfo',
        'token'     => 'ABCDEFG',
        'name'  => '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);
?>

```

#### return data structure example

```
{
    "ret": 200,
    "data": {
        "status": 0,
        "desc": "获取成功",
        "result": [
            {
                "id": 18,
                "name": "test-group-3",
                "status": 1042
            }
        ],
        "reqtime": 1581408746,
        "rsptime": 1581408746
    },
    "msg": ""
}

```

#### return field description

<table id="bkmrk-field-type-illustrat"><thead><tr><th>field</th><th>type</th><th>illustrate</th></tr></thead><tbody><tr><td>result</td><td>string</td><td>extension list array</td></tr><tr><td>—id</td><td>string</td><td>extension group id</td></tr><tr><td>—name</td><td>string</td><td>extension group name</td></tr><tr><td>—status</td><td>string</td><td>Extension group status</td></tr></tbody></table>

# Common API - call record callback parameters

#### Description

Bill callback needs to be configured with a callback address for the corresponding account. Callback address configuration of bills: The customer provides an interface address that can receive json data, which can be configured by us or configured by the customer in the background.

#### Call record callback data format json

```
{
    "callmethod": 3, 
    "starttime": "2018-03-14 12:18:21", 
    "answertime": "", 
    "endtime": "2018-03-14 12:18:35",  
    "duration": 14,  
    "billsec": 0, 
    "crmid": "2001", 
    "hangupdirection": 10015, 
    "chengshudu": "0", 
    "hangupcause": 10001, 
    "memberid": "18533700187590656",  
    "disnumber": "02566823420",  
    "destnumber": "015029913692",  
    "downloadip": "120.76.152.137", 
    "recordfilename": "",  
    "companycode": 20000013,  
    "type": "callout",  
    "id": 982, 
    "extnumber": "7003" 
    "uuid": "cda5c6c4-0a17-11e8-b177-e7cbf2bd1f36" 
    "userkey":1  
    "customuuid": "customuuid"  
}


```

#### Description of Call Record Callback Parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th align="left">parameter name</th><th align="left">type</th><th align="left">illustrate</th></tr></thead><tbody><tr><td align="left">callmethod</td><td align="left">int</td><td align="left">Call method: 0, unlimited; 1, mutual extension dial; 2, extension direct dial (manual dial); 3, API call (default); 4, API double call; 5, predictive outbound call; 6, IVR/group call .</td></tr><tr><td align="left">starttime</td><td align="left">string</td><td align="left">call time</td></tr><tr><td align="left">answertime</td><td align="left">string</td><td align="left">response time</td></tr><tr><td align="left">endtime</td><td align="left">string</td><td align="left">call end time</td></tr><tr><td align="left">duration</td><td align="left">int</td><td align="left">call waiting time</td></tr><tr><td align="left">billsec</td><td align="left">int</td><td align="left">call time</td></tr><tr><td align="left">crmid</td><td align="left">string</td><td align="left">employee number</td></tr><tr><td align="left">hangupdirection</td><td align="left">int</td><td align="left">On-hook direction</td></tr><tr><td align="left">chengshudu</td><td align="left">string</td><td align="left">Custom Parameters - Maturity</td></tr><tr><td align="left">hangupcause</td><td align="left">int</td><td align="left">Hangup Reason Code</td></tr><tr><td align="left">memberid</td><td align="left">string</td><td align="left">Custom parameter - member id</td></tr><tr><td align="left">disnumber</td><td align="left">string</td><td align="left">calling number</td></tr><tr><td align="left">destnumber</td><td align="left">string</td><td align="left">called number</td></tr><tr><td align="left">downloadip</td><td align="left">string</td><td align="left">recording download ip</td></tr><tr><td align="left">recordfilename</td><td align="left">string</td><td align="left">recording file name</td></tr><tr><td align="left">companycode</td><td align="left">string</td><td align="left">company id</td></tr><tr><td align="left">type</td><td align="left">string</td><td align="left">call type</td></tr><tr><td align="left">extnumber</td><td align="left">string</td><td align="left">Ext</td></tr><tr><td align="left">uuid</td><td align="left">string</td><td align="left">call uuid</td></tr><tr><td align="left">userkey</td><td align="left">string</td><td align="left">user button</td></tr><tr><td align="left">customuuid</td><td align="left">string</td><td align="left">Custom parameter - customer id</td></tr></tbody></table>

# 短信模板列表

#### **请求URL**

- `https://{domain}/hangupSms/smsTplList`

#### **请求方式**

- POST

#### **请求参数**

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E5%BF%85%E9%80%89-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-appid-%E6%98%AF"><thead><tr><th align="left">参数名</th><th align="left">必选</th><th align="left">类型</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">appid</td><td align="left">是</td><td align="left">string</td><td align="left">鉴权 appid</td></tr><tr><td align="left">accesskey</td><td align="left">是</td><td align="left">string</td><td align="left">鉴权 accesskey</td></tr><tr><td align="left">page</td><td align="left">否</td><td align="left">string</td><td align="left">当前页码</td></tr><tr><td align="left">pageSize</td><td align="left">否</td><td align="left">string</td><td align="left">每页的显示的条数</td></tr></tbody></table>

#### **请求示例**

```
{   
    "appid":"xxx",
    "accesskey":"xxx"
}

```

#### **返回示例**

```
{
    "code": 0,
    "msg": "operation succeeded",
    "data": {
        "total": 1,
        "page": 1,
        "pageSize": 15,
        "list": [
            {
                "id": 81,
                "name": "test-otp",
                "content": "your code is 7788",
                "created_at": "2026-05-20 11:03:22"
            }
        ]
    }
}

```

#### **返回参数说明**

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-code-int-%E8%BF%94"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">code</td><td align="left">int</td><td align="left">返回码 0 成功 其他为失败</td></tr><tr><td align="left">msg</td><td align="left">string</td><td align="left">返回信息</td></tr><tr><td align="left">data</td><td align="left">object</td><td align="left">返回数据</td></tr></tbody></table>

# IVR管理 - 查看IVR呼叫进度-v2

#### 接口说明

查看ivr任务呼叫进度

#### 请求方式

POST，form-data格式

#### 请求参数

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E6%98%AF%E5%90%A6%E5%BF%85%E9%A1%BB-%E8%AF%B4%E6%98%8E-servi"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">是否必须</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">service</td><td align="left">string</td><td align="left">是</td><td align="left">App.Sip\_Call.GetIvrBatchStatus</td></tr><tr><td align="left">token</td><td align="left">string</td><td align="left">是</td><td align="left">通过授权接口获取的token</td></tr><tr><td align="left">batch\_id</td><td align="left">string</td><td align="left">是</td><td align="left">批次ID</td></tr></tbody></table>

#### 接口请求示例（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Call.GetIvrBatchStatus',
        'token'     => 'ABCDEFG',
        'batch_id'  => '12123131313'
    ];
    $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": {
            "batch_id": "20260917114314491892",
            "total": 5,
            "pending": 0,
            "calling": 0,
            "success": 5,
            "fail": 0
        },
        "reqtime": 1789616670,
        "rsptime": 1789616670
    },
    "msg": ""
}


```

#### 返回参数说明

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-code-int-%E8%BF%94"><thead><tr><th align="left">参数名</th><th align="left">类型</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left">code</td><td align="left">int</td><td align="left">返回码 200 成功</td></tr><tr><td align="left">msg</td><td align="left">string</td><td align="left">返回提示信息</td></tr><tr><td align="left">data</td><td align="left">object</td><td align="left">返回数据对象</td></tr><tr><td align="left">—desc</td><td align="left">string</td><td align="left">请求提示信息</td></tr><tr><td align="left">—reqtime</td><td align="left">int</td><td align="left">请求时间戳</td></tr><tr><td align="left">—rsptime</td><td align="left">int</td><td align="left">返回时间戳</td></tr></tbody></table>

# 预测式外呼 - 获取预测任务客户详情信息

#### 接口说明

获取预测式外呼客户详情信息

#### 请求参数

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E6%98%AF%E5%90%A6%E5%BF%85%E9%A1%BB-%E8%AF%B4%E6%98%8E-servi"><thead><tr><th>参数名</th><th>类型</th><th>是否必须</th><th>说明</th></tr></thead><tbody><tr><td>service</td><td>string</td><td>是</td><td>App.Sip\_Customer.GetTaskDetailInfo</td></tr><tr><td>token</td><td>string</td><td>是</td><td>通过授权接口获取的token</td></tr><tr><td>taskid</td><td>string</td><td>是</td><td>任务ID</td></tr><tr><td>telphone</td><td>string</td><td>是</td><td>客户号码</td></tr></tbody></table>

#### 接口请求示例（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Customer.GetTaskDetailInfo',
        'token'     => 'ABCDEFG',
        'taskid'     => 'taskid',
		'telphone' =>'121212121',
    ];
    $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": [
          {
              "taskid": "20260917115229487138",
              "telphone": "15988739244",
              "telname": "阿三",
              "sex": "男",
              "age": "18",
              "ext": "{\"type\":\"robot\",\"level\":4}",
              "mark": null,
              "taskname": "20260917115229487138"
          }
      ],
      "reqtime": 1789627594,
      "rsptime": 1789627594
  },
  "msg": ""
}

```

#### 返回参数说明

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-result-obj"><thead><tr><th>参数名</th><th>类型</th><th>说明</th></tr></thead><tbody><tr><td>result</td><td>object</td><td>返回结果</td></tr></tbody></table>

# 分机组管理 - 获取分机组成员状态数

#### 接口说明

获取分机组各个状态的成员数

#### 请求方式

POST，form-data格式

#### 请求参数

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E6%98%AF%E5%90%A6%E5%BF%85%E9%A1%BB-%E8%AF%B4%E6%98%8E-servi"><thead><tr><th>参数名</th><th>类型</th><th>是否必须</th><th>说明</th></tr></thead><tbody><tr><td>service</td><td>string</td><td>是</td><td>App.Sip\_Extgroup.GetExtGroupState</td></tr><tr><td>token</td><td>string</td><td>是</td><td>通过授权接口获取的token</td></tr><tr><td>name</td><td>string</td><td>是</td><td>坐席组名称</td></tr></tbody></table>

#### 接口请求示例（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Extgroup.GetExtGroupState',
        'token'     => 'ABCDEFG',
        'name'  => 'kefu01',
    ];
    $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": [
          {
            "name": "kefu01",
            "total": 1,
            "free": 1,
            "work": 0,
            "busy": 0
          }
        ],
        "reqtime": 1789611415,
        "rsptime": 1789611415
    },
    "msg": ""
}

```

#### 返回字段说明

<table id="bkmrk-%E5%AD%97%E6%AE%B5-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-result-stri"><thead><tr><th>字段</th><th>类型</th><th>说明</th></tr></thead><tbody><tr><td>result</td><td>string</td><td>分机列表数组</td></tr><tr><td>—name</td><td>string</td><td>分机组id</td></tr><tr><td>—total</td><td>string</td><td>分机组名</td></tr><tr><td>—free</td><td>string</td><td>空闲状态</td></tr><tr><td>—work</td><td>string</td><td>工作状态</td></tr><tr><td>—busy</td><td>string</td><td>置忙状态</td></tr></tbody></table>

# Predictive Outbound - Callback data description

#### illustrate：

After the pre-test outbound task starts, the system will call the corresponding number according to the parameters passed in when creating the task. When the target number is connected, the system will assign the user to the task group according to the busy status of the agents in the task group to which the task belongs Among the free agent extensions in , the corresponding extension will ring (at this time, the extension ringing status callback data will be sent to the extension status callback address configured in the background), and when the customer service personnel answer (the extension status callback address configured in the background will be sent to After sending extension answering status callback data) and then hanging up (at this time, the extension hangup status callback data will be sent to the extension status callback address configured in the background), the system will send bill callback data to the bill push callback address configured in the background.

#### Request Method

The callback method is to submit a form-data form to the callback address, the field name is `detail`, and the value is a json string

#### Example of extension status callback data

```
{
    "buuid":"9c6f2092-6aad-11eb-a1b9-5107cdf1d50a",
    "callee":"89683227899",
    "caller":"20280005",
    "companycode":"2028",
    "direction":"callout",
    "disnumber":"2120280001",
    "extnumber":"20280005",
    "isbleg":"true",
    "method":"2",
    "starttime":"1612857945",
    "status":"ring",
    "type":"call",
    "uuid":"9c568ac8-6aad-11eb-a1b3-5107cdf1d50a"
}

```

#### field description

<table id="bkmrk-field-type-illustrat"><thead><tr><th>field</th><th>type</th><th>illustrate</th></tr></thead><tbody><tr><td>buuid</td><td>string</td><td>Unique id on side B</td></tr><tr><td>callee</td><td>string</td><td>Called number (user number)</td></tr><tr><td>caller</td><td>string</td><td>Call Number (extension)</td></tr><tr><td>companycode</td><td>string</td><td>company code</td></tr><tr><td>direction</td><td>string</td><td>Call direction callin incoming call, callout outgoing call</td></tr><tr><td>disnumber</td><td>string</td><td>display number</td></tr><tr><td>extnumber</td><td>string</td><td>Ext</td></tr><tr><td>isbleg</td><td>string</td><td>Is it B side</td></tr><tr><td>method</td><td>string</td><td>Call mode, 1 extension, 2 manual, 3 interface, 4 double call, 5 prediction</td></tr><tr><td>starttime</td><td>string</td><td>call start time</td></tr><tr><td>status</td><td>string</td><td>Extension status ring ringing answer answer hangup hangup</td></tr><tr><td>type</td><td>string</td><td>call</td></tr><tr><td>uuid</td><td>string</td><td>call unique id</td></tr></tbody></table>

#### Callback Data Example

```
{
    "type":"callout",
    "callmethod":6,
    "starttime":"2021-02-09 10:00:03",
    "answertime":"",
    "endtime":"2021-02-09 10:00:15",
    "duration":12,
    "billsec":0,
    "crmid":"0",
    "memberid":"0",
    "chengshudu":"0",
    "disnumber":"211040260001",
    "destnumber":"81211623586",
    "extnumber":"000000",
    "recordfilename":"",
    "downloadip":"",
    "hangupdirection":10040,
    "hangupcause":10020,
    "companycode":"104026",
    "uuid":"863ff91e-6a7a-11eb-acf1-5107cdf1d50a",
    "userkey":"",
    "customuuid":"110001475"
}

```

#### field description

<table id="bkmrk-field-type-illustrat-1"><thead><tr><th>field</th><th>type</th><th>illustrate</th></tr></thead><tbody><tr><td>type</td><td>string</td><td>call method</td></tr><tr><td>callmethod</td><td>int</td><td>call method</td></tr><tr><td>starttime</td><td>string</td><td>call time</td></tr><tr><td>answertime</td><td>string</td><td>answering time</td></tr><tr><td>endtime</td><td>string</td><td>Hang up time</td></tr><tr><td>duration</td><td>int</td><td>waiting time</td></tr><tr><td>billsec</td><td>int</td><td>call time</td></tr><tr><td>crmid</td><td>string</td><td>agent id</td></tr><tr><td>memberid</td><td>string</td><td>Custom parameters</td></tr><tr><td>chengshudu</td><td>string</td><td>Custom parameters</td></tr><tr><td>disnumber</td><td>string</td><td>calling number</td></tr><tr><td>destnumber</td><td>string</td><td>target number</td></tr><tr><td>extnumber</td><td>string</td><td>Ext</td></tr><tr><td>recordfilename</td><td>string</td><td>call file name</td></tr><tr><td>downloadip</td><td>string</td><td>download ip</td></tr><tr><td>hangupdirection</td><td>int</td><td>hang up directions</td></tr><tr><td>hangupcause</td><td>int</td><td>hang up reason</td></tr><tr><td>companycode</td><td>string</td><td>company code</td></tr><tr><td>uuid</td><td>string</td><td>call unique id</td></tr><tr><td>userkey</td><td>string</td><td>user button</td></tr><tr><td>customuuid</td><td>string</td><td>Custom parameters</td></tr></tbody></table>

# Extension Manage - Get extension enabled status

#### Interface Description

Get the extension list information owned by the user.

#### Request method

POST, form-data format

#### request parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th align="left">parameter name</th><th align="left">type</th><th align="left">Is it necessary</th><th align="left">illustrate</th></tr></thead><tbody><tr><td align="left">service</td><td align="left">string</td><td align="left">yes</td><td align="left">App.Sip\_Status.GetSipValidStatus</td></tr><tr><td align="left">token</td><td align="left">string</td><td align="left">yes</td><td align="left">The token obtained through the authorization interface</td></tr><tr><td align="left">extnumber</td><td align="left">string</td><td align="left">yes</td><td align="left">Extension number, multiple extension numbers are separated by commas</td></tr></tbody></table>

#### Interface request example（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Status.GetSipValidStatus',
        'token'     => 'ABCDEFG',
        'extnumber'  => '100001'
    ];
    $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);
?>


```

#### return data structure example

```
{
    "ret": 200,
    "data": {
        "status": 0,
        "desc": "get success",
        "result": [
            {
                "extnumber": "90170002",
                "code": 1016
            }
        ],
        "reqtime": 1581508401,
        "rsptime": 1581508401
    },
    "msg": ""
}


```

#### Return parameter description

<table id="bkmrk-parameter-name-type--1"><thead><tr><th align="left">parameter name</th><th align="left">type</th><th align="left">illustrate</th></tr></thead><tbody><tr><td align="left">result</td><td align="left">array</td><td align="left">extension data array</td></tr><tr><td align="left">—extnumber</td><td align="left">string</td><td align="left">Ext</td></tr><tr><td align="left">—code</td><td align="left">int</td><td align="left">Extension Status</td></tr></tbody></table>

# 预测式外呼 - 获取agent接通情况

#### 接口说明

**获取坐席接通情况**

#### 请求参数

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E6%98%AF%E5%90%A6%E5%BF%85%E9%A1%BB-%E8%AF%B4%E6%98%8E-servi"><thead><tr><th>参数名</th><th>类型</th><th>是否必须</th><th>说明</th></tr></thead><tbody><tr><td>service</td><td>string</td><td>是</td><td>App.Sip\_Yccall.TaskAgentCall</td></tr><tr><td>token</td><td>string</td><td>是</td><td>通过授权接口获取的token</td></tr><tr><td>createtime</td><td>string</td><td>是</td><td>任务创建开始时间, 格式 2025-09-01 00:00:00</td></tr><tr><td>endtime</td><td>string</td><td>是</td><td>任务创建结束时间，格式 2025-09-05 00:00:00</td></tr><tr><td>taskid</td><td>string</td><td>否</td><td>任务ID 多个任务id用,分隔</td></tr><tr><td>agent</td><td>string</td><td>否</td><td>agent 名称</td></tr><tr><td>customtaskid</td><td>string</td><td>否</td><td>自定义任务id</td></tr><tr><td>currentpage</td><td>int</td><td>否</td><td>页数，默认：1</td></tr><tr><td>itemsperpage</td><td>int</td><td>否</td><td>每页数量，默认：10，最小：1；最大：1000</td></tr></tbody></table>

#### 接口请求示例（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Yccall.TaskAgentCall',
        'token'     => 'ABCDEFG',
        'taskid'     => 'taskid',
        'agent'   => 'agent',
        'customtaskid' =>'customtaskid'
    ];
    $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": 3,
        "currentpage": 1,
        "itemsperpage": 10,
        "task": [
            {
                "agent": "测试1",  #agent名称
                "total_calls": 168,   #呼叫总数
                "connected_calls": 0,  #接通数
                "fail_calls": 168,    #未接数
                "connect_rate_percent": "0.00"  #接通率
            }
        ]
    },
    "reqtime": 1756961582,
    "rsptime": 1756961582
},
"msg": ""

```

}

#### 返回参数说明

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-result-obj"><thead><tr><th>参数名</th><th>类型</th><th>说明</th></tr></thead><tbody><tr><td>result</td><td>object</td><td>返回结果</td></tr></tbody></table>

# Predictive Outbound - Get extension call status

#### Interface Description

Get the extension list information owned by the user。

#### request parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th>parameter name</th><th>type</th><th>Is it necessary</th><th>illustrate</th></tr></thead><tbody><tr><td>service</td><td>string</td><td>yes</td><td>App.Sip\_Status.GetSipCallStatus</td></tr><tr><td>token</td><td>string</td><td>yes</td><td>The token obtained through the authorization interface</td></tr><tr><td>extnumber</td><td>string</td><td>yes</td><td>Extension number, multiple extension numbers are separated by commas</td></tr></tbody></table>

#### Interface request example（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Status.GetSipCallStatus',
        'token'     => 'ABCDEFG',
        'extnumber'  => '100001'
    ];
    $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);
?>

```

#### return data structure example

```
{
    "ret": 200,
    "data": {
        "status": 0,
        "desc": "get success",
        "result": [
            {
                "extnumber": "90170002",
                "status": 1014,
                "caller": null,
                "callee": null,
                "disnumber": null,
                "direction": null,
                "channel": null,
                "idleduration": null,
                "callduration": null
            }
        ],
        "reqtime": 1581506689,
        "rsptime": 1581506689
    },
    "msg": ""
}

```

#### Return parameter description

<table id="bkmrk-parameter-name-type--1"><thead><tr><th>parameter name</th><th>type</th><th>illustrate</th></tr></thead><tbody><tr><td>result</td><td>array</td><td>extension data array</td></tr><tr><td>—extnumber</td><td>string</td><td>Ext</td></tr><tr><td>—status</td><td>int</td><td>Extension Status</td></tr><tr><td>—caller</td><td>string</td><td>caller</td></tr><tr><td>—callee</td><td>string</td><td>called person</td></tr><tr><td>—disnumber</td><td>string</td><td>display number</td></tr><tr><td>—direction</td><td>string</td><td>call direction</td></tr><tr><td>—channel</td><td>string</td><td>channel</td></tr><tr><td>—idleduration</td><td>int</td><td>idle time</td></tr><tr><td>—callduration</td><td>int</td><td>call time</td></tr></tbody></table>

# Extension Manage - Get extension call status

#### Interface Description

Get the extension list information owned by the user.

#### Request method

POST, form-data format

#### request parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th align="left">parameter name</th><th align="left">type</th><th align="left">Is it necessary</th><th align="left">illustrate</th></tr></thead><tbody><tr><td align="left">service</td><td align="left">string</td><td align="left">yes</td><td align="left">App.Sip\_Status.GetSipCallStatus</td></tr><tr><td align="left">token</td><td align="left">string</td><td align="left">yes</td><td align="left">The token obtained through the authorization interface</td></tr><tr><td align="left">extnumber</td><td align="left">string</td><td align="left">yes</td><td align="left">Extension number, multiple extension numbers are separated by commas</td></tr></tbody></table>

#### Interface request example（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Status.GetSipCallStatus',
        'token'     => 'ABCDEFG',
        'extnumber'  => '100001'
    ];
    $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);
?>


```

#### return data structure example

```
{
    "ret": 200,
    "data": {
        "status": 0,
        "desc": "get success",
        "result": [
            {
                "extnumber": "90170002",
                "status": 1014,
                "caller": null,
                "callee": null,
                "disnumber": null,
                "direction": null,
                "channel": null,
                "idleduration": null,
                "callduration": null
            }
        ],
        "reqtime": 1581506689,
        "rsptime": 1581506689
    },
    "msg": ""
}


```

#### Return parameter description

<table id="bkmrk-parameter-name-type--1"><thead><tr><th align="left">parameter name</th><th align="left">type</th><th align="left">illustrate</th></tr></thead><tbody><tr><td align="left">result</td><td align="left">array</td><td align="left">extension data array</td></tr><tr><td align="left">—extnumber</td><td align="left">string</td><td align="left">Ext</td></tr><tr><td align="left">—status</td><td align="left">int</td><td align="left">Extension Status</td></tr><tr><td align="left">—caller</td><td align="left">string</td><td align="left">caller</td></tr><tr><td align="left">—callee</td><td align="left">string</td><td align="left">called person</td></tr><tr><td align="left">—disnumber</td><td align="left">string</td><td align="left">display number</td></tr><tr><td align="left">—direction</td><td align="left">string</td><td align="left">call direction</td></tr><tr><td align="left">—channel</td><td align="left">string</td><td align="left">channel</td></tr><tr><td align="left">—idleduration</td><td align="left">int</td><td align="left">idle time</td></tr><tr><td align="left">—callduration</td><td align="left">int</td><td align="left">call time</td></tr></tbody></table>

# 预测式外呼 - 获取agent转接情况

#### 接口说明

**获取坐席转接情况**

#### 请求参数

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E6%98%AF%E5%90%A6%E5%BF%85%E9%A1%BB-%E8%AF%B4%E6%98%8E-servi"><thead><tr><th>参数名</th><th>类型</th><th>是否必须</th><th>说明</th></tr></thead><tbody><tr><td>service</td><td>string</td><td>是</td><td>App.Sip\_Yccall.TaskAgentTta</td></tr><tr><td>token</td><td>string</td><td>是</td><td>通过授权接口获取的token</td></tr><tr><td>createtime</td><td>string</td><td>是</td><td>任务创建开始时间, 格式 2025-09-01 00:00:00</td></tr><tr><td>endtime</td><td>string</td><td>是</td><td>任务创建结束时间，格式 2025-09-05 00:00:00</td></tr><tr><td>taskid</td><td>string</td><td>否</td><td>任务ID 多个任务id用,分隔</td></tr><tr><td>agent</td><td>string</td><td>否</td><td>agent 名称</td></tr><tr><td>customtaskid</td><td>string</td><td>否</td><td>自定义任务id</td></tr><tr><td>currentpage</td><td>int</td><td>否</td><td>页数，默认：1</td></tr><tr><td>itemsperpage</td><td>int</td><td>否</td><td>每页数量，默认：10，最小：1；最大：1000</td></tr></tbody></table>

#### 接口请求示例（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Yccall.TaskAgentTta',
        'token'     => 'ABCDEFG',
        'taskid'     => 'taskid'
    ];
    $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": 3,
        "currentpage": 1,
        "itemsperpage": 10,
        "task": [
            {
                "agent": "测试1",  #agent名称
                "total_tta": 168,   #转接到坐席数
                "success_tta": 0,  #转接到坐席接通
                "fail_tta": 168,    #转接坐席未接
                "tta_rate_percent": "0.00"  #成功转接率
            }
        ]
    },
    "reqtime": 1756961582,
    "rsptime": 1756961582
},
"msg": ""

```

}

#### 返回参数说明

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-result-obj"><thead><tr><th>参数名</th><th>类型</th><th>说明</th></tr></thead><tbody><tr><td>result</td><td>object</td><td>返回结果</td></tr></tbody></table>

# Predictive Outbound - Get extension enabled status

#### Interface Description

Get the extension list information owned by the user。

#### request parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th>parameter name</th><th>type</th><th>Is it necessary</th><th>illustrate</th></tr></thead><tbody><tr><td>service</td><td>string</td><td>yes</td><td>App.Sip\_Status.GetSipValidStatus</td></tr><tr><td>token</td><td>string</td><td>yes</td><td>The token obtained through the authorization interface</td></tr><tr><td>extnumber</td><td>string</td><td>yes</td><td>Extension number, multiple extension numbers are separated by commas</td></tr></tbody></table>

#### Interface request example（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Status.GetSipValidStatus',
        'token'     => 'ABCDEFG',
        'extnumber'  => '100001'
    ];
    $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);
?>

```

#### return data structure example

```
{
    "ret": 200,
    "data": {
        "status": 0,
        "desc": "get success",
        "result": [
            {
                "extnumber": "90170002",
                "code": 1016
            }
        ],
        "reqtime": 1581508401,
        "rsptime": 1581508401
    },
    "msg": ""
}

```

#### Return parameter description

<table id="bkmrk-parameter-name-type--1"><thead><tr><th>parameter name</th><th>type</th><th>illustrate</th></tr></thead><tbody><tr><td>result</td><td>array</td><td>extension data array</td></tr><tr><td>—extnumber</td><td>string</td><td>Ext</td></tr><tr><td>—code</td><td>int</td><td>Extension Status</td></tr></tbody></table>

# Extension Manage - Get extension registration information

#### Interface Description

Get the extension list information owned by the user.

#### Request method

POST, form-data format

#### request parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th align="left">parameter name</th><th align="left">type</th><th align="left">Is it necessary</th><th align="left">illustrate</th></tr></thead><tbody><tr><td align="left">service</td><td align="left">string</td><td align="left">yes</td><td align="left">App.Sip\_Status.GetSipRegisterStatus</td></tr><tr><td align="left">token</td><td align="left">string</td><td align="left">yes</td><td align="left">The token obtained through the authorization interface</td></tr><tr><td align="left">extnumber</td><td align="left">string</td><td align="left">yes</td><td align="left">Extension number, multiple extension numbers are separated by commas</td></tr></tbody></table>

#### Interface request example（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Status.GetSipRegisterStatus',
        'token'     => 'ABCDEFG',
        'extnumber'  => '100001'
    ];
    $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);
?>


```

#### return data structure example

```
{
    "ret": 200,
    "data": {
        "status": 0,
        "desc": "get success",
        "result": [
            {
                "extnumber": "90170002",
                "code": 1014,
                "clientip": null,
                "serverip": null
            }
        ],
        "reqtime": 1581507361,
        "rsptime": 1581507361
    },
    "msg": ""
}


```

#### Return parameter description

<table id="bkmrk-parameter-name-type--1"><thead><tr><th align="left">parameter name</th><th align="left">type</th><th align="left">illustrate</th></tr></thead><tbody><tr><td align="left">result</td><td align="left">array</td><td align="left">extension data array</td></tr><tr><td align="left">—extnumber</td><td align="left">string</td><td align="left">Ext</td></tr><tr><td align="left">—code</td><td align="left">int</td><td align="left">Extension Status</td></tr><tr><td align="left">—clientip</td><td align="left">string</td><td align="left">Extension registration client IP</td></tr><tr><td align="left">—serverip</td><td align="left">string</td><td align="left">Extension registration server IP</td></tr></tbody></table>

# 预测式外呼 - 获取agent正在呼叫情况

#### 接口说明

**获取坐席正在通话情况**

#### 请求参数

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E6%98%AF%E5%90%A6%E5%BF%85%E9%A1%BB-%E8%AF%B4%E6%98%8E-servi"><thead><tr><th>参数名</th><th>类型</th><th>是否必须</th><th>说明</th></tr></thead><tbody><tr><td>service</td><td>string</td><td>是</td><td>App.Sip\_Yccall.TaskAgentCalling</td></tr><tr><td>token</td><td>string</td><td>是</td><td>通过授权接口获取的token</td></tr><tr><td>createtime</td><td>string</td><td>是</td><td>任务创建开始时间, 格式 2025-09-01 00:00:00</td></tr><tr><td>endtime</td><td>string</td><td>是</td><td>任务创建结束时间，格式 2025-09-05 00:00:00</td></tr><tr><td>taskid</td><td>string</td><td>否</td><td>任务ID 多个任务id用,分隔</td></tr><tr><td>agent</td><td>string</td><td>否</td><td>agent名称</td></tr><tr><td>customtaskid</td><td>string</td><td>否</td><td>自定义任务id</td></tr><tr><td>currentpage</td><td>int</td><td>否</td><td>页数，默认：1</td></tr><tr><td>itemsperpage</td><td>int</td><td>否</td><td>每页数量，默认：10，最小：1；最大：1000</td></tr></tbody></table>

#### 接口请求示例（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Yccall.TaskAgentCalling',
        'token'     => 'ABCDEFG',
        'taskid'     => 'taskid'
    ];
    $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": 3,
        "currentpage": 1,
        "itemsperpage": 10,
        "task": [
            {
                "agent": "测试1",  #agent名称
                "total_calls": 168,   #呼叫数
            }
        ]
    },
    "reqtime": 1756961582,
    "rsptime": 1756961582
},
"msg": ""

```

}

#### 返回参数说明

<table id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E7%B1%BB%E5%9E%8B-%E8%AF%B4%E6%98%8E-result-obj"><thead><tr><th>参数名</th><th>类型</th><th>说明</th></tr></thead><tbody><tr><td>result</td><td>object</td><td>返回结果</td></tr></tbody></table>

# Predictive Outbound - Get extension registration information

#### Interface Description：

Get the extension list information owned by the user。

#### request parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th>parameter name</th><th>type</th><th>Is it necessary</th><th>illustrate</th></tr></thead><tbody><tr><td>service</td><td>string</td><td>yes</td><td>App.Sip\_Status.GetSipRegisterStatus</td></tr><tr><td>token</td><td>string</td><td>yes</td><td>The token obtained through the authorization interface</td></tr><tr><td>extnumber</td><td>string</td><td>yes</td><td>Extension number, multiple extension numbers are separated by commas</td></tr></tbody></table>

#### Interface request example（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Status.GetSipRegisterStatus',
        'token'     => 'ABCDEFG',
        'extnumber'  => '100001'
    ];
    $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);
?>

```

#### return data structure example

```
{
    "ret": 200,
    "data": {
        "status": 0,
        "desc": "get success",
        "result": [
            {
                "extnumber": "90170002",
                "code": 1014,
                "clientip": null,
                "serverip": null
            }
        ],
        "reqtime": 1581507361,
        "rsptime": 1581507361
    },
    "msg": ""
}

```

#### Return parameter description

<table id="bkmrk-parameter-name-type--1"><thead><tr><th>parameter name</th><th>type</th><th>illustrate</th></tr></thead><tbody><tr><td>result</td><td>array</td><td>extension data array</td></tr><tr><td>—extnumber</td><td>string</td><td>Ext</td></tr><tr><td>—code</td><td>int</td><td>Extension Status</td></tr><tr><td>—clientip</td><td>string</td><td>Extension registration client IP</td></tr><tr><td>—serverip</td><td>string</td><td>Extension registration server IP</td></tr></tbody></table>

# Voice Call API - access process

[![d86ab231b4965937f47dcea811ec4fca (1).jpg](https://document.infin8linx.com/uploads/images/gallery/2025-12/scaled-1680-/d86ab231b4965937f47dcea811ec4fca-1.jpg)](https://document.infin8linx.com/uploads/images/gallery/2025-12/d86ab231b4965937f47dcea811ec4fca-1.jpg)

# Predictive Outbound - Get extension status interface

#### Interface Description

Get the list of task groups owned by the current user。

#### request parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th>parameter name</th><th>type</th><th>Is it necessary</th><th>illustrate</th></tr></thead><tbody><tr><td>service</td><td>string</td><td>yes</td><td>App.Sip\_Queue.GetQueueSipStatus</td></tr><tr><td>token</td><td>string</td><td>yes</td><td>The token obtained through the authorization interface</td></tr><tr><td>queuename</td><td>string</td><td>no</td><td>Task group name, get all if empty</td></tr><tr><td>extnumber</td><td>string</td><td>no</td><td>Extension number, if empty get all</td></tr><tr><td>state</td><td>int</td><td>no</td><td>Agent status: 0, unlimited 1, idle 2, waiting 3, receiving 4, talking</td></tr></tbody></table>

#### Interface request example（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Queue.GetQueueSipStatus',
        'token'     => 'ABCDEFG',
        'queuename'     => 'queue-1',
        'extnumber'     => '100001',
        'state'     =>0,
    ];
    $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);
?>

```

#### return data structure example

```
{
    "ret": 200,
    "data": {
        "status": 0,
        "desc": "get success",
        "result": [
            {
                "queuename": "queue-1",
                "seatsname": "9026004_9026004_autocall-9026",
                "extnumber": "100001",
                "status": 1213,
                "state": 1213,
                "lastanswertime": "2020-02-05 21:03:36",
                "lastassigntime": "2020-02-05 21:03:34",
                "seatschangetime": "2020-02-05 21:03:29",
                "noanswercount": 0,
                "callsanswered": 1,
                "externalcallscount": 0,
                "wrapuptime": 0,
                "maxnoanswer": 0
            }
        ],
        "reqtime": 1581488746,
        "rsptime": 1581488746
    },
    "msg": ""
}

```

#### Return parameter description

<table id="bkmrk-parameter-name-type--1"><thead><tr><th>parameter name</th><th>type</th><th>illustrate</th></tr></thead><tbody><tr><td>result</td><td>array</td><td>returned result array</td></tr><tr><td>—queuename</td><td>string</td><td>task group name</td></tr><tr><td>—seatsname</td><td>string</td><td>Agent name</td></tr><tr><td>—extnumber</td><td>string</td><td>Ext</td></tr><tr><td>—extnumber</td><td>string</td><td>Ext</td></tr><tr><td>—status</td><td>int</td><td>Extension Status</td></tr><tr><td>—state</td><td>int</td><td>Agent status</td></tr><tr><td>—lastanswertime</td><td>string</td><td>last answer time</td></tr><tr><td>—lastassigntime</td><td>string</td><td>Last allocation time</td></tr><tr><td>—seatschangetime</td><td>string</td><td>Agent change time</td></tr><tr><td>—noanswercount</td><td>int</td><td>Missed call statistics</td></tr><tr><td>—callsanswered</td><td>int</td><td>Answer Statistics</td></tr><tr><td>—externalcallscount</td><td>string</td><td>Number of external calls, non-predictive task call statistics, can be ignored</td></tr><tr><td>—wrapuptime</td><td>string</td><td>Call finishing time, that is, the interval between answering a call and dialing a new number</td></tr><tr><td>—maxnoanswer</td><td>string</td><td>The maximum number of no responses, temporarily invalid, can be ignored</td></tr></tbody></table>

# Voice Call API - Make a voice call

#### Interface Description

Initiate a call directly to a number, most of which are applicable to calling the interface after clicking "Call" on the web page.

#### Request method

POST, form-data format

#### request parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th align="left">parameter name</th><th align="left">type</th><th align="left">Is it necessary</th><th align="left">illustrate</th></tr></thead><tbody><tr><td align="left">service</td><td align="left">string</td><td align="left">是</td><td align="left">App.Sip\_Call.MakeCall</td></tr><tr><td align="left">token</td><td align="left">string</td><td align="left">是</td><td align="left">The token obtained through the authorization interface</td></tr><tr><td align="left">extnumber</td><td align="left">string</td><td align="left">是</td><td align="left">Ext</td></tr><tr><td align="left">destnumber</td><td align="left">string</td><td align="left">是</td><td align="left">target number</td></tr><tr><td align="left">disnumber</td><td align="left">string</td><td align="left">否</td><td align="left">Caller ID, if left blank, a random caller ID will be selected</td></tr><tr><td align="left">userid</td><td align="left">string</td><td align="left">否</td><td align="left">Custom parameters (employee id)</td></tr><tr><td align="left">chengshudu</td><td align="left">string</td><td align="left">否</td><td align="left">Custom parameters (maturity)</td></tr><tr><td align="left">memberid</td><td align="left">string</td><td align="left">否</td><td align="left">Custom parameters (member id)</td></tr><tr><td align="left">customuuid</td><td align="left">string</td><td align="left">否</td><td align="left">Custom parameters (customer id)</td></tr></tbody></table>

#### Interface request example（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Call.MakeCall',
        'token'     => 'ABCDEFG',
        'extnumber'  => 'abcdefg',
        'destnumber'  => 'abcdefg',
        'disnumber'  => 'abcdefg',
        'userid'  => 'abcdefg',
        'chengshudu'  => 'abcdefg',
        'memberid'  => 'abcdefg',
        'customuuid'  => '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);
?>


```

#### return data structure example

```
{
    "ret": 200,
    "data": {
        "status": 0,
        "desc": "Call command sent successfully",
        "reqtime": 1581389402,
        "rsptime": 1581389402
    },
    "msg": ""
}

```

# Predictive Outbound - Pre-test outbound call task status callback parame

### illustrate

This interface is mainly used to return the status of predictive tasks. The customer provides an interface address that can receive json data, and we can configure it.

### Predictive task status callback data format

```
{
    "taskid":"20210222110030244314",
    "companycode":"9027",
    "status":3
}

```

### Predictive task status callback parameter description

<table id="bkmrk-parameter-name-type-"><thead><tr><th>parameter name</th><th>type</th><th>illustrate</th></tr></thead><tbody><tr><td>taskid</td><td>string</td><td>Corresponding predictive task ID</td></tr><tr><td>companycode</td><td>string</td><td>The company number of the corresponding account</td></tr><tr><td>status</td><td>string</td><td>The task completion flag, only returns 3</td></tr></tbody></table>

# Two-way call API access process

#### Two-way call API access process

[![c2d9b4edbd97ed2b86e4467a6a49e392.jpg](https://document.infin8linx.com/uploads/images/gallery/2025-12/scaled-1680-/c2d9b4edbd97ed2b86e4467a6a49e392.jpg)](https://document.infin8linx.com/uploads/images/gallery/2025-12/c2d9b4edbd97ed2b86e4467a6a49e392.jpg)

# Predictive Outbound - Pre-test outbound task number addition

### Interface Description

In the created predictive task, the number in the task can be added through this interface, and the single added number should not exceed 10,000。

### request parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th>parameter name</th><th>type</th><th>Is it necessary</th><th>illustrate</th></tr></thead><tbody><tr><td>service</td><td>string</td><td>yes</td><td>App.Sip\_Yccall.TaskAdd</td></tr><tr><td>token</td><td>string</td><td>yes</td><td>The token obtained through the authorization interface</td></tr><tr><td>taskid</td><td>string</td><td>yes</td><td>Predictive task ID</td></tr><tr><td>telphone</td><td>string（JSON）</td><td>yes</td><td>Mobile phone number, preset call time (time stamp) (the current time stamp is the default, if the time is greater than this time, no call will be made), etc. example：\[{“phone”:18012345678,”time”:1500000000,”userid”:””,”memberid”:””,”chengshudu”:””,”customuuid”:””}\]</td></tr></tbody></table>

### Example request interface（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Yccall.TaskAdd',
        'token'     => 'ABCDEFG',
        'taskid'    => 'ADSFNIDJN',
        'telphone'  => '[{"phone":18012345678,"time":1500000000,"userid":"","memberid":"","chengshudu":"","customuuid":""}]'
    ];
    $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);
?>

```

### return data structure example

```
{
    "ret": 200,
    "data": {
        "status": 0,
        "desc": "Additional success",
        "result": {
            "success": 7,
            "invaliddata": []
        },
        "reqtime": 1613962979,
        "rsptime": 1613962979
    },
    "msg": ""
}

```

### Return parameter description

<table id="bkmrk-parameter-name-type--1"><thead><tr><th>parameter name</th><th>type</th><th>illustrate</th></tr></thead><tbody><tr><td>result</td><td>object</td><td>return result</td></tr><tr><td>success</td><td>int</td><td>Append the successful number</td></tr><tr><td>invaliddata</td><td>array</td><td>invalid data</td></tr></tbody></table>

# Voice two-way calling - two-way call interface

#### Interface Description：

The two-way call is mainly used to call the customer service number of the company first, and then call the called customer number after the connection is made.

#### Request method

POST, form-data format

#### request parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th>parameter name</th><th>type</th><th>Is it necessary</th><th>illustrate</th></tr></thead><tbody><tr><td>service</td><td>string</td><td>yes</td><td>App.Sip\_Call.DoubleCall</td></tr><tr><td>token</td><td>string</td><td>yes</td><td>Token, minimum: 32; maximum 32</td></tr><tr><td>extnumber</td><td>string</td><td>yes</td><td>Extension Number</td></tr><tr><td>anumber</td><td>string</td><td>yes</td><td>Employee Mobile Number</td></tr><tr><td>bnumber</td><td>string</td><td>yes</td><td>called customer number</td></tr><tr><td>disnumber</td><td>string</td><td>no</td><td>Displayed calling number, leave it blank and pick a random calling number</td></tr><tr><td>userid</td><td>string</td><td>no</td><td>Custom Data (Employee ID)</td></tr><tr><td>memberid</td><td>string</td><td>no</td><td>Custom Data (Member ID)</td></tr><tr><td>chengshudu</td><td>string</td><td>no</td><td>Custom Data (Maturity)</td></tr><tr><td>customuuid</td><td>string</td><td>no</td><td>Custom Data (Customer ID)</td></tr></tbody></table>

#### Interface request example（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Call.DoubleCall',
        'token'     => 'ABCDEFG',
        'extnumber'  => 'abcdefg',
        'anumber'  => 'abcdefg',
        'bnumber'  => 'abcdefg',
        'disnumber'  => 'abcdefg',
        'userid'  => 'abcdefg',
        'memberid'  => 'abcdefg',
        'chengshudu'  => 'abcdefg',
        'customuuid'  => '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);
?>

```

#### return data structure example

```
{
    "ret": 200,
    "data": {
        "status": 0,
        "desc": "The double call command is sent successfully",
        "reqtime": 1584953473,
        "rsptime": 1584953473
    },
    "msg": ""
}

```

# Predictive Outbound - Pre-test outbound task number remove

### Interface Description：

In the created predictive task, the number in the task can be added through this interface, and the single added number should not exceed 10,000。

### **request parameters**

<table id="bkmrk-parameter-name-type-"><thead><tr><th>parameter name</th><th>type</th><th>Is it necessary</th><th>illustrate</th></tr></thead><tbody><tr><td>service</td><td>string</td><td>yes</td><td>App.Sip\_Yccall.TaskAdd</td></tr><tr><td>token</td><td>string</td><td>yes</td><td>The token obtained through the authorization interface</td></tr><tr><td>taskid</td><td>string</td><td>yes</td><td>Predictive task ID</td></tr><tr><td>telphone</td><td>string</td><td>yes</td><td>Mobile phone number,Separate multiple numbers with commas.</td></tr><tr><td></td><td></td><td></td><td></td></tr></tbody></table>

### **Example request interface（PHP）**

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Yccall.taskDelPhone',
        'token'     => 'ABCDEFG',
        'taskid'    => 'ABCDEFG',
        'telphone' => 1,
    ];
    $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);
?>

```

### **return data structure example**

```

  {
    "ret": 200,
    "data": {
        "status": 0,
        "desc": "删除成功",
        "reqtime": 1581496800,
        "rsptime": 1581496800
    },
    "msg": ""
}

```

### **Return parameter description**

<table id="bkmrk-parameter-name-type--1"><thead><tr><th>parameter name</th><th>type</th><th>illustrate</th></tr></thead><tbody><tr><td>desc</td><td>string</td><td>return description</td></tr></tbody></table>

# Voice verification code - error code information

# error code information

**A brief description：**

- error code information

<table id="bkmrk-error-code-illustrat"><thead><tr><th align="left">error code</th><th align="left">illustrate</th></tr></thead><tbody><tr><td align="left">1000</td><td align="left">system error</td></tr><tr><td align="left">1001</td><td align="left">Parameter error</td></tr></tbody></table>

# Predictive Outbound -  Predictive outbound call access process

#### Predictive outbound call access process

[![3986542d676f7ddfd0fdcd85e171010d.jpg](https://document.infin8linx.com/uploads/images/gallery/2025-12/scaled-1680-/3986542d676f7ddfd0fdcd85e171010d.jpg)](https://document.infin8linx.com/uploads/images/gallery/2025-12/3986542d676f7ddfd0fdcd85e171010d.jpg)

# Voice verification code -  voice verification code

#### Request URL

- `http://platform.infin8linx.com/api/voiceCode`

#### request method

- POST

#### parameter

<table id="bkmrk-parameter-name-type-"><thead><tr><th>parameter name</th><th>type</th><th>Is it necessary</th><th>illustrate</th></tr></thead><tbody><tr><td>appid</td><td>yes</td><td>string</td><td>authentication appid</td></tr><tr><td>accesskey</td><td>yes</td><td>string</td><td>authentication accesskey</td></tr><tr><td>code</td><td>yes</td><td>string</td><td>Verification code 4 valid digits</td></tr><tr><td>phone</td><td>yes</td><td>string</td><td>The mobile phone number to receive the verification code Indonesian and Mexican mobile phone numbers do not need to add a country number. For example, if the complete number is: `0062 8123456789`, you can directly request with `8123456789`.</td></tr><tr><td>nationCode</td><td>yes</td><td>string</td><td>Language version en:English id:Indonesian sp:Spanish</td></tr></tbody></table>

**return example**

```
{
    "code": 1,
    "msg": "successful request",
    "data": {
        "customuuid":"123123"
    }
}


```

#### Return parameter description

<table id="bkmrk-parameter-name-type--1"><thead><tr><th>parameter name</th><th>type</th><th>illustrate</th></tr></thead><tbody><tr><td>code</td><td>int</td><td>Return code 1 is success, others are failure</td></tr><tr><td>msg</td><td>string</td><td>returned messages</td></tr><tr><td>data</td><td>object</td><td>return data</td></tr><tr><td>—customuuid</td><td>string</td><td>task unique id</td></tr></tbody></table>

[查看错误码详情](https://www.showdoc.cc/page/edit/663198582928843/4040095140133787 "查看错误码详情")

# Predictive Outbound - Set the pre-test outbound task status interface

### Interface Description

Set the status of the pretest outbound task。

### request parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th>parameter name</th><th>type</th><th>Is it necessary</th><th>illustrate</th></tr></thead><tbody><tr><td>service</td><td>string</td><td>yes</td><td>App.Sip\_Yccall.TaskSet</td></tr><tr><td>token</td><td>string</td><td>yes</td><td>The token obtained through the authorization interface</td></tr><tr><td>taskid</td><td>string</td><td>yes</td><td>The unique id returned when the task was created</td></tr><tr><td>taskstatus</td><td>int</td><td>yes</td><td>Set task status 1: open, 2: pause, 3: end</td></tr></tbody></table>

### Interface request example（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Yccall.TaskSet',
        'token'     => 'ABCDEFG',
        'taskid'    => 'ABCDEFG',
        'taskstatus' => 1,
    ];
    $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);
?>

```

### return data structure example

```
{
    "ret": 200,
    "data": {
        "status": 0,
        "desc": "successfully set",
        "reqtime": 1581496800,
        "rsptime": 1581496800
    },
    "msg": ""
}

```

### Return parameter description

<table id="bkmrk-parameter-name-type--1"><thead><tr><th>parameter name</th><th>type</th><th>illustrate</th></tr></thead><tbody><tr><td>desc</td><td>string</td><td>return description</td></tr></tbody></table>

# Predictive Outbound - delete taskgroup

#### Interface Description

delete taskgroup。

#### request parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th>parameter name</th><th>type</th><th>Is it necessary</th><th>illustrate</th></tr></thead><tbody><tr><td>service</td><td>string</td><td>yes</td><td>App.Sip\_Queue.DelQueue</td></tr><tr><td>token</td><td>string</td><td>yes</td><td>The token obtained through the authorization interface</td></tr><tr><td>queuename</td><td>string</td><td>yes</td><td>task group name</td></tr></tbody></table>

#### Interface request example（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Queue.DelQueue',
        'token'     => 'ABCDEFG',
        'queuename'     => 'queue-1'
    ];
    $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);
?>

```

#### return data structure example

```
{
    "ret": 200,
    "data": {
        "status": 0,
        "desc": "successfully deleted",
        "reqtime": 1587891639,
        "rsptime": 1587891639
    },
    "msg": ""
}

```

#### Return parameter description

<table id="bkmrk-parameter-name-type--1"><thead><tr><th>parameter name</th><th>type</th><th>illustrate</th></tr></thead><tbody><tr><td>desc</td><td>string</td><td>result description</td></tr></tbody></table>

# Predictive Outbound - edit task group

#### Interface Description

Create task group。

#### request parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th>parameter name</th><th>type</th><th>Is it necessary</th><th>illustrate</th></tr></thead><tbody><tr><td>service</td><td>string</td><td>yes</td><td>App.Sip\_Queue.EditQueue</td></tr><tr><td>token</td><td>string</td><td>yes</td><td>The token obtained through the authorization interface</td></tr><tr><td>queuename</td><td>string</td><td>yes</td><td>task group name</td></tr><tr><td>remark</td><td>string</td><td>yes</td><td>task group ID</td></tr><tr><td>strategy</td><td>string</td><td>no</td><td>Ringing strategy: 1. The longest idle time ringing; 2. The shortest call time ringing; 3. Simultaneous ringing; 4. Round-robin ringing; 5. Sequential ringing; 6. Random ringing; Ringing; 8. Priority ringing. Default is 1</td></tr><tr><td>announcefreq</td><td>string</td><td>no</td><td>Notification frequency (unit: second), the default is 30</td></tr><tr><td>ringdelay</td><td>string</td><td>no</td><td>Ring delay (unit: second), the default is 30</td></tr><tr><td>maxwaittime</td><td>string</td><td>no</td><td>Maximum wait time, default is 0</td></tr><tr><td>withnoagenttime</td><td>string</td><td>no</td><td>No agent waiting timeout, the default is 0</td></tr><tr><td>noagentrejoiningtime</td><td>string</td><td>no</td><td>The call re-enters the task group time when there is no agent, the default is 5</td></tr><tr><td>discardtime</td><td>string</td><td>no</td><td>The maximum discard time, the default is 90</td></tr></tbody></table>

#### Interface request example（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Queue.EditQueue',
        'token'     => 'ABCDEFG',
        'queuename'     => 'queue-1',
        'remark'     => 'remark',
        'strategy'     => '1',
        'announcefreq'     => '30',
        'ringdelay'     => '30',
        'maxwaittime'     => '0',
        'withnoagenttime'     => '0',
        'noagentrejoiningtime'     => '5',
        'discardtime'     => '90',
    ];
    $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);
?>

```

#### return data structure example

```
{
    "ret": 200,
    "data": {
        "status": 0,
        "desc": "Successfully modified",
        "reqtime": 1587891639,
        "rsptime": 1587891639
    },
    "msg": ""
}

```

#### Return parameter description

<table id="bkmrk-parameter-name-type--1"><thead><tr><th>parameter name</th><th>type</th><th>illustrate</th></tr></thead><tbody><tr><td>desc</td><td>string</td><td>result description</td></tr></tbody></table>

# Predictive Outbound - Add group extension

#### Interface Description

Create a task group required before creating a predictive outbound task。

#### Request method

POST, form-data format

#### request parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th>parameter name</th><th>type</th><th>Is it necessary</th><th>illustrate</th></tr></thead><tbody><tr><td>service</td><td>string</td><td>yes</td><td>App.Sip\_Extgroup.AddExtnumber</td></tr><tr><td>token</td><td>string</td><td>yes</td><td>The token obtained through the authorization interface</td></tr><tr><td>name</td><td>string</td><td>yes</td><td>group name</td></tr><tr><td>extnumber</td><td>string</td><td>yes</td><td>Ext</td></tr></tbody></table>

#### Interface request example（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Extgroup.AddExtnumber',
        'token'     => 'ABCDEFG',
        'name'     => 'queue-1',
        'extnumber' => '700000001',
    ];
    $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);
?>

```

#### return data structure example

```
{
    "ret": 200,
    "data": {
        "status": 0,
        "desc": "Added successfully",
        "reqtime": 1587891639,
        "rsptime": 1587891639
    },
    "msg": ""
}

```

#### Return parameter description

<table id="bkmrk-parameter-name-type--1"><thead><tr><th>parameter name</th><th>type</th><th>illustrate</th></tr></thead><tbody><tr><td>desc</td><td>string</td><td>result description</td></tr></tbody></table>

# Predictive Outbound - Create extension group

#### Interface Description

Create a task group required before creating a predictive outbound task。

#### Request method

POST, form-data format

#### request parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th>parameter name</th><th>type</th><th>Is it necessary</th><th>illustrate</th></tr></thead><tbody><tr><td>service</td><td>string</td><td>yes</td><td>App.Sip\_Extgroup.AddExtgroup</td></tr><tr><td>token</td><td>string</td><td>yes</td><td>The token obtained through the authorization interface</td></tr><tr><td>name</td><td>string</td><td>yes</td><td>group name</td></tr><tr><td>status</td><td>string</td><td>no</td><td>Whether to enable: 1 enable 0 disable 2 all</td></tr></tbody></table>

#### Interface request example（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Extgroup.AddExtgroup',
        'token'     => 'ABCDEFG',
        'name'     => 'queue-1',
    ];
    $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);
?>

```

#### return data structure example

```
{
    "ret": 200,
    "data": {
        "status": 0,
        "desc": "Added successfully",
        "reqtime": 1587891639,
        "rsptime": 1587891639
    },
    "msg": ""
}

```

#### Return parameter description

<table id="bkmrk-parameter-name-type--1"><thead><tr><th>parameter name</th><th>type</th><th>illustrate</th></tr></thead><tbody><tr><td>desc</td><td>string</td><td>result description</td></tr></tbody></table>

# Predictive Outbound - Edit group extension

#### Interface Description

Create a task group required before creating a predictive outbound task。

#### Request method

POST, form-data format

#### request parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th>parameter name</th><th>type</th><th>Is it necessary</th><th>illustrate</th></tr></thead><tbody><tr><td>service</td><td>string</td><td>yes</td><td>App.Sip\_Extgroup.EditExtnumber</td></tr><tr><td>token</td><td>string</td><td>yes</td><td>The token obtained through the authorization interface</td></tr><tr><td>name</td><td>string</td><td>yes</td><td>group name</td></tr><tr><td>extnumber</td><td>string</td><td>yes</td><td>Ext</td></tr><tr><td>state</td><td>string</td><td>yes</td><td>Extension status idle: idle, busy: busy</td></tr></tbody></table>

#### Interface request example（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Extgroup.EditExtnumber',
        'token'     => 'ABCDEFG',
        'name'     => 'queue-1',
        'extnumber' => '700000001',
        'state' => 'idle',
    ];
    $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);
?>

```

#### return data structure example

```
{
    "ret": 200,
    "data": {
        "status": 0,
        "desc": "edited successfully",
        "reqtime": 1587891639,
        "rsptime": 1587891639
    },
    "msg": ""
}

```

#### Return parameter description

<table id="bkmrk-parameter-name-type--1"><thead><tr><th>parameter name</th><th>type</th><th>illustrate</th></tr></thead><tbody><tr><td>desc</td><td>string</td><td>result description</td></tr></tbody></table>

# Predictive Outbound - Get group extension information

#### Interface Description：

Create a task group required before creating a predictive outbound task。

#### Request method

POST, form-data format

#### request parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th>parameter name</th><th>type</th><th>Is it necessary</th><th>illustrate</th></tr></thead><tbody><tr><td>service</td><td>string</td><td>yes</td><td>App.Sip\_Extgroup.GetGroupExt</td></tr><tr><td>token</td><td>string</td><td>yes</td><td>The token obtained through the authorization interface</td></tr><tr><td>name</td><td>string</td><td>yes</td><td>group name</td></tr><tr><td>extnumber</td><td>string</td><td>no</td><td>Ext</td></tr></tbody></table>

#### Interface request example（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Extgroup.GetGroupExt',
        'token'     => 'ABCDEFG',
        'name'     => 'queue-1',
    ];
    $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);
?>

```

#### return data structure example

```
{
    "ret": 200,
    "data": [
        {
            "name": "test2",
            "extnumber": "701005",
            "status": "hangup",
            "state": "idle"
        }
    ],
    "msg": "",
}

```

#### Return parameter description

<table id="bkmrk-parameter-name-type--1"><thead><tr><th>parameter name</th><th>type</th><th>illustrate</th></tr></thead><tbody><tr><td>desc</td><td>string</td><td>result description</td></tr></tbody></table>

# Predictive Outbound - Get group information

#### Interface Description

Create a task group required before creating a predictive outbound task。

#### Request method

POST, form-data format

#### request parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th>parameter name</th><th>type</th><th>Is it necessary</th><th>illustrate</th></tr></thead><tbody><tr><td>service</td><td>string</td><td>yes</td><td>App.Sip\_Extgroup.GetExtgroupInfo</td></tr><tr><td>token</td><td>string</td><td>yes</td><td>The token obtained through the authorization interface</td></tr><tr><td>name</td><td>string</td><td>yes</td><td>group name</td></tr><tr><td>status</td><td>string</td><td>no</td><td>Whether to enable: 1 enable 0 disable 2 all</td></tr></tbody></table>

#### Interface request example（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Extgroup.GetExtgroupInfo',
        'token'     => 'ABCDEFG',
        'name'     => 'queue-1',
    ];
    $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);
?>

```

#### return data structure example

```
{
    "ret": 200,
    "data": {
        "status": 0,
        "desc": "get success",
        "result": [
            {
                "id": 3,
                "name": "test1",
                "status": 1042
            },
            {
                "id": 4,
                "name": "test2",
                "status": 1042
            }
        ],
        "reqtime": 1615537609,
        "rsptime": 1615537609
    },
    "msg": "",
}

```

#### Return parameter description

<table id="bkmrk-parameter-name-type--1"><thead><tr><th>parameter name</th><th>type</th><th>illustrate</th></tr></thead><tbody><tr><td>desc</td><td>string</td><td>result description</td></tr></tbody></table>

# Predictive Outbound - delete group extension

#### Interface Description

Create a task group required before creating a predictive outbound task。

#### Request method

POST, form-data format

#### request parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th>parameter name</th><th>type</th><th>Is it necessary</th><th>illustrate</th></tr></thead><tbody><tr><td>service</td><td>string</td><td>yes</td><td>App.Sip\_Extgroup.DelExtnumber</td></tr><tr><td>token</td><td>string</td><td>yes</td><td>The token obtained through the authorization interface</td></tr><tr><td>name</td><td>string</td><td>yes</td><td>group name</td></tr><tr><td>extnumber</td><td>string</td><td>yes</td><td>Ext</td></tr></tbody></table>

#### Interface request example（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Extgroup.DelExtnumber',
        'token'     => 'ABCDEFG',
        'name'     => 'queue-1',
        'extnumber' => '700000001',
    ];
    $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);
?>

```

#### return data structure example

```
{
    "ret": 200,
    "data": {
        "status": 0,
        "desc": "successfully deleted",
        "reqtime": 1587891639,
        "rsptime": 1587891639
    },
    "msg": ""
}

```

#### Return parameter description

<table id="bkmrk-parameter-name-type--1"><thead><tr><th>parameter name</th><th>type</th><th>illustrate</th></tr></thead><tbody><tr><td>desc</td><td>string</td><td>result description</td></tr></tbody></table>

# Predictive Outbound - Get queue extension information

#### Interface Description

Get the extension list information owned by the user。

#### request parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th>parameter name</th><th>type</th><th>Is it necessary</th><th>illustrate</th></tr></thead><tbody><tr><td>service</td><td>string</td><td>yes</td><td>App.Sip\_Sipnum.GetSipnumberInfo</td></tr><tr><td>token</td><td>string</td><td>yes</td><td>The token obtained through the authorization interface</td></tr><tr><td>status</td><td>int</td><td>yes</td><td>extension status. 1: enable (default), 2: disable, 3: all</td></tr><tr><td>extnumber</td><td>string</td><td>no</td><td>Extension number, empty to get all</td></tr></tbody></table>

#### Interface request example（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Sipnum.GetSipnumberInfo',
        'token'     => 'ABCDEFG',
        'status'    => 3,
        'extnumber'  => '100001'
    ];
    $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);
?>

```

#### return data structure example

```
{
    "ret": 200,
    "data": {
        "status": 0,
        "desc": "get success",
        "result": [
            {
                "extnumber": "100001",
                "password": "100001",
                "status": 1016,
                "register": "nreg"
            }
        ],
        "reqtime": 1581506241,
        "rsptime": 1581506241
    },
    "msg": ""
}

```

#### Return parameter description

<table id="bkmrk-parameter-name-type--1"><thead><tr><th>parameter name</th><th>type</th><th>illustrate</th></tr></thead><tbody><tr><td>result</td><td>array</td><td>extension list array</td></tr><tr><td>—extnumber</td><td>string</td><td>Ext</td></tr><tr><td>—password</td><td>string</td><td>Extension login password</td></tr><tr><td>—status</td><td>int</td><td>Extension Status</td></tr><tr><td>—register</td><td>string</td><td>Extension registration status. nreg: not registered; reg: registered</td></tr></tbody></table>

# Predictive Outbound - Get queue list

#### Interface Description

Get the list of task groups owned by the current user。

#### request parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th>parameter name</th><th>type</th><th>Is it necessary</th><th>illustrate</th></tr></thead><tbody><tr><td>service</td><td>string</td><td>yes</td><td>App.Sip\_Queue.GetQueueList</td></tr><tr><td>token</td><td>string</td><td>yes</td><td>The token obtained through the authorization interface</td></tr><tr><td>queuename</td><td>string</td><td>no</td><td>Task group name, if not passed, get all task groups</td></tr></tbody></table>

#### Interface request example（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Queue.GetQueueList',
        'token'     => 'ABCDEFG',
        'queuename'     => '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);
?>

```

#### return data structure example

```
{
    "ret": 200,
    "data": {
        "status": 0,
        "desc": "get success",
        "result": [
            {
                "queuename":"autocall_test-1101",
                "remark":"test-1101-edit",
                "strategy":8,
                "announce":"announce.wav",
                "announcefreq":1,
                "ringdelay":1,
                "maxwaittime":1,
                "withnoagenttime":1,
                "noagentrejoiningtime":1,
                "discardtime":1,
                "autocall":"busy"
            }
        ],
        "reqtime": 1581419353,
        "rsptime": 1581419353
    },
    "msg": ""
}

```

#### Return parameter description

<table id="bkmrk-parameter-name-type--1"><thead><tr><th>parameter name</th><th>type</th><th>illustrate</th></tr></thead><tbody><tr><td>result</td><td>array</td><td>returned result array</td></tr><tr><td>—queuename</td><td>string</td><td>task group name</td></tr><tr><td>—remark</td><td>string</td><td>task group ID</td></tr><tr><td>—strategy</td><td>string</td><td>Ring strategy 1, longest idle time ring 2, shortest call time ring 3, simultaneous ring 4, round robin ring 5, sequential ring 6, random ring 7, least answer ring 8, priority ring bell</td></tr><tr><td>—announce</td><td>string</td><td>announcement voice</td></tr><tr><td>—announcefreq</td><td>string</td><td>Notification frequency (unit: second)</td></tr><tr><td>—ringdelay</td><td>string</td><td>Ringing delay (unit: second)</td></tr><tr><td>—maxwaittime</td><td>string</td><td>maximum waiting time</td></tr><tr><td>—withnoagenttime</td><td>string</td><td>No seat waiting timeout</td></tr><tr><td>—noagentrejoiningtime</td><td>string</td><td>Call re-entering task group time when there are no agents</td></tr><tr><td>—discardtime</td><td>string</td><td>Maximum discard time</td></tr><tr><td>—autocall</td><td>string</td><td>Predicted outbound call status busy: indicates busy, idle: indicates idle, unavailable: predicts outbound call is unavailable</td></tr></tbody></table>

# Predictive Outbound - Set agent idle status

#### Interface Description

Set the idle status of the agent。

#### request parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th>parameter name</th><th>type</th><th>Is it necessary</th><th>illustrate</th></tr></thead><tbody><tr><td>service</td><td>string</td><td>yes</td><td>App.Sip\_Queue.SetSeatsStatus</td></tr><tr><td>token</td><td>string</td><td>yes</td><td>The token obtained through the authorization interface</td></tr><tr><td>settype</td><td>int</td><td>yes</td><td>Setting status 1: show busy, 2: show idle</td></tr><tr><td>extnumber</td><td>string</td><td></td><td>Ext</td></tr><tr><td>crmid</td><td>int</td><td>yes</td><td>agent id</td></tr><tr><td>queuename</td><td>string</td><td>yes</td><td>task group name</td></tr></tbody></table>

#### Interface request example（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Queue.SetSeatsStatus',
        'token'     => 'ABCDEFG',
        'taskid'    => 'ABCDEFG',
        'taskstatus' => 1,
    ];
    $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);
?>

```

#### return data structure example

```
{
    "ret": 200,
    "data": {
        "status": 0,
        "desc": "successfully set",
        "reqtime": 1581496800,
        "rsptime": 1581496800
    },
    "msg": ""
}

```

#### Return parameter description

<table id="bkmrk-parameter-name-type--1"><thead><tr><th>parameter name</th><th>type</th><th>illustrate</th></tr></thead><tbody><tr><td>desc</td><td>string</td><td>return description</td></tr></tbody></table>

# Predictive Outbound - create queue

#### Interface Description

Create a task group required before creating a predictive outbound task。

#### Request method

POST, form-data format

#### request parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th>parameter name</th><th>type</th><th>Is it necessary</th><th>illustrate</th></tr></thead><tbody><tr><td>service</td><td>string</td><td>yes</td><td>App.Sip\_Queue.AddQueue</td></tr><tr><td>token</td><td>string</td><td>yes</td><td>The token obtained through the authorization interface</td></tr><tr><td>queuename</td><td>string</td><td>yes</td><td>task group name</td></tr><tr><td>autocall</td><td>string</td><td>yes</td><td>Whether to automatically call out the task group: yes 、 no</td></tr><tr><td>remark</td><td>string</td><td>yes</td><td>task group ID</td></tr><tr><td>strategy</td><td>string</td><td>no</td><td>Ringing strategy: 1. The longest idle time ring; 2. The shortest call time ring; 3. Simultaneous ringing; 4. Round-robin ringing; 5. Sequential ringing; 6. Random ringing; 7. Least answering Ringing; 8. Priority ringing. Default is 1</td></tr></tbody></table>

#### Interface request example（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Queue.AddQueue',
        'token'     => 'ABCDEFG',
        'queuename'     => 'queue-1',
        'autocall'     => 'yes',
        'remark'     => 'remark',
        'strategy'     => '1',
    ];
    $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);
?>

```

#### return data structure example

```
{
    "ret": 200,
    "data": {
        "status": 0,
        "desc": "Added successfully",
        "reqtime": 1587891639,
        "rsptime": 1587891639
    },
    "msg": ""
}

```

#### Return parameter description

<table id="bkmrk-parameter-name-type--1"><thead><tr><th>parameter name</th><th>type</th><th>illustrate</th></tr></thead><tbody><tr><td>desc</td><td>string</td><td>result description</td></tr></tbody></table>

# Predictive Outbound - extension check in

#### Interface Description

Check extension into task group。

#### request parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th>parameter name</th><th>type</th><th>Is it necessary</th><th>illustrate</th></tr></thead><tbody><tr><td>service</td><td>string</td><td>yes</td><td>App.Sip\_Queue.SipSignIn</td></tr><tr><td>token</td><td>string</td><td>yes</td><td>The token obtained through the authorization interface</td></tr><tr><td>queuename</td><td>string</td><td>yes</td><td>task group name</td></tr><tr><td>extnumber</td><td>string</td><td>yes</td><td>Ext</td></tr><tr><td>crmid</td><td>int</td><td>yes</td><td>Employee seat number</td></tr></tbody></table>

#### Interface request example（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Queue.SipSignIn',
        'token'     => 'ABCDEFG',
        'queuename' => 'queue-1',
        'extnumber' => '100001',
        'crmid'     => 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);
?>

```

#### return data structure example

```
{
    "ret": 200,
    "data": {
        "status": 0,
        "desc": "check in successful",
        "reqtime": 1581494135,
        "rsptime": 1581494135
    },
    "msg": ""
}

```

#### Return parameter description

<table id="bkmrk-parameter-name-type--1"><thead><tr><th>parameter name</th><th>type</th><th>illustrate</th></tr></thead><tbody><tr><td>desc</td><td>string</td><td>return description</td></tr></tbody></table>

# Predictive Outbound - extension sign out

#### Interface Description

Check extension into task group。

#### request parameters

<table id="bkmrk-parameter-name-type-"><thead><tr><th>parameter name</th><th>type</th><th>Is it necessary</th><th>illustrate</th></tr></thead><tbody><tr><td>service</td><td>string</td><td>yes</td><td>App.Sip\_Queue.SipSignOut</td></tr><tr><td>token</td><td>string</td><td>yes</td><td>The token obtained through the authorization interface</td></tr><tr><td>queuename</td><td>string</td><td>yes</td><td>task group name</td></tr><tr><td>extnumber</td><td>string</td><td>yes</td><td>Ext</td></tr><tr><td>crmid</td><td>int</td><td>yes</td><td>Employee seat number</td></tr></tbody></table>

#### Interface request example（PHP）

```
<?php
    $apiUrl = 'http://127.0.0.1:8080';
    $postFields = [
        'service'   => 'App.Sip_Queue.SipSignOut',
        'token'     => 'ABCDEFG',
        'queuename' => 'queue-1',
        'extnumber' => '100001',
        'crmid'     => 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);
?>

```

#### return data structure example

```
{
    "ret": 200,
    "data": {
        "status": 0,
        "desc": "checkout successful",
        "reqtime": 1581492868,
        "rsptime": 1581492869
    },
    "msg": ""
}

```

#### Return parameter description

<table id="bkmrk-parameter-name-type--1"><thead><tr><th>parameter name</th><th>type</th><th>illustrate</th></tr></thead><tbody><tr><td>desc</td><td>string</td><td>return description</td></tr></tbody></table>