небольшое howto как выдрать номер из базы CRM (в моём случае sugarcrm) при звонке на asterisk (Freepbx-Elastix) и отправить его на экран менеджеру. По разным причинам ни один из способов найденных мною в интеренете не заработал :) искал я долго.
поехали
В Freepbx
в файле extensions_custom.conf
[custom-CallNotifcall]
exten => s,1,TrySystem(/bin/echo ${CALLERID(name)} | /usr/bin/nc SERVER_IP 3333 &)
exten => s,n(dest-ext),Goto(ext-group,600,1)
в Custom Destination admin-Freepbx сделать запись callnotif, которая обращалась к макросу custom-CallNotifcall,s,1
Далее в Incoming Route делаю custon destiation - callnotif
скрипты
notify запущен на SERVER_IP
#!/bin/bash
while true; do nc -l 3333 | while read message1; do
message1=`echo $message1|cut -c2-`
message2=`place_script/search_data.py $message1`
if [[ ! $message2 ]] ; then exit; fi
logger "обработанная инфа "$message2
i=1
while true; do
text=`echo $message2 | cut -d "^" -f\`echo $i\` | cut -d "|" -f1`
if [[ $text ]] ; then
id=`echo $message2 | cut -d "^" -f\`echo $i\` | cut -d "|" -f2`
id=${id// /}
module=`echo $message2 | cut -d "^" -f\`echo $i\` | cut -d "|" -f3`
url="http://webserver.sgm/index.php?module="$module"&action=DetailView&record="$id
message=$message"*$text информация из CRM-"$module""
i=$((i+1))
else break
fi;
done
echo "$message" | nc IP_manager1 3333 &
echo "$message" | nc IP_manager2 3333 &
done ; done
search_data.py
#!/usr/bin/env python
# -- coding: utf-8 --
import MySQLdb as db
import sys
q="%"+sys.argv[1]+"%"
con=db.connect(host="SUGARCRM_IP",
user="user",
passwd="pass",
db="sugarcrm",
charset="utf8" )
cur = con.cursor()
#Запрос в Контакты КОНтрагентов
querry="""SELECT `first_name`,`last_name`,`id` FROM `sugarcrm`.`contacts` WHERE CONVERT(`phone_fax` USING utf8) LIKE '%(q)s' OR CONVERT(`phone_other` USING utf8) LIKE '%(q)s' OR $
cur.execute(querry)
for row in cur:
print row[1].encode('utf-8'), " ", row[0].encode('utf-8'), "|",row[2].encode('utf-8'),"|Contacts|^",
#запрос в LEADS
querry="""SELECT `first_name`,`last_name`,`account_name`,`id` FROM `sugarcrm`.`leads` WHERE CONVERT(`phone_home` USING utf8) LIKE '%(q)s' OR CONVERT(`phone_mobile` USING utf8) LIK$
cur.execute(querry)
for row in cur:
print row[1].encode('utf-8'), " ", row[0].encode('utf-8'), " ", row[2].encode('utf-8'), "|", row[3].encode('utf-8'), "|Leads|^"
#Запрос в Контрагенты
querry="""SELECT `name`,`id` FROM `sugarcrm`.`accounts` WHERE CONVERT(`phone_fax` USING utf8) LIKE '%(q)s' OR CONVERT(`phone_office` USING utf8) LIKE '%(q)s' OR CONVERT(`phone_al$
cur.execute(querry)
for row in cur:
print row[0].encode('utf-8'), "|",row[1].encode('utf-8'), "|Accounts|^"
cur.close()
con.close()
на клиентах постоянно запущен через rc.local скрипт вывода информации на экран
#!/bin/bash
while true; do
nc -l 3333 | while read msg; do
msg=${msg//\*/\\n};
DISPLAY=:0 XAUTHORITY=`echo $HOME`/.Xauthority zenity --info --text "$msg";
done ;
done
Скрипт теперь использует nc для передачи данных это значительно быстрее нежели ssh. Запуск на клиентах скрипта отработки передачи данных с nc позволяет запускать не только zenity, но и notify-send, но я от него отказался, так как у нас используется linphone + kde и сообщения от них показываются последовательно, что не даёт возможность одновременно ответить на звонок и посмореть кто звонит.
P.S.
В итоге отказался от netcat. Так как в произвольный момент ждущий сообщения nc при получении его уходил в 100% загрузку процессора и ничего не делал. Использую jabber, предварительно проверяя включён ли комп
message=$1
infor_for=`fping -aq -t100 192.168.1.xx 192.168.1.xx`
recepient=""
if [[ `echo $infor_for | grep "192.168.1.xx"` ]]; then recepient=$recepient" recepient_jabber1" ; fi ;
if [[ `echo $infor_for | grep "192.168.1.xx"` ]]; then recepient=$recepient" recepient_jabber2" ; fi ;
if [[ $recepient ]]; then echo $message | /usr/bin/sendxmpp -j jabber_server -p password -u jabber_username `echo $recepient` ; fi ;
поехали
В Freepbx
в файле extensions_custom.conf
[custom-CallNotifcall]
exten => s,1,TrySystem(/bin/echo ${CALLERID(name)} | /usr/bin/nc SERVER_IP 3333 &)
exten => s,n(dest-ext),Goto(ext-group,600,1)
в Custom Destination admin-Freepbx сделать запись callnotif, которая обращалась к макросу custom-CallNotifcall,s,1
Далее в Incoming Route делаю custon destiation - callnotif
скрипты
notify запущен на SERVER_IP
#!/bin/bash
while true; do nc -l 3333 | while read message1; do
message1=`echo $message1|cut -c2-`
message2=`place_script/search_data.py $message1`
if [[ ! $message2 ]] ; then exit; fi
logger "обработанная инфа "$message2
i=1
while true; do
text=`echo $message2 | cut -d "^" -f\`echo $i\` | cut -d "|" -f1`
if [[ $text ]] ; then
id=`echo $message2 | cut -d "^" -f\`echo $i\` | cut -d "|" -f2`
id=${id// /}
module=`echo $message2 | cut -d "^" -f\`echo $i\` | cut -d "|" -f3`
url="http://webserver.sgm/index.php?module="$module"&action=DetailView&record="$id
message=$message"*$text информация из CRM-"$module""
i=$((i+1))
else break
fi;
done
echo "$message" | nc IP_manager1 3333 &
echo "$message" | nc IP_manager2 3333 &
done ; done
search_data.py
#!/usr/bin/env python
# -- coding: utf-8 --
import MySQLdb as db
import sys
q="%"+sys.argv[1]+"%"
con=db.connect(host="SUGARCRM_IP",
user="user",
passwd="pass",
db="sugarcrm",
charset="utf8" )
cur = con.cursor()
#Запрос в Контакты КОНтрагентов
querry="""SELECT `first_name`,`last_name`,`id` FROM `sugarcrm`.`contacts` WHERE CONVERT(`phone_fax` USING utf8) LIKE '%(q)s' OR CONVERT(`phone_other` USING utf8) LIKE '%(q)s' OR $
cur.execute(querry)
for row in cur:
print row[1].encode('utf-8'), " ", row[0].encode('utf-8'), "|",row[2].encode('utf-8'),"|Contacts|^",
#запрос в LEADS
querry="""SELECT `first_name`,`last_name`,`account_name`,`id` FROM `sugarcrm`.`leads` WHERE CONVERT(`phone_home` USING utf8) LIKE '%(q)s' OR CONVERT(`phone_mobile` USING utf8) LIK$
cur.execute(querry)
for row in cur:
print row[1].encode('utf-8'), " ", row[0].encode('utf-8'), " ", row[2].encode('utf-8'), "|", row[3].encode('utf-8'), "|Leads|^"
#Запрос в Контрагенты
querry="""SELECT `name`,`id` FROM `sugarcrm`.`accounts` WHERE CONVERT(`phone_fax` USING utf8) LIKE '%(q)s' OR CONVERT(`phone_office` USING utf8) LIKE '%(q)s' OR CONVERT(`phone_al$
cur.execute(querry)
for row in cur:
print row[0].encode('utf-8'), "|",row[1].encode('utf-8'), "|Accounts|^"
cur.close()
con.close()
на клиентах постоянно запущен через rc.local скрипт вывода информации на экран
#!/bin/bash
while true; do
nc -l 3333 | while read msg; do
msg=${msg//\*/\\n};
DISPLAY=:0 XAUTHORITY=`echo $HOME`/.Xauthority zenity --info --text "$msg";
done ;
done
Скрипт теперь использует nc для передачи данных это значительно быстрее нежели ssh. Запуск на клиентах скрипта отработки передачи данных с nc позволяет запускать не только zenity, но и notify-send, но я от него отказался, так как у нас используется linphone + kde и сообщения от них показываются последовательно, что не даёт возможность одновременно ответить на звонок и посмореть кто звонит.
В итоге отказался от netcat. Так как в произвольный момент ждущий сообщения nc при получении его уходил в 100% загрузку процессора и ничего не делал. Использую jabber, предварительно проверяя включён ли комп
message=$1
infor_for=`fping -aq -t100 192.168.1.xx 192.168.1.xx`
recepient=""
if [[ `echo $infor_for | grep "192.168.1.xx"` ]]; then recepient=$recepient" recepient_jabber1" ; fi ;
if [[ `echo $infor_for | grep "192.168.1.xx"` ]]; then recepient=$recepient" recepient_jabber2" ; fi ;
if [[ $recepient ]]; then echo $message | /usr/bin/sendxmpp -j jabber_server -p password -u jabber_username `echo $recepient` ; fi ;
Harrah's Reno, NV - Mapyro
ОтветитьУдалитьHarrah's Reno 동해 출장샵 is a casino hotel in Reno, Nevada. Read reviews and see activity. 삼척 출장마사지 Directions · (877) 993-1000. Mapyro Hotel Reno is a 포천 출장마사지 Reno hotel 경산 출장샵 in Reno, NV and is open 전라북도 출장안마 daily.