Création d'IVR basé sur Asterisk, avec reconnaissance du DTMF et des noms d'employés (basé sur Voicer de respecté
antirek ) et connexion à un PBX existant.
La nouvelle année à venir a apporté (pas) de bonnes nouvelles à l'entreprise où je travaille - l'ancien serveur avec système IVR et carte PCI pour 4 ports analogiques de Dialogic est mort. Il est soudain devenu clair que les systèmes modernes n'ont pas d'emplacements PCI, les anciens ne sont pas compatibles avec les nouvelles versions du système d'exploitation et on ne sait pas combien de temps ils vivront, et la licence n'est disponible que pour une ancienne version spécifique du programme.
L'idée est donc née de faire passer l'IVR sans carte (et gratuitement) dans une machine virtuelle avec Asterisk.
Au total, nous avons besoin de:
- PBX existant avec abonnés
- Une machine virtuelle (dans l'exemple, ubuntu 18.04 lts).
- Inscription sur l'un des services de reconnaissance vocale: wit.ai, google ou Yandex
- Connaissance minimale des systèmes Linux
- Le désir de faire face à l'astérisque
Si tous les points sont réussis, vous pouvez continuer. La première chose à faire est de mettre l'astérisque lui-même, les invites vocales pour le test, ainsi que nodejs et npm.
apt install nodejs asterisk npm asterisk-core-sounds-ru-gsm
Ensuite, nous avons besoin du service de reconnaissance vocale et du gestionnaire de processus lui-même pour le démarrer:
npm install voicer -g npm install pm2 -g
Créez des dossiers et une configuration pour voicer:
mkdir -p /etc/voicer/data
Et écrivez la configuration dans le fichier /etc/voicer/config.js, en ajoutant votre nom d'utilisateur / mot de passe et votre clé (developer_key) au service souhaité. Dans mon cas, wit.ai a été choisi - gratuit, suffisamment précis pour nos tâches.
module.exports = { agi: { port: 3000 }, web: { port: 3100, auth: true, username: '_', password: '_', realm: '_' }, processing: { totalAttempts: 2, playGreeting: true, playBeepBeforeRecording: false
Ensuite, nous devons créer un service pour exécuter voicer. Ce sera le fichier /etc/init.d/voicer:
Eh bien, activez-le:
systemctl daemon-reload systemctl enable voicer systemctl start voicer
Il convient de noter que voicer stockera les fichiers enregistrés dans le dossier / tmp et il serait bon de le nettoyer périodiquement. Créez un script simple pour cela et ajoutez-le à /etc/cron.daily
Eh bien, il reste maintenant la partie la plus difficile - configurer l'astérisque lui-même. Comme nous avons déjà un PBX et que tous les clients l'utilisent, nous n'avons pas besoin de la majeure partie de la configuration. Nous supprimons (ou enregistrons dans un endroit sombre, frais et sec - si vous le souhaitez) tout ce qui se trouve dans le dossier / etc / asterisk sauf asterisk.conf, modules.conf et sip.conf. Et nous ajoutons la configuration sip.conf avec les lignes suivantes, en ajoutant les valeurs dont nous avons besoin pour:
- fromdomain - adresse du serveur avec un astérisque
- hôte - adresse PBX
- fromuser: secret et defaultuser: remotesecret - login: paires de mots de passe échangées par astérisque et 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
Ici, il convient de prêter attention au mode dans lequel les commandes dtmf fonctionnent dans votre PBX. Veuillez noter qu'ils peuvent être traités par différentes méthodes pour les appels PBX externes (par exemple, depuis une ville ou à partir d'un téléphone mobile) et les appels internes entre les abonnés de votre PBX. Dans mon cas, dans la première version, il s'agissait de signaux dtmf intrabande, dans la seconde - rfc2833. Mais l'auto l'a fait. De plus, des fonctionnalités intéressantes d'interaction avec votre PBX peuvent vous attendre - vous devrez découvrir de première main ce qui est nécessaire, par exemple, pour enregistrer l'abonné ID de l'appelant (externe) lors du renvoi d'un appel de l'IVR vers le PBX (ligne sendrpid).
Et il y avait encore un fichier de configuration. Le plus important. Dialplan, alias extensions.conf. Dans ce document, vous devez absolument indiquer votre numéro externe (que les gens appellent), le numéro de secrétaire (qui sera utilisé par défaut) et le chemin d'accès à vos invites vocales.
[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@_)
Cet exemple utilise les salutations, les noms des employés et l'expression «connectez-vous». Dans le même temps, un indice pour un employé est recherché par son numéro, et s'il n'est pas prononcé simplement «avec l'employé». Je recommande de commander de tels indices aux studios - les systèmes de synthèse vocale, hélas, ne sont pas parfaits et leur prononciation du nom de votre entreprise et des noms des employés ne convient que pour le divertissement. 40XX - numéros dans l'entreprise, 4001 - secrétaire.
La particularité de cette situation est que c'est le PBX qui gère nos appels. Ainsi, au lieu de la commande Dial habituelle, nous utilisons la commande Transfer - puis l'appel entrant après IVR laisse complètement l'astérisque et libère les canaux SIP PBX (leur numéro est souvent codé en dur par la licence). Dans la plupart des cas, il est conseillé d'utiliser la commande Transfer pour utiliser le nom de la direction (main_link), mais pour mon PBX, seule une indication directe de l'adresse de la station était appropriée.
Il est temps d'ajouter des utilisateurs au système de reconnaissance. Pour ce faire, rendez-vous à l'adresse de notre serveur et du port 3100, après quoi nous y écrivons les noms, prénoms et nombre d'employés.
Maintenant, notre astérisque est capable de recevoir des appels entrants, de reconnaître les signaux DTMF, de reconnaître les noms des employés et de les rediriger vers leurs numéros internes. Il ne reste plus qu'à convaincre la station qu'elle a besoin d'envoyer des appels entrants vers notre serveur. Selon le fabricant, ces paramètres peuvent être complètement différents, mais le chemin souhaité contiendra les mots ARS et le routage des appels. Mais c'est une histoire complètement différente.