Intégration informatique-téléphonie et téléphones Grandstream


Des communications de plus en plus modernes sont intégrées dans le monde qui nous entoure, et la téléphonie de bureau ne fait pas exception. Grandstream a décidé de suivre et a ajouté la prise en charge d'une interface CTI (Computer-Telephony Integration) spéciale à leurs téléphones. Initialement, les appareils de la série GXP21XX ont été mis à jour, et un peu plus tard les appareils de la gamme GXP16XX plus jeune, tels que GXP1610 , GXP1620 , etc. ont été mis à jour .


En fait, «l'interface CTI» est dite haut et fort, en réalité - une petite API REST qui vous permet de contrôler votre téléphone à l'aide de simples requêtes HTTP. Il semblerait: vous pouvez initier un appel, suivre l'état des lignes utilisées par le téléphone sur le PBX, mais lorsque vous utilisez, par exemple, un PBX IP basé sur le cloud, ce n'est pas toujours possible. En plus de cela, CTI vous permet de contrôler le haut-parleur, le volume du haut-parleur, la coupure du microphone, etc., ce qui n'est pas toujours possible au niveau du PBX.


Alors, que pouvons-nous faire avec CTI? En général, pas beaucoup, nous n'avons que cinq types de demandes disponibles:


DemandeLa description
api-get_line_statusÉtat de la ligne
api-get_phone_statusÉtat du téléphone
api-send_keyAppuyer sur une touche (0-9, #, *, contextuelle, etc.)
api-phone_operationLes manipulations les plus simples avec le téléphone (recevoir un appel, réinitialiser, etc.)
api-sys_operationVous permet de redémarrer et de réinitialiser l'appareil aux paramètres d'usine

L'utilisation est très simple, nous formulons une demande du formulaire:


"http://IP  /cgi-bin/api-get_line_status?passcode=" // (     ) 

En réponse, nous obtenons le JSON du formulaire:


 { "response": "success", "body": [ { "line": 1, "state": "idle", "acct": 1, "active": 0, "remotename": "", "remotenumber": "" }, { "line": 2, "state": "connected", "acct": 2, "active": 1, "remotename": "", "remotenumber": "203" }, { "line": 3, "state": "idle", "acct": 1, "active": 0, "remotename": "", "remotenumber": "" }, ... { "line": 8, "state": "idle", "acct": 1, "active": 0, "remotename": "", "remotenumber": "" } ] } 

En remplaçant api-get_line_status par api-get_phone_status dans la demande, nous obtenons une brève information par téléphone:


 { "response": "success", "body": "busy", "misc": "0" } 

Cette méthode est pratique lorsque nous avons juste besoin d'interroger l'état de l'appareil ou des lignes téléphoniques et est très gênante dans les cas où nous voulons suivre les changements en cours. Un appel est arrivé, nous prenions le numéro entrant et montrions une notification à l'utilisateur, mais comment faire? Nous n'avons pas la possibilité de souscrire à des événements, ce n'est pas une bonne décision de marteler le téléphone deux ou trois fois par seconde avec des demandes de statut. Malheureusement, dans cette situation, CTI n'est pas un assistant.


Nous regardons plus loin, api-send_key , comme son nom l'indique, sert cette demande pour envoyer des frappes aux touches du téléphone, vous pouvez envoyer une à la fois ou plusieurs à la fois. En fait, les pressions sur les touches transférées sont lancées à des intervalles d'environ une seconde, et ce processus ne peut pas être interrompu. Dans le même temps, les touches du téléphone ne sont pas bloquées et elles peuvent être enfoncées librement, en conséquence, l'exécutable du téléphone se transforme en un "gâchis" incompréhensible.


 "http://192.168.4.118/cgi-bin/api-send_key?passcode=admin&keys=LINE2:2:0:3:SEND" 

Comme vous pouvez le voir, un autre paramètre de touches a été ajouté, indiquant quelles touches appuyer. (Un tableau avec une liste de toutes les touches qui peuvent être pressées virtuellement se trouve dans la documentation CTI.)


La première chose qui me vient à l'esprit: «N'est-il pas possible d'écrire une extension pour le navigateur qui vous permettrait de lancer un appel directement depuis celui-ci?» L'option la plus simple ne tarda pas à venir. Étant donné que j'ai le navigateur principal de Google Chrome, j'ai écrit pour cela, il n'a fallu que deux fichiers pour créer:


 // manifest.json { "manifest_version": 2, "name": "ArtDial", "version": "0.1", "permissions": ["contextMenus"], "background": { "scripts": ["background.js"] } } 

 // background.js function dial(selectedText) { var serviceCall = 'http://192.168.4.118/cgi-bin/api-send_key?passcode=admin&keys='+ selectedText.replace(/[^\d]/g, '').split('').join(':') +':SEND'; var xhr = new XMLHttpRequest(); xhr.open("GET", serviceCall, true); xhr.send(); } chrome.contextMenus.create({ title: ": %s", contexts: ["selection"], onclick: function(info, tab) { dial(info.selectionText); } }); 

Nous les mettons dans un dossier, sur la page des extensions, nous activons le mode développeur et connectons notre extension.




Pour gérer les appels, une demande api-phone_operation est fournie, avec laquelle nous pouvons accepter ou rejeter un appel entrant (acceptcall / rejetcall), mettre en attente ou mettre fin à la conversation en cours (holdcall / endcall). Une commande d' annulation plus universelle est également disponible, qui vous permet de rejeter et de terminer les appels. Pour envoyer, utilisez une demande du formulaire:


 "http://192.168.4.118/cgi-bin/api-phone_operation?passcode=admin&cmd=cancel" 

Et la dernière chose: api-sys_operation , nous permettra de redémarrer le téléphone ou de le réinitialiser aux paramètres d'usine (REBOOT et RESET, respectivement). Nous utilisons des requêtes du formulaire:


 "http://192.168.4.118/cgi-bin/api-sys_operation?passcode=admin&request=REBOOT" 

Il est peu probable que l'utilisation de l'intégration informatique-téléphonie soit en mesure de créer une application dynamique qui interagira pleinement avec votre environnement. Mais en tant qu'outil supplémentaire utilisé conjointement avec d'autres API (URL d'action dans les téléphones ou AMI dans Asterisk), CTI a le droit d'exister.

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


All Articles