يوجد مركز اتصال. يوجد النجمة / FreePBX مع قوائم الانتظار المكونة. هناك وكلاء يجب أن يخدموا المكالمات. ولكن هناك العديد من العملاء المحتملين ، وهناك عدد قليل جدًا من الوكلاء بحيث لا يستطيع الأول الوصول إلى الثاني بأي شكل من الأشكال - تعليق المكالمة في الطابور لمدة دقيقة ، وحتى إيقافه.ولكن لسبب ما اتصلوا! ربما يريدون جلب المال للشركة؟ دعونا نحاول إرجاع العملاء وأموالهم باستخدام مثال FreePBX.في إعدادات قائمة الانتظار ، يمكنك تحديد Fail Over Destination - حيث يتم إرسال المكالمة عندما تكون قائمة الانتظار ممتلئة ، أو انقضت فترة المهلة ، وما إلى ذلك. ولكن غالبًا ما يحدث أن ينقطع اتصال المتصل قبل أن يمكن إعادة توجيهه إلى Fail Over Destination - لا تعرف أبدًا ، يتم قطع الاتصال. لا يوجد حل جاهز لمثل هذه الحالات. لذلك ، نذهب تحت القطع ونكتب رسالتك - مع إرسال تنبيه إلى Telegram / Slack / E-mail / في مكان آخر.وأول شيء نحتاج إلى فهمه هو كيفية كتابة FreePBX لسجلات قائمة الانتظار. في أبسط الحالات ، هذا هو الملف النصي / var / log / asterisk / queue_log.لذلك ، تتم كتابة مكالمة عادية إلى السجل من المشترك 8964467XXXXX ، الذي اتصل بـ 302221XXXX ، الموجود في السطر رقم 603 إلى المركز الأول ، والذي ردت عليه الفتاة من الفتاة بعد 8 ثوانٍ. لقد تحدثوا 133 ثانية وكان المشترك هو أول من أغلق الخط - سيكون لكل شخص مثل هؤلاء المدراء المهذبين!1584318765|1584318747.89449|603|NONE|DID|302221
1584318765|1584318747.89449|603|NONE|ENTERQUEUE||8964467|1
1584318774|1584318747.89449|603|Agent Girl|CONNECT|9|1584318765.89450|8
1584318907|1584318747.89449|603|Agent Girl|COMPLETECALLER|9|133|1
وهنا قصة مختلفة قليلاً عندما قام مشترك 8996453XXXXX بالاتصال برقم 302257XXXXX ، وعلق 10 ثوانٍ في السطر رقم 210 في المركز الأول وانقطع الاتصال. لم أستمع حتى إلى قائمة الصوت!1581728710|1581728690.59367|210|NONE|DID|302257
1581728710|1581728690.59367|210|NONE|ENTERQUEUE||8996453|1
1581728720|1581728690.59367|210|NONE|ABANDON|1|1|10
هذا عنه ، سنكتب في الرسول.للقيام بذلك ، نحتاج إلى التعرف على حدوث حدث ABANDON في ملف السجل. لقد حيرت لفترة طويلة كيف يمكن القيام بذلك ، ولكن بالصدفة صادفت أداة رائعة - MONIT . في حالتنا ، سيراقب سجل قائمة الانتظار ، وبمجرد ظهور السطر "ABANDON" فيه ، سيتم استدعاء البرنامج النصي لمعالجة هذا الحدث.للقيام بذلك ، بعد تثبيت الحزمة:yum install monit
قم بإعداده - قم بإنشاء الملف /etc/monit.d/queue_log واكتب حرفيا ثلاثة أسطر فيه:check file queue_log with path /var/log/asterisk/queue_log
if content = "ABANDON" then
exec "/var/lib/asterisk/agi-bin/qlogevent.sh $EVENT"
وبالتالي ، عندما تظهر كلمة "ABANDON" في سجل قائمة الانتظار ، والتي تخبرنا بفصل المشترك قبل الأوان ، سيتم استدعاء البرنامج النصي /var/lib/asterisk/agi-bin/qlogevent.sh مع المعلمة $ EVENT ، وهو ليس سوى السطر الذي ظهرت فيه هذه الكلمة.انه سهل.والآن ليست الشطرنج هي التي تبدأ - عليك التفكير في الأمر.السطر الذي تم تمريره إلى البرنامج النصي لا يحتوي على معلومات حول رقم المتصل:1581728720|1581728690.59367|210|NONE|ABANDON|1|1|10
يحتوي على طابع زمني فقط (1581728720) ، ومعرف اتصال فريد (1581728690.59367) ، ورقم قائمة انتظار (210) ، والحدث نفسه وعدد قليل من المعلمات غير الضرورية الأخرى. أولئك. سيتعين علينا البحث عن رقم المشترك بأنفسنا. وبأي طريقة؟ وهي بسيطة للغاية ، لأن لدينا UID لمكالمة!دعونا ننتقل مرة أخرى إلى سجل هذه المكالمة ، على وجه التحديد ، إلى الخط الذي يقع فيه المشترك في قائمة الانتظار:1581728710|1581728690.59367|210|NONE|ENTERQUEUE||8996453|1
عندما يقع حدث "ENTERQUEUE" ، فإن أحد المعلمات هو رقم المشترك الذي نحتاجه. يمكننا فقط العثور على هذا السطر في ملف queue_log. هذا بالضبط ما يفعله سكربت باش ، وهو ما دعانا إليه MONIT بعناية:#!/bin/bash
timedate=$(echo $MONIT_DESCRIPTION | cut -d\| -f1 | cut -d\: -f2 | gawk '{print strftime("%d.%m.%Y %H:%M:%S",$0);}')
call_id=$(echo $MONIT_DESCRIPTION | cut -d\| -f2)
qnum=$(echo $MONIT_DESCRIPTION | cut -d\| -f3)
case $qnum in
210)
qname=" 1"
;;
220)
qname=" 2"
;;
esac
str=$(grep "|$call_id|$qnum|.*|ENTERQUEUE" /var/log/asterisk/queue_log)
caller_id=$(echo $str | cut -d\| -f7)
time_enter=$(echo $str | cut -d\| -f1)
time_abandon=$(echo $MONIT_DESCRIPTION | cut -d\| -f1 | cut -d\: -f2)
data=" $caller_id $timedate $qname, $(($time_abandon-$time_enter)) ."
/usr/bin/curl -X POST -H 'Content-type: application/json' --data '{"text":"'"$data"'"}' "https://hooks.slack.com/services/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
في الواقع ، هذا كل شيء!صحيح ، هناك حادثة واحدة - MONIT ، مصممة لمراقبة كل شيء وكل شيء ؛ إنها نفسها بحاجة إلى المراقبة ، لأن يقع بشكل دوري.