开发者文档

通过 API 与 SDK 将 IFCALL 国际长途通话能力集成到您的业务系统中

一、接入方式总览

IFCALL 基于腾讯云 TRTC 技术,提供以下接入方式供开发者、企业 OEM 与集成商选择:

SDK微信小程序

小程序接入

在微信内快速构建国际通话小程序,扫码即用、无需安装 APP。

小程序开发文档 →
SDKWeb 端

Web 接入

网页坐席端,浏览器即开即用,嵌入企业系统快速拨打。

Web 开发文档 →
SDKuni-app

uni-app 接入

一套代码多端发布,打造专属跨端移动通话应用服务。

uni-app 开发文档 →
API/api-call/

RESTful API

供企业业务系统后端对接,实现拨号、话单、录音、实名认证等能力。

SDK 下载与示例 →

二、对接准备

2.1 企业开户

需要在运营管理端给企业开户,指定主管姓名和电话号码,配置子账号数量,以及其他信息。

  • 主管姓名和电话号码将生成企业的主卡账户,该账户默认可以直接使用,无需身份认证(默认已认证)。
  • 企业主管账户用户可以登录企业端工作台查看各种数据。
  • 子账号数量需要设置较大,所有通过 API 接口注册的用户都是该企业的子账户。

2.2 开通 API

企业开户后,需要开通 API 才能调用接口。开通 API 时需配置以下值:

配置项说明
API-KEY16 位字母数字组合的字符串,可随机生成
API-Secret16 位字母数字组合的字符串,可随机生成
API 密码任意位数字母数字组合的字符串,建议不小于 16 位
IP 白名单企业业务系统的外网 IP 地址,可多个,系统只处理白名单内的请求
话单上报 URL企业处理话单的服务 URL,系统处理该企业呼叫话单时实时上报
身份认证费率实名认证接口额外收费,费率只对实名认证接口有效
API 权限按运营需要设置企业可访问的接口

2.3 交付 API 配置

开通 API 时产生的 企业ID(companyId)、API-KEY、API-Secret、API 密码 需通过安全途径提供给企业,企业业务系统调用 API 时需据此进行数字签名。

2.4 重置 API 密码

如需重置 API 密码,在开通 API 时选择"重置密码"并录入新密码。重置后调用 API 需用新密码进行数字签名。

三、接口调用流程

通过 API 拨打电话有两种模式:

3.1 只拨打电话模式

  1. 企业主管账户登录平台企业工作台,开通企业的子账号。
  2. 子账户登录企业业务系统拨打电话,企业业务服务器调用 API 进行地理位置鉴权。
  3. 平台 API 服务收到鉴权请求后,进行鉴权处理,返回位置鉴权结果。
  4. 企业业务系统调用 API 进行呼叫检测。
  5. 平台 API 服务检查主叫和被叫信息是否可以拨打,以及最大拨打时长,返回结果。
  6. 企业业务系统调用 API 进行拨打呼叫。
  7. 平台 API 服务对呼叫请求进行鉴权,通过后发起呼叫,返回呼叫 ID 以及 TRTC 的房间号和数字签名信息。
  8. 企业业务系统保存呼叫 ID。
  9. 企业业务系统使用呼叫 ID 查询呼叫的实时执行情况。
  10. 企业业务系统使用 TRTC 房间号和数字签名发起 TRTC 通话会话。
  11. 子账号用户接听电话,完成后挂断。
  12. 企业业务系统调用 API 请求挂断电话。
  13. 平台 API 服务挂断处理,产生话单扣费,同时上报话单给企业业务系统。
  14. 企业业务系统处理收到的话单。
  15. 企业业务系统下载话单的录音文件。

3.2 开通子账户拨打模式

企业业务系统开通用户账户,同时通过 API 接口请求开通子账户,然后通过子账户拨打电话。此类子账户必须进行实名认证之后才能拨打电话。

  1. 企业业务系统开通用户账户。
  2. 调用子账户注册 API 向平台发起开通子账户请求。
  3. 平台 API 服务处理并返回用户 ID(userId)。
  4. 企业业务系统记录 userId。
  5. 调用实名认证接口发起账户实名认证。
  6. 平台处理认证并扣费,返回认证结果。
  7. 认证成功后的用户登录企业业务系统拨号,流程参考"只拨打电话模式"的 2~15 步骤。

3.3 话单产生和上报

  • 直拨拨打调用顺序:startCall → alertCall → endCall
  • alertCall 返回正常的呼叫就会产生话单。
  • 挂断电话之后,话单会上报。

四、接口调用总则

接口调用端需要用 API-KEY、API-Secret、API 密码对请求内容进行数字签名后发起请求;受理端收到请求后先校验数字签名,校验成功才处理。

4.1 数字签名

  1. 使用 API-KEY、API-Secret、API 密码和时间戳,获取加密的签名键值(signKey):
    1. 对时间戳通过 SHA-256 算法算出 Hash 值;
    2. 拼接时间戳 Hash 值和 API 密码,得到待加密文本;
    3. 用 API-KEY(key)、API-Secret(iv)对待加密文本进行 AES 加密(PKCS5Padding 填充),得到密文;
    4. 对密文进行 Base64 编码,得到用于签名的 signKey。
  2. 对请求参数按照 ASCII 码排序(不包括 sign 参数)。
  3. 将排序后的参数用 & 拼接成待处理字符串,每个参数格式为 key=value。
  4. 把 signKey 附加到待处理字符串中:[待处理字符串]&key=[signKey]
  5. 使用 MD5 算法对拼接后的字符串处理,得到的 MD5 值转为大写,得到数字签名值 signValue。

4.2 接口调用

  • 调用 API 时,计算出签名值 signValue 后加入请求参数中(字段名:sign)。
  • 无特殊说明时,接口一律采用 POST 模式调用,Content-Type: application/json;charset=UTF-8。
  • 服务端收到请求后对参数进行签名计算,与请求中的签名一致才处理。
  • 接口返回信息总体结构:
{
  "status": 0,    // 接口处理结果,Integer,0 成功,其他异常,参见状态定义
  "message": "",  // 异常描述,String
  "data": {       // 接口处理结果返回对象
     ...
  }
}

五、接口说明

以下接口均需携带 companyId、timestamp、sign 公共参数。

5.1 用户管理接口

POST/customerApi/identityVerify

实名认证

检测用户姓名、电话、身份证号三者信息是否一致,一致才能调用拨打电话接口。

userNamestring用户姓名
mobilePhonestring电话号码
identityNostring身份证号
POST/customerApi/register

注册新用户

注册新用户到平台,注册成功后需调用实名认证接口进行身份认证。返回 userId 需保存。

userNamestring用户姓名
mobilePhonestring电话号码
identityNostring身份证号
POST/customerApi/update

更新用户信息

根据用户 ID 更新用户信息。更新姓名、电话、身份证三者任意一个,都必须重新实名认证。

userIdlong用户 ID
userNamestring新的用户姓名
identityNostring新的身份证号
POST/customerApi/profile

查询单个用户

根据用户 ID 获取用户信息,包含实名认证状态、有效期等。

userIdlong用户 ID
POST/customerApi/page

分页查询用户列表

按查询条件分页查询用户列表信息,支持 userId、userName、mobilePhone 筛选。

mobilePhonestring模糊查询,须大于 5 位数字
pageNoint页码,默认 1
pageSizeint每页记录数,最小 20

5.2 呼叫记录接口

POST/cdrApi/page

分页查询话单列表

按条件分页查询话单,含通话时长、计费时长、费用、录音等完整信息。

beginDatestring开始时间,必填
endDatestring结束时间,必填
onlyLinkedboolean是否只查接通电话
calledstring被叫号码,可选
POST/cdrApi/profile

查询单个话单

查询指定呼叫 ID 的呼叫话单信息。

cdrIdlong呼叫 ID
GET/cdrApi/download

下载话单录音

根据指定呼叫 ID 下载该呼叫的录音文件(GET 方式)。

cdrIdlong呼叫 ID

5.3 拨打处理接口

POST/callApi/startCallBack

回拨拨打

发出并成功受理后电话打到指定号码,结束后推送话单通知。

callerstring主叫号码
outCallerstring外显号码
calledstring被叫号码(00+国家区码+号码)
maxTalkSecondsint最大呼叫秒数
POST/callApi/startCall

直拨拨打

TRTC 方式直拨呼叫,返回 TRTC 房间号与数字签名,据此建立通话会话。

callerstring主叫号码
outCallerstring外显号码
calledstring被叫号码
maxTalkSecondsint最大呼叫秒数
POST/callApi/alertCall

呼叫准备就绪

仅直拨有效。服务端处理直拨后,前端发送此请求通知服务器已准备妥当,服务器将电话打到指定号码。

callerstring主叫号码
cdrIdlong呼叫 ID
POST/callApi/endCall

结束呼叫

仅直拨有效,用于挂断指定呼叫。

callerstring主叫号码
cdrIdlong呼叫 ID
POST/callApi/queryCall

查询呼叫状态

根据呼叫 ID 查询对应呼叫的实时状态(初始/外呼/振铃/接通/挂线等)。

callerstring主叫号码
cdrIdlong呼叫 ID
POST/callApi/toneClick

呼叫按键

仅直拨有效,通话过程中输入按键信息(如拨打热线选择服务类型)。

callerstring主叫号码
cdrIdlong呼叫 ID
tonestring按键信息
POST/callApi/queryCalledFee

查询被叫资费

拨打电话时显示对应资费信息,返回地区名称与费率(元/分钟)。

callerstring主叫号码
calledstring被叫号码,长度需大于 5 位
POST/callApi/callCheck

呼叫检测

检查主叫、被叫号码是否可以拨打,以及最大可拨打时长。

callerstring主叫号码
calledstring被叫号码
POST/callApi/gisAuth

位置授权验证

检查主叫用户所处地理位置是否可以拨打电话。每次授权有效期 2 小时。

callerstring主叫号码
calledstring被叫号码
nationNamestring当前所在国家名称
provinceNamestring当前所在省份名称
POST/callApi/callerAuthType

查询主叫位置授权类型

检查主叫号码用户最新的地理位置授权类型(黑名单/白名单/正常)。

callerstring主叫号码
calledstring被叫号码
POST/callApi/listOutNumber

查询企业外显号码

查询本企业所有可用的外显号码列表。

无参数-仅需公共参数

5.4 话单上报接口

平台处理企业呼叫话单后,向企业的话单上报 URL 实时上报话单通知(调用方向:平台 → 企业业务系统)。

  • URL:企业的话单上报 URL
  • 调用模式:POST,Content-Type: application/json;charset=UTF-8
  • 参数包含 cdrId、caller、outCaller、called、callTime、answerTime、releaseTime、talkSeconds、billSeconds、billMoney、billRate、statusCode、statusName、causeCodeName、areaName 等。
  • 返回:{ "status": 0, "message": "", "data": "" }

六、状态定义

6.1 接口处理结果状态(status)

状态码说明
0处理成功
5700103用户 ID 不能是空值
5700166已经存在这个电话号码的用户
5700341企业 ID 不能是空值
5700343主叫号码不能是空值
5700344被叫号码不能是空值
5700345没有找到企业信息,请确认企业 ID 是正确的
5700346对接端 IP 地址不在白名单内
5700348接口调用密码不正确
5700350没有找到主叫对应的用户,请确认主叫号码已在系统中注册
5700355数字签名不正确
5700357您的企业没有使用这个接口的权限
5700361开始日期和结束日期间隔不能超过 30 天
5700367需要进行用户身份实名验证
5700368用户不存在或者用户和企业不匹配

6.2 呼叫认证结果状态(authStatus)

状态码说明
0通过认证
900002鉴权失败
900004需要电话号码授权
900101主叫号码非法
900102没有电话卡
900103电话卡被锁定
900105电话卡过期
900106电话卡没有余额
900107被叫号码非法
900108被叫号码格式错误
900110不支持的地区
900111没有该地区的费率
900112受限的地区
900117账上余额小于最小余额
900201外显号码不存在

七、调用实例

7.1 数字签名核心逻辑

// 1. 生成签名键值 signKey
String signKey = generateKey(key, iv, pwd, timestamp);
//    key=API-KEY, iv=API-Secret, pwd=API密码, timestamp=时间戳

// 2. 生成数字签名 sign
String sign = generateSign(signKey, map);
//    map 为请求参数(不含 sign),按 ASCII 排序拼接,
//    末尾附加 &key=signKey,再整体 MD5 转大写

// 3. 将 sign 加入请求参数后发起 POST 请求
map.put("sign", sign);

完整 Java 参考实现(SignTool.java、HttpTool.java、ApiResult.java)请查看 线上文档 或联系我们的商务技术支持获取。

八、接入流程

  1. 通过 商务合作 开通企业账户并申请 API 权限。
  2. 获取 API-KEY、API-Secret、API 密码、企业 ID 及话单上报 URL 等配置。
  3. 在服务端实现数字签名算法(参考上文)并完成接口联调。
  4. 按接入方式选择对应的 SDK(小程序 / Web / uni-app)集成前端通话能力。
  5. 完成实名认证、位置授权等合规流程后即可上线拨打国际长途。

需要技术支持?

联系我们的商务团队,获取接入配置、Demo 与一对一技术支持