话单获取
xunzhong.callCdr该功能是接收客户http请求,返回语音类通话详单的json串:两种方式:1、增量方式话单 2、某小时话单,均可以拿到语音通知、双向呼叫、电话会议的话单json串,3、语音通知任务获取话单json串。
优先必读
1 | 用户账户Id(accountSID)和用户账户授权令牌(authToken)在哪获取? |
提示 |
用户登录平台,在导航菜单管理-控制台-开发者主账号下面 或用户登录平台,在导航菜单管理-体验-功能体验-账号信息下面。(两种获取到账户信息是一样的) |
2 | 应用ID在哪获取? |
提示 |
1.如果使用沙箱环境 http://sandbox.ytx.net ,用户登录平台,在导航菜单管理-体验-功能体验-测试应用下面。 2.如果使用正式环境 http://api.ytx.net ,用户登录平台,在导航菜单管理-应用管理-应用列表下,若没有应用,需要创建应用。(注:应用上线后,应用ID才有效) |
3 | 状态回推的相关设置? |
提示 |
(注:沙箱环境 http://sandbox.ytx.net ,没有相关设置) 在使用正式环境 http://api.ytx.net 下,用户登录平台,在导航菜单管理-应用管理-创建应用-设置相应的回调地址。 |
4 | IP鉴权地址的相关配置? |
提示 |
(注:沙箱环境 http://sandbox.ytx.net ,没有相关设置) 在使用正式环境 http://api.ytx.net 下,用户登录平台,在导航菜单管理-应用管理-创建应用-设置相应的IP白名单。 (注:如测试使用ip白名单,切记将测试主机ip加入到白名单中) 有需要对用户接口发送的服务器进行ip限制,就可以使用ip鉴权进行配置。多个ip使用英文,号分隔。配置空表示不鉴权。 |
5 | 签名sign的加密格式是什么? |
提示 | MD5加密(账户Id + 账户授权令牌 +时间戳),例如:Sign=AAABBBCCCDDDEEEFFFGGG *时间戳需与Authorization中时间戳相同(时间戳格式:yyyyMMddHHmmss) 注:MD5加密32位,无论大小写 |
6 | 应用验证失败原因(-205)与解决办法? |
提示 |
1.应用ID与环境不匹配: ①体验里应用ID与沙箱环境 http://sandbox.ytx.net 使用 ②自己创建的应用的应用ID与正式环境 http://api.ytx.net 使用 2.设置ip白名单: ①去掉白名单在测试 ②将测试主机ip加入到白名单中 3.应用未开通相应的功能或应用没有上线。 |
公共参数
请求地址:
环境 | HTTP请求地址 |
正式环境 | http://api.ytx.net |
沙箱环境 | http://sandbox.ytx.net |
公共请求参数:
名称 | 类型 | 是否必须 | 描述 |
accountSID | string | 是 | 云通信平台用户账户Id:对应管理控制台中的 ACCOUNT SID |
authToken | string | 是 | 云通信平台用户账户授权令牌:对应管理控制台中的 AUTH TOKEN |
version | string | 是 | 云通信API接口版本 目前可选版本:201512 |
func | string | 是 | 功能所属分类call【语音类】/sms【消息类】/traffic【流量类】/account【账户类】 当前功能属:call |
funcURL | string | 是 | 业务功能的各类具体操作分支 当前功能属:CallCdr.wx |
Authorization | string | 是 | 云通信平台API接口,包头验证信息:base64加密(账户Id + "|" + 时间戳) 说明:时间戳有效时间为24小时 格式"yyyyMMddHHmmss",如:20140416142030 |
Sign | string | 是 | 云通信平台API接口,API 验证参数 :MD5加密(账户Id + 账户授权令牌 +时间戳) *URL后必须带有Sign参数,例如:Sign=AAABBBCCCDDDEEEFFFGGG *时间戳需与Authorization中时间戳相同 注:MD5加密32位,无论大小写 |
请求参数:
名称 | 类型 | 是否必须 | 描述 |
action | string | 是 | API接口名称(区分大小写):增量方式话单——getCdrByResId 某小时话单——getCdrByTime |
appid | string | 是 | 用户登录云通信平台后,所创建的应用编号appid,若想调用当前话单获取接口,则此应用必须包含有语音通知、双向呼叫、电话会议等功能,否则调用失败 |
fid | string | 是 | 语音类接口功能编号:双向呼叫(fid="4") 电话会议(fid="5") 语音通知(fid="8") |
lastresid | string | 是 | 采用增量方式话单获取话单所必需的参数,为当前已获取话单的的最大requestid(例:2016010000000213),每条话单有自增长的requestid,可从此最大requestid开始拉取话单。若是第一次获取话单则lastresid="0",此时limit不能为0。 |
limit | int | 是 | 采用增量方式话单获取话单所必需的参数,如果limit=0,表示获取requestid= lastresid的一条话单;如果limit>0,表示获取requestid >= lastresid的limit个话单;如果limit<0,表示获取requestid>= lastresid的所有话单 |
pdate | string | 是 | 采用某小时话单获取话单所必需的参数,为索要获取话单所在的日期(年月日)。 |
ptime | string | 是 | 采用某小时话单获取话单所必需的参数,为索要获取话单所在的时(24时刻制,例如2016年2月25日下午七点的所有话单:pdate="2016-02-25",ptime="19")。 |
语音通知任务请求参数:
名称 | 类型 | 是否必须 | 描述 |
action | string | 是 | API接口名称(区分大小写):getNoticeTaskCdrByResId |
appid | string | 是 | 用户登录云通信平台后,所创建的应用编号appid,若想调用当前话单获取接口,则此应用必须包含有语音通知、双向呼叫、电话会议等功能,否则调用失败 |
fid | string | 是 | 语音类接口功能编号: 语音通知任务(fid="8") |
requestid | string | 是 | 根据requestid开始拉取所有话单。 |
mobile | string | 否 | 表示获取requestid批次该手机号码的话单(不填则获取该批次的所有话单) |
响应参数:
语音通知/语音通知任务:
功能 | 参数名称 | 描述 |
语音通知 | requestid | 当前话单编号,唯一标识 |
appid | 所属应用的id | |
fid | 功能id,语音通知fid为8 | |
tel | 接收语音通知的电话号码 | |
stime | 开始接听时间 | |
etime | 结束接听时间 | |
duration | 通话时长(单位:秒) | |
oriamount | 费用(单位:元) | |
stateDesc | 通话结果识别 |
电话会议:
功能 | 参数名称 | 描述 |
电话会议 | requestid | 当前话单编号,唯一标识 |
appid | 所属应用的id | |
fid | 功能id,电话会议fid为5 | |
tel | 参与会议的电话号码 | |
stime | 开始接听时间 | |
etime | 结束接听时间 | |
confid | 当前会议编号 | |
duration | 通话时长(单位:秒) | |
singleoriamount | 费用(单位:元) | |
customParm | 用户自定义参数(可以为用户传给平台的订单编号) | |
tapesurl | 录音文件下载地址(http://...111.mp3) (非正常通话或没开通录音返NoTapes) |
请求包头:
1 | URL |
2 | /{version}/sid/{accountSID}/{func}/{funcURL}?Sign={Sign} |
3 | HTTP标准包头字段 |
4 | Accept:application/json; |
5 | Content-Type:application/json;charset=utf-8; |
6 | Authorization:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX |
报文示例:
JSON提示:
1 | POST /201512/sid/abcdefghijklmnopqrstuvwxyz012345/call/CallCdr.wx?Sign=C1F20E7A9733CE94F680 C70A1DBABCDE HTTP/1.1 |
2 | Host:127.0.0.1:46376 |
3 | content-length: 139 |
4 | Accept:application/json; |
5 | Content-Type:application/json;charset=utf-8; |
6 | Authorization:ZmY4MDgwODEzYzM3ZGE1MzAxM2M4MDRmODA3M jAwN2M6MjAxMzAyMDExNTABCDE= |
增量 |
{"action":"getCdrByResId","fid":"2", "appid":"ff8080813fc70a7b013fc72312324213", "lastresid":"2016010000000213","limit":"10"} |
某小时 |
{"action":"getCdrByTime","fid":"4", "appid":"ff8080813fc70a7b013fc72312324213", "pdate":"2016-01-21","ptime":"16"} |
语音通知任务 |
{"action":"getNoticeTaskCdrByResId","fid":"8", "appid":"55c3d7ccd9b14debb0d8b0f5460d92d7", "requestid":"2022042240379817353533194240801"} |
语音通知/语音通知任务 |
{"cdr":[{"requestid":"2016010000000205", "appid":"ff8080813fc70a7b013fc72312324213", "fid":"8","tel":"2016010000000213", "stime":"2016-02-02 11:19:36.000", "etime":"2016-02-02 11:19:58.000", "duration":"10","oriamount":"0.06"}]} |
双向 呼叫 话单 |
{"cdr":[{"requestid":"2016010000000206", "appid":"ff8080813fc70a7b013fc72312324213", "fid":"4","caller":"13810603954", "called":"18810207016", "callerstime":"2016-02-02 11:19:36.000", "calleretime":"2016-02-02 11:20:36.000", "calledstime":"2016-02-02 11:19:40.000", "calledetime":"2016-02-0211:20:40.000", "tapesurl":"http://.....","duration":"60", "oriamount":"2.94","customParm":"123456"}]} |
双向 呼叫 状态 |
{"requestid":"20180635240289460415365120401", "src":"01053180002","dsc":"13600007556", "timestamp":"2018-06-04 11:13:04", "state":"callout"} |
电话 会议 |
{"cdr":[{"requestid":"2016010000000207", "appid":"ff8080813fc70a7b013fc72312324213", "fid":"5","tel":"15801445465", "stime":"2016-03-14 10:43:42.000", "etime":"2016-03-14 10:44:13.000", "confid":"516152","duration":"31", "singleoriamount":"0.044", "customParm":"123456","tapesurl":"http://....."}]} |
请求示例:
.Net
1 | string jsonData= {\"action\":\"getCdrByResId\",\"fid\":\"2\", |
2 | \"appid\":\"3215ad6a7d0247ae8b39728b854fa59c\","lastresid":"2016010000000213","limit":"10"} "; |
3 | string url = "/call/CodeCallOut.wx"; |
4 | string result = CommenHelper.SendRequest(url, jsonData); |
5 | 备注: SendRequest方法在CommenHelper.cs文件里做了封装。详细介绍请点击这里完整demo示例下载 |
响应示例
JSON示例
1 | HTTP/1.1 200 OK |
2 | Content-Length: 85 |
3 |
{"cdr":[ {"requestid":"2016010000000213","appid":"cbc6ceb21fd34664b6e452ca2aa40b3f","fid":4, "caller":"13810603954","called":"18810207016","callerstime":"2016-01-21 16:17:50", "calleretime":"2016-01-21 16:17:55","calledstime":"","calledetime":"", "tapesurl":"NoTapes","duration":0,"oriamount":0.1200}, "{"requestid":"2016010000000217 ","appid":"cbc6ceb21fd34664b6e452ca2aa40b3f", "fid":4,"caller":"13810603954","called":"01088380197","callerstime":"2016-01-21 16:29:25", "calleretime":"2016-01-21 16:29:44","calledstime":"","calledetime":"", "tapesurl":"http://.....","duration":3,"oriamount":0.1200,"customParm":"123456"}....]} |
异常示例
JSON示例
1 | HTTP/1.1 200 OK |
2 | Content-Length: 61 |
3 | {"statusCode":"-2","statusMsg":"缺少必要参数","requestId":""} |