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_uuidB 腿 UUID
direction方向,inboud 为向内,outbound 向外
realm
caller_id_number主叫号码
external_tracking_id自定义 id
caller_sourcecaller_source
other_uuid该话单另外一个 uuid
digits_dialed按键信息
sip_call_idCall ID
xui_route_ids经过的路由 ID
abs_path录音文件绝对路径
rel_path录音文件相对路径
rtp_use_codec_name使用的编码
caller_sourcecaller_source
xui_hangup_causeXUI自定义挂机原因
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_MISSINGSIP 消息不全
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-032022-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-032022-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"
}

获取话单推送设置

  • 请求 URLapi/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_flag1?
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
  • 参数:
参数类型描述
startDatestring开始日期
endDatestring结束日期
  • 返回值:
{
	"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"
}
权限管理