Asterisk + SugarCRM

Сделаем 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

Нажмите, чтобы отобразить

Нажмите, чтобы скрыть

 cd /usr/src &&
 wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-1.8-current.tar.gz
cd /usr/src && 
tar xvfz asterisk-1.8-current.tar.gz* &&
cd asterisk-1.8.* &&
./configure &&
contrib/scripts/get_mp3_source.sh &&
make &&
make install &&
make config &&
make samples

Установим SugarCRM

проверим настройки php

проверим настройки php

nano +457 /etc/php.ini

memory_limit = 128M
(Ctl-x > y > ENTER)
nano +878 /etc/php.ini

upload_max_filesize = 20M
(Ctl-x > y > ENTER)
RHEL 6
nano +338 /etc/httpd/conf/httpd.conf

AllowOverride All
(Ctl-x > y > ENTER)

Скачаем 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

Откройте установочный скрипт в вашем любимом браузере.

По умолчанию в CentOS включен файервол. Отключите его если требуется:

 service iptables stop

Или откройте доступ к 80-му порту:

 iptables -A INPUT -p tcp --dport 80 -j ACCEPT
 service iptables save

Оставьте имя БД MySQL по умолчанию

 Database Name = sugarcrm

Данная инструкция предполагает, что БД находится на этом же сервере:

 Host Name = localhost

Измените пароль в соответствии с вашими настройками MySQL

По умолчанию пароль пользователя 'root' MySQL не задан.
Задайте его, если требуется:
mysqladmin -u root password 'SOMEPASSWORD'.
Если пароль был задан, используйте его вместо 'somepassword' в примере

  Database Administrator Username = root
  Database Administrator password = somepassword

sugarcrm database conf

Настройте администратора системы

sugarcrm install admin

Авторизуйтесь с заданными значениями

Установка модуля CallInize

Скачайте модуль:

http://www.sugarforge.org/frs/?group_id=773

Модуль устанавливается в панели администратора SugarCRM:

Admin → Module Loader

Затем добавим поля модуля, для этого перейдем в:

Admin → Studio

А там:

Users > Layouts > Edit View

sugarcrm 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:

sugarcrm callinize

Раздел 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

Всплывающее окно SugarCRM

sugarcrm popup

Приложения

  • artikle/sugarcrm.txt
  • Последние изменения: 2018/03/12