Asterisk + SugarCRM
CentOS 6, Asterisk 1.8, SugarCRM 6.5 Callinize
Сделаем update
yum -y update
Выключим Selinux
sed -i s/SELINUX=enforcing/SELINUX=disabled/g /etc/selinux/config
reboot
Установим базовые пакеты сервера
yum -y groupinstall core yum -y groupinstall base
Установим зависимости для SugarCRM
yum -y install php php-pear php-mbstring mysql-server php-mysql php-imap httpd nano
Включим автозагрузку MySQL и Apache
chkconfig httpd on chkconfig mysqld on service httpd start service mysqld start
Проверим версию PHP 5.2+
php -v
PHP 5.3.3 (cli) (built: Oct 30 2014 19:56:14) Copyright (c) 1997-2010 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
Зададим timezone для php
(В примере Europe/Moscow, измените, если требуется)
sed -ie 's/\;date\.timezone\ \=/date\.timezone\ \=\ "Europe\/Moscow"/g' /etc/php.ini
Запретим подключаться к MySQL с других IP
nano /etc/my.cnf [mysqld] ... bind-address = 127.0.0.1
Установите Asterisk 1.8
Установим SugarCRM
Скачаем SugarCRM
(проверьте текущую версию: http://sourceforge.net/projects/sugarcrm/files/)
cd /var/www/html
wget http://downloads.sourceforge.net/project/sugarcrm/1%20-%20SugarCRM%206.5.X/SugarCommunityEdition-6.5.X/SugarCE-6.5.20.zip
Распакуем скачанный архив
unzip SugarCE-*.zip
Переименуем извлеченную директорию
mv SugarCE-*/ crm
Зададим права пользователя
Проверим:
nano -v +242 /etc/httpd/conf/httpd.conf
Если владелец apache,
User apache Group apache
то, соответственно:
chown -R apache:apache /var/www/html/crm
Перезапустим веб сервер
service httpd restart
Дальнейшая установка должна быть продолжена через веб интерфейс.
http://ServerIP/crm/install.php
Откройте установочный скрипт в вашем любимом браузере.
Оставьте имя БД MySQL по умолчанию
Database Name = sugarcrm
Данная инструкция предполагает, что БД находится на этом же сервере:
Host Name = localhost
Измените пароль в соответствии с вашими настройками MySQL
По умолчанию пароль пользователя 'root' MySQL не задан.
Задайте его, если требуется:
mysqladmin -u root password 'SOMEPASSWORD'.
Если пароль был задан, используйте его вместо 'somepassword' в примере
Database Administrator Username = root Database Administrator password = somepassword
Настройте администратора системы
Авторизуйтесь с заданными значениями
Установка модуля CallInize
Скачайте модуль:
http://www.sugarforge.org/frs/?group_id=773
Модуль устанавливается в панели администратора SugarCRM:
Admin → Module Loader
Затем добавим поля модуля, для этого перейдем в:
Admin → Studio
А там:
Users > Layouts > Edit View
Перетаскиваем сперва слева-на-право New Panelи New Row.
На них сверху накладываем Personal Extensinon, Magic Dial Buttons, Call notification.
Сохраняем вид: Save & Deploy.
Callinize - Asterisk SugarCRM Integration
Настроим связь между Asterisk и SugarCRM:
Admin > Module Configuration
Зададим данные для авторизации в Asterisk AMI:
Раздел Asterisk Server Settings Данные Asterisk Manager Login, должны совпадать с пользователем, заданным в файле:
/etc/asterisk/manager.conf
В нашем примере это test/test111
[test] [general] enabled = yes port = 5038 bindaddr = 0.0.0.0 secret = test111 deny=0.0.0.0/0.0.0.0 permit=127.0.0.1/255.255.255.0 read = all write = all
Раздел Call Configuration
Dial Context - Контекст плана набора, в котором будут отслеживаться входящие и исходящие вызовы.
Dialpattern for inbound/outbound matching - ^(SIP\/[1-9][0-9][0-9]?[0-9]?-|Local)
- Регулярное выражение для отслеживание входящих/исходящих вызовов.
Проверим подключение к Asterisk
php /var/www/html/crm/custom/modules/Asterisk/asteriskLogger.php
<spoiler|Asterisk Logger Starting>
******** Asterisk Logger Starting [2015-01-01 00:01:02]************** [Config Settings] Sugar root set to [/var/www/html/crm/custom/modules/Asterisk/../../../] PHP Notice: Undefined index: asterisk_log_file in /var/www/html/crm/custom/modules/Asterisk/asteriskLogger.php on line 133 Main Log is logging to: PHP Notice: Undefined index: asterisk_event_log_file in /var/www/html/crm/custom/modules/Asterisk/asteriskLogger.php on line 134 Found Language file for en_us Callout prefix is [] Callin prefix is [] Match Internal Regex = /^(SIP\/[1-9][0-9][0-9]?[0-9]?-|Local)/i [Database Connection] Selecting DB Name: sugarcrm [SOAP Connection] Trying SOAP login endpoint=[http://192.168.0.52/crm/soap.php] user=[admin] password=[21232f297a57a5a743894a0e4a801fc3] PHP Warning: Attempt to modify property of non-object in /var/www/html/crm/include/nusoap/nusoap.php on line 6166 PHP Warning: Attempt to modify property of non-object in /var/www/html/crm/include/nusoap/nusoap.php on line 6166 PHP Warning: Attempt to modify property of non-object in /var/www/html/crm/include/nusoap/nusoap.php on line 6166 PHP Warning: Attempt to modify property of non-object in /var/www/html/crm/include/nusoap/nusoap.php on line 6166 Successfully logged into Sugar via SOAP! SessionId=mji6fj230a4cm7v2j3n77u4hh4 user=admin GUID=1 [Asterisk Manager Interface (AMI) Connection] Successfully opened socket connection to 127.0.0.1:5038 AMI Version Info: ``` Asterisk Call Manager/1.1 ``` Supported AMI version: 1.1 Detected AMI Login action raw response: ``` Response: Success Message: Authentication accepted ``` AMI Login was a *success!* Waiting for call events...
</spoiler>
Обратите внимание на версию Asterisk Call Manager/1.1 . Использование Asterisk 1.8 обусловлено именно этим.
Например в Asterisk 12 используется Asterisk Call Manager/2.5и всплывающее окно (pop up) не появляется, т.к. формат отображение событий в AMIотличается.
<spoiler| Входящий вызов Asterisk Call Manager/1.1>SIP/1234567 - SIPтранк, по которому поступает вызов
SIP/1111 - вызываемый SIPекстеншен asterisk
4957777 - номер вызывающего абонента
------------------ Phone : 4957777 Cleaning up Failed Calls part1, asterisk_id = 1419854331.2 [2014-12-29 12:00:00] Patiently Waiting...! (mem_used: 3713148) [2014-12-29 12:01:00] Patiently Waiting...! (mem_used: 3713148) [2014-12-29 12:01:22] ! --- Event ----------------------------------------------------------- ! Event --> Newchannel ! Privilege --> call,all ! Channel --> SIP/1234567-00000004 ! ChannelState --> 0 ! ChannelStateDesc --> Down ! CallerIDNum --> 2776 ! CallerIDName --> ! AccountCode --> ! Exten --> 1111 ! Context --> test ! Uniqueid --> 1419854482.4 ! --------------------------------------------------------------------- ! AMI Event 'Newstate suppressed. [2014-12-29 12:01:22] ! --- Event ----------------------------------------------------------- ! Event --> NewCallerid ! Privilege --> call,all ! Channel --> SIP/1234567-00000004 ! CallerIDNum --> 4957777 ! CallerIDName --> ! Uniqueid --> 1419854482.4 ! CID-CallingPres --> 0 (Presentation Allowed, Not Screened) ! --------------------------------------------------------------------- CallerID Changed to: 4957777 [2014-12-29 12:01:22] ! --- Event ----------------------------------------------------------- ! Event --> NewCallerid ! Privilege --> call,all ! Channel --> SIP/1234567-00000004 ! CallerIDNum --> 4957777 ! CallerIDName --> 4957777 ! Uniqueid --> 1419854482.4 ! CID-CallingPres --> 0 (Presentation Allowed, Not Screened) ! --------------------------------------------------------------------- CallerID Changed to: 4957777 [2014-12-29 12:01:22] ! --- Event ----------------------------------------------------------- ! Event --> Newchannel ! Privilege --> call,all ! Channel --> SIP/1111-00000005 ! ChannelState --> 0 ! ChannelStateDesc --> Down ! CallerIDNum --> 1111 ! CallerIDName --> 1111 ! AccountCode --> ! Exten --> ! Context --> test ! Uniqueid --> 1419854482.5 ! --------------------------------------------------------------------- [2014-12-29 12:01:22] ! --- Event ----------------------------------------------------------- ! Event --> Dial ! Privilege --> call,all ! SubEvent --> Begin ! Channel --> SIP/1234567-00000004 ! Destination --> SIP/1111-00000005 ! CallerIDNum --> 4957777 ! CallerIDName --> 4957777 ! ConnectedLineNum --> <unknown> ! ConnectedLineName --> <unknown> ! UniqueID --> 1419854482.4 ! DestUniqueID --> 1419854482.5 ! Dialstring --> 1111 ! --------------------------------------------------------------------- ! Dial Event src=SIP/1234567-00000004 dest=SIP/1111-00000005 PHP Notice: Undefined index: event in /var/www/html/crm/custom/modules/Asterisk/asteriskLogger.php on line 439 ! Successfully created CALL record with id=4521eed1-42ba-093a-4c51-54a1427e1ccb Stripping callout prefix: Stripping callin prefix: CallerID is: 4957777 Looking for user extension number in: SIP/1111-00000005 Channel Matched SIP/### style regex. Ext is:1111 Looking for user extension number in: SIP/1111-00000005 Channel Matched SIP/### style regex. Ext is:1111 inbound_extension = 1111 Inbound state detected... /^(SIP\/[1-9][0-9][0-9]?[0-9]?-|Local)/i is astMatchInternal eChannel= SIP/1234567-00000004 eDestination=SIP/1111-00000005 PHP Notice: Undefined index: event in /var/www/html/crm/custom/modules/Asterisk/asteriskLogger.php on line 613 ! AMI Event 'Newstate suppressed. ! AMI Event 'Newstate suppressed. ! AMI Event 'Newstate suppressed. [2014-12-29 12:01:25] ! --- Event ----------------------------------------------------------- ! Event --> NewAccountCode ! Privilege --> call,all ! Channel --> SIP/1111-00000005 ! Uniqueid --> 1419854482.5 ! AccountCode --> ! OldAccountCode --> ! --------------------------------------------------------------------- [2014-12-29 12:01:25] ! --- Event ----------------------------------------------------------- ! Event --> Bridge ! Privilege --> call,all ! Bridgestate --> Link ! Bridgetype --> core ! Channel1 --> SIP/1234567-00000004 ! Channel2 --> SIP/1111-00000005 ! Uniqueid1 --> 1419854482.4 ! Uniqueid2 --> 1419854482.5 ! CallerID1 --> 4957777 ! CallerID2 --> 1111 ! --------------------------------------------------------------------- DEBUG: Entered Bridge Bridge isn't internal to internal Internal Queue Event Detected Internal Queue: SELECT id FROM asterisk_log WHERE remote_channel like 'SIP/1234567-00000004' and direction='I' and (channel = '' OR channel is NULL) DEBUG: NO Queue BRIDGE ROWS found [2014-12-29 12:01:27] ! --- Event ----------------------------------------------------------- ! Event --> Unlink ! Privilege --> call,all ! Channel1 --> SIP/1234567-00000004 ! Channel2 --> SIP/1111-00000005 ! Uniqueid1 --> 1419854482.4 ! Uniqueid2 --> 1419854482.5 ! CallerID1 --> 4957777 ! CallerID2 --> 1111 ! --------------------------------------------------------------------- [2014-12-29 12:01:27] ! --- Event ----------------------------------------------------------- ! Event --> Hangup ! Privilege --> call,all ! Channel --> SIP/1111-00000005 ! Uniqueid --> 1419854482.5 ! CallerIDNum --> 1111 ! CallerIDName --> 1111 ! ConnectedLineNum --> 4957777 ! ConnectedLineName --> 4957777 ! Cause --> 16 ! Cause-txt --> Normal Clearing
</spoiler>
Настроим автозагрузку asteriskLogger.php
wget https://raw.github.com/blak3r/yaai/master/misc/asterisk_logger
mv asterisk_logger /etc/init.d/ chmod 755 /etc/init.d/asterisk_logger chmod 755 /etc/init.d/functions
Отредактируем asterisk_logger
nano +34 /etc/init.d/asterisk_logger
заменим: . /lib/lsb/init-functions
на: /etc/init.d/functions
проверим:
/etc/init.d/asterisk_logger start
Если нет ошибок, включим автозагрузку:
chkconfig --add asterisk_logger
chkconfig asterisk_logger on