Intégrez Telegram et Avaya

Lorsque le problème commercial de créer un mécanisme à grande vitesse pour informer l'utilisateur des événements dans le centre de contact (débordement de files d'attente) et d'un central téléphonique (notification des appels manqués) est survenu, la pensée est venue de Telegram.

En fait, dans cette situation, Telegram, ce n'est qu'une des options possibles. Peut se faire par SMS. Vous pouvez le faire ringard par e-mail, puis il reviendra à l'utilisateur sur un mobile et le serveur Push en sortira. Ou faites-le directement sur l'application sur votre mobile afin que Push soit obtenu directement à partir de celle-ci.

Mais chaque méthode a ses inconvénients. Vous devez payer pour les SMS. Le courrier électronique aveugle constamment l'utilisateur et l'utilisateur cesse de répondre. Une application distincte sur le téléphone doit être faite pour chaque plateforme, installer et organiser l'enregistrement des tokens sur les serveurs internes de l'entreprise. Une solution avec télégramme ne présente pas ces inconvénients, même si l'application doit bien sûr être installée sur un mobile, un bureau ou ailleurs. Cependant, Telegram a également un inconvénient. C'est notre cher Roskomnadzor, qui ne l'aime pas beaucoup. Cela introduit un piquant supplémentaire de la mise en œuvre.

Alors.

Inspiré par ceci et cela, je me suis mis au travail.

Pour commencer, j'ai créé un bot dans BotFather

image

Ensuite, vous devez déjà travailler directement avec l'API.

Après avoir trouvé cette publication digne, je me suis tourné vers Hetzner et organisé mon proxy http pour travailler avec l'api pour seulement 3 euros par mois sur le territoire allemand.

La prochaine étape requise consiste à créer un groupe qui comprendra vos utilisateurs et le bot de discussion nouvellement créé. Il s'agit d'une protection anti-spam. Ce qui manque à Viber par exemple.

image

Ensuite, vous devez connaître le nombre d'utilisateurs requis.
Pour ce faire, chaque utilisateur doit lancer un message dans le chat. En général, c'est arbitraire. Mais nous utilisons par exemple à cet effet le registre de phrases et un certain nombre. Le numéro sera l'identifiant du PBX.

image

Passons maintenant à l'API.

En utilisant le proxy nouvellement créé, nous faisons la demande suivante directement à partir du shell du proxy. Si vous avez déjà changé de navigateur pour l'utiliser, vous pouvez le faire directement depuis le navigateur.

root@ubuntu-dsenash ~ # wget https://api.telegram.org/bot553:AAGrXfKHw/getUpdates --2018-06-21 11:11:25-- https://api.telegram.org/bot553:AAGrXfKHw/getUpdates Resolving api.telegram.org (api.telegram.org)... 149.154.167.220, 2001:67c:4e8:f004::9 Connecting to api.telegram.org (api.telegram.org)|149.154.167.220|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 370 [application/json] Saving to: 'getUpdates' getUpdates 100%[==================================================================================>] 370 --.-KB/s in 0s 2018-06-21 11:11:25 (14.1 MB/s) - 'getUpdates' saved [370/370] root@ubuntu-dsenash ~ # cat getUpdates {"ok":true,"result":[{"update_id":90770, "message":{"message_id":43,"from":{"id":3918,"is_bot":false,"first_name":"Dmitry","last_name":"Senashenko","language_code":"ru"},"chat":{"id":3918,"first_name":"Dmitry","last_name":"Senashenko","type":"private"},"date":1529572218,"text":"/register 1000","entities":[{"offset":0,"length":9,"type":"bot_command"}]}}]}root@ubuntu-dsenash ~ # 

Au lieu de "553XXXXXXX: AAGrXfKHwhhhhhhhhhhhhhhhhhhhhhhhhhhh" ce que vous avez reçu de BotFather est indiqué.

Dans la réponse, nous recherchons l'identifiant de l'utilisateur qui a laissé le message d'enregistrement.
Dans le texte ci-dessus, nous voyons le message lui-même: "/ register 1000"
Et l'ID utilisateur recherché: "id": 3918xxxxx "
Au lieu de xxxxx, il y a bien sûr des chiffres réels.

Vous pouvez maintenant vérifier le fonctionnement du bot et de l'API directement depuis le shell ou depuis votre navigateur avec la requête suivante:

api.telegram.org/bot553XXXXXXX : AAGrXfKHwhhhhhhhhhhhhhhhhhhhhhhhhhhh / sendMessage? text = Your_queue_is_overloaded & chat_id = 3918xxxxx

Où bot553XXXXXXX: AAGrXfKHwhhhhhhhhhhhhhhhhhhhhhhhhhhx est le numéro de bot et la clé reçus de BotFather, et 3918xxxxx est le numéro d'utilisateur obtenu à l'étape précédente.
Vous pouvez utiliser le russe dans le texte, mais les espaces doivent être remplacés par% 20.

À la suite de cette commande, le message a été reçu sur Telegram sur le bureau et sur le téléphone mobile en même temps.

image
image

Le navigateur a renvoyé la réponse suivante:
image
L'API fonctionne donc. Nous allons maintenant passer à l'intégration avec le central téléphonique Avaya. À cette fin, j'utiliserai Avaya Aura Experience Portal 7.1. Il est utilisé pour organiser la RVI dans l'écosystème Avaya et est une plate-forme de service entièrement virtualisée, intelligente et logicielle. Sa caractéristique importante est la possibilité d'insérer du code Java, ce dont nous avons besoin pour intégrer Telegram. Je ne créerai pas d'annonces, mais à mon avis, c'est l'un des meilleurs produits Avaya et vous pouvez y écrire des choses vraiment incroyables. Par exemple Contrôle vocal d'une théière ou Transcription de conversation plus sérieuse à la volée .

Ce système IVR n'est certainement pas bon marché, mais il y a quelques particularités. Il est autorisé par port. Parce que nous prévoyons de l'utiliser très prochainement, un port suffira. Et un port a un coût assez faible. Et avec la virtualisation, le système ne nécessite que 2 cœurs / 4 Go de RAM / 60 Go de disque dur. En général, il peut être installé sur presque tous les ordinateurs portables ou de bureau. Eh bien, comme une cerise sur un gâteau - ce produit dispose d'un mode d'essai qui vous permet de l'utiliser gratuitement pendant 30 jours.

Pour accomplir la tâche, nous devons organiser un appel IVR par un événement dans le central téléphonique, puis le configurer pour qu'il envoie l'événement correspondant à l'API nouvellement créée.

Si nous considérons la tâche d'informer le superviseur de l'excès du nombre d'appels dans la file d'attente au Contact Center, alors dans le central téléphonique, il sera nécessaire de modifier le vecteur principal et d'en créer un supplémentaire.

APPELER LE VECTEUR

Numéro: 5 Nom: vecteur de compétence 5

01 passez à l'étape 5 si les appels sont en file d'attente dans la compétence 5 pri m> 5
02 compétence de file d'attente à 5 pri m
03 temps d'attente 30 secondes pour entendre le silence
04 passez à l'étape 3 si sans condition
05 route vers le numéro 1214 avec cov n si inconditionnellement
06 passez à l'étape 2 si sans condition

Ce vecteur immédiatement avant de placer un appel dans la file d'attente vérifie le nombre d'appels dans cette file d'attente. S'il dépasse 5, l'appel passe à l'étape 5, où il est transféré au numéro 1214. Ce numéro est acheminé vers IVR.

Dans la condition de l'étape 1, vous pouvez vérifier un grand nombre de paramètres qui sont un indicateur de la charge dans le Contact Center. Par exemple, EWT, le nombre d'agents disponibles, le nombre d'agents connectés, le nombre d'appels dans la file d'attente, le niveau de service, etc. et si tel ou tel indicateur est dépassé, renvoyez l'appel à l'IVR.

Une application dans IVR commencera à envoyer un message à Telegram et transférera immédiatement l'appel vers le Contact Center vers un vecteur similaire, uniquement sans les étapes 1 et 5.

Le temps de retard pour un tel appel de traitement sera d'environ 100 millisecondes, ce qui est absolument insignifiant pour l'appelant.

Le deuxième vecteur ressemblera à ceci:

APPELER LE VECTEUR

Numéro: 6 Nom: Compétence 5 Direct

01 compétence de file d'attente à 5 pri m
02 temps d'attente 30 secondes pour entendre le silence
03 passez à l'étape 2 si sans condition

L'appel à l'événement est donc redirigé vers IVR. Passons au développement d'une application dessus.

Les applications pour Avaya Aura Experience Portal sont développées dans Eclipse avec le plug-in Orchestration Designer installé. Cela vous permet de transférer le développement pour les utilisateurs non qualifiés vers le mode Drag & Drop de déplacement des carrés et des flèches sans plonger dans le code Java.

Eh bien, les utilisateurs qualifiés peuvent déjà intégrer du code Java. Ensuite, l'application est assemblée en tant que servlet et déployée sur Tomcat, où l'IVR se réfère lorsqu'il reçoit un appel.

La demande est la suivante:

image
L'appel va au nœud AppRoot, puis les variables sont prétraitées et l'appel va au Telegram Connector, qui est déjà du code Java pur. Après l'envoi du message, l'appel est transféré au Contact Center.

Pour simplifier les paramètres, des variables configurables sont utilisées, qui vous permettent d'afficher les paramètres des variables d'application internes sur le portail Web du portail Experience lui-même. Cela est nécessaire pour éviter de reconstruire l'application lors de la modification des paramètres.

Le bloc variable est le suivant:

image

Comment les variables configurables utilisent une variable DNIS avec des sous-variables. Pour transférer des variables en code Java, des variables écrites en majuscules sont utilisées.

L'unité de traitement primaire est la suivante:

image

Pardonnez-moi les amateurs de code propre. Le bloc URL est horrible. Ce sont les fonctionnalités d'Orchestration Designer. Bien sûr, il était plus correct de le collecter directement dans le code Java sur une seule ligne, mais il était important pour moi de vérifier quelle URL entre dans le code Java et de le collecter comme ceci.

Le connecteur lui-même semble extrêmement minimaliste:

  String response = ""; String str = mySession.getVariable(IProjectVariables.URL).getSimpleVariable().getStringValue(); str = str.replaceAll(" ", "%20"); IVariableField variable = mySession.getVariableField(IProjectVariables.RESPONSEINFO); variable.setValue(str); URL url; try { url = new URL(str); InputStream is = url.openConnection().getInputStream(); BufferedReader reader = new BufferedReader( new InputStreamReader( is ) ); String line = null; response = ""; while( ( line = reader.readLine() ) != null ) { response = response + line; } reader.close(); } catch (IOException e) { e.printStackTrace(); } 

Les fonctions mySession.getVariable et mySession.getVariableField sont nécessaires pour transférer des informations de l'application vers du code Java et renvoyer une réponse.

C'est-à-dire nous avons formé l'URL selon le principe ci-dessus et l'avons démarré en transmettant ce que le serveur a renvoyé.

C'est toute l'application, et en général toute la solution. Le portail Web IVR lui-même avec des variables configurables est le suivant:

image

Si quelqu'un est intéressé à regarder une vraie démonstration du prototype, il peut le voir ici .

Eh bien, il y avait des cerises sur le gâteau. Plus précisément, même deux.

J'ai déjà écrit sur le premier. Pour que la solution fonctionne, vous devez connecter le serveur d'applications à Telegram via un proxy qui n'est pas en Russie. J'espère que ce non-sens se terminera jamais.

Eh bien, la deuxième cerise. Bien sûr, la connexion au télégramme doit être cryptée et la connexion passe par https. Et bien sûr, un certificat non auto-signé est utilisé pour cela. Et ce certificat ne donne pas Telegram. Et contrairement au navigateur, le serveur d'applications ne peut pas facilement établir une connexion sans certificat. La cerise sur le gâteau est donc le processus consistant à trouver ce certificat et à le télécharger sur le serveur d'applications. Après cette procédure, tout a immédiatement fonctionné comme par magie.

Je crois qu'une personne qui réussit mon chemin trouvera également ce certificat avec succès. L'essentiel est qu'il sache qu'il doit être trouvé.

Merci de votre attention.

Source: https://habr.com/ru/post/fr414811/


All Articles