REST API文档
话单管理
话单--通话记录
话单字段 | 中文说明 |
---|---|
caller_id_name | 主叫名称 |
caller_id_number | 主叫号码 |
destination_number | 被叫号码 |
start_stamp | 开始时间 |
ring_stamp | 振铃时间 |
answer_stamp | 应答时间 |
end_stamp | 结束时间 |
duration | 总时长 |
billsec | 计费时长 |
account_code | 计费号码 |
hangup_cause | 挂机原因 |
network_addr | 网络地址 |
network_port | 网络端口 |
sip_hangup_disposition | 挂机方向 |
context | 呼叫源 |
uuid | 通话 UUID |
bleg_uuid | B 腿 UUID |
direction | 方向,inboud 为向内,outbound 向外 |
realm | 域 |
caller_id_number | 主叫号码 |
external_tracking_id | 自定义 id |
caller_source | caller_source |
other_uuid | 该话单另外一个 uuid |
digits_dialed | 按键信息 |
sip_call_id | Call ID |
xui_route_ids | 经过的路由 ID |
abs_path | 录音文件绝对路径 |
rel_path | 录音文件相对路径 |
rtp_use_codec_name | 使用的编码 |
caller_source | caller_source |
xui_hangup_cause | XUI自定义挂机原因 |
media_file_id | 录音对应的媒体文件id |
挂机原因 | 中文说明 |
---|---|
ORIGINATOR_CANCEL | 主叫挂机 |
NORMAL_CLEARING | 正常释放 |
NORMAL_TEMPORARY_FAILURE | 临时故障 |
WRONG_CALL_STATE | 呼叫状态异常 |
USER_BUSY | 用户忙 |
LOSE_RACE | 别处应答 |
MEDIA_TIMEOUT | 媒体超时 |
CALL_REJECTED | 拒绝呼叫 |
UNALLOCATED_NUMBER | 空号 |
NO_ROUTE_DESTINATION | 无法路由 |
NO_USER_RESPONSE | 久叫不应 |
NO_ANSWER | 无应答 |
NORMAL_UNSPECIFIED | 未定义 |
NETWORK_OUT_OF_ORDER | 网络异常 |
RECOVERY_ON_TIMER_EXPIRE | 呼叫超时 |
USER_NOT_REGISTERED | 用户未注册 |
SUBSCRIBER_ABSENT | 用户缺席 |
GATEWAY_DOWN | 网关故障 |
MANDATORY_IE_MISSING | SIP 消息不全 |
SYSTEM_SHUTDOWN | 系统关机 |
INCOMPATIBLE_DESTINATION | 目的地不兼容 |
EXCHANGE_ROUTING_ERROR | 交换路由错误 |
MANAGER_REQUEST | 强制挂机 |
DESTINATION_OUT_OF_ORDER | 目的地异常 |
SERVICE_NOT_IMPLEMENTED | 服务未实现 |
查询话单
- 请求 URL:
/api/cdrs
- 请求方式:
GET
- 请求参数说明:
请求参数 | 说明 |
---|---|
dateType | 话单时间查询类型,默认话单开始时间,如果选话单结束时间:end_stamp |
startDate | 呼叫开始时间,格式:2018-06-06 |
endDate | 呼叫结束时间:格式:2018-06-06 |
cidNumber | 主叫号码 |
destNumber | 被叫号码 |
startBillsec | 最小billsec 值, 秒 |
endBillsec | 最大billsec 值, 秒 |
groupValue | 组ID |
page | 当前页码 |
perPage | 每页 cdr 条数 |
话单支持按时间、主被叫号码、通话时长等精确查询。
按时间查询时,默认查询的是话单的开始时间
,如果想要按话单的结束时间
去查询指定时间的全部话单需要指定日期类型,即,dateType=end_stamp
。
按时间查询时,如果指定了 startDate 和 startDate,而 endDate 如果只是输入了日期没有精确时分秒,则结束时间默认为该日期加 1,具体如下
示例 1
api/cdrs?startDate=2022-11-03&startDate=2022-11-03&perPage=1&page=2
查询结果为话单的开始时间在 11 月 03 号当天所有话单
示例 2
api/cdrs?startDate=2022-11-03&startDate=2022-11-03 18:30:59&perPage=1&page=2
查询结果为话单的开始时间2022-11-03
到2022-11-03 18:30:59
之内的话单
示例 3
api/cdrs?dateType=end_stamp&startDate=2022-11-03&startDate=2022-11-03 18:30:59&perPage=1&page=2
查询结果为话单的结束时间在2022-11-03
到2022-11-03 18:30:59
之内的所有话单
page=1&perPage=500&startDate=2023-03-15&endDate=2023-03-23&ani=&destNumber=&bridgedNumber=
- curl 示例:
获取所有话单:
curl -XGET -H "X-XTRA-AUTH-ID: 62dd0173-4916-4b1c-b958-546e4d7c91fe" 192.168.1.100:8081/api/cdrs
- 返回值:
{ "pageCount": 1, "page": 1, "data": [ { "account_code": "1003", "external_tracking_id": "", "sip_call_id": "61b0aca4459f42e8a6f5d131ebc93d42", "sip_hangup_disposition": "recv_bye", "answer_stamp": "2022-05-17 01:30:33", "network_addr": "192.168.3.192", "abs_path": "", "digits_dialed": "none", "xui_route_ids": "1", "hangup_cause": "NORMAL_CLEARING", "caller_source": "", "other_uuid": "", "context": "context-1", "network_port": "", "bleg_uuid": "", "billsec": "1", "start_stamp": "2022-05-17 01:30:33", "caller_id_name": "1003", "duration": "1", "caller_id_number": "1003", "realm": "", "end_stamp": "2022-05-17 01:30:34", "direction": "inbound", "destination_number": "9196", "rel_path": "", "uuid": "0e3ca7b2-6626-419e-8766-64de327a4741" }, { "account_code": "1003", "external_tracking_id": "", "sip_call_id": "c79fd9801a904668b6d0b78e292bb359", "sip_hangup_disposition": "recv_bye", "answer_stamp": "2022-05-17 01:30:09", "network_addr": "192.168.3.192", "abs_path": "", "digits_dialed": "none", "xui_route_ids": "20", "hangup_cause": "NORMAL_CLEARING", "caller_source": "", "other_uuid": "", "context": "context-1", "network_port": "", "bleg_uuid": "", "billsec": "20", "start_stamp": "2022-05-17 01:30:09", "caller_id_name": "1003", "duration": "20", "caller_id_number": "1003", "realm": "", "end_stamp": "2022-05-17 01:30:29", "direction": "inbound", "destination_number": "3000", "rel_path": "", "uuid": "6242c44b-c2f2-4882-8941-784d44ba9885" } ], "rowCount": 2 }
查询指定通话时间内通话信息
- 示例:
curl -XGET -H "X-XTRA-AUTH-ID: 62dd0173-4916-4b1c-b958-546e4d7c91fe" "http://192.168.1.100:8081/api/cdrs?startDate=2022-05-17&endDate=2022-05-17&perPage=1&page=2
或查询最近 30 天话单
- 示例:
curl -XGET -H "X-XTRA-AUTH-ID: 62dd0173-4916-4b1c-b958-546e4d7c91fe" "http://192.168.1.100:8081/api/cdrs?last=30"
- 返回:
{ "data": [ { "caller_id_number": "1003", "context": "context-1", "caller_source": "", "destination_number": "9196", "end_stamp": "2022-05-17 01:30:34", "direction": "inbound", "answer_stamp": "2022-05-17 01:30:33", "hangup_cause": "NORMAL_CLEARING", "rel_path": "", "abs_path": "", "network_addr": "192.168.3.192", "start_stamp": "2022-05-17 01:30:33", "account_code": "1003", "digits_dialed": "none", "billsec": "1", "external_tracking_id": "", "xui_route_ids": "1", "realm": "", "bleg_uuid": "", "duration": "1", "sip_call_id": "61b0aca4459f42e8a6f5d131ebc93d42", "uuid": "0e3ca7b2-6626-419e-8766-64de327a4741", "other_uuid": "", "caller_id_name": "1003", "sip_hangup_disposition": "recv_bye", "network_port": "" } ... ], "page": 1, "rowCount": 12, "pageCount": 1 }
查询指定 uuid 话单
请求 URL:
/api/cdrs/$uuid
请求方式:
GET
参数说明:
示例:
curl -XGET -H "X-XTRA-AUTH-ID: 62dd0173-4916-4b1c-b958-546e4d7c91fe" "http://192.168.1.100:8081/api/cdrs/6f781c5f-9ab7-43c2-8e4a-aa3143761093"
- 返回:
{ "hangup_cause": "NORMAL_CLEARING", "caller_id_number": "1022", "bleg_uuid": "", "xui_route_ids": "19", "uuid": "6f781c5f-9ab7-43c2-8e4a-aa3143761093", "network_addr": "192.168.3.192", "digits_dialed": "none", "answer_stamp": "2022-05-05 15:08:38", "sip_call_id": "a5211f22b8f44e4e8d5e1466bb25054f", "account_code": "1022", "billsec": "1133", "context": "context-1", "caller_id_name": "1022", "direction": "inbound", "network_port": "", "external_tracking_id": "", "other_uuid": "", "realm": "", "destination_number": "3000", "end_stamp": "2022-05-05 15:27:31", "duration": "1134", "start_stamp": "2022-05-05 15:08:37", "sip_hangup_disposition": "recv_bye", "caller_source": "" }
查看话单记录
- 请求 URL:
/api/cdrs/records
- 请求方式:
GET
- 示例:
GET /api/cdrs/records?page=1&perPage=100&startDate=2025-09-25&endDate=2025-09-25
- 返回:
{ "total": 0, "data": [] }
获取话单总数
- 请求 URL:
/api/cdrs/total
- 请求方式:
GET
- Body 信息: 无
- 示例:
curl -XGET -H "X-XTRA-AUTH-ID: 62dd0173-4916-4b1c-b958-546e4d7c91fe" "http://192.168.1.100:8081/api/cdrs/total"
- 返回:
{ "count": 11 }
话单推送设置
- 请求 URL:
/api/cdrs/push_url
- 请求方式:
PUT
- Body 信息:
{ "push_type":"JSON-CDR-SETTINGS", "enable":true, "url":"192.168.3.167:8081" }
获取话单推送设置
- 请求 URL:
api/cdrs/cdr_url
- 请求方式:
GET
- Body 信息: 无
- 示例:
curl -XGET -H "X-XTRA-AUTH-ID: 62dd0173-4916-4b1c-b958-546e4d7c91fe" "http://192.168.1.100:8081/api/cdrs/cdr_url"
- 返回:
{ "data": { "url": "192.168.3.167:8081", "push_type": "JSON-CDR-SETTINGS", "enable": true } }
查看话单详情
请求 URL:
/api/cdrs/show_dtmf
请求方式:
GET
参数说明: 无
示例:
curl -XGET -H "X-XTRA-AUTH-ID: 62dd0173-4916-4b1c-b958-546e4d7c91fe" "http://192.168.1.100:8081/api/cdrs/show_dtmf"
- 返回:
false
查看指定话单主被叫的 UUID
请求 URL:
/api/cdrs/:uuid/related_cdrs
请求方式:
GET
参数说明: 无
示例:
curl -XGET -H "X-XTRA-AUTH-ID: 62dd0173-4916-4b1c-b958-546e4d7c91fe" "http://192.168.1.100:8081/api/cdrs/01997ece-c5c5-7beb-8f82-cf820a7610c3/related_cdrs"
- 返回:
[ { "type": "channel", "uuid": "01997ece-c5c5-7beb-8f82-cf820a7610c3" }, { "type": "call_id", "uuid": "01997ece-c5c5-7beb-8f82-cf820a7610c3" } ]
导出话单
- 请求 URL:
/api/cdrs/uuids_download
- 请求方式:
PUT
/api/cdrs/uuids_download?&contextValue=context-4&routeID=16&groupValue=0
- Body 信息:
{ "uuids":["25503ea8-3b32-bc1a-3970-945e14d25002"], "language":"zh-CN" }
- 示例:
curl -XPUT -H "X-XTRA-AUTH-ID: 62dd0173-4916-4b1c-b958-546e4d7c91fe" -H "Content-Type: application/json" -d '{"uuids":["25503ea8-3b32-bc1a-3970-945e14d25002"],"language":"zh-CN"}' "http://192.168.1.100:8081/api/cdrs/uuids_download"
下载话单记录
请求 URL:
/api/cdrs/download
请求方式:
GET
参数说明: 无
示例:
curl -XGET -H "X-XTRA-AUTH-ID: 62dd0173-4916-4b1c-b958-546e4d7c91fe" "http://192.168.1.100:8081/api/cdrs/download"
- 返回: 包含话单记录的文件
删除话单
- 请求 URL:
/api/cdrs
- 请求方式:
DELETE
/api/cdrs?day=7Day&auto_delete=false
保留最近7天的话单 不自动删除 /api/cdrs?day=1Month&auto_delete=false
保留最近1个月的话单 不自动删除 ... /api/cdrs?day=2Year&auto_delete=true
保留最近2年的话单 自动删除
- Body 信息: 无
- 返回值:
{ "code": 200, "data": "+OK\n", "message": "success" }
话单通知
通话记录通知使用mod_xml_cdr
模块推送到第三方服务器。
配置推送目的 URL: url
。
<configuration name="xml_cdr.conf" description="XML CDR CURL logger"> <settings> <param name="url" value="http://10.10.10.10:40016/new_call_center/call/center/cdr"/> <param name="log-dir" value=""/> <param name="log-b-leg" value="false"/> <param name="prefix-a-leg" value="true"/> ...
- mod_xml_cdr cdr 示例:
<?xml version="1.0"?> <cdr> <channel_data> <state>CS_REPORTING</state> <direction>inbound</direction> <state_number>11</state_number> <flags>0=1;36=1;38=1;51=1</flags> <caps>1=1;2=1;3=1</caps> </channel_data> <variables> <uuid>2e831835-d336-4735-b3e5-90e5d7dc8187</uuid> <sip_network_ip>192.168.0.2</sip_network_ip> <sip_network_port>56866</sip_network_port> <sip_received_ip>192.168.0.2</sip_received_ip> <sip_received_port>56866</sip_received_port> <sip_via_protocol>udp</sip_via_protocol> <sip_from_user>1000</sip_from_user> <sip_from_uri>1000%40192.168.0.2</sip_from_uri> <sip_from_host>192.168.0.2</sip_from_host> <sip_from_user_stripped>1000</sip_from_user_stripped> ... </variables> <app_log> <application app_name="set" app_data="continue_on_fail=true"></application> <application app_name="bridge" app_data="sofia/external/gateway/gw001/1000"></application> <application app_name="bridge" app_data="sofia/external/gateway/gw002/1000"></application> </app_log> <callflow dialplan="XML" profile_index="1"> <extension name="1000" number="1000"> <application app_name="set" app_data="continue_on_fail=true"></application> <application app_name="bridge" app_data="sofia/external/gateway/gw001/1000"></application> </extension> </callflow> <caller_profile> <username>1000</username> <dialplan>XML</dialplan> <caller_id_name>1000</caller_id_name> <ani>1000</ani> <aniii></aniii> <caller_id_number>1000</caller_id_number> <network_addr>192.168.0.2</network_addr> <rdnis>1000</rdnis> <destination_number>1000</destination_number> <uuid>2e831835-d336-4735-b3e5-90e5d7dc8187</uuid> <source>mod_sofia</source> <context>default</context> <chan_name>sofia/default/1000@192.168.0.2</chan_name> </caller_profile> <times> <created_time>1274439432438053</created_time> <profile_created_time>1274439432448060</profile_created_time> <progress_time>0</progress_time> <progress_media_time>0</progress_media_time> <answered_time>0</answered_time> <hangup_time>1274439438418776</hangup_time> <resurrect_time>0</resurrect_time> <transfer_time>0</transfer_time> </times> </cdr>
话单配置
参数 | 说明 |
---|---|
name | 配置名称 |
description | 描述 |
log_leg | 记录哪条腿话单 a 腿:a-bleg ;b 腿话单:b-bleg; ab 腿话单:both |
disabled | 是否启用 0-启用 1-不启用 |
template | 模版 ID |
查询话单配置
- 请求 URL:
/api/odbc_cdrs
- 请求方式:
GET
- 返回值
[ { "description": "", "name": "cdrs", "deleted_at": "", "updated_at": "2022-05-16 09:51:32", "id": 1, "disabled": 0, "created_at": "2022-05-16 09:51:32", "log_leg": "a-leg" } ]
- 示例:
curl -XGET -H "X-XTRA-AUTH-ID: 62dd0173-4916-4b1c-b958-546e4d7c91fe" "http://192.168.1.100:8081/api/odbc_cdrs"
创建话单配置
- 请求 URL:
/api/odbc_cdrs
- 请求方式:
POST
- 消息头:
Content-Type: application/json
- Body 信息:
{ "name": "111", "log_leg": "a-leg", "disabled": 1, "template": "1" }
- 返回值:
{ "message": "success", "code": 200, "data": 2 }
- 示例:
curl -XPOST -H "X-XTRA-AUTH-ID: 69ee9c54-734b-11e7-a262-b5df20245f60" \ -d '{"name": "111","log_leg": "a-leg","disabled": 1, "template": "1"}' \ -H "Content-Type: application/json" http://192.168.1.100:8081/api/odbc_cdrs
修改话单配置
- 请求 URL:
/api/odbc_cdrs/$id
- 请求方式:
PUT
- 消息头:
Content-Type: application/json
- Body 信息:
{ "log_leg": "b-leg" }
- 返回值:
{ "data": "1", "message": "success", "code": 200 }
- 示例:
curl -XPOST -H "X-XTRA-AUTH-ID: 69ee9c54-734b-11e7-a262-b5df20245f60" \ -d '{"log_leg": "b-leg"}' \ -H "Content-Type: application/json" http://192.168.1.100:8081/api/odbc_cdrs/1
删除话单配置
- 请求 URL:
/api/odbc_cdrs/$id
- 请求方式:
DELETE
- Body 信息:无
- 返回值:
{ "message": "success", "code": 200, "data": 1 }
- 示例:
curl -H "X-XTRA-AUTH-ID: 62dd0173-4916-4b1c-b958-546e4d7c91fe" -XDELETE http://192.168.1.100:8081/api/odbc_cdrs/2
查询 ODBC CDR 全局参数
参数 | 说明 |
---|---|
k | 参数名 |
v | 参数值 |
realm | 固定值 话单全局参数为-ODBC_CDR_SETTINGS |
disabled | 是否启用该参数,0-启用 1-不启用 |
- 请求 URL:
/api/params/realm/ODBC_CDR_SETTINGS
- 请求方式:
GET
- 返回值
{ "page": 1, "data": [ { "created_at": "2022-04-28 16:49:05", "id": "1057", "deleted_at": "", "ref_id": "0", "v": "$${DSN}", "realm": "ODBC_CDR_SETTINGS", "updated_at": "2022-04-28 16:49:05", "disabled": "0", "k": "odbc-dsn" }, { "created_at": "2022-04-28 16:49:05", "id": "1058", "deleted_at": "", "ref_id": "0", "v": "both", "realm": "ODBC_CDR_SETTINGS", "updated_at": "2022-04-28 16:49:05", "disabled": "0", "k": "log-leg" } ], "rowCount": 2, "pageCount": 1 }
- 示例:
curl -XGET -H "X-XTRA-AUTH-ID: 62dd0173-4916-4b1c-b958-546e4d7c91fe" "http://192.168.1.100:8081/api/params/realm/ODBC_CDR_SETTINGS"
创建 ODBC CDR 全局参数
- 请求 URL:
/api/params
- 请求方式:
POST
- 消息头:
Content-Type: application/json
- Body 信息:
{ "disabled": 1, "k": "test", "realm": "ODBC_CDR_SETTINGS", "v": "100" }
- 返回值:
{ "data": 1596, "code": 200, "message": "success" }
- 示例:
curl -XPOST -H "X-XTRA-AUTH-ID: 69ee9c54-734b-11e7-a262-b5df20245f60" \ -d '{"disabled": "1","k": "test","realm": "ODBC_CDR_SETTINGS","v": "100"}' \ -H "Content-Type: application/json" http://192.168.1.100:8081/api/params
修改 ODBC CDR 全局参数
- 请求 URL:
/api/params/$id
- 请求方式:
PUT
- 消息头:
Content-Type: application/json
- Body 信息:
{ "disabled": 0, "k": "test", "realm": "ODBC_CDR_SETTINGS", "v": "200" }
- 返回值:
{ "data": "1597", "message": "success", "code": 200 }
- 示例:
curl -XPUT -H "X-XTRA-AUTH-ID: 69ee9c54-734b-11e7-a262-b5df20245f60" \ -d '{"disabled": "0","k": "test","realm": "ODBC_CDR_SETTINGS","v": "100"}' \ -H "Content-Type: application/json" http://192.168.1.100:8081/api/params/1597
删除 ODBC CDR 全局参数
- 请求 URL:
/api/params/$id
- 请求方式:
DELETE
- Body 信息:无
- 返回值:
{ "code": 200, "data": "1596", "message": "success" }
- 示例:
curl -H "X-XTRA-AUTH-ID: 62dd0173-4916-4b1c-b958-546e4d7c91fe" -XDELETE http://192.168.1.100:8081/api/params/1596
查询指定话单配置下参数
参数 | 说明 |
---|---|
k | 参数名 |
v | 参数值 |
realm | 固定值 话单参数为-ODBC_CDR |
disabled | 是否启用该参数,0-启用 1-不启用 |
- 请求 URL:
/api/odbc_cdrs/$id
- 请求方式:
GET
- 返回值
{ "updated_at": "2023-03-24 09:00:39", "disabled": 0, "created_at": "2023-03-23 06:25:21", "deleted_at": "", "params": [ { "v": "accountcode", "updated_at": "2023-03-23 06:25:23", "disabled": "0", "created_at": "2023-03-23 06:25:23", "deleted_at": "", "ref_id": "1", "id": "1314", "k": "account_code", "realm": "ODBC_CDR" }, ... { "v": "xui_route_ids", "updated_at": "2023-03-23 06:25:23", "disabled": "0", "created_at": "2023-03-23 06:25:23", "deleted_at": "", "ref_id": "1", "id": "1337", "k": "xui_route_ids", "realm": "ODBC_CDR" } ], "description": "", "id": 1, "name": "cdrs", "log_leg": "b-leg" }
- 示例:
curl -XGET -H "X-XTRA-AUTH-ID: 62dd0173-4916-4b1c-b958-546e4d7c91fe" "http://192.168.1.100:8081/api/odbc_cdrs/1"
话单配置增加某参数
- 请求 URL:
/api/odbc_cdrs/$id/params/
- 请求方式:
POST
- 消息头:
Content-Type: application/json
- Body 信息:
{ "k": "test-param", "v": "test" }
- 返回值:
{ "code": 200, "message": "success", "data": 2101 }
- 示例:
curl -XPOST -H "X-XTRA-AUTH-ID: 69ee9c54-734b-11e7-a262-b5df20245f60" \ -d '{"k": "test-param","v": "test"}' \ -H "Content-Type: application/json" http://192.168.1.100:8081/api/odbc_cdrs/1/params/
修改指定话单配置下某参数
- 请求 URL:
/api/odbc_cdrs/$id/params/$param_id
- 请求方式:
PUT
- 消息头:
Content-Type: application/json
- Body 信息:
{ "k": "test" }
- 返回值:
{ "data": "1597", "message": "success", "code": 200 }
- 示例:
curl -XPOST -H "X-XTRA-AUTH-ID: 69ee9c54-734b-11e7-a262-b5df20245f60" \ -d '{"k": "test"}' \ -H "Content-Type: application/json" http://192.168.1.100:8081/api/odbc_cdrs/1/params/1597
删除话单配置某参数
- 请求 URL:
/api/odbc_cdrs/$id/params/$params_id
- 请求方式:
DELETE
- Body 信息:无
- 返回值:
{ "code": 200, "data": "1597", "message": "success" }
- 示例:
curl -H "X-XTRA-AUTH-ID: 62dd0173-4916-4b1c-b958-546e4d7c91fe" -XDELETE http://192.168.1.100:8081/api/odbc_cdrs/1/params/1597
计费账单
返回数据信息
返回参数 | 说明 |
---|---|
amount | 开始时间 |
audio_codec | 音频编码 |
audio_in_bytes | 接收音频字节数 |
audio_out_bytes | 发送音频收字节数 |
bill_interval | 计费间隔 |
bill_rate | 费率 |
bill_target | 计费目标 |
bill_type | 计费类型 |
billsec | 计费时长 |
cid_number | 计费时长最大时长 |
cost | 主叫号码 |
dest_number | 主叫号码 |
direction | 方向 |
domain | 域名 |
duration | 总时长 |
ended_at | 结束时间 |
network_addr | 网络地址 |
other_uuid | |
process_flag | 1? |
resource_cost | 金额 |
started_at | 开始时间 |
ticks | 计次 |
username | 用户名 |
video_codec | 视频编码 |
video_height | 视频分辨率(高) |
video_in_bytes | 接收视频字节数 |
video_out_bytes | 发送视频字节数 |
video_width | 视频分辨率(宽) |
查询参数信息说明
查询参数 | 说明 |
---|---|
startDate | 开始时间 |
endDate | 结束时间 |
uuid | 通话UUID |
startBillsec | 计费时长最小时长 |
endBillsec | 计费时长最大时长 |
cidNumber | 主叫号码 |
destNumber | 被叫号码 |
获取计费账单信息
- 请求 URL:
/api/bills/data
查询所有计费账单信息 - 请求 URL:
/api/bills/data?startDate=2024-07-11&endDate=2024-07-18&startBillsec=&endBillsec=&cidNumber=&uuid=0190beca-eced-77a0-801c-c4219c555b03&destNumber=
按条件查询指定计费账单信息 - 请求 URL:
/api/bills/0190beca-eced-77a0-801c-c4219c555b03
查询指定某个UUID的计费账单信息 - 请求方式:
GET
- 返回值: 计费账单 JSON 对象,如果找不到会返回 HTTP 状态码
404
。
返回:
{ "page": 1, "rowCount": 7, "data": [ { "amount": 0, "ticks": 1, "video_in_bytes": 0, "started_at": "2023-03-25 14:37:23", "cid_number": "system", "audio_codec": "PCMA", "audio_out_bytes": 0, "duration": 4, "uuid": "afbdc049-e5bd-44ea-b1c5-3f897e27230d", "bill_rate": 0, "audio_in_bytes": 0, "other_uuid": "", "username": "", "direction": 1, "bill_target": "", "dest_number": "6000", "billsec": 2, "process_flag": 1, "network_addr": "172.18.0.1", "ended_at": "2023-03-25 14:37:25", "bill_type": "", "video_width": 0, "video_height": 0, "video_out_bytes": 0, "video_codec": "", "domain": "xswitch.cn" }, ... { "amount": 0, "ticks": 1, "video_in_bytes": 0, "started_at": "2023-03-23 14:49:22", "cid_number": "phrase", "audio_codec": "", "audio_out_bytes": 0, "duration": 0, "uuid": "d073e712-9492-4d53-b2c8-5f7a7f2e87ff", "bill_rate": 0, "audio_in_bytes": 0, "other_uuid": "", "username": "", "direction": 1, "bill_target": "", "dest_number": "welcome_short@xui", "billsec": 0, "process_flag": 1, "network_addr": "", "ended_at": "2023-03-23 14:49:22", "bill_type": "", "video_width": 0, "video_height": 0, "video_out_bytes": 0, "video_codec": "", "domain": "xswitch.cn" } ], "pageCount": 1 }
获取计费账单周报和月报信息
- 请求 URL:
/api/bills/usage
- 请求方式:
GET
- 返回值: 通话信息详情 JSON 对象,如果找不到会返回 HTTP 状态码
404
。
{ "weekly_usage": [ { "amount": "0.0000", "total": 0.21666666666666667, "title": "2023-03-25" }, { "amount": "0.0000", "total": 0.31666666666666665, "title": "2023-03-24" }, { "amount": "0.0000", "total": 0, "title": "2023-03-23" }, { "amount": "0.00", "total": 0, "title": "2023-03-22" }, { "amount": "0.00", "total": 0, "title": "2023-03-21" }, { "amount": "0.00", "total": 0, "title": "2023-03-20" }, { "amount": "0.00", "total": 0, "title": "2023-03-19" } ], "monthly_usage_data": [ { "month": 1, "amount": "0.00", "minutes": 0 }, { "month": 2, "amount": "0.00", "minutes": 0 }, { "month": 3, "amount": "0.0000", "minutes": 6 }, { "month": 4, "amount": "0.00", "minutes": 0 }, { "month": 5, "amount": "0.00", "minutes": 0 }, { "month": 6, "amount": "0.00", "minutes": 0 }, { "month": 7, "amount": "0.00", "minutes": 0 }, { "month": 8, "amount": "0.00", "minutes": 0 }, { "month": 9, "amount": "0.00", "minutes": 0 }, { "month": 10, "amount": "0.00", "minutes": 0 }, { "month": 11, "amount": "0.00", "minutes": 0 }, { "month": 12, "amount": "0.00", "minutes": 0 } ] }
根据指定通话 UUID 获取该条通话的详细信息
- 请求 URL:
/api/bills/$uuid
指定通话 UUID 获取该条通话的详细信息 - 请求方式:
GET
- 返回值: 通话信息详情 JSON 对象,如果找不到会返回 HTTP 状态码
404
。
返回:
{ "username": "", "domain": "xswitch.cn", "direction": 1, "bill_type": "", "amount": 0, "bill_rate": 0, "ended_at": "2023-03-23 14:49:22", "dest_number": "welcome_short@xui", "audio_codec": "", "uuid": "d073e712-9492-4d53-b2c8-5f7a7f2e87ff", "audio_in_bytes": 0, "ticks": 1, "network_addr": "", "other_uuid": "", "started_at": "2023-03-23 14:49:22", "cid_number": "phrase", "process_flag": 1, "duration": 0, "video_in_bytes": 0, "video_width": 0, "video_height": 0, "video_out_bytes": 0, "audio_out_bytes": 0, "billsec": 0, "video_codec": "", "bill_target": "" }
下载计费账单
- 请求 URL:
/api/bills/download
- 请求方式:
GET
- 返回值: 下载计费账单文件,如果找不到会返回 HTTP 状态码
404
。
计费账户
计费账户信息说明如下:
参数 | 说明 |
---|---|
account | 账户 |
password | 密码 |
description | 描述 |
amount | 余额 |
last_recharge_amount | 上次预存金额 |
获取计费账户信息
请求 URL:
/api/bill_accounts
返回所有计费账户信息请求 URL:
/api/bill_accounts/$uuid
返回指定 ID 的计费账户信息请求方式:
GET
返回值: 计费账户 JSON 对象,如果找不到会返回 HTTP 状态码
404
。curl 示例:
curl -H "X-XTRA-AUTH-ID: 62dd0173-4916-4b1c-b958-546e4d7c91fe" http://192.168.1.100:8081/api/bill_accounts
curl -H "X-XTRA-AUTH-ID: 62dd0173-4916-4b1c-b958-546e4d7c91fe" 192.168.1.100:8081/api/bill_accounts/68bb47ec-f172-4ae0-991d-d79fe7787df3
- 返回值:
{ "page": 1, "rowCount": 1, "data": [ { "description": "", "deleted_at": "", "account": "小明", "last_recharge_amount": 0, "amount": 200, "updated_at": "2023-03-25 06:53:13", "password": "$VeryGoodPassw0rd", "id": 1, "created_at": "2023-03-25 06:53:13" } ], "pageCount": 1 }
创建计费账户信息
- 请求 URL:
/api/bill_accounts
- 请求方式:
POST
- 消息头:
Content-Type: application/json
- Body 信息: 参见计费账户信息说明。
- 返回值: 创建计费账户信息的 id
Body:
{ "account": "1001", "password": "$VeryGoodPassw0rd", "description": "1001", "amount": "200" }
返回:
{ "data": 1, "message": "success", "code": 200 }
- curl 示例:
curl -XPOST -H "X-XTRA-AUTH-ID: 69ee9c54-734b-11e7-a262-b5df20245f60" \ -d '{"account": "1001","password": "$VeryGoodPassw0rd","description": "1001","amount": "200"}' \ -H "Content-Type: application/json" http://192.168.1.100:8081/api/bill_accounts
获取默认计费账户信息
- 请求 URL:
/api/bill_accounts/default
- 请求方式:
GET
- 返回值:
{ "message": "ok", "code": 200, "data": { "updated_at": "2025-09-24 01:08:40", "rental_fee": 21, "balance": 3656, "description": "", "domain": "xswitch.cn", "uuid": "3aef0211-17fc-4dbc-8c1e-754626c33c96", "created_at": "2025-09-24 01:08:40", "name": "默认账户", "deleted_at": "" } }
导入计费账户信息
- 请求 URL:
/api/bill_accounts/upload
- 请求方式:
POST
- 消息头:
Content-Type: application/json
- Body 信息:
{ "bill_account": [ { "名称": "test", "域": "test.cn", "描述": "test", "月租费": 11, "充值金额": 200 } ] }
- 返回值:
{ "message": "success", "data": [], "code": 200 }
将指定账单设置为默认账单
- 请求 URL:
/api/bill_accounts/$uuid/default
- 请求方式:
PUT
PUT /api/bill_accounts/8857f72d-9f77-43b8-aaf9-21a61c4c74e2/default
- 消息头:
Content-Type: application/json
- Body 信息: 无
- 返回值:
{ "code": 200, "message": "success", "data": "8857f72d-9f77-43b8-aaf9-21a61c4c74e2" }
删除计费账户信息
- 请求 URL:
/api/bill_accounts/$uuid
- 请求方式:
DELETE
- 消息头: 无
- 返回值:
状态 | 返回值 |
---|---|
成功 | "code": 200 |
失败 | 404 |
- 示例:
curl -H "X-XTRA-AUTH-ID: 62dd0173-4916-4b1c-b958-546e4d7c91fe" -XDELETE http://192.168.1.100:8081/api/bill_accounts/68bb47ec-f172-4ae0-991d-d79fe7787df3
返回:
{ "message": "success", "code": 200, "data": "68bb47ec-f172-4ae0-991d-d79fe7787df3" }
对指定 UUID 的计费账户进行充值
- 请求 URL:
/api/bill_accounts/$uuid
- 请求方式:
PUT
- 消息头:
Content-Type: application/json
- Body 信息: 参见计费账户信息说明。
- 返回值:
状态 | 返回值 |
---|---|
成功 | 返回 uuid 和 200 |
失败 | -ERR Cannot execute script |
- 示例:
Body:
{ "balance": 3456, "recharge_amount": "200" }
返回:
{ "message": "success", "data": "3aef0211-17fc-4dbc-8c1e-754626c33c96", "code": 200 }
账单确认
获取全部账单信息
- 请求 URL:
/api/monthly_bills
- 请求方式:
GET
- 返回值:
{ "rowCount": 10, "data": [{ "billing_date": "2025-12-15", "rental_fee": "30.0000", "is_billed": "t", "id": "8", "call_cost": "29.6000", "deleted_at": "", "updated_at": "2025-09-26 02:19:47", "created_at": "2025-09-26 02:19:47", "description": "December special", "call_duration": "155", "bill_account": "e71e7390-caf3-41bf-91b7-c9cff44e6af8", "status_code": "1", "amount": "59.6000", "discount": "0.1000" } ... ], "pageCount": 1, "page": 1 }
获取指定账单信息
- 请求 URL:
/api/monthly_bills/:id
- 请求方式:
GET
- 返回值:
{ "code": 200, "data": "{}", "message": { "rental_fee": 30, "call_cost": 0, "id": 1, "created_at": "2025-09-26 02:19:47", "updated_at": "2025-09-26 02:19:47", "billing_date": "2025-09-05", "deleted_at": "", "amount": 30, "description": "September standard plan", "status_code": 1, "bill_account": "727e18bb-c0e4-4c66-8132-dd692d82d9ff", "call_duration": "", "is_billed": true, "discount": 0 } }
按日期获取部分账单信息
- 请求 URL:
/api/monthly_bills?startDate=2025-09&endDate=2025-11
- 请求方式:
GET
- 参数:
参数 | 类型 | 描述 |
---|---|---|
startDate | string | 开始日期 |
endDate | string | 结束日期 |
- 返回值:
{ "data": [{ "rental_fee": "30.0000", "discount": "0.1000", "id": "1", "call_duration": "120", "bill_account": "727e18bb-c0e4-4c66-8132-dd692d82d9ff", "deleted_at": "", "is_billed": "t", "call_cost": "25.5000", "created_at": "2025-09-26 02:19:47", "updated_at": "2025-09-26 02:19:47", "description": "September standard plan", "amount": "55.5000", "status_code": "1", "billing_date": "2025-09-05" }...], "pageCount": 1, "page": 1, "rowCount": 10 }
给默认账户充值
- 请求 URL:
/api/bill_accounts/:uuid
- 请求方式:
PUT
- 消息头:
Content-Type: application/json
- Body 信息:
{ "recharge_amount": "200" }
- 返回值:
{ "data": "8857f72d-9f77-43b8-aaf9-21a61c4c74e2", "message": "success", "code": 200 }
修改默认账户月租费
- 请求 URL:
/api/bill_accounts/:uuid
- 请求方式:
PUT
- 消息头:
Content-Type: application/json
- Body 信息:
{ "rental_fee": "200" }
- 返回值:
{ "data": "8857f72d-9f77-43b8-aaf9-21a61c4c74e2", "message": "success", "code": 200 }
查看指定账单折扣明细
- 请求 URL:
/api/monthly_bills/discount/:id
- 请求方式:
GET
- 返回值:
{ "total": "0.4500", "data": [{ "monthly_bill_id": 18, "name": "会员折扣", "updated_at": "2025-09-26 05:43:47", "deleted_at": "", "created_at": "2025-09-26 05:43:47", "description": "VIP会员专属折扣", "discount": 0.2, "id": 9 }...] }
修改指定账单的折扣
- 请求 URL:
/api/monthly_bills/discount/:id
- 请求方式:
PUT
- 消息头:
Content-Type: application/json
- Body 信息:
{ "data": [ { "discount": 0.1, "name": "会员折扣", "description": "VIP会员专属优惠" }, { "discount": 0.05, "name": "节日促销", "description": "国庆节特别优惠" } ], "description": "更新账单" }
- 返回值:
{ "message": "success", "code": 200, "data": 24 }
修改指定账单
- 请求 URL:
/api/monthly_bills/:id
- 请求方式:
PUT
- 消息头:
Content-Type: application/json
- Body 信息:
{ "description": "2025年9月企业账单" }
- 返回值:
{ "message": "success", "data": "2", "code": 200 }
删除指定账单
- 请求 URL:
/api/monthly_bills/:id
- 请求方式:
DELETE
- 返回值:
状态 | 返回值 |
---|---|
成功 | "code": 200 |
失败 | 500 |
{ "code": 200, "message": "success", "data": "1" }
删除指定折扣
- 请求 URL:
/api/monthly_bills/discount/:id
- 请求方式:
DELETE
- 返回值:
状态 | 返回值 |
---|---|
成功 | "code": 200 |
失败 | 500 |
{ "code": 200, "data": "1", "message": "success" }