本文档提供了两种针对在实际外呼时不允许明文传输的解决方案,详细介绍如何对外呼被叫号码进行加密。
背景
部分客户对于被叫号码管控较严格,使用外呼系统时,不允许明文传输。
针对此类客户,有2种解决方案。
方案一:客户自有呼叫中心
客户有自己的呼叫中心,且与外呼系统完成了SIP对接。外呼时,通过客户自己呼叫中心实现呼叫。
此类客户方案建议如下:
客户使用自有加密逻辑,加密被叫号码。
调用外呼系统接口,上传加密后的被叫号码。
外呼系统调用客户呼叫中心,传递被叫号码。
客户呼叫中心解密后,进行外呼。
此方案的优势在于加解密逻辑完全由客户自己控制,不支持外部解密。注意:被叫号码长度最大限制64个字符。
方案二:客户无呼叫中心,使用第三方呼叫中心
客户没有自己的呼叫中心,依赖外部呼叫中心实现呼叫。这种情况,客户无法自行控制被叫号码的加解密,可以使用外呼系统加密逻辑,保障数据安全。
此方案外呼系统使用密文进行传输、存储。外呼系统仅在发起呼叫时,于程序内存中解密出明文被叫号码进行外呼。
外呼系统加解密逻辑说明

外呼系统被叫号码加密逻辑如下:
1.客户端调用外呼系统API,创建非对称加密算法密钥。基于阿里云主账号ID,一个主账号ID允许创建一个非对称算法密钥。(参考:创建非对称加密密钥对)
2.外呼系统会通过阿里云KMS创建非对称密钥,其中私钥统一由KMS管理,避免泄露。
3.客户端调用外呼系统API,获取非对称加密算法公钥,用于后续数据加密使用。(参考:获取非对称加密公钥)
4.外呼系统通过KMS获取公钥,返回给客户端。
5.客户端数据加密逻辑
客户端生成随机AES密钥
客户端使用AES密钥加密被叫号码
客户端使用RSA公钥加密AES密钥
客户端将加密后的被叫号码以及加密后的AES密钥,通过AssignJobs接口传给外呼系统
说明在AssignJobs接口中加密后的被叫号码还是传入到contacts被叫人联系信息中的phoneNumber字段,加密后的AES密钥则传入到contact中的encryptedAesKey字段,
具体方法请参考下面的Demo。
6.调用外呼系统API发起外呼任务(批量创建外呼任务)
7.外呼系统调用KMS解密接口,使用KMS中的RSA私钥解密数据,获取到AES的明文密钥。
8.外呼系统使用AES密钥解密出明文被叫号码,执行外呼。
9.注意:外呼系统中所有被叫号码以密文方式存储,如需通过被叫号码查询对话记录,请使用加密后的被叫号码进行搜索。
Demo
客户端加密方法参考如下: