请求参数
2.11 短信通知接口
接口功能
隐私保护通话平台通过此接口向客户服务器推送隐私号短信通知。
通知模式分为Notify和Block模式:
● Notify:通知模式,Notify模式的短信通知会被推送到客户添加应用时填写的短信 通知地址,客户收到通知后返回HTTP状态码为200的空消息即可。
● Block:控制模式,Block模式的短信通知会被推送到客户添加应用时填写的短信 控制地址,客户收到通知后需按照Block模式响应参数返回响应,指示隐私保护通 话平台转发或丢弃短信。
AX模式发送小号短信的流程如下:
● A发送短信给X,短信内容最后携带“@号码B”,如“@138****0021”(@必须 是英文半角字符,号码B根据实际情况替换成真实用户号码,下同),隐私保护通 话平台删除短信内容中的“@号码B”后将短信转发给B(发送方号码是X),并推 送Notify模式的隐私号短信通知给客户服务器;
若短信内容中未携带“@号码B”或携带的分隔符或号码格式错误,则隐私保护通 话平台推送Block模式的隐私号短信通知给客户服务器,此时客户服务器必须返回 响应参数对短信事件进行控制。隐私保护通话平台根据客户服务器返回的结果转 发或丢弃隐私号短信;如果操作是转发,转发成功后推送Notify模式的隐私号短 信通知给客户服务器。
● B发送短信给X,隐私保护通话平台在短信最后添加“[From号码B]”后将短信转 发给A(发送方号码是X),并推送Notify模式的隐私号短信通知给客户服务器。
注:AX模式,A发送短信给X时需携带“@号码B”,“@号码B”不能去除。
请求方向
隐私保护通话平台(服务端) → 客户服务器(客户端)
使用说明
前提条件
● 客户添加应用时需设置短信通知接收地址,并确保提供的地址能够正常处理隐私 保护通话平台发送的通知消息。
● 若需要接收用户发送的短信内容,请参考如何设置才能收到短信内容?进行设 置。
● 如果需要开启短信事件通知重传功能,需提前向系统管理员申请。该功能开启 后,当隐私保护通话平台推送短信事件通知给客户服务器失败时,隐私保护通话 平台会重传事件通知给客户服务器。最多重传6次,每次重传时间间隔可由系统管 理员设置。
接口类型
表2-60 请求说明 请求方
法
POST
访问URI 客户添加应用时填写的短信通知地址/短信控制地址
通信协
议 HTTPS
请求参数
表2-61 请求 Headers 参数说明 参数名称 是否
必选
参数类型 说明
Content-Type 是 String 固定填写为application/json;charset=UTF-8。
Authoriza
tion 是 String 固定填写为WSSE
realm="SDP",profile="UsernameToken",type="
Appkey"。
X-WSSE 是 String 取值为UsernameToken Username="APP_Key的 值", PasswordDigest="PasswordDigest的值", Nonce="随机数", Created="随机数生成时间"。
● PasswordDigest:根据PasswordDigest = Base64 (SHA256 (Nonce + Created + Password))生成。其中,Password为 APP_Secret的值。Nonce、Created、
Password直接进行字符串拼接即可,无需包含 +号和空格。
● Nonce:客户发送请求时生成的一个随机数,
长度为1~128位,可包含数字和大小写字母。
例如:66C92B11FF8A425FB8D4CCFE0ED9ED1F。
● Created:随机数生成时间。采用标准UTC格 式,例如:2018-02-12T15:30:20Z。不同编程 语言中将UTC时间戳转换为普通时间时使用的 格式不同,部分语言可参考表2-62。
表2-62 不同编程语言的时间格式
编程语言 时间格式
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()转换后的时间格式去除毫秒后即 为本接口要求的时间格式。
表2-63 请求 Body 参数说明 参数名称 是否
必选
参数类型 说明
appKey 是 String(1-3
2) 隐私保护通话应用的APP_Key。
smsEvent 是 SMSEven
tInfoType 短信状态事件。
表2-64 SMSEventInfoType 定义 参数名称 是否
必选
参数类型 说明
smsIdentif
ier 是 String(1-6
4) 短信唯一标识。
若用户发送的是长短信,隐私保护通话平台会将 长短信的多个分片合并为一个通知上报。
notificatio
nMode 是 String(1-8
) 通知模式:
● Notify:通知模式。
● Block:控制模式。
calling 否 String(1-3
2) 真实发送方号码。
号码为全局号码格式(包含国家码),比如 +86138****7021。
called 否 String(1-3
2) 真实接收方号码。
仅在隐私保护通话平台转发短信成功后携带。
号码为全局号码格式(包含国家码),比如 +86138****7022。
virtualNu
mber 否 String(1-3
2) X号码。
号码为全局号码格式(包含国家码),比如 +86138****0001。
event 是 String(1-1
6) 短信状态事件。
TextSMS:文本短信 timeStam
p 是 String(1-3
2) 短信事件发生的系统时间戳,UTC时间。
格式:yyyy-MM-dd'T'HH:mm:ss.SSS'Z' 其中SSS是毫秒,“T”和“Z”为固定字符。
extInfo 是 Extension
InfoType 拓展信息。
subscripti
onId 否 String(1-6
4) 绑定ID。
参数名称 是否 必选
参数类型 说明
smsConte
nt 否 String(1-2
000) 用户发送的短信内容。
请参考如何设置才能收到短信内容?开通该功 能。
sendResul
t 是 Integer 发送结果。
● 0:成功
● 1:因用户账户冻结,发送失败。
● 2:因绑定关系不存在,发送失败。
● 3:因X号码被暂停,发送失败。
● 4:非商用APP,发送失败。
● 5:因系统内部错误,发送失败。
● 6:SP指示丢弃,发送失败。
● 7:等待SP审核超时丢弃,发送失败。
● 8:黑名单管控,发送失败。
● 9:部分发送成功。
● 10:全部发送失败。
● 11:X号码不支持短信能力。
● 12:短信内容不包含特征关键词。
● 13:短信内容包含禁止词汇。
areaCode 否 String(0-3
2) 隐私保护号码(X号码)的城市码。
注:使用该参数的场景请联系华为云客服获取。
userData 否 String(1-2
56) 用户附属信息。
注:使用该参数的场景请联系华为云客服获取。
表2-65 ExtensionInfoType 定义
参数名称 是否
必选
参数类型 说明
extParas 是 JsonArray 扩展信息(Key-Value)列表。
格式如下:
"extParas": [{"key": "splitNum","value":
"value1"},{"key": "direction","value":
"value2"}]
Key、Value取值分别不能超过32个字节。
“key”取值为“splitNum”时表示实际短信 发送成功数量,即长短信拆分后的短信数量。
value1表示“splitNum”的取值。
“key”取值为“direction”时表示短信发送 方向。value2表示“direction”取值,含义如 下:
● 0:其他用户发送短信给A。
● 1:A发送短信给其他用户。
● 2:异常场景无法获取发送方向。
响应参数
客户服务器接收到隐私保护通话平台的短信事件通知后,根据不同的模式返回不同响 应消息。
● Notify模式
返回无消息体的200响应。
● Block模式
响应必须参照表2-66携带消息体,返回对短信事件的处理操作。
表2-66 响应消息参数说明 参数名称 是否
必选
参数类型 说明
actions 是 SMSActi onType[
]
短信操作指示。
表2-67 SMSActionType 定义 参数名称 是否
必选
参数类型 说明
operatio
n 是
String(1-32) 操作类型:
● vNumberRoute:转发短信。
● DiscardMessage:丢弃短信。
message 否 Message
Info 短信操作信息。
仅当operation取值为“vNumberRoute”时有 效。
extParas 否 JsonArra
y 预留参数,当前版本无需关注。
表2-68 MessageInfo 定义 参数名称 是否
必选
参数类型 说明
called 否
String(1-64) 真实接收方号码。
号码仅支持全局号码格式(包含国家码),比 如+86138****7022。
calling 否
String(1-64) 真实发送方号码。
和请求参数中的calling参数的取值保持一致。
号码仅支持全局号码格式(包含国家码),比 如+86138****7021。
接口示例
接口示例仅供参考,请以实际消息为准。
● notify模式 请求示例POST /notify HTTP/1.1
Content-Type: application/json;charset=UTF-8 {
"appKey":"****",
"smsEvent":{"smsIdentifier":"********", "notificationMode":"Notify", "calling":"+86138****0001", "virtualNumber":"+86138****0000", "event":"TextSMS",
"timeStamp":"2020-12-23T09:06:16.450Z",
"extInfo":{"extParas":[{"key":"splitNum","value":"0"},{"key":"direction","value":"2"}]}, "sendResult":2}
} }
响应示例HTTP/1.1 200 OK
● Block模式 请求示例
POST /block HTTP/1.1
Content-Type: application/json;charset=UTF-8 {
"appKey":"****",
"smsEvent":{"smsIdentifier":"****", "notificationMode":"Block", "calling":"+86138****0001", "virtualNumber":"+86138****0000", "event":"TextSMS",
"timeStamp":"2018-09-13T09:46:16.023Z",
"extInfo":{"extParas":[{"key":"splitNum","value":"2"},{"key": "direction","value": "1"}]}, "sendResult":0
} }
响应示例HTTP/1.1 200 OK
Content-Type: application/JSON;charset=UTF-8 Content-Length: xx
{
"actions":[{
"operation":"vNumberRoute", "message":{"called":"+86138****0002", "calling":"+86138****0001"
} }]
}