更新时间:2024-09-24 GMT+08:00
回调接口说明
- 座席双呼的接通回调URL只有一种配置方式,通过界面配置:租户管理员选择“接通回调url”。 ,设置
- 座席双呼的挂机回调URL有两种配置方式:
- 通过界面配置:租户管理员选择“挂机回调url”。 ,设置
- 通过创建呼叫 (V1.0.0)接口传入:调用创建呼叫 (V1.0.0)接口时传入请求参数callBackUrl。
- 通过界面配置挂机回调URL的方式,URL鉴权方式为不鉴权,不鉴权可能有安全风险,请谨慎使用。
- 如果两种方式都配置了挂机回调URL,将选择通过创建呼叫 (V1.0.0)接口传入的callBackUrl。
座席双呼回调接口签名算法说明
- 签名算法(鉴权)使用前提条件
当通过创建呼叫 (V1.0.0)接口传入挂机回调URL,并在回调url配置界面中“请选择回调URL鉴权方式”选择了“共享密钥签名”,请参考本节进行签名验证。
- 鉴权过程
- 系统在挂机回调URL时,如果符合签名条件,接口入参会添加以下字段:
timestamp:当前时间戳,
nonce:随机字符串,
signature:鉴权签名。
- 客户侧收到回调后,需要根据签名算法生成鉴权签名,并与入参的signature进行校验,若一致表示验证通过。
- 系统在挂机回调URL时,如果符合签名条件,接口入参会添加以下字段:
- 签名(signature)字符串生成方式:
- 参考代码
import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; private String generateSinature(TreeMap<String, Object> callbackParametters, String nonce, long timestamp, String appSecret) { // appSecret_timestamp_nonce_参数 // {"b":"2", "a":1, "d":"null", "c":""}排序拼接后的字符串是:"a=1,b=2,c=,d=null" String paramStr = callbackParametters.toString().replace(" ", ""); String toSignString = appSecret + "_" + timestamp + "_" + nonce + "_" + paramStr.substring(1, paramStr.length() - 1); return Base64.encodeBase64String(tokenByHmacSha256(toSignString.getBytes(StandardCharsets.UTF_8), appSecret)); } public static byte[] tokenByHmacSha256(byte[] dataBytes, String appSecret) { try { Mac mac = Mac.getInstance("HmacSHA256"); byte[] key = appSecret.getBytes(StandardCharsets.UTF_8); SecretKeySpec secretKey = new SecretKeySpec(key, "HmacSHA256"); mac.init(secretKey);return mac.doFinal(dataBytes); } catch (Exception e) { LOGGER.error("tokenByHmacSha256 failed: ", e);throw new RuntimeException("HmacSha256 run failed."); } }
父主题: 回调接口