接口功能
语音通话平台通过此接口向客户推送语音通话业务用户呼叫时的状态信息,如呼入、
呼出、振铃、应答、挂机等状态的信息。
请求方向
语音通话平台(客户端) → 客户服务器(服务端)
使用说明
● 前提条件
– SP在开发应用时,若需订阅呼叫状态通知,必须要提供呼叫状态接收URL
(statusUrl),并且确保URL能够正常处理语音通话平台发送的通知信息。
– 提供呼叫状态接收URL有以下两种方式:
▪
提前通过应用管理向语音通话平台提交呼叫状态接收URL。▪
SP应用调用场景API时,填写statusUrl。● 使用限制
语音通话平台推送呼叫状态给开发者应用,仅支持POST方式。
接口类型
表4-7 接口类型说明 请求方法 POST
访问URI 开发者应用接收呼叫状态URL 通信协议 HTTPS/HTTP
请求参数
SP调用语音验证码API,语音通话平台发起呼叫,给用户播放语音验证码。
注:以下流程以语音通话平台呼叫A,给A播放语音验证码为例。流程和接口示例仅供 参考,请以实际消息为准。
表4-8 请求 Headers 参数说明 参数名称 是否
必选
参数类型 说明
Content-Type 是 String 固定填写为application/json;charset=UTF-8。
Authoriza
tion 是 String 固定填写为AKSK
realm="SDP",profile="UsernameToken",type="
Appkey"。
参数名称 是否 必选
参数类型 说明
X-AKSK 是 String 取值为UsernameToken Username="APP_Key的 值", PasswordDigest="PasswordDigest的值", Nonce="随机数", Created="随机数生成时间"。
● PasswordDigest:根据PasswordDigest = Base64(HMAC(appSecret, url+安全随机数 +时间戳))生成。其中,url使用客户设置的状 态推送URL,随机数需使用安全随机数。
● Nonce:客户发送请求时生成的一个随机数,
长度为1~128位,可包含数字和大小写字母。
例如:66C92B11FF8A425FB8D4CCFE0ED9ED1F。
● Created:随机数生成时间。采用标准UTC格 式,例如:2018-02-12T15:30:20Z。不同编程 语言中将UTC时间戳转换为普通时间时使用的 格式不同,部分语言可参考表4-9。
表4-9 不同编程语言的时间格式
编程语言 时间格式
Java yyyy-MM-dd'T'HH:mm:ss'Z' PHP Y-m-d\TH:i:s\Z
Python %Y-%m-%dT%H:%M:%SZ C# yyyy-MM-ddTHH:mm:ssZ
Node.js toISOString().replace(/.[0-9]+\Z/, 'Z')
注:Node.js中,使用toISOString()转换后的时间格式去除毫秒后即 为本接口要求的时间格式。
表4-10 请求 Body 参数说明
参数名称 是否必选 参数类型 说明
eventType 是 String(枚
举) 该参数标识API事件通知的类型。取 值范围如下:
●
callout:呼出事件
●
alerting:振铃事件
●
answer:应答事件
●
disconnect:挂机事件
参数名称 是否必选 参数类型 说明 statusInfo 否 CallStatusI
nfo 呼叫状态事件的信息。
当eventType参数为callout、
alerting、answer、disconnect时携 带。
CallStatusInfo
表4-11 callout:呼出事件
参数名称 是否必选 参数类型 说明
timestamp 是 String(1-1
28) 该呼叫事件发生时语音通话平台的 UNIX时间戳。
该参数取值为UTC时间(+8小时为北 京时间)格式,即为“yyyy-MM-dd HH:mm:ss”。
userData 否 String(1-2
56) 用户附属信息,此参数的值与“语音 验证码场景API”中的"userData"参 数值一致。
sessionId 是 String(1-2
56) 唯一指定一条通话链路的标识ID。
caller 否 String(1-3
2) 主叫号码。
号码仅支持全局号码格式(包含国家 码),比如+86138****7021。
注:呼出事件的主叫号码为SP设置的 来电显示号码(displayNbr)。
called 否 String(1-3
2) 被叫号码。
号码仅支持全局号码格式(包含国家 码),比如+86138****7021。
注:呼出事件的被叫号码为A号码。
接口示例
POST /status HTTP/1.1 Content-Length: xx
{"eventType":"callout","statusInfo":
{"sessionId":"1202_14260_4294967295_20190124024846@callenabler245.huaweicaas.com","timestamp":"20 19-01-24 02:48:46","caller":"+86138****0022","called":"+86138****0021"}}
表4-12 alerting:振铃事件
参数名称 是否必选 参数类型 说明
timestamp 是 String(1-1
28) 该呼叫事件发生时语音通话平台的 UNIX时间戳。
该参数取值为UTC时间(+8小时为北 京时间)格式,即为“yyyy-MM-dd HH:mm:ss”。
userData 否 String(1-2
56) 用户附属信息,此参数的值与“语音 验证码场景API”中的"userData"参 数值一致。
sessionId 是 String(1-2
56) 唯一指定一条通话链路的标识ID。
caller 否 String(1-3
2) 主叫号码。
号码仅支持全局号码格式(包含国家 码),比如+86138****7021。
注:振铃事件的主叫号码为SP设置的 来电显示号码(displayNbr)。
called 否 String(1-3
2) 被叫号码。
号码仅支持全局号码格式(包含国家 码),比如+86138****7021。
注:振铃事件的被叫号码为A号码。
接口示例
POST /status HTTP/1.1 Content-Length: xx
{"eventType":"alerting","statusInfo":
{"sessionId":"1202_14260_4294967295_20190124024846@callenabler245.huaweicaas.com","timestamp":"20 19-01-24 02:48:47","caller":"+86138****0022","called":"+86138****0021"}}
表4-13 answer:应答事件
参数名称 是否必选 参数类型 说明
timestamp 是 String(1-1
28) 该呼叫事件发生时语音通话平台的 UNIX时间戳。
该参数取值为UTC时间(+8小时为北 京时间)格式,即为“yyyy-MM-dd HH:mm:ss”。
userData 否 String(1-2
56) 用户附属信息,此参数的值与“语音 验证码场景API”中的"userData"参 数值一致。
参数名称 是否必选 参数类型 说明 sessionId 是 String(1-2
56) 唯一指定一条通话链路的标识ID。
caller 否 String(1-3
2) 主叫号码。
号码仅支持全局号码格式(包含国家 码),比如+86138****7021。
注:应答事件的主叫号码为SP设置的 来电显示号码(displayNbr)。
called 否 String(1-3
2) 被叫号码。
号码仅支持全局号码格式(包含国家 码),比如+86138****7021。
注:应答事件的被叫号码为A号码。
接口示例
POST /status HTTP/1.1 Content-Length: xx
{"eventType":"answer","statusInfo":
{"sessionId":"1202_14260_4294967295_20190124024846@callenabler245.huaweicaas.com","timestamp":"20 19-01-24 02:49:12","caller":"+86138****0022","called":"+86138****0021"}}
表4-14 disconnect:挂机事件
参数名称 是否必选 参数类型 说明
timestamp 是 String(1-1
28) 该呼叫事件发生时语音通话平台的 UNIX时间戳。
该参数取值为UTC时间(+8小时为北 京时间)格式,即为“yyyy-MM-dd HH:mm:ss”。
userData 否 String(1-2
56) 用户附属信息,此参数的值与“语音 验证码场景API”中的"userData"参 数值一致。
sessionId 是 String(1-2
56) 唯一指定一条通话链路的标识ID。
caller 否 String(1-3
2) 主叫号码。
号码仅支持全局号码格式(包含国家 码),比如+86138****7021。
注:挂机事件的主叫号码为SP设置的 来电显示号码(displayNbr)。
参数名称 是否必选 参数类型 说明 called 否 String(1-3
2) 被叫号码。
号码仅支持全局号码格式(包含国家 码),比如+86138****7021。
注:挂机事件的被叫号码为A号码。
stateCode 否 Integer 通话挂机的原因值,仅当eventType 为disconnect时携带。
取值范围及表示的含义请参考通话挂 机原因值说明。
stateDesc 否 String(1-1
28) 通话挂机的原因值的描述,仅当 eventType为disconnect时携带。
接口示例
POST /status HTTP/1.1 Content-Length: xx
{"eventType":"disconnect","statusInfo":
{"sessionId":"1202_14260_4294967295_20190124024846@callenabler245.huaweicaas.com","timestamp":"20 19-01-24 02:49:23","caller":"+86138****0022","called":"+86138****0021","stateCode":0,"stateDesc":"The user releases the call."}}
响应参数
接收到事件通知时,第三方服务器响应返回200则为成功,否则语音通话平台会认为推 送失败。
响应示例HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
代码样例
前往代码样例查看。
常见问题
● 如何配置和接收呼叫状态和话单通知?地址是否支持http?
● 呼叫状态和话单通知什么时候推送?
● 呼叫状态和话单通知多个用户如何推送?
● 接收呼叫状态和话单通知后需要返回响应消息吗?
● 接收呼叫状态和话单通知,参数区分大小写吗?
● 语音通话的呼叫状态通知和话单通知支持重推吗?
● 语音通话的通话记录如何获取?
● 为什么没有收到呼叫状态通知和话单通知?