أخطأت النجمة والإرسال في Telegram / Slack / E-mail

يوجد مركز اتصال. يوجد النجمة / 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
#MONIT_DESCRITION - ,      .
# timestamp    - ( №1).
timedate=$(echo $MONIT_DESCRIPTION | cut -d\| -f1 | cut -d\: -f2 | gawk '{print strftime("%d.%m.%Y %H:%M:%S",$0);}')
# UID ( №2)
call_id=$(echo $MONIT_DESCRIPTION | cut -d\| -f2)
#   ( №3)
qnum=$(echo $MONIT_DESCRIPTION | cut -d\| -f3)

#      
case $qnum in
    210)
        qname=" 1"
        ;;
    220)
        qname=" 2"
        ;;
esac

#      UID,     ENTERQUEUE
str=$(grep "|$call_id|$qnum|.*|ENTERQUEUE" /var/log/asterisk/queue_log)
#      ( №7)
caller_id=$(echo $str | cut -d\| -f7)
#     ( №1)
time_enter=$(echo $str | cut -d\| -f1)
#     ( №1   ABANDON)
time_abandon=$(echo $MONIT_DESCRIPTION | cut -d\| -f1 | cut -d\: -f2)
# 
data=" $caller_id $timedate   $qname,       $(($time_abandon-$time_enter)) ."
#    /.     Slack.
/usr/bin/curl -X POST -H 'Content-type: application/json' --data '{"text":"'"$data"'"}' "https://hooks.slack.com/services/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

في الواقع ، هذا كل شيء!

صحيح ، هناك حادثة واحدة - MONIT ، مصممة لمراقبة كل شيء وكل شيء ؛ إنها نفسها بحاجة إلى المراقبة ، لأن يقع بشكل دوري.

All Articles