限制号码外呼的方法及装置、电子设备、存储介质与流程

文档序号:26758705发布日期:2021-09-25 05:03阅读:163来源:国知局
限制号码外呼的方法及装置、电子设备、存储介质与流程

1.本发明涉及大数据领域,具体而言,涉及一种限制号码外呼的方法及装置、电子设备、存储介质。


背景技术:

2.目前,在实际生产过程中,考虑成本因素,为了确保接入号资源能够得到最大程度的利用,让接入号资源使用完后需要马上投入到下一轮生产中;但是这种情况下,如果出现限呼等生产问题,外呼结果快速返回,接入号资源会很快释放并被使用到下一轮,如果外呼速率过快,超过服务器能力,会导致更多的限呼,拨打速率更快等情况,恶性循环下服务器可能出现一些不可控的情况。例如服务器会出现无响应或者直接宕机;又因为外呼的特殊性,在接通客户后必须保证后续服务一定要有响应,否则会造成骚扰客户的现象,这对于服务行业来说是致命的,因此,必须要对外呼速率进行管控,使得整体外呼速率处于一个平稳的状态。
3.相关技术中,现有的比较成熟的比如令牌桶算法,能有效的限制流量,起到消峰作用,但是相对来说框架比较重,需要引入google包,依赖一些开源性技术,对代码有一定的侵入性。因此,现有的限制外呼方案因存在代码入侵风险、无法平稳控制外呼速率的技术问题。
4.针对相关技术中存在的上述问题,目前尚未发现有效的解决方案。


技术实现要素:

5.本发明实施例提供了一种限制号码外呼的方法及装置、电子设备、存储介质,以至少解决了相关技术中限制号码外呼的方案存在代码入侵的风险的技术问题。
6.根据本发明的一个实施例,提供了一种限制号码外呼的方法,包括:接收针对预设时间周期内任一待外呼的外呼号码的外呼请求,并获取所述外呼请求对应的时间戳;基于所述预设时间周期和所述时间戳生成所述外呼号码的时间标识码;根据所述时间标识码和预设数量判断是否允许对所述外呼号码进行外呼,其中,所述预设数量表示所述预设时间周期内允许外呼的外呼数量阈值。
7.可选的,所述获取所述外呼请求对应的时间戳包括:设置第一原子更新长整型atomiclong对象的long值为时钟变量,其中,所述第一原子更新长整型的初始值为当前时间;在调用所述外呼号码的外呼线程时,更新所述第一原子更新长整型atomiclong对象的long值为当前时间戳;读取所述当前时间戳,并将所述当前时间戳作为所述外呼请求的时间戳。
8.可选的,所述基于所述预设时间周期和所述时间戳生成所述外呼号码的时间标识码包括:根据所述时间戳与所述预设时间周期的比值,生成所述外呼请求的时间标识码。
9.可选的,将所述外呼号码写入区块链节点中,所述根据所述时间标识码和预设数量判断是否允许对所述外呼号码进行外呼包括:将所述时间标识码与所述外呼号码对应的
外呼线程进行绑定;根据所述预设时间周期内外呼线程调用次数和所述预设数量,确定所述预设时间周期内是否允许对所述外呼号码进行外呼。
10.可选的,所述根据所述预设时间周期内外呼线程调用次数和所述预设数量确定所述预设时间周期内是否允许对所述外呼号码进行外呼包括:设置第二原子更新长整型atomiclong对象的long值为调用外呼线程的次数,其中,所述第二原子更新长整型的初始值为零;在调用所述外呼线程时,更新所述第二原子更新长整型atomiclong对象的long值为所述外呼线程对应的当前外呼线程调用次数,其中,所述预设时间周期内每次调用一个外呼线程时,所述第二原子更新长整型atomiclong对象的long值累计加1;将所述当前外呼线程调用次数与所述预设数量进行比较;若所述当前外呼线程调用次数小于或等于所述预设数量,则在所述预设时间周期内允许对所述外呼号码进行外呼;若所述当前外呼线程调用次数大于所述预设数量,则在所述预设时间周期内暂停对所述外呼号码进行外呼。
11.可选的,若所述当前外呼线程调用次数大于所述预设数量,所述方法还包括:确定所述预设时间周期的下一时间周期内调用所述外呼线程的第一时间戳;根据所述下一时间周期和所述第一时间戳计算所述外呼号码的第一时间标识码;根据所述第一时间标识码和所述预设数量,确定在所述下一时间周期内是否允许对所述外呼号码进行外呼。
12.可选的,若所述当前外呼线程调用次数大于所述预设数量,所述方法还包括:将所述外呼线程存储至目标先进先出队列;根据所述目标先进先出队列的先进先出顺序和所述预设数量,确定在所述预设时间周期的下一时间周期内是否允许对所述外呼号码进行外呼。
13.根据本发明的一个实施例,提供了一种限制号码外呼的装置,包括:处理模块,用于接收针对预设时间周期内任一待外呼的外呼号码的外呼请求,并获取所述外呼请求对应的时间戳;生成模块,用于基于所述预设时间周期和所述时间戳生成所述外呼号码的时间标识码;判断模块,用于根据所述时间标识码和预设数量判断是否允许对所述外呼号码进行外呼,其中,所述预设数量表示所述预设时间周期内允许外呼的外呼数量阈值。
14.可选的,所述处理模块包括:设置单元,用于设置第一原子更新长整型atomiclong对象的long值为时钟变量,其中,所述第一原子更新长整型的初始值为当前时间;更新单元,用于在调用所述外呼号码的外呼线程时,更新所述第一原子更新长整型atomiclong对象的long值为当前时间戳;第一确定单元,用于读取所述当前时间戳,并将所述当前时间戳作为所述外呼请求的时间戳。
15.可选的,所述生成模块包括:生成单元,用于根据所述时间戳与所述预设时间周期的比值,生成所述外呼请求的时间标识码。
16.可选的,将所述外呼号码写入区块链节点中,所述判断模块包括:绑定单元,用于将所述时间标识码与所述外呼号码对应的外呼线程进行绑定;第二确定单元,用于根据所述预设时间周期内外呼线程调用次数和所述预设数量,确定所述预设时间周期内是否允许对所述外呼号码进行外呼。
17.可选的,所述第二确定单元包括:设置子单元,用于设置第二原子更新长整型atomiclong对象的long值为调用外呼线程的次数,其中,所述第二原子更新长整型的初始值为零;更新子单元,用于在调用所述外呼线程时,更新所述第二原子更新长整型atomiclong对象的long值为所述外呼线程对应的当前外呼线程调用次数,其中,所述预设
时间周期内每次调用一个外呼线程时,所述第二原子更新长整型atomiclong对象的long值累计加1;比较子单元,用于将所述当前外呼线程调用次数与所述预设数量进行比较;处理子单元,用于当所述当前外呼线程调用次数小于或等于所述预设数量时,在所述预设时间周期内允许对所述外呼号码进行外呼;当所述当前外呼线程调用次数大于所述预设数量时,在所述预设时间周期内暂停对所述外呼号码进行外呼。
18.可选的,当所述当前外呼线程调用次数大于所述预设数量时,所述装置还包括:第一确定模块,用于确定所述预设时间周期的下一时间周期内调用所述外呼线程的第一时间戳;计算模块,用于根据所述下一时间周期和所述第一时间戳计算所述外呼号码的第一时间标识码;第二确定模块,用于根据所述第一时间标识码和所述预设数量,确定在所述下一时间周期内是否允许对所述外呼号码进行外呼。
19.可选的,当所述当前外呼线程调用次数大于所述预设数量时,所述装置还包括:存储模块,用于将所述外呼线程存储至目标先进先出队列;第三确定模块,用于根据所述目标先进先出队列的先进先出顺序和所述预设数量,确定在所述预设时间周期的下一时间周期内是否允许对所述外呼号码进行外呼。
20.根据本发明的又一个实施例,还提供了一种电子设备,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行上述任一项方法实施例中的步骤。
21.根据本发明的又一个实施例,还提供了一种存储介质,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行上述任一项装置实施例中的步骤。
22.通过本发明实施例,针对预设时间周期内任一待外呼的外呼号码的外呼请求,根据外呼请求对应的时间戳和预设时间周期生成外呼号码的时间标识码,根据时间标识码和预设数量判断在预设时间周期是否允许对该外呼号码进行外呼,从而能够控制预设时间周期内进行号码外呼的外呼数量,本发明实施例调用java的jdk源码就能实现,不需要引入其他的jar包,因此改造成本和代码侵入都很小,操作简单,解决了相关技术中限制号码外呼的方案存在代码入侵的风险的技术问题,保证了控制外呼速率的平稳性。
附图说明
23.此处所说明的附图用来提供对本发明的进一步理解,构成本发明的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
24.图1是本发明实施例的一种限制号码外呼的方法应用于计算机终端的硬件结构框图;
25.图2是根据本发明实施例提供一种限制号码外呼的应用场景的外呼流程图;
26.图3是根据本发明实施例的一种限制号码外呼的方法的流程图;
27.图4是根据本发明实施例提供的基于限制号码外呼的速率控制器工作示意图;
28.图5是根据本发明一具体实施例提供的一种限制号码外呼的外呼流程图;
29.图6是根据本发明实施例的一种限制号码外呼的装置的结构框图;
30.图7是根据本发明实施例的一种电子设备的结构示意图。
具体实施方式
31.下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
32.需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
33.本发明实施例所提供的方法实施例可以在移动终端、服务器、计算机终端或者类似的运算装置中执行。以运行在计算机终端上为例,图1是本发明实施例的一种限制号码外呼的方法应用于计算机终端的硬件结构框图。如图1所示,计算机终端可以包括一个或多个(图1中仅示出一个)处理器102(处理器102可以包括但不限于微处理器mcu或可编程逻辑器件fpga等的处理装置)和用于存储数据的存储器104,可选地,上述计算机终端还可以包括用于通信功能的传输设备106以及输入输出设备108。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述计算机终端的结构造成限定。例如,计算机终端还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。
34.存储器104可用于存储计算机程序,例如,应用软件的软件程序以及模块,如本发明实施例中的限制号码外呼的方法对应的计算机程序,处理器102通过运行存储在存储器104内的计算机程序,从而执行各种功能应用以及数据处理,即实现上述的方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器,也可以包括易失性存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至计算机终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
35.传输装置106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括计算机终端的通信供应商提供的无线网络。在一个实例中,传输装置106包括一个网络适配器(network interface controller,简称为nic),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输装置106可以为射频(radio frequency,简称为rf)模块,其用于通过无线方式与互联网进行通讯。
36.图2是根据本发明实施例提供一种限制号码外呼的应用场景的外呼流程图,如图2所示,外呼流程包括以下步骤:
37.步骤s201,从接入号资源池中获取空闲接入号;
38.步骤s202,捞取名单;
39.步骤s203,判断名单列表中是否有待外呼的名单;如果没有,则结束操作;如果有,则执行步骤s204,通过电话平台进行外呼客户;
40.步骤s205,通过电话平台判断该名单是否呼通;如果未呼通,则反馈给名单列表,形成闭环,执行步骤s202,捞取名单,循环进行外呼;如果呼通,则执行步骤s206,电话平台基于播报话术进行外呼;
41.步骤s207,收集客户话术,进行asr(全称为automatic speech recognition,即语音自动识别)语音文本转义,将客户话术语音转为文本;
42.步骤s208,进行nlp(全称为natural langunge possns,即自然语言处理)文本转义,进入子流程;
43.步骤s209,获取子流程内容,形成tts(全称为text

to

speech,即从文本到语音)
语音播报给客户,最后结束。
44.基于上述现有的外呼过程,当名单够多的情况下,步骤s202至步骤s205会形成一个死循环,一旦接入号数量过多会导致下游服务器压力上升进而导致奔溃,从而影响整个流程。
45.本发明实施例通过控制单位时间(即预设时间周期)拨打外呼号码的数量,来控制外呼速率的。图3是根据本发明实施例的一种限制号码外呼的方法的流程图,如图3所示,该流程包括如下步骤:
46.步骤s302,接收针对预设时间周期内任一待外呼的外呼号码的外呼请求,并获取外呼请求对应的时间戳;
47.可选地,设定预设时间周期为1秒,若1秒内接收到20个外呼请求,可通过后台线程维护一个全局时钟来获取预设时间周期内每个外呼请求对应的时间戳,其中,每个外呼请求中携带一个外呼号码。
48.步骤s304,基于预设时间周期和时间戳生成外呼号码的时间标识码;
49.在本实施例中,通过在单位时间(即预设时间周期)内生成每个外呼号码的唯一id(即上述时间标识码),通过保证该单位时间内无论调用多少次外呼请求,单位时间内生成的时间id都是一致的。
50.步骤s306,根据时间标识码和预设数量判断是否允许对外呼号码进行外呼,其中,预设数量表示预设时间周期内允许外呼的外呼数量阈值。
51.在本实施例中,如果需要均衡的拨打号码,可以考虑将预设时间周期缩短,同时控制上限数量(即上述预设数量),预设时间周期越短,每秒拨打速率会更均衡稳定;另外,由于若预设时间周期越短,生成的key(键值)会越多,导致占用内存会上升,因此,需要做均衡考虑,同时要及时删除已过期的key。
52.需要强调的是,为进一步保证上述外呼号码的私密和安全性,上述外呼号码还可以存储于一区块链的节点中。
53.本发明实施例提供的限制号码外呼的方法,针对预设时间周期内任一待外呼的外呼号码的外呼请求,根据外呼请求对应的时间戳和预设时间周期生成外呼号码的时间标识码,根据时间标识码和预设数量判断在预设时间周期是否允许对该外呼号码进行外呼,从而能够控制预设时间周期内进行号码外呼的外呼数量,本发明实施例调用java的jdk源码就能实现,不需要引入其他的jar包,因此,改造成本和代码侵入都很小,操作简单,解决了相关技术中限制号码外呼的方案存在代码入侵的风险的技术问题,保证了控制外呼速率的平稳性。
54.在本案的一个可选的实施例中,获取外呼请求对应的时间戳包括:设置第一原子更新长整型atomiclong对象的long值为时钟变量,其中,第一原子更新长整型的初始值为当前时间;在调用外呼号码的外呼线程时,更新第一原子更新长整型atomiclong对象的long值为当前时间戳;读取当前时间戳,并将当前时间戳作为外呼请求的时间戳。
55.优选地,通过维护一个原子更新长整型atomiclong成员变量(即上述atomiclong对象的long值),并初始化值为当前时间;然后维护一个定时调度的后台线程(即外呼线程),设定每毫秒或者每秒周期(即上述预设周期时间)执行一次;线程在调度时,执行atomiclong对象的set方法,直接更新为当前的时间戳;其他线程在获取时间时通过
atomiclong对象的get方法即可获取比较精准的当前时间戳。
56.根据上述实施例,在高并发的情况下,如果并发的调用system.currenttimemillis()//获取当前系统时间,频繁的请求一个全局时钟会带来线程间的争用,性能存在问题,可能会影响效率,因此,需要后台维护一个变量,实时更新该值,当需要时间戳时读取当前变量(即上述时间戳)即可,能够提升性能,从而避免因频繁的请求系统原子钟而导致的频繁切换内核状态、性能消耗较大等情况,可以控制每毫秒或者每秒只请求一次。可选地,预设时间周期可以取决于业务是否需要毫秒的精度。
57.在本案的一个可选的实施例中,基于预设时间周期和时间戳生成外呼号码的时间标识码包括:根据时间戳与预设时间周期的比值,生成外呼请求的时间标识码。
58.在本实施例的一个示例中,将当前时间戳除以单位时间(即预设时间周期),并取整,生成该外呼请求的对应时间id,且在单位时间内每个外呼请求的时间id都是相同的,如果n表示可配置的周期时间,t表示当前时间,则时间id生成算法为:f(id)=(t+n

1)/n;(向上取整)。例如,当前时间t为3.6秒,预设周期n为1秒,则f(id)=[t+n

1/n]=[3.6+1

1/1]=4。
[0059]
在本案的一个实施例中,将外呼号码写入区块链节点中,根据时间标识码和预设数量判断是否允许对外呼号码进行外呼包括:将时间标识码与外呼号码对应的外呼线程进行绑定;根据预设时间周期内外呼线程调用次数和预设数量,确定预设时间周期内是否允许对外呼号码进行外呼。
[0060]
本发明所指区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。区块链可以包括区块链底层平台、平台产品服务层以及应用服务层等。
[0061]
在本实施例中,将时间标识码绑定到对应的外呼线程上,是允许每个外呼线程通过校验的令牌,即通过时间标识码判断对外呼线程是放行还是暂停处理。
[0062]
优选地,根据预设时间周期内外呼线程调用次数和预设数量确定预设时间周期内是否允许对外呼号码进行外呼包括:设置第二原子更新长整型atomiclong对象的long值为调用外呼线程的次数,其中,第二原子更新长整型的初始值为零;在调用外呼线程时,更新第二原子更新长整型atomiclong对象的long值为外呼线程对应的当前外呼线程调用次数,其中,预设时间周期内每次调用一个外呼线程时,第二原子更新长整型atomiclong对象的long值累计加1;将当前外呼线程调用次数与预设数量进行比较;若当前外呼线程调用次数小于或等于预设数量,则在预设时间周期内允许对外呼号码进行外呼;若当前外呼线程调用次数大于预设数量,则在预设时间周期内暂停对外呼号码进行外呼。
[0063]
优选地,通过原子操作统计预设时间周期内调用外呼线程的调用次数,然后基于预设时间周期内允许外呼的外呼数量阈值,判断是对该外呼线程放行还是暂停处理。
[0064]
在一个示例中,每次调用外呼线程时,获取到的外呼号码对应的外呼线程,将生成的时间标识码绑定到该外呼线程,即将该时间标识码标记在外呼线程的threadlocal中,会对每个相同的时间标识码所对应的外呼线程进行累加。具体地,根据外呼线程中threadlocal上的时间标识码,在map中找到对应的k

v(键值),通过cas原子操作(全称为
compare and set,是解决多线程并行情况下使用锁造成性能损耗的一种机制,采用原子操作可以实现线程安全,避免加锁的笨重性)对v轮询进行累加一,直到成功;如果成功,则判断当前v值是否超过系统设置的阈值(即上述预设数量),若超过,则对多余的外呼线程进行延期处理,即对多余的外呼号码放到下一个时间周期中进行延期呼叫,然后重新获取新一轮时间标识码,并进行同样的操作,直到外呼线程被通过或者再次被延期。
[0065]
在本案的一个应用场景中,如果使用redis分布式缓存,可以通过incr()方法对相同时间标识码的外呼线程进行累加,将map的数据结构对应的更换成hash结构,然后采用本发明实施例进行号码外呼。由于redis是单线程的,所有线程进行排队操作,一次只允许操作一个线程,该方法天然线程安全,所以无需考虑并发问题。
[0066]
在本案的一个可选的实施例中,若当前外呼线程调用次数大于预设数量,还包括:确定预设时间周期的下一时间周期内调用外呼线程的第一时间戳;根据下一时间周期和第一时间戳计算外呼号码的第一时间标识码;根据第一时间标识码和预设数量,确定在下一时间周期内是否允许对外呼号码进行外呼。在本实施例中,当前时间周期内调用外呼线程的调用次数已达到阈值,则将超过阈值的那部分外呼线程延时至下一个时间周期进行处理,从而达到了控制单位时间内号码外呼数量的目的。
[0067]
在本实施例中,当延期至下一个时间周期时,则直接重新对下一时间周期内的时间id做累加操作,并允许调用多余的外呼号码所对应的外呼线程,对多余的外呼号码进行外呼,直到达到上限或者进入下一周期。其中,下一个时间周期是指预设时间周期的下一个迭代,比如以5秒为一个时间周期,那么0

5秒之间都是同一时间周期,且在该时间周期内生成的时间标识码均一样,从6秒开始进入下一个时间周期,此时对应的时间标识码会重新生成,并且下一个时间周期内生成的时间标识码与上一个时间周期内生成的时间标识码是不同的。
[0068]
优选地,若当前外呼线程调用次数大于预设数量,还包括:将外呼线程存储至目标先进先出队列;根据目标先进先出队列的先进先出顺序和预设数量,确定在预设时间周期的下一时间周期内是否允许对外呼号码进行外呼。
[0069]
当外呼线程数达到阈值(即上述预设数量)时,进行一个排队的机制,通过生成一个fifo队列(即上述目标先进先出队列),当在上一个时间周期内外呼线程被阻塞时,多余的外呼线程进入到fifo队列中,进入下一个时间周期后,优先使队列fifo队列里的外呼线程,然后按照先进先出的顺序通过,以保证公平性;其中,队列长度越长,代表等待的外呼线程数越多,在阈值相同的情况下,线程数越多代表请求量越大,系统的繁忙度越高,应该考虑下游扩大并发能力,或者上游限制名单量(即外呼数量),可以通过数量减少接入号的数量或者扩充下游系统的并发能力,保证阻塞的外呼线程在一个合理的范围,确保系统稳定性。
[0070]
下面结合一具体实施例,对本发明做进一步说明:
[0071]
图4是根据本发明实施例提供的基于限制号码外呼的速率控制器工作示意图,如图4所示,将生成的时间标识码绑定到对应的外呼线程上,是每个外呼线程用来通过速率控制器校验的令牌,速率控制器根据该时间标识码判断对外呼线程是放行还是延迟。
[0072]
在本示例中,速率控制器至少包括两个功能模块,一个用于分配时间标识码,一个用于控制速率(即控制通过外呼线程的数量)。速率控制器的结构通过k

v格式的map表示,k
保存的是生成的时间标识码(即时间id),v保存的是时间id相同的外呼线程累加的数量;每次一个外呼线程在经过速率控制器时,会根据(t+n

1)/n(n为可配置的周期时间)生成一个id,并绑定到该外呼线程threadlocal(线程局部变量)上。
[0073]
id生成器(即用于分配id)和过滤器(即用于控制速率)其实是在外呼前加的一道过滤装置,每个外呼线程代表着一个即将要呼的号码,每个外呼线程在请求外呼前都需要经过这个过滤器,通过过滤器返回的结果判断自身是否要进入阻塞(即延期)。
[0074]
如图4所示,在并发的请求访问下,控制器通过控制请求的通过速率来进行限流,达到一个相对稳定的状态。例如,假设有三根线程(即上述外呼线程)访问,请求一、请求二对应的线程在同一周期1n(即上述预设时间周期)内,基于f(id)=(t+n

1)/n,请求一与请求二生成的id(即上述时间标识码)是一样的,都为1;请求三对应的外呼线程则在下一个周期2n内到达,id=2;然后设置的阈值是单位周期时间n内只允许通过1个外呼线程,外呼线程1先通过cas操作,对id=1的value进行累加操作,获取到的新值为1,满足阈值范围,因此请求一可以通过;同样的外呼线程2也通过cas将value值更新成了2,但是已经超过阈值,因此这个线程会阻塞n时间,然后进入第二周期2n再次获取id=2,不过在这个周期内外呼线程3又有可能先于外呼线程2,将id=2的value值更新为1,则外呼线程3正常通过,2线程任然再被阻塞n时间,直到第三个周期3n,没有竞争后才会顺利通过。这个实现方案对于线程来说是非公平的,有可能后来的线程先于之前阻塞的线程通过;在并发条件下再不加锁的情况下实现了共享资源的操作,极大地减少锁竞争导致的资源浪费,同时因为是非公平竞争,避免了要保证公平而进行排队机制,减少了系统的开销。
[0075]
基于上述实施例,例如,图5是根据本发明一具体实施例提供的一种限制号码外呼的外呼流程图,如图5所示,外呼流程包括以下步骤:
[0076]
步骤s501,从接入号资源池中获取空闲接入号;
[0077]
步骤s502,捞取名单;
[0078]
步骤s503,判断名单列表中是否有待外呼的名单(即外呼号码);如果没有,则结束操作;如果有,则执行步骤s504,通过外呼控制器,确定预设时间周期内接收到外呼请求的时间戳;基于预设时间周期和时间戳生成外呼号码的时间id,并将时间id绑定在与外呼号码对应的外呼线程上;根据时间id、阈值(即上述预设数量)及外呼线程对外呼号码进行外呼;如果外呼线程累加次数超过阈值,则多余的外呼号码的外呼进程,延期至下一个预设时间周期,在下一个单位时间(即下一时间周期)内形成排队机制,按照先进先出顺序进行外呼;若未超过阈值,则执行步骤s506,速率控制器(即外呼控制器)通过外呼请求对应的外呼进程,进行正常的外呼工作;
[0079]
步骤s507,通过电话平台判断是否存在未被呼通的名单,如果不存在,则返回步骤s502;如存在,则执行步骤s508,播报话术;
[0080]
步骤s509,收集客户话术,进行asr语音文本转义,将客户话术语音转为文本;
[0081]
步骤s510,进行nlp文本转义,进入子流程;
[0082]
步骤s511,获取子流程内容,形成tts语音播报给客户,最后结束。
[0083]
通过控制单位时间内拨打外呼号码的外呼数量,在并发请求时,避免了因接入号数量(即外呼线程的数量)过多导致对捞取名单进行外呼形成的死循环,进而导致下游服务器压力上升,甚至导致奔溃的问题。
[0084]
通过本发明实施例,通过在外呼源头控制调用节奏,主要针对目前因为外呼量过大,同时因为某些原因部分名单会限呼,快速的返回结果,某种程度上单位时间内调用量上升,一旦达到系统负载,会导致服务不可用,形成更多的快速返回错误,进而导致服务器越外呼越限呼的情况,甚至服务器直接无响应或者宕机的情况做的一个消峰的控制,有效的动态控制单位时间内请求量;如果出现一些限呼情况,因为限制了周期时间内调用的次数,避免下游服务器过载,同时直接是调用java的jdk源码就能实现,不需要引入其他的jar包,因此,改造成本和代码侵入都很小,操作简单;外呼频率也不会随之有波动,对于服务器更稳定,提升了整个服务的稳定性。
[0085]
基于上文各个实施例提供的限制号码外呼的方法,基于同一发明构思,在本实施例中还提供了一种限制号码外呼的装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
[0086]
图6是根据本发明实施例的一种限制号码外呼的装置的结构框图,如图6所示,该装置包括:处理模块60,用于接收针对预设时间周期内任一待外呼的外呼号码的外呼请求,并获取外呼请求对应的时间戳;生成模块62,连接至上述处理模块60,用于基于预设时间周期和时间戳生成外呼号码的时间标识码;判断模块64,连接至上述生成模块62,用于根据时间标识码和预设数量判断是否允许对外呼号码进行外呼,其中,预设数量表示预设时间周期内允许外呼的外呼数量阈值。
[0087]
需要强调的是,为进一步保证上述外呼号码的私密和安全性,上述外呼号码还可以存储于一区块链的节点中。
[0088]
可选的,处理模块60包括:设置单元,用于设置第一原子更新长整型atomiclong对象的long值为时钟变量,其中,第一原子更新长整型的初始值为当前时间;更新单元,用于在调用外呼号码的外呼线程时,更新第一原子更新长整型atomiclong对象的long值为当前时间戳;第一确定单元,用于读取当前时间戳,并将当前时间戳作为外呼请求的时间戳。
[0089]
可选的,生成模块62包括:生成单元,用于根据时间戳与预设时间周期的比值,生成外呼请求的时间标识码。
[0090]
可选的,将外呼号码写入区块链节点中,判断模块64包括:绑定单元,用于将时间标识码与外呼号码对应的外呼线程进行绑定;第二确定单元,用于根据预设时间周期外呼线程调用次数和预设数量,确定预设时间周期内是否允许对外呼号码进行外呼。
[0091]
可选的,第二确定单元包括:设置子单元,用于设置第二原子更新长整型atomiclong对象的long值为调用外呼线程的次数,其中,第二原子更新长整型的初始值为零;更新子单元,用于在调用外呼线程时,更新第二原子更新长整型atomiclong对象的long值为外呼线程对应的当前外呼线程调用次数,其中,预设时间周期内每次调用一个外呼线程时,第二原子更新长整型atomiclong对象的long值累计加1;比较子单元,用于将当前外呼线程调用次数与预设数量进行比较;处理子单元,用于当当前外呼线程调用次数小于或等于预设数量时,在预设时间周期内允许对外呼号码进行外呼;当当前外呼线程调用次数大于预设数量时,在预设时间周期内暂停对外呼号码进行外呼。
[0092]
可选的,当当前外呼线程调用次数大于预设数量时,上述装置还包括:第一确定模
块,用于确定预设时间周期的下一时间周期内调用外呼线程的第一时间戳;计算模块,用于根据下一时间周期和第一时间戳计算外呼号码的第一时间标识码;第二确定模块,用于根据第一时间标识码和预设数量,确定在下一时间周期内是否允许对外呼号码进行外呼。
[0093]
可选的,当当前外呼线程调用次数大于预设数量时,上述装置还包括:存储模块,用于将外呼线程存储至目标先进先出队列;第三确定模块,用于根据目标先进先出队列的先进先出顺序和预设数量,确定在预设时间周期的下一时间周期内是否允许对外呼号码进行外呼。
[0094]
需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述各个模块以任意组合的形式分别位于不同的处理器中。
[0095]
本发明的实施例还提供了一种存储介质,该存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
[0096]
可选地,在本实施例中,上述存储介质可以被设置为存储用于执行以下步骤的计算机程序:
[0097]
s1,接收针对预设时间周期内任一待外呼的外呼号码的外呼请求,并获取所述外呼请求对应的时间戳;
[0098]
s2,基于所述预设时间周期和所述时间戳生成所述外呼号码的时间标识码;
[0099]
s3,根据所述时间标识码和预设数量判断是否允许对所述外呼号码进行外呼,其中,所述预设数量表示所述预设时间周期内允许外呼的外呼数量阈值。
[0100]
可选地,在本实施例中,上述存储介质可以包括但不限于:u盘、只读存储器(read

only memory,简称为rom)、随机存取存储器(random access memory,简称为ram)、移动硬盘、磁碟或者光盘等各种可以存储计算机程序的介质。
[0101]
需要强调的是,为进一步保证上述外呼号码的私密和安全性,上述外呼号码还可以存储于一区块链的节点中。
[0102]
基于上述图3所示方法和图6所示装置的实施例,为了实现上述目的,本发明实施例还提供了一种电子设备,如图7所示,包括存储器72和处理器71,其中存储器72和处理器71均设置在总线73上存储器72存储有计算机程序,处理器71执行计算机程序时实现图2所示的限制号码外呼的方法。
[0103]
基于这样的理解,本发明的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个存储器(可以是cd

rom,u盘,移动硬盘等)中,包括若干指令用以使得一台电子设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施场景所述的方法。
[0104]
可选地,该设备还可以连接用户接口、网络接口、摄像头、射频(radio frequency,rf)电路,传感器、音频电路、wi

fi模块等等。用户接口可以包括显示屏(display)、输入单元比如键盘(keyboard)等,可选用户接口还可以包括usb接口、读卡器接口等。网络接口可选的可以包括标准的有线接口、无线接口(如蓝牙接口、wi

fi接口)等。
[0105]
本领域技术人员可以理解,本实施例提供的一种电子设备的结构并不构成对该实体设备的限定,可以包括更多或更少的部件,或者组合某些部件,或者不同的部件布置。
[0106]
可选地,本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的
示例,本实施例在此不再赘述。
[0107]
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
[0108]
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1