Но есть нюанс — телефония вся в офисе, а БД 1) в датацентре, 2) астериск не умеет писать туда напрямую, 3) требуются поля, которые астериск в cdr не пишет
Понаписал скрипт и выяснил, что задолбаюсь вписывать его в диалплан.
Пока предварительно решил, что проще по крону проверять новизну файла логов (он же Master.csv) и потом выдирать новые звонки оттуда.
Осталось выяснить, какая задержка между покладанием трубки и попаданием в БД подойдёт сему погонщику...
Три вопроса, ответы от 1 до 5 ИЛИ тупо записать 30 секунд сообщения, сказать "спасибо" и отправить результаты и файл в панель.
И вот на ИЛИ я чего-то встрял — у нас и так все звонки пишутся (в макрос установлен MixMonitor), осталось только получить имя файла, в чём пока что есть мелкая проблема...
pbxware.ru имеют low-профиль? влезут, например, в такой блок: dns-shop.ru ?
скажите, а эти платы Для примера. Вот есть отдел продаж. Там 5 человек, очередь RoundRobin. Кажется что все хорошо, загоняешь всех сотрудников в очередь, делаешь Queue() и забываешь. Но нет! Как только приходит: "Ой а сделайте мне переадресацию если я 30сек трубку не беру", тогда приходится городить Local/ и для правильного лога и имени файла с записью звонка добавлять глобальные переменные и т.д. Кто-то скажет: "А чего не настроить переадресацию на телефоне сразу?" и я соглашусь с этим человеком, но руководство в упор считает, что "пользователи не должны сами управлять такими вещами, иначе все из курилки работать будут..." вот такой вот ынтерпрайз...А еще в asterisk поломался модуль авто-определения факсимильного вызова, мелочь, но неприятно...
Рад, щаслив, горд (С)
Вся маршрутизация:
exten => _8XXXXXXXXXX,n,AGI(/etc/asterisk/dialplan_scripts/spb.sh,${EXTEN:1})
exten => _8XXXXXXXXXX,n,Macro(${DIAL_VIA},${EXTEN})
При этом, естественно, есть макросы с именами типа macro-dial-msk, в которых происходит попытка дозвониться по одной из доступных линий, а в случае неуспеха — переключение на другую.
Ну чо, раз такое тз — сами виноваты, что я пишу это на перле :-)
И даже звонки на местные сотовые — аналогично...
Ну чо... Список префиксов для Екб (аж две штуки), список префиксов для СПб (полторы сотни), остальное — через МСК.
Раз взяли — надо настроить в asterisk.
Но есть грабли: параметр externip= является глобальным для всего демона и он уже установлен в нужное значение, через которое работает номер с 8-800
Сижу, чешу репу...
Статистика по балансу на GSM-модемах в Asterisk. http://ru.man.wikia.com/wiki/%D0%A1%D1%82%D0%B0%D1%82%D0%B8%D1%81%D1%82%D0%B8%D0%BA%D0%B0_%D0%BF%D0%BE_%D0%B1%D0%B0%D0%BB%D0%B0%D0%BD%D1%81%D1%83
В Freepbx
в файле extensions_custom.conf
[custom-CallNotifcall]
exten => s,1,TrySystem(/usr/bin/ssh user@server "nohup bash /home/user/notify ${CALLERID(name)}" &)
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
#!/bin/bash
#
#Send messages through SSH to remote hosts' notify-osd
#
message="$@"
message=`echo $message|cut -c2-`
message=`/home/user/search_data.py $message`
logger "обработанная инфа "$message
ssh manager1@manager1-work.local "DISPLAY=:0 XAUTHORITY=/home/manager1/.Xauthority zenity --info --text \"$message\"" &
ssh manager1@manager2-work.local "DISPLAY=:0 XAUTHORITY=/home/manager2/.Xauthority zenity --info --text \"$message\"" &
exit
search_data.py
#!/usr/bin/env python
# -- coding: utf-8 --
import MySQLdb as db
import sys
q="%"+sys.argv[1]+"%"
con=db.connect(host="sugar_server",
user="user",
passwd="pass",
db="sugarcrm",
charset="utf8" )
cur = con.cursor()
#запрос в LEADS
querry="""SELECT `first_name`,`last_name`,`account_name`,`assigned_user_id` FROM `sugarcrm`.`leads` WHERE CONVERT(`phone_home` USING utf8) LIKE '%(q)s' OR CONVERT(`phone_mobile` USING utf8) LIKE '%(q)s' OR CONVERT(`phone_work` USING utf8) LIKE '%(q)s' OR CONVERT(`phone_other` USING utf8) LIKE '%(q)s'"""%{"q":q}
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')
#Запрос в Контрагенты
querry="""SELECT `name` FROM `sugarcrm`.`accounts` WHERE CONVERT(`phone_fax` USING utf8) LIKE '%(q)s' OR CONVERT(`phone_office` USING utf8) LIKE '%(q)s' OR CONVERT(`phone_alternate` USING utf8) LIKE '%(q)s'"""%{"q":q}
cur.execute(querry)
for row in cur:
print row[0].encode('utf-8')
#Запрос в Контакты КОНтрагентов
querry="""SELECT `first_name`,`last_name`,`assigned_user_id` FROM `sugarcrm`.`contacts` WHERE CONVERT(`phone_fax` USING utf8) LIKE '%(q)s' OR CONVERT(`phone_other` USING utf8) LIKE '%(q)s' OR CONVERT(`phone_work` USING utf8) LIKE '%(q)s' OR CONVERT(`phone_home` USING utf8) LIKE '%(q)s' OR CONVERT(`phone_mobile` USING utf8) LIKE '%(q)s'"""%{"q":q}
cur.execute(querry)
for row in cur:
print row[1].encode('utf-8'), " ", row[0].encode('utf-8'), " ", row[2].encode('utf-8')
cur.close()
con.close()
Из проблем пока не понял как сделать всплывающие сообщение notify не работает через ssh, zenit --notification с ошибками отваливается
Asterisk у меня на Elastix :) в каждом файле "этот файл генерируется автоматически". Куда копать?
Нашел тут: svn.asterisk.org
AGI Tx >> 200 result=1 (�)
что-то мне подсказывает, что читаю я мусор...
надо ли уточнять, что файл отлично существует и права правильные?