Integrasi Komputer-Teleponi dan Telepon Grandstream


Semakin banyak komunikasi modern yang diintegrasikan ke dalam dunia di sekitar kita, dan telepon kantor tidak terkecuali. Grandstream memutuskan untuk mengikuti dan menambahkan dukungan untuk antarmuka CTI (Computer-Telephony Integration) khusus untuk telepon mereka. Awalnya, perangkat seri GXP21XX diperbarui, dan sedikit kemudian perangkat dari garis GXP16XX yang lebih muda, seperti GXP1610 , GXP1620 , dll diperbarui .


Bahkan, "antarmuka CTI" dikatakan keras, pada kenyataannya - API REST kecil yang memungkinkan Anda untuk mengontrol ponsel Anda menggunakan permintaan HTTP sederhana. Tampaknya: Anda dapat melakukan panggilan, melacak status jalur yang digunakan oleh telepon pada PBX, tetapi ketika menggunakan, misalnya, IP PBX berbasis cloud, ini tidak selalu memungkinkan. Selain itu, CTI memungkinkan Anda untuk mengontrol speakerphone, volume speaker, mematikan mikrofon, dll., Yang tidak selalu memungkinkan di level PBX.


Jadi apa yang bisa kita lakukan dengan CTI? Secara umum, tidak terlalu banyak, kami hanya memiliki lima jenis permintaan yang tersedia:


MintaDeskripsi
api-get_line_statusStatus Baris
api-get_phone_statusStatus telepon
api-send_keyMenekan tombol (0-9, #, *, peka konteks, dll.)
operasi api-phone_Manipulasi paling sederhana dengan ponsel (menerima panggilan, mengatur ulang, dll.)
operasi api-sys_Memungkinkan Anda menyalakan ulang dan mengatur ulang perangkat ke pengaturan pabrik

Menggunakan ini sangat sederhana, kami membentuk permintaan formulir:


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

Sebagai tanggapan, kami mendapatkan JSON dari formulir:


 { "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": "" } ] } 

Mengganti api-get_line_status dengan api-get_phone_status dalam permintaan, kami mendapatkan informasi singkat di telepon:


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

Metode ini nyaman ketika kita hanya perlu menginterogasi status perangkat atau saluran telepon dan sangat tidak nyaman dalam kasus di mana kita ingin melacak perubahan yang sedang terjadi. Panggilan masuk, kami akan mengambil nomor yang masuk dan menunjukkan pemberitahuan kepada pengguna, tetapi bagaimana cara melakukannya? Kami tidak memiliki kesempatan untuk berlangganan acara apa pun, itu bukan keputusan yang baik untuk memalu telepon dua atau tiga kali per detik dengan permintaan status. Sayangnya, dalam situasi ini, CTI bukan asisten.


Kami melihat lebih jauh, api-send_key , sesuai namanya, melayani permintaan ini untuk mengirim penekanan tombol ke tombol telepon, Anda dapat mengirim satu per satu atau beberapa sekaligus. Bahkan, penekanan tombol yang ditransfer dimulai pada interval sekitar satu detik, dan proses ini tidak dapat terganggu. Pada saat yang sama, tombol-tombol pada telepon tidak diblokir dan mereka dapat ditekan secara bebas, sebagai akibatnya, telepon yang dapat dieksekusi berubah menjadi "kekacauan" yang tidak dapat dipahami.


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

Seperti yang Anda lihat, parameter tombol lain telah ditambahkan, menunjukkan tombol mana yang harus ditekan. (Tabel dengan daftar semua tombol yang dapat ditekan secara virtual ada dalam dokumentasi CTI.)


Hal pertama yang terlintas dalam pikiran: "Apakah tidak mungkin untuk menulis ekstensi untuk browser yang akan memungkinkan Anda untuk melakukan panggilan langsung dari itu?" Pilihan paling sederhana tidak lama datang. Karena saya memiliki browser Google Chrome utama, saya menulis untuk itu, hanya perlu dua file untuk membuat:


 // 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); } }); 

Kami menempatkannya dalam satu folder, di halaman ekstensi kami mengaktifkan mode pengembang dan menghubungkan ekstensi kami.




Untuk mengelola panggilan, permintaan operasi api-phone_ disediakan, dengan itu kami dapat menerima atau menolak panggilan masuk (acceptcall / rejectcall), menunda, atau mengakhiri percakapan saat ini (holdcall / endcall). Perintah pembatalan yang lebih universal juga tersedia, yang memungkinkan Anda untuk menolak dan mengakhiri panggilan. Untuk mengirim, gunakan permintaan formulir:


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

Dan hal terakhir: operasi api-sys_ , akan memungkinkan kita untuk me-restart telepon, atau meresetnya ke pengaturan pabrik (REBOOT dan RESET, masing-masing). Kami menggunakan kueri formulir:


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

Hanya menggunakan Integrasi Komputer-Telephony tidak mungkin dapat membuat aplikasi beramai-ramai yang akan sepenuhnya berinteraksi dengan lingkungan Anda. Tetapi sebagai alat tambahan yang digunakan bersama dengan API lain (URL tindakan di ponsel atau AMI di Asterisk), CTI memiliki hak untuk ada.

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


All Articles