隐私保护通话 PrivateNumber-AXB模式:AXB模式绑定接口

时间:2025-02-12 14:52:30

AXB模式绑定接口

 1 2 3 4 5 6 7 8 9101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
# -*- coding: utf-8 -*-import timeimport uuidimport hashlibimport base64import jsonimport sslimport urllib.requestimport hmacfrom hashlib import sha256# 必填,请参考"开发准备"获取如下数据,替换为实际值realUrl = 'https://rtcpns.cn-north-1.myhuaweicloud.com/rest/caas/relationnumber/partners/v1.0' #APP接入地址+接口访问URIAPP_KEY = "a1********" #APP_KeyAPP_SECRET = "cfc8********" #APP_SecretrelationNum = '+86170****0001' #X号码(隐私号码)callerNum = '+86186****5678' #A号码calleeNum = '+86186****5679' #B号码'''选填,各参数要求请参考"AXB模式绑定接口"'''# areaCode = '0755' #需要绑定的X号码对应的城市码# callDirection = 0 #允许呼叫的方向# duration = 86400 #绑定关系保持时间,到期后会被系统自动解除绑定关系# recordFlag = 'false' #是否需要针对该绑定关系产生的所有通话录音# recordHintTone = 'recordHintTone.wav' #设置录音提示音# maxDuration = 60 #设置允许单次通话进行的最长时间,通话时间从接通被叫的时刻开始计算# lastMinVoice = 'lastMinVoice.wav' #设置通话剩余最后一分钟时的提示音# privateSms = 'true' #设置该绑定关系是否支持短信功能# callerHintTone = 'callerHintTone.wav' #设置A拨打X号码时的通话前等待音# calleeHintTone = 'calleeHintTone.wav' #设置B拨打X号码时的通话前等待音# preVoice = {#     'callerHintTone': callerHintTone,#     'calleeHintTone': calleeHintTone# };def buildAKSKHeader(appKey, appSecret):    now = time.strftime('%Y-%m-%dT%H:%M:%SZ') #Created    nonce = str(uuid.uuid4()).replace('-','') #Nonce    digist = hmac.new(appSecret.encode(), (nonce + now).encode(), digestmod=sha256).digest()    digestBase64 = base64.b64encode(digist).decode() #PasswordDigest    return 'UsernameToken Username="{}",PasswordDigest="{}",Nonce="{}",Created="{}"'.format(appKey, digestBase64, nonce, now);def main():    # 请求Body,可按需删除选填参数    jsonData = json.dumps({        'relationNum':relationNum,#         'areaCode':areaCode,        'callerNum':callerNum,        'calleeNum':calleeNum,#         'callDirection':callDirection,#         'duration':duration,#         'recordFlag':recordFlag,#         'recordHintTone':recordHintTone,#         'maxDuration':maxDuration,#         'lastMinVoice':lastMinVoice,#         'privateSms':privateSms,#         'preVoice':preVoice    }).encode('ascii')    req = urllib.request.Request(url=realUrl, data=jsonData, method='POST') #请求方法为POST    # 请求Headers参数    req.add_header('Authorization', 'AKSK realm="SDP",profile="UsernameToken",type="Appkey"')    req.add_header('X-AKSK', buildAKSKHeader(APP_KEY, APP_SECRET))    req.add_header('Content-Type', 'application/json;charset=UTF-8')    # 为防止因HTTPS证书认证失败造成API调用失败,需要先忽略证书信任问题    ssl._create_default_https_context = ssl._create_unverified_context    try:        fo = open('bind_data.txt', 'a', encoding='utf-8') #打开本地文件        fo.write('绑定请求数据:' + jsonData.decode('utf-8') + '\n') #绑定请求参数记录到本地文件,方便定位问题        r = urllib.request.urlopen(req) #发送请求        print(r.read().decode('utf-8')) #打印响应结果        fo.write('绑定结果:' + str(r.read().decode('utf-8')) + '\n') #绑定ID很重要,请记录到本地文件,方便后续修改绑定关系及解绑    except urllib.error.HTTPError as e:        print(e.code)        print(e.read().decode('utf-8')) #打印错误信息    except urllib.error.URLError as e:        print(e.reason)    finally:        fo.close() #关闭文件if __name__ == '__main__':    main() 
support.huaweicloud.com/devg-PrivateNumber/privatenumber_01_0004.html