
当管理员启用预约回呼功能后,可以设置以下三个参数:
提前分钟: X 分钟;系统会在预约时间之前X分钟开始进行分配;
过期时间: N 分钟;系统会将预约回呼时间之后N分钟还没有处理的回呼记录设置为过期,而不在处理。
坐席处理超时市场:M分钟;坐席在接受到预约分配后M分钟没有处理则系统后自动收回并重新分配给下个坐席(这个是针对坐席组回呼的功能,对于专属坐席预约回呼则无此限制)。
在此模块中您可以
- 根据您的业务需求来对坐席的通话行为进行设置,以提高坐席的工作效率;
- 设置用户呼入或者 AI 自动拨号后转接坐席的策略,以使得系统更符合您的业务;
- 号码加密等其它功能设置;

可以设置坐席登录系统后的默认坐席状态
开启自动接听后,坐席在线且切换状态为示闲时(坐席操作可见坐席操作手册),会自动接起来电
开启话后整理后,
可以预先定义常用的快捷标签,坐席进行业务记录时可以快速选用


当用户来电被加入队列等待坐席接听时间,用户电话最多在队列中挂起的时长
将呼入电话分配到某坐席,但该坐席超过设定时长未能接起时,会将该通话转接到其它坐席振铃
设置当所有坐席状态全忙或者处于休息等非空闲状态时如何处理来电
设置当所有坐席均不在线时如何处理来电
当有多个坐席可用时,设置分配电话的策略(对于同振响铃方式该设置无效)
设置 AI 外呼接通后,将用户通话转接到坐席真人接起的提示
(1)默认未坐席接通后开始路由。
(2)对于 AI 外呼任务,会从AI 拨打并且用户接起后开始录音(方便检验对于语音信箱的识别结果)

当管理员启用预约回呼功能后,可以设置以下三个参数:
提前分钟: X 分钟;系统会在预约时间之前X分钟开始进行分配;
过期时间: N 分钟;系统会将预约回呼时间之后N分钟还没有处理的回呼记录设置为过期,而不在处理。
坐席处理超时市场:M分钟;坐席在接受到预约分配后M分钟没有处理则系统后自动收回并重新分配给下个坐席(这个是针对坐席组回呼的功能,对于专属坐席预约回呼则无此限制)。

呼出策略中可以设置AI 预测式外呼任务的振铃时长,超出设定时间后 AI预测式外呼能够自动放弃呼叫,挂断外呼电话;

选择离坐席所在地区更近的坐席接入点,能够获得更好的通话质量

开启后系统内所有号码将会加密使用,您需要按照系统提供的加密盐值进行加密使用
加密工具:
关闭时,需要输入加密后的号码才可以呼出;开启后,手动拨号时可以选择其拨号模式:
1.密文模式:输入加密后的号码可成功呼出
2.原始模式:输入真实号码后将自动加密后呼出


加解密代码示例:
public class CryptoNumberUtil {
private static Logger logger = LoggerFactory.getLogger(CryptoNumberUtil.class);
/**
* 加密
* @param phone
* @param salt
* @return
*/
public static String encode(Long phone, Long salt) {
String phoneStr = phone + "";
int len = phoneStr.length();
String prefix = "";
int suffix = 0;
if (len > 8) {
prefix = phoneStr.substring(0, len - 8);
phoneStr = phoneStr.substring(len - 8);
phone = Long.valueOf(phoneStr);
suffix = 8 - phone.toString().length();
} else {
phone = Long.valueOf(phoneStr);
suffix = len - phone.toString().length();
}
// 假设此处phone=0x1234_5678
Long newPhone = (phone & 0xff000000); /// newphone=0x1200_0000
newPhone += (phone & 0x0000ff00) << 8; //(phone & 0x0000ff00) << 8 = 0x0000_5600 << 8 = 0x0056_0000
newPhone += (phone & 0x00ff0000) >> 8; //(phone & 0x00ff0000) >> 8 = 0x0034_0000 >> 8 = 0x0000_3400
newPhone += (phone & 0x0000000f) << 4; //(phone & 0x0000000f) << 4 = 0x0000_0008 << 4 = 0x0000_0080
newPhone += (phone & 0x000000f0) >> 4; //(phone & 0x000000f0) >> 4 = 0x0000_0070 >> 4 = 0x0000_0007
newPhone ^= salt;
return prefix + "" + newPhone + "" + suffix + "" + newPhone.toString().length();
}
/**
* 解密
* @param phoneStr
* @param salt
* @return
*/
public static String decode(String phoneStr, Long salt) {
int len = phoneStr.length();
//后面两位是附加信息
if (len < 2) {
return null;
}
int newPhoneLen = Integer.parseInt(phoneStr.substring(len - 1));
if(newPhoneLen == 0){
return null;
}
int suffix = Integer.parseInt(phoneStr.substring(len-2, len-1));
if (2 + newPhoneLen > len) {
return null;
}
Long newPhone = Long.valueOf(phoneStr.substring(len-2-newPhoneLen, len-2));
String prefix = "";
//获取前缀
if (len > (newPhoneLen+2)){
prefix = phoneStr.substring(0,len-2-newPhoneLen);
}
//还原后面的值,按十六进制的位数来各自还原,并将它们相加或者|
newPhone ^= salt;
Long phone = (newPhone & 0xff000000);
phone += (newPhone >> 8) & 0x0000ff00;
phone += (newPhone << 8) & 0x00ff0000;
phone += (newPhone >> 4) & 0x0000000f;
phone += (newPhone << 4) & 0x000000f0;
//suffix不为0,则表示需要在中间补零
if (suffix > 0 ){
for (int i = 0;i < suffix;i++) {
prefix = prefix + "0";
}
}
return prefix + "" + phone;
}
/**
* 字符串的盐转成long
* @param str
* @return
*/
public static long djbHash(String str) {
int hash = 0;
for (int i = 0; i < str.length(); i++) {
hash = (hash << 5) + hash + str.charAt(i);
}
return (long) (hash & ((1<<26)-1));
}
public static void main(String[] args) {
System.out.println(djbHash("11111111"));
String ss = CryptoNumberUtil.decode("13686542566", djbHash("11111111"));
System.out.println(ss);
}
}

(1)配置用于API回传的回调地址;
(2)生成API对接Token