语音回呼场景API - CreateVoiceCallback
典型场景
当应用要实现语音回呼功能时,可以调用语音回呼场景API。
接口功能
主叫用户通过应用拨打被叫用户,语音通话平台呼叫主叫和被叫,使主叫和被叫能够互相通话。

语音回呼业务体验描述:
- 用户A通过应用呼叫用户B,请求上报到SP。
- SP调用语音回呼场景API。
- 语音通话平台呼叫用户A的号码,用户A接听,并听到提示音。
- 语音通话平台呼叫用户B的号码。
- 用户B接听,用户A和用户B通话。
使用说明
- 前提条件
- 已通过“应用管理”页面获取该语音回呼能力的APP_Key,APP_Secret和APP接入地址。
- 已通过“号码订购”页面向语音通话平台申请以下号码:
- 若使用定制化主叫端来电显示号码,请确认已申请固话号码(displayNbr)。
- 若需隐藏主叫号码,使用定制化被叫端来电显示号码,请确认已申请固话号码(displayCalleeNbr)。
- 若需使用通话录音功能,请确认已向语音通话平台申请该功能。
- 若使用个性化放音,请确认已按要求制作并通过放音文件管理页面向语音通话平台提交放音文件,包括最后一分钟提示音(lastMinVoice),主叫提示音(preVoice),主叫等待音(waitVoice),录音提示音(recordHintTone),回呼提示音(callBackTone)。
若需订阅呼叫状态和话单通知,请确认已通过应用管理向语音通话平台提交呼叫状态通知URL(statusUrl)和话单通知URL(feeUrl)。若未提交,调用接口时填写也可以。
授权信息
账号具备所有API的调用权限,如果使用账号下的IAM用户调用当前API,该IAM用户需具备调用API所需的权限,具体权限要求请参见权限管理。
URI
POST /rest/httpsessions/click2Call/v2.0
请求参数
参数名称 | 是否必选 | 参数类型 | 说明 |
|---|---|---|---|
Content-Type | 是 | String | 参数解释: 消息体的类型(格式)。 约束限制: 不涉及。 取值范围: 固定填写为application/json;charset=UTF-8。 默认取值: 不涉及。 |
Authorization | 是 | String | 固定填写为AKSK realm="SDP",profile="UsernameToken",type="Appkey"。 |
X-AKSK | 是 | String | 取值为UsernameToken Username="APP_Key的值", PasswordDigest="PasswordDigest的值", Nonce="随机数", Created="随机数生成时间"。
|
编程语言 | 时间格式 |
|---|---|
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()转换后的时间格式去除毫秒后即为本接口要求的时间格式。 |
参数名称 | 是否必选 | 参数类型 | 默认值 | 说明 |
|---|---|---|---|---|
displayNbr | 是 | String(4-31) | 无 | 此字段定义主叫用户收到语音通话平台的呼叫时,主叫用户手机终端的来电显示号码。需提前在订购号码页面申请该号码。 号码格式(固话):国家码+区号+固话,与号码管理页面的“固话号码”保持一致。 若该号码为“暂停”状态,语音通话平台会从该应用下随机选取一个其他可用的固话号码进行外呼。 |
callerNbr | 是 | String(4-31) | 无 | 此字段定义用户在SP开发的应用中,通过语音回呼功能发起呼叫时所使用的主叫号码。
|
displayCalleeNbr | 是 | String(4-31) | 无 | 此字段定义被叫用户收到语音通话平台的呼叫时,被叫用户终端的来电显示号码。需提前在订购号码页面申请该号码。 该号码可以与displayNbr配置为同一个号码,也可以配置为不同号码。 号码格式(固话):国家码+区号+固话,与号码管理页面的“固话号码”保持一致。 若该号码为“暂停”状态,语音通话平台会从该应用下随机选取一个其他可用的固话号码进行外呼。 |
calleeNbr | 是 | String(4-31) | 无 | 此字段定义终端用户在SP开发的应用中通过语音回呼业务发起呼叫时所拨打的被叫号码。 号码格式:
|
maxDuration | 否 | Integer | 0 | 此字段用于设置允许单次通话进行的最长时间,通话时间从被叫接通的时刻开始计算。 取值范围:0~1440分钟
不携带时,参数值默认为0。 |
lastMinVoice | 否 | String(1-128) | 无 | 当maxDuration字段设置为非0时此参数有效。 此参数用于设置最后一分钟放音提示音,此值填写SP定制的放音文件名,例如lastmin_voice1.wav,参数取值有以下两种场景:
|
lastMinToUE | 否 | String(枚举) | both | 当maxDuration字段设置为非0时此参数有效。 此字段用于设置最后一分钟放音的播放对象。
不携带时,参数值默认为both。 |
playPreVoice | 否 | String(枚举) | false | 此字段用于设置主叫(callerNbr)应答语音回呼后,呼叫被叫(calleeNbr)前,是否向主叫(callerNbr)播放提示音。 当该参数设置为true时,播放完主叫提示音(preVoice)后才播放主叫等待音(waitVoice)并呼叫被叫(calleeNbr)。
不携带时,参数值默认为false。 |
preVoice | 否 | String(1-128) | 无 | 当playPreVoice字段设置为true时此参数有效。 此字段用于设置主叫(callerNbr)应答语音回呼后,呼叫被叫(calleeNbr)前向主叫播放的提示音,此值填写放音文件名,例如pre_voice1.wav。
|
waitVoice | 否 | String(1-128) | 无 | 此字段用于设置主叫应答语音回呼后的等待音,此值填写放音文件名,例如wait_voice1.wav。
waitVoice可结合calleeMedia使用。 |
calleeMedia | 否 | String(枚举) | all | 该参数用于指定被叫的媒体音播放方式,参数取值范围如下:
不携带时,参数值默认为all。 |
statusUrl | 否 | String(1-128) | 无 | 此参数请采用BASE64编码进行加密。 此字段用于设置SP接收状态上报的URL。 语音通话平台将业务触发过程中通话的状态信息(包括呼出、振铃、摘机和挂机信息)推送至此服务器,SP根据通话状态信息确定用户状态。 URL可填写为https://IP:Port或域名,推荐使用域名。且该域名对应多个服务器,避免单点故障无法接收通知。 URL只能由大小写字母(a-z、A-Z),数字(0-9),中划线(-),英文冒号(:),英文点号(.),以及英文斜杠(/)组成,不支持其它字符。最大128字节。 |
feeUrl | 否 | String(1-128) | 无 | 此参数请采用BASE64编码进行加密。 此参数用于设置SP接收话单上报的URL。 语音通话平台将业务产生的话单推送至此服务器。 URL可填写为https://IP:Port或域名,推荐使用域名。且该域名对应多个服务器,避免单点故障无法接收话单。 URL只能由大小写字母(a-z、A-Z),数字(0-9),中划线(-),英文冒号(:),英文点号(.),以及英文斜杠(/)组成,不支持其它字符。最大128字节。 |
recordFlag | 否 | String(枚举) | false | 此字段设置语音回呼通话过程是否录音。
不携带时,参数值默认为false。 |
recordHintTone | 否 | String(1-128) | 无 | 此字段在recordFlag为true时才有效。 此字段用于设置使用录音功能的提示音,参数传值为指定的放音文件名,例如recordhint_voice1.wav。
|
partyTypeRequiredInDisconnect | 否 | String(枚举) | false | 该参数用于指定语音通话平台给开发者发送disconnect的呼叫状态时,通知消息是否需要携带通话主动挂机的用户类型(主叫挂机、被叫挂机、平台挂机)。 该参数取值范围如下:
不携带该参数时,默认值为false。 |
returnIdlePort | 否 | String(枚举) | false | 指示是否需要返回平台空闲呼叫端口数量。
不携带该参数时,默认值为false。 |
userData | 否 | String(1-256) | 无 | 此字段用于SP开发者自定义呼叫发起时,设置用户的附属信息,应用场景可以是当开发者想要对每一次呼叫的用户进行跟踪时,该参数可以携带用于标识用户的信息,如customerId123。 语音通话平台不对此参数做强制要求,如果开发者传入此参数,语音通话平台会在后续发给SP的通知消息中携带该参数值。 不允许携带以下字符:“{”,“}”(即大括号)。 不允许包含中文字符,如果包含中文字符请采用Base64编码。 |
响应参数
参数名称 | 是否必选 | 参数类型 | 默认值 | 说明 |
|---|---|---|---|---|
resultcode | 是 | String(1-32) | 无 | 请求返回的结果码。 |
resultdesc | 是 | String(1-128) | 无 | 请求返回的结果描述。 |
sessionId | 是 | String(1-256) | 无 | 请求返回的会话sessionId,用于标记一路会话。如果请求失败,则sessionId为空表示会话建立失败。 |
idlePort | 否 | Integer | 无 | 请求参数中returnIdlePort为true时响应消息携带该参数。 该参数表示平台呼叫端口空闲可用数量,取值范围0~65535。 |
结果码
请根据以下结果码进行调测,如果有疑问,可联系管理员进行确认。
响应码 | 结果码 | 英文描述 | 中文描述 | 处理方法 |
|---|---|---|---|---|
200 | 0 | Success. | 成功。 | 无需处理。 |
400 | 1023006 | Authorization not contained in the HTTP header. | 鉴权失败,请检查鉴权请求正确性。 | 请检查消息头中是否携带了Authorization,PasswordDigest字段填写是否正确,携带的app_key填写是否正确,且生成随机数的时间与发送请求时的本地时间不能相差太大。 |
1023007 | realm not contained in Authorization. | Authorization字段中未找到realm属性。 | 请检查Authorization字段中的是否携带了realm属性。 | |
1023008 | profile not contained in Authorization. | Authorization字段中未找到profile属性。 | 请检查Authorization字段中的是否携带了profile属性。 | |
1023009 | The value of realm in Authorization must be SDP. | Authorization中realm属性值应该为“SDP”。 | 请检查Authorization字段中的realm属性值是否为“SDP”。 | |
1023010 | The value of profile in Authorization must be UsernameToken. | Authorization中profile属性值应该为“UsernameToken”。 | 请检查Authorization字段中的profile属性值是否为“UsernameToken”。 | |
1023011 | The value of type in Authorization must be app_key. | Authorization中type属性值应该为“Appkey”。 | 请检查Authorization字段中的type属性值是否为“Appkey”。 | |
1023012 | type not contained in Authorization. | Authorization字段中未找到type属性。 | 请检查Authorization字段中是否携带了type属性。 | |
1023033 | HTTP header not found X-AKSK field. | HTTP头未找到X-AKSK字段。 | 请检查HTTP消息头中是否携带了X-AKSK字段。 | |
1023034 | UserName not contained in X-AKSK. | X-AKSK字段中未找到UserName属性。 | 请检查X-AKSK字段中的是否携带了Username属性。 | |
1023035 | Nonce not contained in X-AKSK. | X-AKSK字段中未找到Nonce属性。 | 请检查X-AKSK字段中的是否携带了Nonce属性。 | |
1023036 | Created not contained in X-AKSK. | X-AKSK字段中未找到Created属性。 | 请检查X-AKSK字段中的是否携带了Created属性。 | |
1023037 | PasswordDigest not contained in X-AKSK. | X-AKSK字段中未找到PasswordDigest属性。 | 请检查X-AKSK字段中的是否携带了PasswordDigest属性。 | |
1023038 | UsernameToken not contained in X-AKSK. | X-AKSK中没有携带UsernameToken。 | 请检查X-AKSK字段中的是否携带了UsernameToken属性。 | |
401 | 1010010 | Invalid digest. | PasswordDigest校验失败。 | 请检查PasswordDigest字段填写是否正确。 |
1010013 | Time out limit. | 时间超出限制。 | 请确认X-AKSK鉴权时,生成随机数的时间与发送请求时的本地时间不能相差太大(具体差值请与管理员确认) | |
403 | 1010002 | Invalid request. | 非法请求。 | 检查请求携带的参数格式是否都合法。 |
1010003 | Invalid app_key. | 无效的app_key。 | 检查请求携带的app_key是否填写正确,app_key从应用管理页面获取,若填写正确,请在应用管理页面检查请求携带的app_key所属应用状态是否正常。 | |
1010006 | Invalid Rest API. | 无效的Rest API。 | 检查请求方法填写是否正确。 | |
1010008 | The status of the app_key is unavailable. | app_key被暂停使用。 | 请在应用管理页面检查请求携带的app_key所属应用状态是否正常。 | |
1010009 | No more APIs can be invoked. | API达到调用上限。 | 请稍等一分钟后再试,并联系管理员申请更高的应用使用配额。 | |
1010010 | The flow control upper limit is reached on the platform. | 平台达到系统流控上限。 | 请稍等一分钟后再试。 | |
1010011 | The app is not allowed to access a commercial address. | APP没有访问商用地址的权限。 | 请在应用管理页面检查请求携带的app_key所属应用状态是否正常。 | |
1010021 | Application unavailable. | 应用不可用。 | 请在应用管理页面检查请求携带的app_key所属应用状态是否正常。 | |
1010023 | Invalid display number. | 号码填写不合法。 | 检查displayNbr和displayCalleeNbr参数的填写是否合法,与号码管理页面的“固话号码”保持一致。若合法,请确认该号码是否已申请并下发。申请号码在号码订购页面申请,号码下发后可在号码管理页面查看。 | |
1010024 | Invalid caller number. | 主叫号码不合法。 | 检查callerNbr参数的填写是否合法。 | |
1010040 | The app_key is not allowed to invoke the API. | app_key没有调用本API的权限。 | 请联系管理员确认该app_key对应的应用是否具有语音回呼能力。 | |
1012001 | Resource of number is not to be applied. | 资源未申请。 | app_key和业务号码未绑定。 | |
1012006 | The service number is not applied. | 业务号码未申请。 | 请确认是否申请业务号码。 | |
1012012 | Application does not open recording function. | 应用未开启录音功能。 | 请在应用管理页面确认请求携带的app_key是否开启了录音功能。 | |
1013001 | Calls exceed the SP limit. | 请求次数超过SP配置上限。 | 请和管理员确认开发者呼叫数量限制。 | |
1013002 | Calls exceed the APP limit. | 请求次数超过应用配置上限。 | 请和管理员确认应用呼叫数量限制。 | |
1013003 | Calls exceed the display number limit. | SP的主显号码受限。 | 请和管理员确认显示号码呼叫数量限制。 | |
1013004 | Callee in blacklist. | 被叫用户是黑名单。 | 被叫号码在运营商黑名单库。 | |
1013010 | Caller in blacklist. | 主叫用户是黑名单。 | 主叫号码在运营商黑名单库。 | |
1013011 | Callee is not on the whitelist. | 被叫用户不在白名单中。 | 请和管理员确认被叫号码白名单限制。 | |
1013100 | Common error code . | 未知错误。 | 请和管理员确认安全管控限制。 | |
1013101 | Abnormal call restricted . | 呼叫行为异常。 | 请和管理员确认安全管控限制。 | |
1013111 | International callin is forbidden. | 国际呼入限制。 | 请检查请求的号码格式是否为国际号码格式。 | |
1013112 | International callout is forbidden. | 国际呼出限制。 | 请检查请求的号码格式是否为国际号码格式。 | |
1013113 | Abnormal call duration restricted. | 通话时间异常。 | 请检查请求的号码是否通话时间异常。 | |
1013115 | Abnormal call completion rate restricted. | 呼叫接通率异常。 | 请检查请求的号码是否呼叫接通率异常。 | |
1013116 | Caller call frequency restricted. | 主叫呼叫频次限制。 | 请检查主叫号码是否有呼叫频次限制。 | |
1013117 | Callee call frequency restricted. | 被叫呼叫频次限制。 | 请检查被叫号码是否有呼叫频次限制。 | |
1013118 | Service number call frequency restricted. | 业务号码呼叫频次限制。 | 请检查业务号码是否有呼叫频次限制。 | |
1013119 | Service number suspend. | 业务号码被暂停。 | 请和管理员确认号码状态。 | |
1013120 | Ip address is null. | IPv4地址未携带。 | 请客户接口携带请求发送方IPv4地址。 | |
1013121 | Call black time forbidden. | 呼叫时段限制。 | 呼叫时段为休息时段,请工作时段再呼叫。 | |
1013122 | Sub enterprise is suspended. | 子企业已被暂停。 | 查看是否因投诉被下线,可查看订购号码时填写的邮箱是否有业务下线通知邮件。 | |
1020165 | The number of app_key voice call ports exceeds the upper limit. | 超出语音呼叫端口数限制。 | 请稍等一分钟后再试。建议联系管理员为该应用申请更多的端口配额。 | |
1020166 | The app client ip is not in ip white list. | 请求发送方app IP不在白名单列表中。 | 运营商IP地域管控,此地区无法呼通。 | |
1020168 | The call is rejected because the login IP of the peer app is blacklisted . | 请求发送方app登录IP是黑名单。 | 运营商IP地域管控,此地区无法呼通。 | |
1020171 | The call is rejected because the login IP of the peer app is blacklisted area. | 请求发送方app登录IP在受限地域。 | 运营商IP地域管控,此地区无法呼通。 | |
1020176 | Authentication failed, try again later | 鉴权失败,稍后重试。 | IP因鉴权失败次数过多导致被拉黑,请30分钟后重试,或联系管理员放通该IP。 | |
500 | 1010001 | Internal system error. | 系统错误。 | 请联系管理员处理。 |
1020001 | Parameter error. | 参数错误。 | 检查请求携带的参数格式是否都合法。 | |
1020002 | Internal error. | 内部错误。 | 请联系管理员处理。 | |
1020150 | The app_key is invalid. | app_key无效。 | 检查请求携带的app_key是否填写正确,app_key从应用管理页面获取,若填写正确,请在应用管理页面检查请求携带的app_key所属应用状态是否正常。 | |
1020151 | The bindNum is invalid. | 业务号码无效。 | 业务号码无效,请联系管理员处理。 | |
1020154 | Insufficient voice ports. | 语音端口不足。 | 请稍等一分钟后再试,并联系管理员申请扩容语音端口。 | |
1023001 | Internal error. | 内部错误。 | 请联系管理员处理。 | |
1023002 | Response timeout. | 响应超时。 | 重新发送一次请求。 | |
1040001 | south ne error with responseCode: %$ and responseMsg: %$. | 南部网元错误。 | 请联系管理员处理。 |
接口示例
- 请求示例
POST /rest/httpsessions/click2Call/v2.0 HTTP1.1 content-type: application/json;charset=UTF-8 authorization: AKSK realm="SDP",profile="UsernameToken",type="Appkey" x-aksk: UsernameToken Username="ZRBRz4bAXoFgEH7o4Ew308eXc1RA",PasswordDigest="****",Nonce="ac1c911c4792492687f8f6b2264a491e",Created="2018-05-26T00:35:30Z" Content-Length:xx { "displayNbr":"+86755****8888", "callerNbr":"+86137****0001", "calleeNbr":"+86137****0002", "displayCalleeNbr":"+86755****8888", "userData":"cwgtest" }
- 响应示例
HTTP/1.1 200 OK Content-Type: application/json;charset=UTF-8 { "resultcode":"0", "resultdesc":"Success", "sessionId":"1202_566_0_20161228102743@callenabler.home1.com" }
代码样例
前往代码样例查看。

