एक कॉल सेंटर है। कॉन्फ़िगर की गई कतारों के साथ Asterisk / FreePBX है। ऐसे एजेंट हैं जो कॉल को सेवा देना चाहिए। लेकिन बहुत सारे संभावित ग्राहक हैं, और इतने कम एजेंट हैं कि पहले किसी भी तरह से दूसरे तक नहीं पहुंच सकते हैं - वे एक मिनट के लिए लाइन में लटकाते हैं, और वे बंद हो जाते हैं।लेकिन किसी कारण से उन्होंने फोन किया! शायद वे कंपनी में पैसा लाना चाहते हैं? आइए FreePBX उदाहरण का उपयोग करके ग्राहकों और उनके धन दोनों को वापस करने का प्रयास करें।कतार सेटिंग्स में, आप फेल ओवर डेस्टिनेशन को निर्दिष्ट कर सकते हैं - जहां कतार भर जाने पर कॉल भेजना है, टाइमआउट अवधि समाप्त हो गई है, आदि। लेकिन अक्सर ऐसा होता है कि फोन करने वाले को फेल ओवर डेस्टिनेशन पर पुनर्निर्देशित करने से पहले डिस्कनेक्ट हो जाता है - आप कभी नहीं जानते हैं, कनेक्शन काट दिया गया है। ऐसे मामलों के लिए कोई तैयार समाधान नहीं है। इसलिए, हम कट के नीचे जाते हैं और अपना खुद का लिखते हैं - टेलीग्राम / स्लैक / ई-मेल / कहीं और अलर्ट भेजने के साथ।और सबसे पहले हमें यह समझने की ज़रूरत है कि 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 को फोन किया, पहले नंबर पर लाइन नंबर 210 में 10 सेकंड लटका दिया और डिस्कनेक्ट हो गया। मैंने आवाज मेनू भी नहीं सुना!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" शब्द कतार लॉग में प्रकट होता है, जो हमें समय से पहले ग्राहक को डिस्कनेक्ट करने के लिए कहता है, तो $ EVV पैरामीटर के साथ /var/lib/asterisk/agi-bin/qlogevent.sh स्क्रिप्ट को कॉल किया जाएगा, जो पूरी तरह से अन्य कुछ भी नहीं है। वह पंक्ति जिसमें यह शब्द दिखाई दिया।यह आसान है।और अब यह शतरंज नहीं है जो शुरू होता है - आपको इसके बारे में सोचने की जरूरत है।स्क्रिप्ट को दी गई लाइन में कॉलर की संख्या के बारे में जानकारी नहीं होती है:1581728720|1581728690.59367|210|NONE|ABANDON|1|1|10
इसमें केवल टाइमस्टैम्प (1581728720), एक अद्वितीय कॉल आईडी (1581728690.59367), एक कतार संख्या (210), घटना स्वयं और कुछ अन्य गैर-आवश्यक पैरामीटर हैं। उन। हमें स्वयं ग्राहक संख्या की खोज करनी होगी। और किस तरह से? और यह बहुत आसान है, क्योंकि हमारे पास कॉल का एक यूआईडी है!आइए हम फिर से इस कॉल के लॉग की ओर मुड़ें, विशेष रूप से, उस पंक्ति में, जिसमें ग्राहक कतार में पड़ता है:1581728710|1581728690.59367|210|NONE|ENTERQUEUE||8996453|1
जब "ENTERQUEUE" घटना होती है, तो मापदंडों में से एक वह ग्राहक संख्या है जिसकी हमें आवश्यकता है। हम इस लाइन को केवल कतार_लॉग फ़ाइल में पा सकते हैं। यह वास्तव में बैश स्क्रिप्ट क्या कर रहा है, जिसे ध्यान से हमारे लिए बुलाया गया है:#!/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, जिसे हर चीज और हर चीज पर नजर रखने के लिए बनाया गया है; इसे खुद निगरानी की जरूरत है, क्योंकि समय-समय पर गिरती है।