Erstellung eines IVR auf Basis von Asterisk mit Erkennung von DTMF- und Mitarbeiternamen (basierend auf Voicer von angesehenem
Antirek ) und Verbindung zu einer vorhandenen Telefonanlage.
Das bevorstehende neue Jahr brachte die (nicht) gute Nachricht für das Unternehmen, in dem ich arbeite - der alte Server mit IVR-System und PCI-Karte für 4 analoge Ports von Dialogic ist gestorben. Plötzlich wurde klar, dass moderne Systeme keine PCI-Steckplätze haben, alte nicht mit neuen Versionen des Betriebssystems kompatibel sind und nicht bekannt ist, wie lange sie leben werden, und die Lizenz nur für eine bestimmte alte Version des Programms verfügbar ist.
So entstand die Idee, IVR ohne Board (und kostenlos) in einer virtuellen Maschine mit Asterisk zu erhöhen.
Insgesamt brauchen wir:
- Bestehende Telefonanlage mit Teilnehmern
- Eine virtuelle Maschine (im Beispiel Ubuntu 18.04 lts).
- Registrierung bei einem der Spracherkennungsdienste: wit.ai, google oder Yandex
- Mindestkenntnisse in Linux-Systemen
- Der Wunsch, mit dem Sternchen umzugehen
Wenn alle Punkte erfolgreich abgeschlossen wurden, können Sie fortfahren. Das erste, was zu tun ist, ist das Sternchen selbst, Sprachansagen für den Test sowie nodejs und npm.
apt install nodejs asterisk npm asterisk-core-sounds-ru-gsm
Als nächstes benötigen wir den Voicer-Erkennungsdienst und den Prozessmanager selbst, um ihn zu starten:
npm install voicer -g npm install pm2 -g
Erstellen Sie Ordner und Konfigurationen für Voicer:
mkdir -p /etc/voicer/data
Schreiben Sie die Konfiguration in die Datei /etc/voicer/config.js und fügen Sie dem gewünschten Dienst Ihren Benutzernamen / Ihr Kennwort und Ihren Schlüssel (developer_key) hinzu. In meinem Fall wurde wit.ai ausgewählt - frei, genau genug für unsere Aufgaben.
module.exports = { agi: { port: 3000 }, web: { port: 3100, auth: true, username: '_', password: '_', realm: '_' }, processing: { totalAttempts: 2, playGreeting: true, playBeepBeforeRecording: false
Als Nächstes müssen wir einen Dienst erstellen, um Voicer auszuführen. Dies ist die Datei /etc/init.d/voicer:
Nun, aktiviere es:
systemctl daemon-reload systemctl enable voicer systemctl start voicer
Es sollte beachtet werden, dass Voicer die aufgezeichneten Dateien im Ordner / tmp speichert und es wäre schön, sie regelmäßig zu bereinigen. Erstellen Sie dazu ein einfaches Skript und fügen Sie es zu /etc/cron.daily hinzu
Nun bleibt der schwierigere Teil - das Sternchen selbst zu konfigurieren. Da wir bereits eine TK-Anlage haben und alle Clients diese verwenden, benötigen wir den größten Teil der Konfiguration nicht. Wir löschen (oder speichern an einem dunklen, kühlen, trockenen Ort - falls gewünscht) alles aus dem Ordner / etc / asterisk außer asterisk.conf, modules.conf und sip.conf. Und wir fügen die sip.conf-Konfiguration mit den folgenden Zeilen hinzu und fügen die Werte hinzu, die wir benötigen:
- fromdomain - Serveradresse mit einem Sternchen
- Host - PBX-Adresse
- fromuser: secret und defaultuser: remotesecret - login: Passwortpaare, die durch Sternchen und Telefonanlage ausgetauscht werden
[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
Hier lohnt es sich, auf den Modus zu achten, in dem dtmf-Befehle in Ihrer TK-Anlage funktionieren. Bitte beachten Sie, dass sie für externe PBX-Anrufe (z. B. aus einer Stadt oder von einem Mobiltelefon) und interne Anrufe zwischen Teilnehmern Ihrer PBX auf unterschiedliche Weise verarbeitet werden können. In meinem Fall waren es in der ersten Version Inband-dtmf-Signale, in der zweiten - rfc2833. Aber Auto hat es geschafft. Außerdem erwarten Sie möglicherweise interessante Funktionen für die Interaktion mit Ihrer TK-Anlage. Sie müssen aus erster Hand herausfinden, was erforderlich ist, um beispielsweise den Anrufer-ID-Teilnehmer (extern) zu speichern, wenn Sie einen Anruf von IVR an die TK-Anlage zurücksenden (sendrpid-Leitung).
Und es gab noch eine Konfigurationsdatei. Das wichtigste. Dialplan, auch bekannt als extensions.conf. Darin müssen Sie auf jeden Fall Ihre externe Nummer (welche Personen anrufen werden), Ihre Sekretärsnummer (die standardmäßig verwendet wird) und den Pfad zu Ihren Sprachansagen angeben.
[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@_)
In diesem Beispiel werden Begrüßungen, Mitarbeiternamen und der Ausdruck "Verbinden Sie" verwendet. Gleichzeitig wird anhand seiner Nummer ein Hinweis für einen Mitarbeiter gesucht, und wenn dieser nicht einfach „mit dem Mitarbeiter“ ausgesprochen wird. Ich empfehle, solche Hinweise in den Studios zu bestellen - Sprachsynthesesysteme sind leider nicht perfekt und ihre Aussprache des Namens Ihres Unternehmens und der Namen der Mitarbeiter ist nur zur Unterhaltung geeignet. 40XX - Nummern im Unternehmen, 4001 - Sekretär.
Die Besonderheit dieser Situation ist, dass es die Telefonanlage ist, die unsere Anrufe bearbeitet. Daher verwenden wir anstelle des üblichen Wählbefehls den Befehl Weiterleiten - und dann verlässt der eingehende Anruf nach IVR das Sternchen vollständig und gibt die PBX-SIP-Kanäle frei (ihre Nummer wird häufig von der Lizenz fest codiert). In den meisten Fällen wird dem Übertragungsbefehl empfohlen, den Namen der Richtung (main_link) zu verwenden, aber für meine TK-Anlage war nur eine direkte Angabe der Stationsadresse geeignet.
Es ist Zeit, Benutzer zum Erkennungssystem hinzuzufügen. Gehen Sie dazu zur Adresse unseres Servers und Port 3100, wonach wir dort die Namen, Nachnamen und Nummern der Mitarbeiter schreiben.
Jetzt kann unser Sternchen eingehende Anrufe empfangen, DTMF-Signale erkennen, Mitarbeiternamen erkennen und auf ihre internen Nummern umleiten. Es bleibt nur, um die Station davon zu überzeugen, dass sie eingehende Anrufe an unseren Server senden muss. Je nach Hersteller können diese Einstellungen völlig unterschiedlich sein, der gewünschte Pfad enthält jedoch die Wörter ARS und Anrufweiterleitung. Aber das ist eine ganz andere Geschichte.