تكامل الهاتفية الحاسوبية وهواتف Grandstream


يتم دمج المزيد والمزيد من الاتصالات الحديثة في العالم من حولنا ، والهواتف المكتبية ليست استثناء. قررت Grandstream مواكبة وإضافة دعم لواجهة CTI (تكامل الهاتف - الهاتف) الخاصة بهواتفهم. في البداية ، تم تحديث أجهزة سلسلة GXP21XX ، وبعد ذلك بقليل تم تحديث أجهزة خط GXP16XX الأصغر ، مثل GXP1610 ، GXP1620 ، وما إلى ذلك.


في الواقع ، تُقال "واجهة CTI" بصوت عالٍ ، في الواقع - واجهة برمجة تطبيقات REST صغيرة تسمح لك بالتحكم في هاتفك باستخدام طلبات HTTP بسيطة. يبدو: يمكنك بدء مكالمة ، وتتبع حالة الخطوط التي يستخدمها الهاتف على PBX ، ولكن عند استخدام ، على سبيل المثال ، IP PBX القائم على السحابة ، لا يكون ذلك ممكنًا دائمًا. بالإضافة إلى ذلك ، تسمح لك CTI بالتحكم في مكبر الصوت ، وحجم الصوت ، وكتم صوت الميكروفون ، وما إلى ذلك ، وهو أمر غير ممكن دائمًا على مستوى PBX.


إذن ماذا يمكننا أن نفعل مع CTI؟ بشكل عام ، ليس كثيرًا ، لدينا خمسة أنواع فقط من الطلبات المتاحة:


طلبالوصف
api-get_line_statusحالة الخط
api-get_phone_statusحالة الهاتف
api-send_keyالضغط على مفتاح (0-9 ، # ، * ، حساسة للسياق ، وما إلى ذلك)
api-phone_operationأبسط التلاعبات بالهاتف (تلقي مكالمة ، إعادة تعيين ، إلخ.)
api-sys_operationيسمح لك بإعادة تشغيل الجهاز وإعادة ضبطه على إعدادات المصنع

إن استخدام هذا أمر بسيط للغاية ، فنحن نشكل طلبًا للنموذج:


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

ردًا على ذلك ، نحصل على JSON من النموذج:


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

استبدال api-get_line_status بـ api-get_phone_status في الطلب ، نحصل على معلومات موجزة على الهاتف:


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

تعتبر هذه الطريقة ملائمة عندما نحتاج فقط إلى استجواب حالة الجهاز أو خطوط الهاتف وتكون غير مريحة للغاية في الحالات التي نريد فيها تتبع التغييرات التي تحدث. وصلت مكالمة ، سنأخذ الرقم الوارد ونعرض على المستخدم إشعارًا ، ولكن كيف نفعل ذلك؟ ليس لدينا فرصة للاشتراك في أي أحداث ، ليس قرارًا جيدًا أن تدق الهاتف مرتين أو ثلاث مرات في الثانية مع طلبات الحالة. لسوء الحظ ، في هذه الحالة ، CTI ليس مساعدًا.


نحن ننظر إلى أبعد من ذلك ، api-send_key ، كما يوحي الاسم ، يخدم هذا الطلب لإرسال ضغطات المفاتيح إلى مفاتيح الهاتف ، يمكنك إرسال واحد في كل مرة أو عدة مرات في وقت واحد. في الواقع ، يتم الضغط على المفاتيح المنقولة على فترات تبلغ حوالي ثانية واحدة ، ولا يمكن مقاطعة هذه العملية. في الوقت نفسه ، لا يتم حظر المفاتيح الموجودة على الهاتف ويمكن الضغط عليها بحرية ، ونتيجة لذلك ، يتحول الهاتف القابل للتنفيذ إلى "فوضى" غير مفهومة.


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

كما ترى ، تمت إضافة معلمة مفاتيح أخرى ، تشير إلى المفاتيح التي يجب الضغط عليها. (جدول يحتوي على قائمة بجميع المفاتيح التي يمكن الضغط عليها تقريبًا موجود في وثائق CTI.)


أول ما يتبادر إلى الذهن: "أليس من الممكن كتابة ملحق للمتصفح يسمح لك ببدء مكالمة مباشرة منه؟" لم يكن أبسط خيار قادمًا. نظرًا لأن لدي متصفح Google Chrome الرئيسي ، فقد كتبت له ، ولم يستغرق الأمر سوى ملفين لإنشاء:


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

نضعها في مجلد واحد ، في صفحة الإضافات ، نقوم بتشغيل وضع المطور وربط الامتداد الخاص بنا.




لإدارة المكالمات ، يتم تقديم طلب api-phone_operation ، يمكننا من خلاله قبول أو رفض مكالمة واردة (قبول / رفض / مكالمة) ، أو تعليق أو إنهاء المحادثة الحالية (تعليق / إنهاء). يتوفر أيضًا أمر إلغاء أكثر شمولاً ، والذي يسمح لك برفض وإنهاء المكالمات. للإرسال ، استخدم طلبًا من النموذج:


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

والشيء الأخير: api-sys_operation ، سيسمح لنا بإعادة تشغيل الهاتف ، أو إعادة ضبطه على إعدادات المصنع (REBOOT و RESET ، على التوالي). نستخدم استفسارات النموذج:


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

من غير المحتمل أن يكون استخدام تكامل الهاتف-الكمبيوتر فقط قادرًا على إنشاء تطبيق rollicking يتفاعل تمامًا مع بيئتك. ولكن كأداة إضافية تستخدم مع واجهات برمجة التطبيقات الأخرى (عناوين URL للعمل في الهواتف أو AMIs في النجمة) ، فإن CTI لها الحق في الوجود.

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


All Articles