云服务器内容精选

  • 添加应用 语音通话应用是用户使用华为云语音通话服务的载体。请根据您所开展的业务,填写应用信息: 语音通话服务默认可添加5个应用。 应用添加成功后将无法删除且无法修改“业务类型”。 请登录并进入语音通话控制台。 进入“应用管理”页面,点击“添加应用”。 按照页面提示填写应用信息。 应用名称:用户自定义。可以包含中文、英文字母、数字、下划线,不能包含空格,最大长度为64个字符。 业务类型:请根据实际业务场景选择。点此了解各个模式 注:选择业务类型后,若有以下提示,请根据提示执行不同的操作。没有提示请忽略。 提示 说明 您尚未开通权限,去开通 添加应用的业务类型与开通服务时调研表的业务类型不一致,请点击链接跳转到语音通话开通服务调研表页面,填写完成后点击“立即开通”。 业务需审核(1个工作日),请等待审核通过后再添加应用。 您的权限申请还在审核中,请等待 已在语音通话开通服务调研表页面申请开通权限,运营经理审核中,请耐心等待审核结果(1个工作日)。 您的权限申请已被驳回,驳回原因:xxx,去修改 语音通话开通服务调研表页面的某些内容不符合规范,请点击链接跳转到语音通话开通服务调研表页面后按要求修改,修改完成后点击“立即开通”,等待审核通过后(1个工作日)再添加应用。 您的权限已被取消,重新提交 请联系运营经理确认具体情况。确认完成后点击链接跳转到语音通话开通服务调研表页面,填写完成后点击“立即开通”。 业务需审核(1个工作日),请等待审核通过后再添加应用。 是否开通录音: “是否开通录音”选择“是”,并在调用语音通话接口时设置了录音参数,语音通话才会被录音。(已开通录音的应用无法进行“是否开通录音”的修改) “是否开通录音”选择“否”,后续使用应用时若想修改此项,可在该应用对应的“操作”列点击“修改”,“是否开通录音”选择“是”即可。 是否开通语音质检: 该参数仅在“是否开通录音”选择“是”时出现。 只有此处选择“是”,才会开启应用的语音质检功能。 为保证业务合规运营,您授权并同意语音通话服务随机抽查录音进行质检,我们会充分尊重您的隐私,并遵从华为云《隐私政策声明》。 随机抽检录音提示音:用于指定个性化随机抽检录音提示音。 该参数仅在“是否开通录音”和“是否开通语音质检”都选择“是”时出现。 需提前在放音文件管理页面上传并审核通过才可使用。若不设置,则选择“不播放提示音”。 呼叫状态接收地址&呼叫话单接收地址:用于接收语音通话平台推送的呼叫状态或话单的URL地址。 可填写为https://IP:Port或 域名 ,推荐使用域名。 请确保提供的地址正确,且地址前后不要有多余的空格和回车。 企业项目:已开通企业项目,才有该选项。用于设置应用所属的企业项目。若已开通企业管理但无企业项目要求,可选择默认企业项目。点此了解企业管理 企业项目的项目类型分为“商用生产项目”和“测试类项目”,若您的资源是按合同商务扣费,请选择“商用生产项目”类型的企业项目。 已创建的企业项目的类型可进入项目管理页面查看。 若已选择“测试类项目”,请参考测试类项目转商用生产项目将测试类项目转为商用生产项目 点击“提交”。 提交后,点击提示框中的“立即下载”按钮,下载并保存应用APP_Secret。 APP_Secret仅支持首次更新下载,也可在应用管理页面点击“更新”,完成身份验证后下载新的APP_Secret。 应用创建后,可以在应用管理页中查看应用信息。 当“是否开通语音质检”由“是”改为“否”时,需要运营经理审核且审核通过后才能生效,请点击“确认”后耐心等待审核结果。审核结果请在应用详情(点击应用名称左侧的)中查看,如果审核通过,则“是否开通语音质检”显示为“否”,否则仍显示为“是”。 导出应用信息 进入应用管理页面,根据业务类型、应用名称、创建时间、状态,按需筛选,点击页面右上角的按钮导出相关应用信息。
  • 前提条件 给用户组授权之前,请您了解用户组可以添加的通信云服务权限,并结合实际需求进行选择,通信云服务支持的系统权限,请参见:通信云服务系统权限。若您需要对除通信云服务之外的其它服务授权, IAM 支持服务的所有权限请参见系统权限。 进行用户组授权时,“作用范围”需要选择“区域级项目”,设置权限时: 若在指定区域(如华北-北京一)对应的项目(cn-north-1)中设置相关权限,则该权限仅对此项目生效;IAM用户登录控制台后,需要切换至指定授权区域(如华北-北京一)进行验证; 若在“所有项目”中设置权限,则该权限在所有区域项目中都生效,IAM用户登录后无需切换指定授权区域。
  • 订购号码 添加完企业信息并审核通过后,需向语音通话平台订购号码: 为防止业务高峰期并发不足,可多申请几个号码以作备用。 请登录并进入语音通话控制台。 进入“号码订购”页面,点击“订购申请”,按照页面提示填写号码订购信息。 固话号码需选择号码所属城市和数量,单击“立即购买”。 注:号码发放当日会收取当月月租费,请根据实际使用量填写号码个数。 等待资源下发。 号码资源下发需要10个工作日左右。您可在“号码订购”页面查看结果。 若号码已下发,您可以进行线下开发。
  • 查看业务统计 进入语音通话控制台,选择“业务统计”,进入业务统计页面。 选择“语音回呼”、“语音通知”或“语音验证码”,按需筛选。 可根据应用名称、业务号码、企业名称筛选指定时间(连续不超过六个月)的业务统计数据。 可点击“本月”/“上月”快速筛选查看本月/上月的业务统计数据。 查看业务统计详情。 各业务统计项如下: 语音回呼:统计业务的主被叫呼叫次数、主被叫接通次数、主被叫呼叫时长和主被叫接通率。 语音通知、语音验证码:统计业务的呼叫次数、接通次数、呼叫时长和接通率。 统计表支持添加扩展项“企业名称”统计业务数据,在统计表上方的“查看扩展数据”中选择。 导出统计详情:筛选相关数据后,点击页面右上角导出按钮即可导出统计详情。
  • 添加企业 添加应用后,需要补充完善企业认证信息(已通过华为云企业实名认证的用户仍需添加企业认证信息),可按照以下步骤进行操作: 请登录并进入语音通话控制台。 进入“企业管理”页面,点击页面右上角的“添加企业”按钮,请阅读并勾选“授权声明”(不勾选无法添加企业信息)。 勾选“授权声明”后,根据页面提示填写企业相关信息。详细可参考企业资质审核标准。若对填写内容有疑问,请联系您的客户经理确认。 营业执照、身份证照等文件支持jpg格式,单个文件最大支持2MB;“其他材料”支持jpg/png/rar/zip格式,多文件需合并为单文件上传,最大支持20MB。请确保上传的文件清晰,所有信息可见。 申请固话号码,请先下载申请函和承诺书模板,填写完成并加盖公章后上传。 如果您需要为子企业添加业务,可点击“选择已有企业”项进行选择;如果您需要新增企业,可直接在文本框中填写企业名称。 点击“提交”,完成添加企业。 审核一般需要2个工作日,企业资料提交后可在“企业管理”页中查看企业审核状态、修改已提交的企业信息或者下载企业资料。 只有审核通过的企业才可以订购号码。 导出企业信息 进入企业管理页面,根据业务类型、企业名称、状态,按需筛选,点击页面右上角的按钮导出相关企业信息。
  • 语音通知&语音验证码 尊敬的客户:欢迎您使用语音通话服务。如下为服务指南: 获取接口文档: 请访问语音通知API或语音验证码场景API,获取PDF版接口文档。 获取代码样例: 请访问语音通知代码样例,获取语音通知代码样例。 请访问语音验证码代码样例,获取语音验证码代码样例。 建议您先下载Node.js Demo完成调测熟悉接口,再结合接口文档参考代码样例进行其他语言开发。 语音模板&音频格式要求: 请参考语音通知模板配置规则、放音文件音频格式要求。 您需要按照以上模板规则,在控制台上传模板或者放音文件,我们的工作人员审核通过后,就可以正常调用了。 常见问题: 请参考语音通话常见问题。
  • 开通服务 感谢您对语音通话服务的信任,请使用通过实名认证的企业账号登录华为云。 访问语音通话服务产品首页,点击“立即使用”进入“开通语音通话服务”页面。 您也可以直接访问“开通语音通话服务”页面。 勾选“我已阅读并同意《语音通话服务使用声明》”,然后点击“立即申请”。 进入调研表页面,请根据您的业务实际使用情况填写调研表。 填写完成点击“立即开通”,完成开通服务。 名称 说明 业务类型 请根据实际使用情况选择。 企业名称 填写全称并和营业执照的名称保持一致。 业务承载方 请选择填写业务承载方和其具体信息。 APP:填写APP名称。 小程序:填写小程序名称。 网站:填写网站,示例:www.yourwebsite.com。 公众号:填写公众号名称。 H5界面:填写产品名称。 其他:填写具体名称。 企业性质 请根据实际情况选择。 渠道:封装能力为下级客户提供服务,场景多样化。 SaaS:自研系统或软件中使用语音通话功能,且不独立售卖,仅作为增值能力。 直客:仅自用业务使用,且业务场景单一。 所属行业 请根据实际情况选择行业,选择其他时请填写具体行业。 业务场景 需要大概描述业务场景,请根据实际情况填写。 使用话术 需要大概描述话术,请根据实际情况填写。 是否使用过同类产品 请根据实际情况选择。 预估日通话分钟 请根据实际情况选择。 业务的开通申请将在1~2个工作日审核完成,请耐心等待审核结果。 服务开通后您会收到短信通知,后续根据业务使用进行扣费,若费用不够,请及时在华为云账户中充值。具体可参考如何给账户充值。 注:如果您后期想开通语音通话平台提供的其他服务,点击控制台-总览-业务类型管理。 根据您要开通的服务类型,“操作”列选择“去开通”,即可进入调研表页面,请根据您的业务实际使用情况填写调研表。
  • 错误码处理 调用语音通话相关接口会产生接口调用错误码,响应示例如下: HTTP/1.1 200 OK Content-Type: application/json;charset=UTF-8 { "resultcode":"0", "resultdesc":"Success", "sessionId":"1202_566_0_20161228102743@callenabler.home1.com" } resultcode参数处理 参数取值 英文描述 中文描述 处理建议 0 Success. 请求成功 无需处理。 1010001 Internal system error. 系统错误。 联系华为云客服处理。 1010002 Invalid request. 非法请求。 检查请求携带的参数格式是否都合法。 1010003 Invalid app_key. 无效的app_key。 检查请求携带的app_key是否填写正确,app_key从应用管理页面获取,若填写正确,请在应用管理页面检查请求携带的app_key所属应用状态是否正常。 1010006 Invalid Rest API. 无效的Rest API。 请参照接口文档中的请求方法检查对应接口的请求方法填写是否正确。 1010007 The ativeState of User is not ACTIVATING. 用户状态未激活。 请检查app_key所属的华为云账户是否处于欠费状态,若处于欠费状态,请参考华为云账户充值完成充值,若没有处于欠费状态,请联系华为云客服处理。 1010008 The status of the app_key is unavailable. app_key被暂停使用。 请在应用管理页面检查请求携带的app_key所属应用状态是否正常。 1010009 No more APIs can be invoked. 刷新授权API:app_secret无效。 其他API:API达到调用上限。 刷新授权API:输入正确的app_secret,app_secret从“应用管理”页面获取。 其他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所属应用状态是否正常。 1010013 Time out limit. 时间超出限制。 请确认X-AKSK鉴权时,生成随机数的时间与发送请求时的本地时间不能相差太大(具体差值请与管理员确认)。 1010021 Application unavailable. 应用不可用。 请在应用管理页面检查请求携带的app_key所属应用状态是否正常。 1010022 Invalid verification code. 验证码不合法。 请检查verifyCode参数的填写是否合法。 1010023 Invalid display number. 固话号码不合法。 检查displayNbr和displayCalleeNbr参数的填写是否合法,与号码管理页面的“固话号码”保持一致。若合法,请确认该号码是否已申请并下发。申请号码在号码订购页面申请,号码下发后可在号码管理页面查看。 1010024 Invalid caller number. 主叫号码不合法。 检查callerNbr参数的填写是否合法,若合法,请联系管理员确认。 1010028 The API is not allowed to be invoked. 此API已禁止调用。 请将请求中的version参数改为v2.0并修改其余相关参数,再重新调用该API。 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和业务号码未绑定。 1012002 The template ID is not approved. 模板ID审核未通过。 请在控制台语音模板管理页面确认该模板ID是否已审核通过。 1012003 The template ID does not exist. 模板ID不存在。 请在控制台语音模板管理页面确认该模板ID是否已添加。 1012004 The template ID does not exist. templateParas的参数个数与模板的变量个数不一致。 请检查templateParas携带的变量值个数和templateId对应的模板内容中变量的个数是否一致。 1012005 %s of templateParas does not meet template requirements. 参数templateParas中的%s不符合模板定义的要求。 请检查templateParas携带的变量值格式与长度是否符合templateId对应的模板内容中变量的定义。 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. 呼叫数超过APP的阈值,app_key是{},策略名是{}。 请联系华为云客服确认应用呼叫数量限制。 1013003 Calls exceed the display number limit. 呼叫数超过号码{}的阈值,策略名是{}。 请联系华为云客服确认显示号码呼叫数量限制。 注:若是全局呼叫频次策略组,则不返回具体号码。 1013004 Callee in blacklist. 用户{}在黑名单里面,策略名是{}。 请联系华为云客服确认被叫黑名单限制。 1013011 Callee is not on the whitelist. 被叫用户不在白名单中。 请联系华为云客服确认被叫号码白名单限制。 1016001 The record does not exist. 记录不存在。 检查请求携带的callerNbr和app_key是否填写正确。app_key从应用管理页面获取。并确保使用该callerNbr和app_key调用过“语音回呼场景API”。 1020001 Parameter error. 参数错误。 检查请求携带的参数格式是否都合法。 1020002 Internal error. 内部错误。 请联系华为云客服处理。 1020003 Parameter error. 参数错误。 根据API接口文档的参数描述和要求,排查已开发的代码中参数设置是否有效。 1020150 Invalid app_key. app_key无效。 检查请求携带的app_key是否填写正确,app_key从应用管理页面获取,若填写正确,请在应用管理页面检查请求携带的app_key所属应用状态是否正常。 1020151 The bindNum is invalid. 业务号码无效。 业务号码无效,请联系管理员处理。 1020152 Invalid sessionId. sessionId无效。 检查请求携带的sessionId是否填写正确。语音回呼的sessionId是调用“语音回呼场景API”的成功响应消息的sessionId参数值,也可通过呼叫状态和话单通知API获取。 1020154 Insufficient voice ports. 语音端口不足。 请稍等一分钟后再试,并联系华为云客服申请扩容语音端口。 1020165 The number of app_key voice call ports exceeds the upper limit. 超出app_key语音呼叫端口数限制。 请稍等一分钟后再试,并联系华为云客服为该app_key对应的应用申请更多的端口配额。 1020166 The app client ip is not in ip white list. 对端app IP不在白名单列表中。 联系华为云客服检查IP白名单是否配置正确。 1020176 Authentication failed, try again later. 鉴权失败,稍后重试。 IP因鉴权失败次数过多导致被拉黑,请30分钟后重试,或联系华为云客服申请放通该IP。 1023001 Internal error. 内部错误。 请联系管理员处理。 1023002 Response timeout. 响应超时。 重新发送一次请求,若依然返回响应超时,请联系华为云客服处理。 1023006 Authorization not contained in the HTTP header. HTTP消息头未找到Authorization字段。 请检查HTTP消息头中是否携带了Authorization字段。 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属性。 - - 获取录音文件下载地址API:成功响应,请从Location头域中获取录音文件下载地址。
  • 挂机原因值、Q850原因值、呼叫拆线点 调用语音通话相关接口会产生接口调用错误码,详见API错误码。 调用接口成功后,如果“statusUrl”和“feeUrl”参数指定了客户接收状态上报的URL和接收话单上报的URL,或在添加应用时指定了呼叫状态接收地址和呼叫话单接收地址,则语音通话平台在接收到南向网元返回的呼叫状态通知和话单通知时,会主动将呼叫状态通知和话单通知推送给客户。 消息示例如下: POST /status HTTP/1.1Content-Length: xx {"eventType":"fee","feeLst":[{"direction":0,"spId":"CaaS_Test_01","appKey":"ka4k******YnEm2","icid":"CAE-20190124110424-12019775","bindNum":"+8675512****78","sessionId":"1201_612_4294967295_20190124030424@callenabler245.huaweicaas.com","callerNum":"+86138****0022","calleeNum":"+86138****0021","fwdDisplayNum":"+86138****0022","fwdDstNum":"+86138****7021","fwdStartTime":"2019-01-24 03:04:31","fwdAlertingTime":"2019-01-24 03:04:36","fwdAnswerTime":"2019-01-24 03:04:38","callEndTime":"2019-01-24 03:04:49","fwdUnaswRsn":0,"ulFailReason":0,"sipStatusCode":0,"callOutStartTime":"2019-01-24 03:04:24","callOutAlertingTime":"2019-01-24 03:04:27","callOutAnswerTime":"2019-01-24 03:04:31","callOutUnaswRsn":0,"recordFlag":0,"ttsPlayTimes":0,"ttsTransDuration":0,"serviceType":"002","hostName":"callenabler245.huaweicaas.com"}]} 挂机原因值、Q850原因值、呼叫拆线点请参考通话挂机原因值说明。
  • 制作放音文件 本章节中的界面截图以GoldWave v6.55版本为例,实际操作时请以软件实际界面为准。 平台要求文件名称只能由数字、字母和特殊字符“-”、“_”、“.”、“@”组成,例如:wait_voice1.wav。若文件名称不符合要求,请更改文件名。 创建批处理。 添加需要处理的文件/文件夹,因最终生成的文件要求不大于2M,建议源文件不大于6M。 设置转换文件的格式(A-Law、8000 Hz、单声道)。 设置输出文件的路径,点击“Begin”,开始转换文件。 转换完成后,点击“OK”,去目标文件夹获取转换后的Wave文件。
  • “呼叫状态通知API”代码样例 # -*- coding: utf-8 -*-'''呼叫事件通知客户平台收到语音通话平台的呼叫事件通知的接口通知'''import json#呼叫事件通知样例jsonBody = json.dumps({ 'eventType': 'callout', 'statusInfo': { 'sessionId': '1201_612_4294967295_20190124030424@callenabler245.huaweicaas.com', 'timestamp': '2019-01-24 03:04:24', 'caller': '+86138*******2', 'called': '+86138*******1', 'userData': 'customerId123' }}).encode('ascii')print(jsonBody)'''呼叫事件通知@see: 详细内容以接口文档为准@param param: jsonBody@return: '''def onCallEvent(jsonBody): jsonObj = json.loads(jsonBody) #将通知消息解析为jsonObj eventType = jsonObj['eventType'] #通知事件类型 if ('fee' == eventType): print('EventType error: ' + eventType) return if ('statusInfo' not in jsonObj): print('param error: no statusInfo.') return statusInfo = jsonObj['statusInfo'] #呼叫状态事件信息 print('eventType: ' + eventType) #打印通知事件类型 #callout:呼出事件 if ('callout' == eventType): ''' Example: 此处以解析sessionId为例,请按需解析所需参数并自行实现相关处理 'timestamp': 该呼叫事件发生时语音通话平台的UNIX时间戳 'userData': 用户附属信息 'sessionId': 通话链路的标识ID 'caller': 主叫号码 'called': 被叫号码 ''' if ('sessionId' in statusInfo): print('sessionId: ' + statusInfo['sessionId']) return #alerting:振铃事件 if ('alerting' == eventType): ''' Example: 此处以解析sessionId为例,请按需解析所需参数并自行实现相关处理 'timestamp': 该呼叫事件发生时语音通话平台的UNIX时间戳 'userData': 用户附属信息 'sessionId': 通话链路的标识ID 'caller': 主叫号码 'called': 被叫号码 ''' if ('sessionId' in statusInfo): print('sessionId: ' + statusInfo['sessionId']) return #answer:应答事件 if ('answer' == eventType): ''' Example: 此处以解析sessionId为例,请按需解析所需参数并自行实现相关处理 'timestamp': 该呼叫事件发生时语音通话平台的UNIX时间戳 'userData': 用户附属信息 'sessionId': 通话链路的标识ID 'caller': 主叫号码 'called': 被叫号码 ''' if ('sessionId' in statusInfo): print('sessionId: ' + statusInfo['sessionId']) return #collectInfo:放音收号结果事件,仅应用于语音通知场景 if ('collectInfo' == eventType): ''' Example: 此处以解析digitInfo为例,请按需解析所需参数并自行实现相关处理 'timestamp': 该呼叫事件发生时语音通话平台的UNIX时间戳 'sessionId': 通话链路的标识ID 'digitInfo': 放音收号场景中,语音通话平台对开发者进行放音收号操作的结果描述 ''' if ('digitInfo' in statusInfo): print('digitInfo: ' + statusInfo['digitInfo']) return #disconnect:挂机事件 if ('disconnect' == eventType): ''' Example: 此处以解析sessionId为例,请按需解析所需参数并自行实现相关处理 'timestamp': 该呼叫事件发生时语音通话平台的UNIX时间戳 'userData': 用户附属信息 'sessionId': 通话链路的标识ID 'caller': 主叫号码 'called': 被叫号码 'partyType': 挂机的用户类型,仅在语音回呼场景携带 'stateCode': 通话挂机的原因值 'stateDesc': 通话挂机的原因值的描述 ''' if ('sessionId' in statusInfo): print('sessionId: ' + statusInfo['sessionId']) returnif __name__ == '__main__': onCallEvent(jsonBody) #呼叫事件处理
  • “呼叫状态通知API”代码样例 /** * 呼叫事件通知 * 客户平台收到RTC业务平台的呼叫事件通知的接口通知 *///呼叫事件通知样例var jsonBody = JSON.stringify({ 'eventType': 'callout', 'statusInfo': { 'sessionId': '1201_612_4294967295_20190124030424@callenabler245.huaweicaas.com', 'timestamp': '2019-01-24 03:04:24', 'caller': '+8613800000022', 'called': '+8613800000021' }});console.log('jsonBody:', jsonBody);/** * 呼叫事件通知 * @brief 详细内容以接口文档为准 * @param jsonBody */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); //打印通知事件类型 //callout:呼出事件 if ('callout' === eventType) { /** * Example: 此处以解析sessionId为例,请按需解析所需参数并自行实现相关处理 * * 'timestamp': 该呼叫事件发生时RTC业务平台的UNIX时间戳 * 'userData': 用户附属信息 * 'sessionId': 通话链路的标识ID * 'caller': 主叫号码 * 'called': 被叫号码 */ if (statusInfo.hasOwnProperty('sessionId')) { console.log('sessionId:', statusInfo.sessionId); } return; } //alerting:振铃事件 if ('alerting' === eventType) { /** * Example: 此处以解析sessionId为例,请按需解析所需参数并自行实现相关处理 * * 'timestamp': 该呼叫事件发生时RTC业务平台的UNIX时间戳 * 'userData': 用户附属信息 * 'sessionId': 通话链路的标识ID * 'caller': 主叫号码 * 'called': 被叫号码 */ if (statusInfo.hasOwnProperty('sessionId')) { console.log('sessionId:', statusInfo.sessionId); } return; } //answer:应答事件 if ('answer' === eventType) { /** * Example: 此处以解析sessionId为例,请按需解析所需参数并自行实现相关处理 * * 'timestamp': 该呼叫事件发生时RTC业务平台的UNIX时间戳 * 'userData': 用户附属信息 * 'sessionId': 通话链路的标识ID * 'caller': 主叫号码 * 'called': 被叫号码 */ if (statusInfo.hasOwnProperty('sessionId')) { console.log('sessionId:', statusInfo.sessionId); } return; } //collectInfo:放音收号结果事件,仅应用于语音通知场景 if ('collectInfo' === eventType) { /** * Example: 此处以解析digitInfo为例,请按需解析所需参数并自行实现相关处理 * * 'timestamp': 该呼叫事件发生时RTC业务平台的UNIX时间戳 * 'sessionId': 通话链路的标识ID * 'digitInfo': 放音收号场景中,RTC业务平台对开发者进行放音收号操作的结果描述 */ if (statusInfo.hasOwnProperty('digitInfo')) { console.log('digitInfo:', statusInfo.digitInfo); } return; } //disconnect:挂机事件 if ('disconnect' === eventType) { /** * Example: 此处以解析sessionId为例,请按需解析所需参数并自行实现相关处理 * * 'timestamp': 该呼叫事件发生时RTC业务平台的UNIX时间戳 * 'userData': 用户附属信息 * 'sessionId': 通话链路的标识ID * 'caller': 主叫号码 * 'called': 被叫号码 * 'partyType': 挂机的用户类型,仅在语音回呼场景携带 * 'stateCode': 通话挂机的原因值 * 'stateDesc': 通话挂机的原因值的描述 */ if (statusInfo.hasOwnProperty('sessionId')) { console.log('sessionId:', statusInfo.sessionId); } return; }}//呼叫事件处理onCallEvent(jsonBody);
  • “呼叫状态通知API”代码样例 # -*- coding: utf-8 -*-'''呼叫事件通知客户平台收到语音通话平台的呼叫事件通知的接口通知'''import json#呼叫事件通知样例jsonBody = json.dumps({ 'eventType': 'callout', 'statusInfo': { 'sessionId': '1201_612_4294967295_20190124030424@callenabler245.huaweicaas.com', 'timestamp': '2019-01-24 03:04:24', 'caller': '+86138*******2', 'called': '+86138*******1', 'userData': 'customerId123' }}).encode('ascii')print(jsonBody)'''呼叫事件通知@see: 详细内容以接口文档为准@param param: jsonBody@return: '''def onCallEvent(jsonBody): jsonObj = json.loads(jsonBody) #将通知消息解析为jsonObj eventType = jsonObj['eventType'] #通知事件类型 if ('fee' == eventType): print('EventType error: ' + eventType) return if ('statusInfo' not in jsonObj): print('param error: no statusInfo.') return statusInfo = jsonObj['statusInfo'] #呼叫状态事件信息 print('eventType: ' + eventType) #打印通知事件类型 #callout:呼出事件 if ('callout' == eventType): ''' Example: 此处以解析sessionId为例,请按需解析所需参数并自行实现相关处理 'timestamp': 该呼叫事件发生时语音通话平台的UNIX时间戳 'userData': 用户附属信息 'sessionId': 通话链路的标识ID 'caller': 主叫号码 'called': 被叫号码 ''' if ('sessionId' in statusInfo): print('sessionId: ' + statusInfo['sessionId']) return #alerting:振铃事件 if ('alerting' == eventType): ''' Example: 此处以解析sessionId为例,请按需解析所需参数并自行实现相关处理 'timestamp': 该呼叫事件发生时语音通话平台的UNIX时间戳 'userData': 用户附属信息 'sessionId': 通话链路的标识ID 'caller': 主叫号码 'called': 被叫号码 ''' if ('sessionId' in statusInfo): print('sessionId: ' + statusInfo['sessionId']) return #answer:应答事件 if ('answer' == eventType): ''' Example: 此处以解析sessionId为例,请按需解析所需参数并自行实现相关处理 'timestamp': 该呼叫事件发生时语音通话平台的UNIX时间戳 'userData': 用户附属信息 'sessionId': 通话链路的标识ID 'caller': 主叫号码 'called': 被叫号码 ''' if ('sessionId' in statusInfo): print('sessionId: ' + statusInfo['sessionId']) return #collectInfo:放音收号结果事件,仅应用于语音通知场景 if ('collectInfo' == eventType): ''' Example: 此处以解析digitInfo为例,请按需解析所需参数并自行实现相关处理 'timestamp': 该呼叫事件发生时语音通话平台的UNIX时间戳 'sessionId': 通话链路的标识ID 'digitInfo': 放音收号场景中,语音通话平台对开发者进行放音收号操作的结果描述 ''' if ('digitInfo' in statusInfo): print('digitInfo: ' + statusInfo['digitInfo']) return #disconnect:挂机事件 if ('disconnect' == eventType): ''' Example: 此处以解析sessionId为例,请按需解析所需参数并自行实现相关处理 'timestamp': 该呼叫事件发生时语音通话平台的UNIX时间戳 'userData': 用户附属信息 'sessionId': 通话链路的标识ID 'caller': 主叫号码 'called': 被叫号码 'partyType': 挂机的用户类型,仅在语音回呼场景携带 'stateCode': 通话挂机的原因值 'stateDesc': 通话挂机的原因值的描述 ''' if ('sessionId' in statusInfo): print('sessionId: ' + statusInfo['sessionId']) returnif __name__ == '__main__': onCallEvent(jsonBody) #呼叫事件处理
  • “语音验证码场景API”代码样例 /*jshint esversion: 6 */var https = require('https');var data = require('./data.js');var util = require('./reqUtil.js');/** * voiceVerificationCodeAPI * @param displayNbr * @param calleeNbr * @param languageType * @param preTone * @param verifyCode * @returns */function voiceVerificationCodeAPI(displayNbr, calleeNbr, languageType, preTone, verifyCode) { if(displayNbr === undefined || displayNbr === null || calleeNbr === undefined || calleeNbr === null) { return; } if(languageType === undefined || languageType === null || preTone === undefined || preTone === null) { return; } if(languageType === verifyCode || languageType === verifyCode) { return; } var method = 'POST'; var uri = '/rest/httpsessions/callVerify/v1.0'; var xaksk = util.buildAKSKHeader(data.data.callverify_appid, data.data.callverify_secret); var options = util.createOptions(method, uri, null, xaksk); var body = { /* 必填参数 */ 'displayNbr': displayNbr,//主叫用户手机终端的来电显示号码。 'calleeNbr': calleeNbr,//被叫用户终端的来电显示号码。 'languageType': languageType,//验证码播放的语言类型。 'preTone': preTone,//播放语音验证码之前需要播放的放音文件名 'verifyCode': verifyCode//验证码:只支持0~9的数字,最大8位。 /* 选填参数 */// 'bindNbr': '+86123456789', //CallEnabler业务号码,即绑定号码// 'posTone': 'postone.wav', //播放语音验证码之后需要播放的放音文件名// 'times': 3, //播放次数:0~9// 'statusUrl': 'aHR0cDovLzIxOC40LjMzLjU1Ojg4ODgvdGVzdA==', //要获取通话状态需要在请求中加入statusUrl// 'feeUrl': 'aHR0cDovLzIxOC40LjMzLjU1Ojg4ODgvdGVzdA==', //要获取话单需要在请求中加入feeUrl// 'returnIdlePort': 'false', //指示是否需要返回平台空闲呼叫端口数量// 'userData': 'customerId123' //设置用户的附属信息 }; var req = https.request(options, function (res) { var resHeaders = JSON.stringify(res.headers); res.setEncoding('utf8'); res.on('data', function (chunk) { console.log(chunk); }); }); req.on('error', function(e) { console.error('problem with request: ' + e); }); console.log(JSON.stringify(body)); req.write(JSON.stringify(body)); req.end();}voiceVerificationCodeAPI('+8653159511234', '+8613500000001', 2, 'test.wav', '1234');
  • “呼叫状态通知API”代码样例 /** * 呼叫事件通知 * 客户平台收到RTC业务平台的呼叫事件通知的接口通知 *///呼叫事件通知样例var jsonBody = JSON.stringify({ 'eventType': 'callout', 'statusInfo': { 'sessionId': '1201_612_4294967295_20190124030424@callenabler245.huaweicaas.com', 'timestamp': '2019-01-24 03:04:24', 'caller': '+8613800000022', 'called': '+8613800000021' }});console.log('jsonBody:', jsonBody);/** * 呼叫事件通知 * @brief 详细内容以接口文档为准 * @param jsonBody */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); //打印通知事件类型 //callout:呼出事件 if ('callout' === eventType) { /** * Example: 此处以解析sessionId为例,请按需解析所需参数并自行实现相关处理 * * 'timestamp': 该呼叫事件发生时RTC业务平台的UNIX时间戳 * 'userData': 用户附属信息 * 'sessionId': 通话链路的标识ID * 'caller': 主叫号码 * 'called': 被叫号码 */ if (statusInfo.hasOwnProperty('sessionId')) { console.log('sessionId:', statusInfo.sessionId); } return; } //alerting:振铃事件 if ('alerting' === eventType) { /** * Example: 此处以解析sessionId为例,请按需解析所需参数并自行实现相关处理 * * 'timestamp': 该呼叫事件发生时RTC业务平台的UNIX时间戳 * 'userData': 用户附属信息 * 'sessionId': 通话链路的标识ID * 'caller': 主叫号码 * 'called': 被叫号码 */ if (statusInfo.hasOwnProperty('sessionId')) { console.log('sessionId:', statusInfo.sessionId); } return; } //answer:应答事件 if ('answer' === eventType) { /** * Example: 此处以解析sessionId为例,请按需解析所需参数并自行实现相关处理 * * 'timestamp': 该呼叫事件发生时RTC业务平台的UNIX时间戳 * 'userData': 用户附属信息 * 'sessionId': 通话链路的标识ID * 'caller': 主叫号码 * 'called': 被叫号码 */ if (statusInfo.hasOwnProperty('sessionId')) { console.log('sessionId:', statusInfo.sessionId); } return; } //collectInfo:放音收号结果事件,仅应用于语音通知场景 if ('collectInfo' === eventType) { /** * Example: 此处以解析digitInfo为例,请按需解析所需参数并自行实现相关处理 * * 'timestamp': 该呼叫事件发生时RTC业务平台的UNIX时间戳 * 'sessionId': 通话链路的标识ID * 'digitInfo': 放音收号场景中,RTC业务平台对开发者进行放音收号操作的结果描述 */ if (statusInfo.hasOwnProperty('digitInfo')) { console.log('digitInfo:', statusInfo.digitInfo); } return; } //disconnect:挂机事件 if ('disconnect' === eventType) { /** * Example: 此处以解析sessionId为例,请按需解析所需参数并自行实现相关处理 * * 'timestamp': 该呼叫事件发生时RTC业务平台的UNIX时间戳 * 'userData': 用户附属信息 * 'sessionId': 通话链路的标识ID * 'caller': 主叫号码 * 'called': 被叫号码 * 'partyType': 挂机的用户类型,仅在语音回呼场景携带 * 'stateCode': 通话挂机的原因值 * 'stateDesc': 通话挂机的原因值的描述 */ if (statusInfo.hasOwnProperty('sessionId')) { console.log('sessionId:', statusInfo.sessionId); } return; }}//呼叫事件处理onCallEvent(jsonBody);