创建基于Asterisk的IVR,并识别DTMF和员工姓名(基于受尊敬的
antirek的Voicer ),并连接到现有PBX。
即将到来的新年给我工作的公司带来了(不是)好消息-带有IVR系统和用于Dialogic的4个模拟端口的PCI板的古老服务器死了。 突然变得很清楚,现代系统没有PCI插槽,旧系统对新版本的OS不友好,并且不知道它们将使用多长时间,并且该许可证仅适用于该程序的特定旧版本。
因此,这个想法诞生了,在没有板子的情况下(免费)在具有Asterisk的虚拟机中提高IVR。
总计,我们需要:
- 已有用户的PBX
- 虚拟机(在示例中为ubuntu 18.04 lts)。
- 在任何语音识别服务上注册:wit.ai,google或Yandex
- 对Linux系统的最低了解
- 渴望与星号打交道
如果所有点都成功完成-您可以继续。 首先要做的是将星号本身,语音提示进行测试以及nodejs和npm。
apt install nodejs asterisk npm asterisk-core-sounds-ru-gsm
接下来,我们需要语音识别服务和流程管理器本身来启动它:
npm install voicer -g npm install pm2 -g
为Voicer创建文件夹和配置:
mkdir -p /etc/voicer/data
并将配置写入文件/etc/voicer/config.js,并将您的用户名/密码和密钥(developer_key)添加到所需的服务。 以我为例,选择了wit.ai-免费,足够准确地完成我们的任务。
module.exports = { agi: { port: 3000 }, web: { port: 3100, auth: true, username: '_', password: '_', realm: '_' }, processing: { totalAttempts: 2, playGreeting: true, playBeepBeforeRecording: false
接下来,我们需要创建一个服务来运行Voicer。 这将是文件/etc/init.d/voicer:
好吧,激活它:
systemctl daemon-reload systemctl enable voicer systemctl start voicer
应该注意的是,发声器会将录制的文件存储在/ tmp文件夹中,最好定期清理它。 为此创建一个简单的脚本并将其添加到/etc/cron.daily
好吧,现在更困难的部分仍然是-配置星号本身。 由于我们已经有了PBX,并且所有客户端都在使用它,因此不需要大多数配置。 我们从/ etc / asterisk文件夹中删除(或保存在黑暗,凉爽,干燥的地方-如果需要的话)除asterisk.conf,modules.conf和sip.conf之外的所有内容。 然后,使用以下几行添加sip.conf配置,并添加所需的值:
- fromdomain-带星号的服务器地址
- 主机-PBX地址
- fromuser:机密和默认用户:remotesecret-登录:星号和PBX交换的密码对
[main_link] fromdomain=xxx.xxx.xxx.xxx host=xxx.xxx.xxx.yyy insecure=port port=5060 realm=asterisk sendrpid=pai fromuser=111 secret=111 defaultuser=222 remotesecret=222 qualify=yes type=friend disallow=all allow=alaw context=main_link promiscredir=yes dtmfmode=auto
这里值得注意dtmf命令在PBX中工作的模式。 请注意,对于外部PBX呼叫(例如,从城市或移动电话)以及PBX订户之间的内部呼叫,可以通过不同的方法处理它们。 就我而言,在第一个版本中是带内dtmf信号,在第二个版本中是rfc2833。 但是汽车做到了。 同样,与您的PBX交互的有趣功能可能正在等待您-您将必须先找到所需内容,例如,当从IVR向PBX返回呼叫时(保存)来保存呼叫者ID(外部)用户。
还有一个配置文件。 最重要的。 Dialplan,又名extensions.conf。 在其中,您肯定需要指出您的外部号码(人们将呼叫该号码),秘书号码(默认情况下将使用该号码)以及语音提示的路径。
[general] static=yes writeprotect=no [globals] [main_link] exten => __,1,Goto(ivr_tree,s,1) [ivr_tree] ;allow direct dialing to internal users exten => _40XX,1,Background(custom/common/SoedinyauVas) ;check user voice existance same => n,Set(exists=${STAT(e,${ASTDATADIR}/sounds/custom/${EXTEN}.vox)}) same => n,Playback(custom/${IF($[ ${exists} = 1 ] ? ${EXTEN} : Sotrudnik)}) same => n,Transfer(SIP/${EXTEN}@_) ;start intro exten => s,1,Answer() same => n,Set(CHANNEL(language)=ru) same => n,Background(custom/common/Welcome) ;start recognition same => n,AGI(agi://localhost:3000) same => n,GotoIf($[${RECOGNITION_RESULT}=SUCCESS]?:default) same => n,Background(custom/common/SoedinyauVas) ;check user voice existance same => n,Set(exists=${STAT(e,${ASTDATADIR}/sounds/custom/${RECOGNITION_TARGET}.vox)}) ;play user name or default name same => n,Playback(custom/${IF($[ ${exists} = 1 ] ? ${RECOGNITION_TARGET} : Sotrudnik)}) same => n,Transfer(SIP/${RECOGNITION_TARGET}@_) same => n,Hangup() ;default route same => n(default),Transfer(SIP/4001@_)
本示例使用问候语,员工姓名和短语“与您联系”。 同时,根据员工的号码来寻找一个提示,如果不是简单地用“与员工一起”来发音的话。 我建议向制片厂订购这样的提示-语音合成系统,a,不是很完美,它们对您公司名称和员工姓名的发音仅适合娱乐。 40XX-公司编号,4001-秘书。
这种情况的特殊之处在于,PBX处理我们的呼叫。 因此,我们不使用通常的Dial命令,而是使用Transfer命令-然后IVR完全离开星号并释放PBX sip通道(它们的号码通常由许可证进行硬编码)后的来电。 在大多数情况下,建议使用“转移”命令的方向名称(main_link),但对于我的PBX,仅直接指示站地址是合适的。
是时候将用户添加到识别系统了。 为此,请转到服务器的地址和端口3100,然后在其中写入名称,姓氏和员工人数。
现在,我们的星号可以接听电话,识别DTMF信号,识别员工姓名并将其重定向到其内部号码。 只是要说服工作站它需要将传入呼叫发送到我们的服务器。 根据制造商的不同,这些设置可以完全不同,但是所需的路径将包含单词ARS和呼叫路由。 但这是一个完全不同的故事。