华为云用户手册

  • 错误码 Http状态码 错误码 错误描述 说明 400 100222 The request callbackurl is illegal. 回调地址非法。 处理建议:请检查请求体中的回调地址是否有误。 403 100217 The application hasn't been authorized. 应用未被授权。 处理建议:若非应用授权场景,请确认请求参数中的appId为空。 403 1010009 app throttle exceed. 应用调用接口过于频繁,超过流控值(默认值是100次/60s)。 处理建议:联系 物联网平台 维护人员调大流控阈值或者控制接口的调用频率。 403 1010005 Invalid access token or appId. 错误的token信息。 处理建议:请检查接口请求中所携带的accessToken是否有误。 409 100227 The resource is conflicted. 资源冲突,通知类型已经被订阅。 处理建议:请检查要订阅的通知类型是否已被订阅。
  • 正常响应示例 Status Code: 200 OKContent-Type: application/json{ "deviceId": "******", "gatewayId": "******", "nodeType": "******", "createTime": "******", "lastModifiedTime": "******", "deviceInfo": "******""services": [ { "serviceId": "******", "reportedProps": "******", "desiredProps": "******", "eventTime": "******", "serviceType": "******" }, ]}
  • 错误码 Http状态码 错误码 错误描述 说明 403 100203 The application is not existed. 应用不存在。 处理建议: 请检查HTTP请求头域中携带的appId是否有误。 请检查请求路径(url)中传入的appId是否有误。 403 100217 The application hasn't been authorized. 应用未被授权。 处理建议:若非应用授权场景,请确认请求参数中的appId为空。 403 1010009 app throttle exceed. 应用调用接口过于频繁,超过流控值(默认值是100次/60s)。 处理建议:联系物联网平台维护人员调大流控阈值或者控制接口的调用频率。 403 1010005 pp_key or access_token is invalid. 错误的token信息。 处理建议:请检查接口请求中所携带的accessToken是否有误。 404 100418 The deviceData is not existed. 设备信息不存在。 处理建议: 请求参数中携带的deviceId错误。请确认该deviceId是否属于该appId或者deviceId是否写错。 Header中携带的appId有误,请确认该appId下是否有该deviceId。 如果URL中携带了可选参数appId,请检查该appId是否有误。 500 100203 The application is not existed. 应用不存在。 处理建议: 请检查HTTP请求头域中携带的appId是否有误。 请检查请求路径(url)中传入的appId是否有误。 500 50252 Internal server error. 服务器运行内部错误。 处理建议:物联网平台内部错误,请联系物联网平台维护人员处理。
  • 请求参数 字段 必选/可选 类型 位置 描述 app_key 必选 String header 访问物联网平台的应用ID,在物联网平台创建应用时由平台分配获得。 Authorization 必选 String header 访问物联网平台的认证信息,值为“Bearer {accessToken}”,其中{accessToken}为调用鉴权接口返回的accessToken。 deviceId 必选 String(36) path 设备ID,用于唯一标识一个设备,在注册设备时由物联网平台分配获得。 appId 可选 String query 设备所属的应用ID,当查询授权应用下设备的设备影子时才需要填写。
  • 删除子设备 若子设备不再需要接入物联网平台,应用服务器可调用此接口解绑网关下的子设备。 此功能通过设备命令下发接口向网关下发命令实现,具体删除子设备命令需网关提前实现(即网关收到什么命令会触发删除子设备的流程),并已在设备的Profile文件中定义。当网关收到平台下发的删除子设备命令时,则启动内部业务流程,删除子设备。 例如网关中定义删除子设备的命令名称为REMOVE,命令参数为“del_subdevice=YES”,则删除子设备的接口请求样例如下。 POST https://{host}:{port}/iocm/app/signaltrans/v1.1.0/devices/{deviceId}/services/{serviceId}/sendCommandContent-Type: application/jsonapp_key: ******Authorization: Bearer ******{ "header": { "mode": "ACK", "method": "REMOVE" }, "body": { "del_subdevice": "YES" }} 父主题: 设备管理
  • 响应参数 名称 类型 说明 subscription_id String 订阅ID,用于唯一标识一个订阅,在创建订阅时由物联网平台分配获得。 subject Subject Object 订阅的主题信息,即订阅的资源变化事件。 callbackurl String 订阅的回调地址,用于接收对应资源事件的通知消息。 channel String 物联网平台推送通知消息时使用的协议通道。使用“http”填充,表示该订阅推送协议通道为http(s)协议。 表1 Subject 名称 类型 说明 resource String 订阅的资源名称。 device:设备。 device.data:设备数据。 device.message.status:设备消息状态。 device.message:设备消息。 device.status:设备状态。 batchtask.status:批量任务状态。 event String 订阅的资源事件,取值范围:activate、update、up。 event需要与resource关联使用,具体的“resource:event”映射关系如下: device:activate(设备激活) device.data:update(设备数据变化) device.message.status:update(设备消息状态) device.message:report(设备消息上报) device.status:update (设备状态变化) batchtask.status:update (批量任务状态变化)
  • 请求示例 PUT https://{Endpoint}/v5/iot/{project_id}/subscriptions/{subscription_id}Content-Type: application/jsonX-Auth-Token: ********Instance-Id: ********{ "callbackurl" : "https://host:port/deviceActivate"}
  • 响应示例 Status Code: 200 OK Content-Type: application/json{ "subscription_id" : "5bcaddda-75bf-4623-8c8d-26175c41fcca", "subject" : { "resource" : "device", "event" : "activate" }, "callbackurl" : "https://host:port/deviceActivate", "channel" : "http"}
  • 错误码 HTTP状态码 错误码 错误码英文描述 错误码中文描述 处理建议 400 IOTDA.009002 The resource model does not exist. 资源模型不存在 请确认请求参数中是否携带resource和event,或者notifyType。 IOTDA.009005 The request callbackurl is invalid. 请求中的callbackurl地址不合法 请排查请求中的callbackurl参数是否符合华为云文档要求。 IOTDA.009006 The subscription subject already exists. 该订阅记录已经存在 该订阅已存在,无需再重复订阅。 IOTDA.009010 The resource does not match event. resource和event不匹配 请排查请求中resource与event参数是否符合华为云文档要求 403 IOTDA.000021 Operation not allowed. User not found by IAM token or the authorized user has not subscribed IOTDA service. 没有找到IAM Token所对应的用户信息或该用户没有订阅 设备接入服务 (IOTDA) 请排查IAM Token所在用户是否订阅了设备接入服务(IOTDA)。 IOTDA.001000 The application does not exist. 该应用不存在 请确定是否已在平台注册应用并检查应用ID是否正确。 IOTDA.001002 Operation not allowed. The application has not been authorized. 该应用没有权限访问 请检查该应用是否已被授权。 IOTDA.001005 Operation not allowed. The parameter 'app_id' is not carried, and the authorized user has more than one applications. Include the parameter 'app_id', or contact Huawei technical support engineers to merge application data. 该用户下有多个应用的情况下未携带appId访问接口 请携带对应的appId或联系华为工程师合并应用数据。 IOTDA.001006 Operation not allowed. Application not found by authorized user or the authorized user has no application. 用户下没有应用或应用与用户不匹配 请排查用户下是否有应用或是否有指定的应用。 IOTDA.001007 Operation not allowed. The application does not belong to the authorized user. 应用与用户信息不匹配 请排查该用户下是否有指定的应用。 IOTDA.009008 The query count exceeds the upper limit. 查询数量超过最大限制 请排查请求参数是否符合华为云文档要求。 404 IOTDA.009003 The subscription subject can not be found. 查询不到该订阅记录 请确认请求中的参数是否正确。 500 IOTDA.000001 Internal server error. 服务器内部错误 请联系华为工程师分析解决。 IOTDA.000020 Decrypt IAM token failed. IAM Token解析失败 请联系华为工程师分析解决。
  • 请求参数 名称 必选/可选 类型 位置 说明 X-Auth-Token 必选 String Header 用户Token。通过调用IAM服务 获取IAM用户Token接口获取,接口返回的响应消息头中“X-Subject-Token”就是需要获取的用户Token。简要的获取方法样例请参见 Token认证。 Instance-Id 可选 String Header 实例ID。物理多租下各实例的唯一标识,一般华为云租户无需携带该参数,仅在物理多租场景下从管理面访问API时需要携带该参数。 project_id 必选 String Path 项目ID。获取方法请参见 获取项目ID。 subscription_id 必选 String Path 订阅ID,用于唯一标识一个订阅,在创建订阅时由物联网平台分配获得。 callbackurl 可选 String Body 订阅的回调地址,用于接收对应资源事件的通知消息,例如:https://host:port/callbackurltest。
  • 请求参数 参数 必选/可选 类型 位置 描述 notifyType 必选 String body 通知类型,取值:deviceCapabilitiesChanged。 appId 必选 String body 访问物联网平台的应用ID,在物联网平台创建应用时由平台分配获得。此处填写授权应用的appId。 deviceType 必选 String body 设备的类型。 manufacturerName 必选 String body 设备模型的厂商名称。 manufacturerId 必选 String body 设备模型的厂商ID。 model 必选 String body 设备型号。 protocolType 必选 String body 设备使用的协议类型。
  • 请求示例 POST {callbackUrl}Content-Type: application/json{ "notifyType": "deviceCapabilitiesChanged", "appId": "*****", "deviceType": "*************", "manufacturerName": "wulian", "manufacturerId": "*************", "model": "*************", "protocolType": "zigbee"}
  • 请求示例 POST https://{host}:{port}/iodm/app/sub/v1.1.0/subscribeContent-Type: application/jsonapp_key: ******Authorization: Bearer *****{ "notifyType": "swUpgradeStateChangeNotify", "callbackUrl": "http://******"}
  • 错误码 Http状态码 错误码 错误描述 说明 400 100222 Internal server error. 回调地址非法。 处理建议:请检查请求体中的回调地址是否有误。 400 100228 The application input is invalid. 应用输入无效。 处理建议:请参考请求参数说明检查接口请求中的参数是否有误。 403 100203 The application is not existed. 应用不存在。 处理建议: 请检查HTTP请求头域中携带的appId是否有误。 请检查请求路径(url)中传入的appId是否有误。 403 1010009 app throttle exceed. 应用调用接口过于频繁,超过流控值(默认值是100次/60s)。 处理建议:联系物联网平台维护人员调大流控阈值或者控制接口的调用频率。 403 1010005 Invalid access token or appId. 错误的token信息。 处理建议:请检查接口请求中所携带的accessToken是否有误。 500 100229 Get AppKey from header failed. 从消息头获取AppKey失败。 500 100244 register out route fail. 注册路由失败。 处理建议:联系物联网平台维护人员。
  • 请求参数 参数 必选/可选 类型 位置 描述 app_key 必选 String header 访问物联网平台的应用ID,在物联网平台创建应用时由平台分配获得。 Authorization 必选 String header 访问物联网平台的认证信息,值为“Bearer {accessToken}”,其中{accessToken}为调用鉴权接口返回的accessToken。 notifyType 必选 String body 通知类型。 swUpgradeStateChangeNotify(软件升级状态变更通知,订阅后推送软件升级状态变更通知) swUpgradeResultNotify(软件升级结果通知,订阅后推送软件升级结果通知) fwUpgradeStateChangeNotify(固件升级状态变更通知,订阅后推送固件升级状态变更通知) fwUpgradeResultNotify(固件升级结果通知,订阅后推送固件升级结果通知) callbackUrl 必选 String body 订阅的回调地址,用于接收对应类型的通知消息。 可使用HTTPS或HTTP回调地址,建议使用HTTPS。回调地址支持IP地址或 域名 格式,同时回调地址中必须指定回调地址的端口。例如:https://XXX.XXX.XXX.XXX:443/callbackurltest。
  • 请求参数 参数 必选/可选 类型 位置 描述 notifyType 必选 String body 通知类型,取值:swUpgradeResultNotify。 deviceId 必选 String body 设备ID,用于唯一标识一个设备,在注册设备时由物联网平台分配获得。 appId 必选 String body 设备所属应用的应用ID。 operationId 必选 String body 软件升级任务ID。 subOperationId 必选 String body 软件升级子任务ID。 curVersion 必选 String body 设备当前的软件版本。 targetVersion 必选 String body 设备要升级的目标软件版本。 sourceVersion 必选 String body 设备的源软件版本。 swUpgradeResult 必选 String body 软件升级结果。 SUC CES S:设备升级成功 FAIL:设备升级失败 upgradeTime 必选 long body 升级时长。 resultDesc 必选 String body 升级结果描述。 errorCode 必选 String body 设备上报的状态错误码。 description 必选 String body 错误原因描述。
  • 推送通知 应用服务器向物联网平台订阅设备信息,当设备信息发生变更时,物联网平台向应用服务器推送此消息,应用服务器根据通知类型对消息分派处理。需要配合订阅管理接口使用。 注册设备通知 绑定设备通知 设备信息变化通知 设备数据变化通知 设备数据批量变化通知 设备服务能力变化通知 设备服务能力增加通知 设备服务能力删除通知 删除设备通知 设备消息确认通知 设备命令响应通知 命令状态变化通知 规则事件通知 设备影子状态变更通知 软件升级状态变更通知 软件升级结果通知 固件升级状态变更通知 固件升级结果通知 父主题: 订阅管理-V3
  • 请求示例 POST {callbackUrl}Content-Type: application/json{ "notifyType": "swUpgradeResultNotify", "deviceId": "******", "appId": "***********", "operationId": "***********", "subOperationId": "***********", "curVersion": "1.3", "targetVersion": "1.5", "sourceVersion": "1.0", "swUpgradeResult": "SUCCESS", "upgradeTime": "***", "resultDesc": "***", "errorCode": "***", "description": "***"}
  • 错误码 Http状态码 错误码 错误描述 说明 400 100224 The resource exceeds 1000, please refinement query conditions. 查到端资源超出1000条,请重新设定查询条件。 处理建议:请缩小查询条件范围。 403 100217 The application hasn't been authorized. 应用未被授权。 处理建议:若非应用授权场景,请确认请求参数中的appId为空。 403 1010009 app throttle exceed. 应用调用接口过于频繁,超过流控值(默认值是100次/60s)。 处理建议:联系物联网平台维护人员调大流控阈值或者控制接口的调用频率。 403 1010005 Invalid access token or appId. 错误的token信息。 处理建议:请检查接口请求中所携带的accessToken是否有误。
  • 请求示例 GET https://{host}:{port}/iocm/app/sub/v1.2.0/subscriptions?appId={appId}¬ifyType={notifyType}&pageNo={pageNo}&pageSize={pageSize}Content-Type: application/jsonapp_key: ******Authorization: Bearer *****
  • 正常响应示例 Status Code: 200 OKContent-Type: application/json{ "pageNo": 0, "pageSize": 100, "totalCount": 10, "subscriptions": [ { "subscriptionId": "*******", "notifyType": "*******", "callbackUrl": "*******" } ]}
  • 请求示例 POST {callbackUrl}Content-Type: application/json{ "notifyType": "ruleEvent", "author": "*****", "ruleId": "*************", "ruleName": "name", "reasons": [ { "satisfactionTime": "yyyyMMddTHHmmssZ", "type": "******" } ], "triggerTime": "yyyyMMddTHHmmssZ", "actionsResults": [ { "type": "******", "exception": "******" } ]}
  • 请求参数 参数 必选/可选 类型 位置 描述 app_key 必选 String header 访问物联网平台的应用ID,在物联网平台创建应用时由平台分配获得。 Authorization 必选 String header 访问物联网平台的认证信息,值为“Bearer {accessToken}”,其中{accessToken}为调用鉴权接口返回的accessToken。 appId 可选 String(256) query 订阅所属的应用ID,当查询授权应用下的订阅时才需要填写。 notifyType 可选 String(256) query 通知类型,应用可以根据通知类型对消息分别进行处理。 deviceAdded(添加新设备,订阅后推送注册设备通知) bindDevice(绑定设备,订阅后推送绑定设备通知) deviceInfoChanged(设备信息变化,订阅后推送设备信息变化通知) deviceDataChanged(设备数据变化,订阅后推送设备数据变化通知) deviceDatasChanged(设备数据批量变化,订阅后推送批量设备数据变化通知) deviceCapabilitiesChanged(设备服务能力变化,订阅后推送设备服务能力变化通知) deviceCapabilitiesAdded(设备服务能力增加,订阅后推送设备服务能力增加通知) deviceCapabilitiesDeleted(设备服务能力删除,订阅后推送设备服务能力删除通知) deviceDeleted(删除设备,订阅后推送删除设备通知) messageConfirm(消息确认,订阅后推送设备消息确认通知) commandRsp(命令响应,订阅后推送设备命令响应通知) ruleEvent(规则事件,订阅后推送规则事件通知) deviceDesiredPropertiesModifyStatusChanged(设备影子状态变更,订阅后推送设备影子状态变更通知) swUpgradeStateChangeNotify(软件升级状态变更通知) swUpgradeResultNotify(软件升级结果通知) fwUpgradeStateChangeNotify(固件升级状态变更通知) fwUpgradeResultNotify(固件升级结果通知) pageNo 可选 Integer query 分页查询参数,查询结果分页显示时指定要查看的页信息,默认值0,查询第一页,取值范围为大于等于0的整数。 pageSize 可选 Integer query 分页查询参数,查询结果分页显示时每页显示的记录数,默认值为10,取值范围为大于等于1的整数。
  • SDK列表 表1提供了 OMS 服务支持的SDK列表,您可以在GitHub仓库查看SDK更新历史、获取安装包以及查看指导文档。 表1 SDK列表 编程语言 Github地址 参考文档 Java huaweicloud-sdk-java-v3 Java SDK使用指导 Python huaweicloud-sdk-python-v3 Python SDK使用指导 Go huaweicloud-sdk-go-v3 Go SDK使用指导 NodeJs huaweicloud-sdk-nodejs-v3 NodeJs SDK使用指导 PHP huaweicloud-sdk-php-v3 PHP SDK使用指导
  • SDK列表 表1提供了 RAM 服务支持的SDK列表,您可以在GitHub仓库查看SDK更新历史、获取安装包以及查看指导文档。 表1 SDK列表 编程语言 Github地址 参考文档 Java huaweicloud-sdk-java-v3 Java SDK使用指导 Python huaweicloud-sdk-python-v3 Python SDK使用指导 Go huaweicloud-sdk-go-v3 Go SDK使用指导
  • 常见问题 HiLens Studio是否已停止新购? 是,HiLens Studio已于2023/03/13 23:00(北京时间)停止新购。 HiLens Studio现有客户是否能继续使用? 已购买专业版按需套餐包或包周期的客户在2023/09/15 00:00(北京时间)前可使用HiLens Studio,不支持续订与新购。其他已开通HiLens Studio的客户,在2023/04/15 00:00(北京时间)前可使用。 HiLens Studio是否支持续费? 不支持续费。 HiLens Studio下线后是否有替换功能? 暂无替换功能。建议使用华为HiLens控制台新建技能功能进行技能开发和安装。
  • 呼叫事件通知接口 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 /** * 呼叫事件通知 * 客户平台收到 隐私保护通话 平台的呼叫事件通知的接口通知 *///呼叫事件通知样例var jsonBody = JSON.stringify({ 'eventType': 'disconnect', 'statusInfo': { 'sessionId': '1200_1827_4294967295_20190124023003@callenabler246.huaweicaas.com', 'timestamp': '2019-01-24 02:30:22', 'caller': '+86138****0022', 'called': '+86138****7021', 'stateCode': 0, 'stateDesc': 'The user releases the call.', 'subscriptionId': '****' }});console.log('jsonBody:', jsonBody);/** * 呼叫事件通知 * @brief 详细内容以接口文档为准 * @param jsonBody * @returns */function onCallEvent(jsonBody) { var jsonObj = JSON.parse(jsonBody); //将通知消息解析为jsonObj var eventType = jsonObj.eventType; //通知事件类型 if ('fee' === eventType) { console.log('EventType error:', eventType); return; } if (!jsonObj.hasOwnProperty('statusInfo')) { console.log('param error: no statusInfo.'); return; } var statusInfo = jsonObj.statusInfo; //呼叫状态事件信息 console.log('eventType:', eventType); //打印通知事件类型 //callin:呼入事件 if ('callin' === eventType) { /** * Example: 此处以解析sessionId为例,请按需解析所需参数并自行实现相关处理 * * 'timestamp': 呼叫事件发生时隐私保护通话平台的UNIX时间戳 * 'sessionId': 通话链路的标识ID * 'caller': 主叫号码 * 'called': 被叫号码 * 'subscriptionId': 绑定关系ID */ if (statusInfo.hasOwnProperty('sessionId')) { console.log('sessionId:', statusInfo.sessionId); } return; } //callout:呼出事件 if ('callout' === eventType) { /** * Example: 此处以解析sessionId为例,请按需解析所需参数并自行实现相关处理 * * 'timestamp': 呼叫事件发生时隐私保护通话平台的UNIX时间戳 * 'sessionId': 通话链路的标识ID * 'caller': 主叫号码 * 'called': 被叫号码 * 'subscriptionId': 绑定关系ID */ if (statusInfo.hasOwnProperty('sessionId')) { console.log('sessionId:', statusInfo.sessionId); } return; } //alerting:振铃事件 if ('alerting' === eventType) { /** * Example: 此处以解析sessionId为例,请按需解析所需参数并自行实现相关处理 * * 'timestamp': 呼叫事件发生时隐私保护通话平台的UNIX时间戳 * 'sessionId': 通话链路的标识ID * 'caller': 主叫号码 * 'called': 被叫号码 * 'subscriptionId': 绑定关系ID */ if (statusInfo.hasOwnProperty('sessionId')) { console.log('sessionId:', statusInfo.sessionId); } return; } //answer:应答事件 if ('answer' === eventType) { /** * Example: 此处以解析sessionId为例,请按需解析所需参数并自行实现相关处理 * * 'timestamp': 呼叫事件发生时隐私保护通话平台的UNIX时间戳 * 'sessionId': 通话链路的标识ID * 'caller': 主叫号码 * 'called': 被叫号码 * 'subscriptionId': 绑定关系ID */ if (statusInfo.hasOwnProperty('sessionId')) { console.log('sessionId:', statusInfo.sessionId); } return; } //disconnect:挂机事件 if ('disconnect' === eventType) { /** * Example: 此处以解析sessionId为例,请按需解析所需参数并自行实现相关处理 * * 'timestamp': 呼叫事件发生时隐私保护通话平台的UNIX时间戳 * 'sessionId': 通话链路的标识ID * 'caller': 主叫号码 * 'called': 被叫号码 * 'stateCode': 通话挂机的原因值 * 'stateDesc': 通话挂机的原因值的描述 * 'subscriptionId': 绑定关系ID */ if (statusInfo.hasOwnProperty('sessionId')) { console.log('sessionId:', statusInfo.sessionId); } return; }}//呼叫事件处理onCallEvent(jsonBody);
  • 挂机原因值、Q850原因值、呼叫拆线点 调用接口会产生接口调用错误码,详见API错误码处理。 调用接口成功后,如果用户在添加应用时指定了呼叫状态接收地址和呼叫话单接收地址,则隐私保护通话平台在接收到南向网元返回的呼叫状态通知和话单通知时,会主动将呼叫状态通知和话单通知推送给客户。 话单消息示例如下: POST /fee HTTP/1.1Content-Length: xx {"eventType":"fee","feeLst":[{"direction":1,"spId":"****","appKey":"****","icid":"ba171f34e6953fcd751edc77127748f4.3757285803.338666679.5","bindNum":"+86138****0022","sessionId":"1200_1827_4294967295_20190124023003@callenabler246.huaweicaas.com","subscriptionId":"****","callerNum":"+86138****0021","calleeNum":"+86138****0022","fwdDisplayNum":"+86138****0022","fwdDstNum":"+86138****7021","callInTime":"2019-01-24 02:30:03","fwdStartTime":"2019-01-24 02:30:03","fwdAlertingTime":"2019-01-24 02:30:04","fwdAnswerTime":"2019-01-24 02:30:06","callEndTime":"2019-01-24 02:30:22","fwdUnaswRsn":0,"ulFailReason":0,"sipStatusCode":0,"callOutUnaswRsn":0,"recordFlag":1,"recordStartTime":"2019-01-24 02:30:06","recordDomain":"****.com","recordBucketName":"****","recordObjectName":"****.wav","ttsPlayTimes":0,"ttsTransDuration":0,"mptyId":"****","serviceType":"003","hostName":"callenabler246.huaweicaas.com"}]} 如果某一通呼叫失败,客户可根据平台推送的挂机原因值(stateCode)、转接呼叫操作失败的Q850原因值(fwdUnaswRsn)或通话失败的拆线点(ulFailReason)查询失败原因。 在隐私保护通话平台推送的呼叫状态通知和话单通知中查询该通呼叫的“stateCode”、“fwdUnaswRsn”和“ulFailReason”。 查看附录的挂机原因值、Q850原因值、呼叫拆线点详细说明,判断呼叫失败的原因。 注:“stateCode”请在接收到的呼叫状态通知(disconnect事件)中查看,“fwdUnaswRsn”和“ulFailReason”请在接收到的话单通知中查看。
  • 短信通知接口 1 2 3 4 5 6 7 8 910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 # -*- coding: utf-8 -*-'''短信通知客户平台收到隐私保护通话平台的短信通知的接口通知'''import json#短信通知样例jsonBody = json.dumps({ 'appKey': '****', 'smsEvent': { 'smsIdentifier': '****', 'notificationMode': 'Block', 'calling': '+86138****0001', 'virtualNumber': '+86138****0000', 'event': 'Text SMS ', 'timeStamp': '2018-09-13T09:46:16.023Z' }}).encode('ascii')print(jsonBody)'''短信通知@see: 详细内容以接口文档为准@param param: jsonBody@return: '''def onSmsEvent(jsonBody): jsonObj = json.loads(jsonBody) #将通知消息解析为jsonObj if ('smsEvent' not in jsonObj): print('param error: no smsEvent.') return #print(jsonObj['appKey']) #商户应用的AppKey smsEvent = jsonObj['smsEvent'] #短信通知信息 ''' Example: 此处已解析notificationMode为例,请按需解析所需参数并自行实现相关处理 'smsIdentifier': 短信唯一标识 'notificationMode': 通知模式 'calling': 真实发送方号码 'called': 真实接收方号码 'virtualNumber': 隐私号码(X号码) 'event': 短信状态事件 'timeStamp': 短信事件发生的系统时间戳,UTC时间 'subscriptionId': 绑定ID 'smsContent': 用户发送的短信内容 ''' if ('notificationMode' in smsEvent): if ('Block' == smsEvent['notificationMode']): #收到隐私保护通话平台的短信通知,若为Block模式,请参考接口文档回消息指示下一步操作 actions = { 'operation': 'vNumberRoute', #操作类型:转发短信/丢弃短信 'message': { 'called': '+86138****7022', #真实接收方号码 'calling': '+86138****7021' #真实发送方号码 } } resp = json.dumps({'actions': [actions]}) #Block模式响应消息 print('resp: ' + resp); elif ('Notify' == smsEvent['notificationMode']): #收到隐私保护通话平台的短信通知,若为Notify模式,请回HTTP状态码为200的空消息 #statusCode = 200; print('This is AX sms Notify mode.'); else: print('notificationMode param error.');def main(): onSmsEvent(jsonBody); #短信通知处理if __name__ == '__main__': main()
  • 获取录音文件下载地址接口 1 2 3 4 5 6 7 8 91011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 # -*- coding: utf-8 -*-import timeimport uuidimport hashlibimport base64import urllibimport requests #需要先使用pip install requests命令安装依赖import hmacfrom hashlib import sha256# 必填,请参考"开发准备"获取如下数据,替换为实际值realUrl = 'https://rtcpns.cn-north-1.myhuaweicloud.com/rest/provision/voice/record/v1.0' #APP接入地址+接口访问URIAPP_KEY = "a1********" #APP_KeyAPP_SECRET = "cfc8********" #APP_Secret# 必填,通过"话单通知接口"获取recordDomain = '****.com' #录音文件存储的服务器域名fileName = '****.wav' #录音文件名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(): # 请求URL参数 formData = urllib.parse.urlencode({ 'recordDomain':recordDomain, 'fileName':fileName }) #完整请求地址 fullUrl = realUrl + '?' + formData # 请求Headers参数 header = { 'Authorization': 'AKSK realm="SDP",profile="UsernameToken",type="Appkey"', 'X-AKSK': buildAKSKHeader(appKey, appSecret), 'Content-Type': 'application/json;charset=UTF-8' } try: fo = open('bind_data.txt', 'a', encoding='utf-8') #打开本地文件 r = requests.get(fullUrl, headers=header, allow_redirects=False, verify=False) #发送请求 if(301 == r.status_code): print(r.status_code) #打印响应结果 print(r.headers['Location']) fo.write('获取录音文件下载地址:' + r.headers['Location'] + '\n') else: print(r.status_code) #打印响应结果 print(r.text) 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()
共100000条