Immer mehr moderne Kommunikation wird in die Welt um uns herum integriert, und Bürotelefonie ist keine Ausnahme. Grandstream entschied sich, auf dem Laufenden zu bleiben und unterstützte eine spezielle CTI-Schnittstelle (Computer-Telephony Integration) für seine Telefone. Zunächst wurden die Geräte der GXP21XX-Serie aktualisiert, und etwas später wurden die Geräte der jüngeren GXP16XX-Linie wie GXP1610 , GXP1620 usw. aktualisiert .
Tatsächlich wird die „CTI-Schnittstelle“ in der Realität laut gesagt - eine kleine REST-API, mit der Sie Ihr Telefon mithilfe einfacher HTTP-Anforderungen steuern können. Es scheint: Sie können einen Anruf einleiten, den Status der vom Telefon an der TK-Anlage verwendeten Leitungen verfolgen, aber wenn Sie beispielsweise eine Cloud-IP-TK-Anlage verwenden, ist dies nicht immer möglich. Darüber hinaus können Sie mit CTI die Freisprecheinrichtung, die Lautsprecherlautstärke, die Stummschaltung des Mikrofons usw. steuern, was auf PBX-Ebene nicht immer möglich ist.
Was können wir also mit CTI tun? Im Allgemeinen stehen nicht nur fünf Arten von Anfragen zur Verfügung:
Anfrage | Beschreibung |
---|
api-get_line_status | Leitungsstatus |
api-get_phone_status | Telefonstatus |
api-send_key | Drücken einer Taste (0-9, #, *, kontextsensitiv usw.) |
api-phone_operation | Die einfachsten Manipulationen mit dem Telefon (Anruf empfangen, zurücksetzen usw.) |
api-sys_operation | Ermöglicht den Neustart und das Zurücksetzen des Geräts auf die Werkseinstellungen |
Dies ist sehr einfach, wir bilden eine Anfrage des Formulars:
"http://IP /cgi-bin/api-get_line_status?passcode="
Als Antwort erhalten wir JSON des Formulars:
{ "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": "" } ] }
Wenn Sie api-get_line_status in der Anfrage durch api-get_phone_status ersetzen, erhalten Sie eine kurze Information am Telefon:
{ "response": "success", "body": "busy", "misc": "0" }
Diese Methode ist praktisch, wenn wir nur den Status des Geräts oder der Telefonleitungen abfragen müssen, und ist in Fällen, in denen wir die Änderungen verfolgen möchten, sehr unpraktisch. Ein Anruf kam, wir würden die eingehende Nummer nehmen und dem Benutzer eine Benachrichtigung zeigen, aber wie geht das? Wir haben keine Möglichkeit, Veranstaltungen zu abonnieren. Es ist keine gute Entscheidung, das Telefon zwei- oder dreimal pro Sekunde mit Statusanfragen zu versehen. Leider ist CTI in dieser Situation kein Assistent.
Wir schauen weiter, api-send_key dient , wie der Name schon sagt, dieser Anfrage, um Tastenanschläge an die Telefonschlüssel zu senden. Sie können jeweils einen oder mehrere gleichzeitig senden. Tatsächlich wird das Drücken der übertragenen Tasten in Intervallen von ungefähr einer Sekunde eingeleitet, und dieser Vorgang kann nicht unterbrochen werden. Gleichzeitig werden die Tasten des Telefons nicht blockiert und können frei gedrückt werden. Dadurch wird die ausführbare Telefondatei zu einem unverständlichen "Durcheinander".
"http://192.168.4.118/cgi-bin/api-send_key?passcode=admin&keys=LINE2:2:0:3:SEND"
Wie Sie sehen können, wurde ein weiterer Tastenparameter hinzugefügt, der angibt, welche Tasten gedrückt werden sollen. (Eine Tabelle mit einer Liste aller Tasten, die virtuell gedrückt werden können, befindet sich in der CTI-Dokumentation.)
Das erste, was mir in den Sinn kommt: "Ist es nicht möglich, eine Erweiterung für den Browser zu schreiben, mit der Sie einen Anruf direkt von dort aus initiieren können?" Die einfachste Option ließ nicht lange auf sich warten. Da ich den Hauptbrowser von Google Chrome habe, für den ich geschrieben habe, waren nur zwei Dateien erforderlich:
// 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); } });
Wir legen sie in einem Ordner ab. Auf der Erweiterungsseite aktivieren wir den Entwicklermodus und verbinden unsere Erweiterung.
Um Anrufe zu verwalten, wird eine api-phone_operation- Anfrage bereitgestellt, mit der wir einen eingehenden Anruf annehmen oder ablehnen (acceptcall / acceptcall), in die Warteschleife stellen oder das aktuelle Gespräch beenden (holdcall / endcall). Es steht auch ein universellerer Abbruchbefehl zur Verfügung, mit dem Sie Anrufe ablehnen und beenden können. Verwenden Sie zum Senden eine Anfrage des Formulars:
"http://192.168.4.118/cgi-bin/api-phone_operation?passcode=admin&cmd=cancel"
Und das Letzte: Mit api-sys_operation können wir das Telefon neu starten oder auf die Werkseinstellungen zurücksetzen (REBOOT bzw. RESET). Wir verwenden Abfragen des Formulars:
"http://192.168.4.118/cgi-bin/api-sys_operation?passcode=admin&request=REBOOT"
Es ist unwahrscheinlich, dass durch die Verwendung der Computer-Telefonie-Integration eine ausgelassene Anwendung erstellt werden kann, die vollständig mit Ihrer Umgebung interagiert. Als zusätzliches Tool, das in Verbindung mit anderen APIs (Aktions-URLs in Telefonen oder AMIs in Asterisk) verwendet wird, hat CTI ein Existenzrecht.