Установка SuiteCRM 7.5. Интеграция с Asterisk посредством Callinize — community Edition

в 9:49, , рубрики: asterisk, Callinize, CRM-системы, sugarcrm

Возникла у меня необходимость установки связки: Asterisk + CRM + Интеграция. С установкой Asterisk и FreePBX на Ubuntu проблем не возникло. Отличная статья с пошаговыми инструкциями и картинками, справится даже новичок.

Но вот когда дело дошло до установки CRM и попыток дружбы оной с Астером, у меня начали клочками выпадать волосы на голове. Сначала я думал, что эта задача так же проста, как и установка Ubuntu+Asteris+FreePBX. Но уже через несколько дней понял, что нормальных мануалов, а у же тем более нормальных бесплатных моделей просто нет. Так компания у нас не большая и покупать что-либо желания нет. Пришлось купить по кускам разные мануалы, посты, статьи и методом проб и ошибок устанавливать и интегрировать CRM с Астером.

Выбирал из 3-х (Сахар, вТигр и Сюит) и свой выбор остановил на SuiteCRM (остальные не прошли проверку на прочность и совместимость с модулями интеграции С Астером).

В этой статье я собственно и хочу поделится опытом установки и интеграции SuiteCRM с Астериском. Тот, кто уже установил SuiteCRM, и она успешно работает, можем смело пролистывать часть с установкой и переходить к интеграции.

Установка SuiteCRM

Открываем терминал и коннектимся к нашему Ubuntu Server под root'ом.

1. Для начала перейдите в html каталог (у меня, например /var/www/html, а у вас может быть другой):

cd  /var/www/html

2. Скачиваем архив с последней версией CRM (на момент написания статьи это была 7.5):

wget https://github.com/salesagility/SuiteCRM/archive/v7.5.tar.gz

3. Распаковываем архив:

tar zxvf v7.5.tar.gz

4. Переименовываем каталог (для удобства, что бы не писать потом длинный адрес в строке браузера):

mv SuiteCRM-7.5 crm

5. Назначаем права нового каталога:

chmod -R 775 crm
chmod -R a+wr crm

6. Открываем в браузере страницу наш_сервер/crm и приступаем к настройке.

7. Читаем и соглашаемся с лицензионным соглашением, нажимаем Next:

image

8. Делаем пару глотков чая и съедаем одну печенюшку, пока система проверит «почву» на которой будет расти.

image

9. CRM все проверила и ей все подходит. Жмем Next:

image

Если ругается на IMAP Module, то просто устанавливаем его:

Установка

sudo apt-get install php5-imap
sudo php5enmod imap
sudo service apache2 restart

10. Заполняете все необходимые поля:

image

Если хотите, чтобы в CRM сразу были демонстрационные данные, то Choose Demo Data -> Populate Database with Demo Data? -> Yes.

11. Идем допивать чай и доедать печенюшки пока система все установит и настроит:

image

12. Система установлена и готова к работе. Вводим логи и пароль главной администратора и наживаем Log In:

image

13. Ура. Система работает. Дальше курим гайды как ею пользоваться.

Перейдем к этапу, который мне сносил мозг несколько дней.

Интеграция с Asterisk посредством Callinize — community Edition

Скажу сразу, что бесплатного решения этой задачи «из коробки» нет. Я потратил несколько дней на то, чтобы перепробовать все CRM в комбинациях со всеми доступными бесплатными модулями интеграции: все вариации нерабочие. Какие-то я пытался допилить руками, какие-то удалял сразу после установки. В общем, эту статью я, собственно, и собрался писать, чтобы сэкономить кому-то время и нервы.

У меня стояли следующие задачи: Необходимо, чтобы из CRM можно было прямо из окна браузера позвонить одним кликом мыши. Чтобы при звонке (входящем/исходящем) сразу в окне браузера CRM показывала карточку клиента с необходимой информацией. Все это необходимо было сделать для облегчения работы сэйлов моей компании.

Я остановил свой выбор (вернее не остановил выбор, а методом проб и ошибок выяснил, что это самый рабочий вариант) на «Callinize — community Edition». Не знаю, можно ли скачать бесплатную версию с их сайта , я не нашел. Где-то в дебрях паутины я наткнулся на OpenSourсe yaai-Callinize и скачал его. Где скачал уже не помню, да и для того, чтобы пакет встал на SuiteCRM, пришлось немного допилить его внутренности.

Итак: «скальпель, сестра, приступим»:

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

1. Качаем отсюда модуль;

2. Заходим в нашу CRM и переходим в раздел Administrator -> Admin -> Module Loader;

3. Выбираем файл модуля, который скачали и нажимаем Upload;

4. Когда файл загрузится и отобразится в нижнем окошке, кликаем Install на нашем модуле:

image

5. Читаем и принимаем соглашение и нажимаем Commit:

image

6. Ждем пока установится модуль и нажимаем Back to Module Loader:

image

Это все присказка была, а вот теперь начинается самый сок — нам нужно подружить всех разом Asterisk, CRM и Yaai. Спасибо Хабру за запрет на использование в статьях ненормативной лексики, а то бы я сейчас написал, что я думаю про всех разработчиков модуля!

Настройка нашего модуля

1. Создадим менеджера Астера, под которым будет работать наш модуль, для этого правим manager.conf:

nano /etc/asterisk/manager.conf

добавим в файл эти строки и сохраним файл
[yaai]
secret = пароль_менеджера_yaai
deny=0.0.0.0/0.0.0.0
permit=127.0.0.1/255.255.255.0
read = all 
; ^--- on some systems you can get away with just "call,hud"
write = originate,system,call

После чего перезапускаем Asterisk, чтобы он прочитал новые настройки:

asterisk -rx "module reload manager"

2. Далее настроим наш модуль. Идем в окно браузера с нашей CRM и открываем Administratir -> Admin -> листаем в самый низ, находим пункт раздел «Callinize — Asterisk SugarCRM Integration» и кликаем «Module Configuration»:

image

3. Введем логин и пароль менеджера:

Asterisk Manager Login — yaai
Asterisk Manager Secret — пароль, который вы указали в manager.conf

И SOAP:

SugarCRM Soap-User — admin
SugarCRM Soap-Pass — пароль, который вы указывали для суперадминистратора при установке SugarCRM

Остальные значения пока не трогаем, жмем Save:

image

4. Идем Administratir -> Admin -> Studio.

Раздел Modules листаем вниз. Находим папку «User», раскрываем ее, раскрываем папку «Layouts», кликаем «EditView». В правом окне у нас откроется шаблон настроек пользователя, в который мы должны будем кое-что добавить:

Для начала перетягиваем «New Panel», на нее кидаем «New Row». Затем на поля (filler) перетягиваем 3 значения: Personal Extension, Magic Dial Buttons, Call Notification. Кликаем Save & Deploy. Должно получится вот так:

image

5. Идем в Administratir -> Admin -> User Manager.

Кликаем на пользователя (я буду настраивать Administrator), в открывшемся окне жмем Edit. Увидим, что панель, которую мы добавляли в п.4, теперь появилась тут и можно заполнять поля. В поле Personal Extension(s) прописываем внутренний номер пользователя (я надеюсь, что во FreePBX вы уже создали Extension, который хотите присвоить пользователю во SuitCRM, например, у меня уже есть внутренний номер 1001, его я и присвою Administrator). Ставим галки Magic Dial Buttons, Call Notification и жмем Save:

image

И вот тут первый косяк. Не знаю почему, но при первом сохранении настроек пропадает меню CRM. Будем это лечить правкой CSS кода.

nano /var/www/html/crm/custom/modules/Asterisk/include/css/asterisk.css

ищем блок ".dropdown-menu LI" и убираем "display: none; " 

Меню полечили.

6. Открываем терминал и запускаем скрипт:

cd /var/www/html/crm/custom/modules/Asterisk
php asteriskLogger.php

Если у вас скрипт в конце вывел на экран следующее «Waiting for call events...»:

[Asterisk Manager Interface (AMI) Connection]
 Successfully opened socket connection to 127.0.0.1:5038
 AMI Version Info:
 ```
 Asterisk Call Manager/2.8.0
 ```
 AMI Login action raw response:
 ```
 Response: Success
 Message: Authentication accepted
 ```
 AMI Login was a *success!*
Waiting for call events...

Заначит вы все сделали правильно.

Если лезут ошибки, значит вы где-то не внимательно читали/выполняли пункты инструкции!

7. Давайте проверим. В нашей CRM создадим контакт, например, Markenig -> Contacts -> Create. Заполняем First Name, Last Name, и главное Office Phone — тут пишем номер телефона, на который будем сейчас звонить, чтобы протестировать исходящие звонки из CRM. Жмем Save:

image

8. И вот что мы видим:

image

Нажимаем на зеленую трубочку и — о чудо! — звонит наш внутренний телефон, после того, как мы снимем трубку, Астериск будет звонить на номер, который был возле зеленой трубки и соединит нас. Ура. Исходящие работают.

НО! У нас нет всплывающей карточки клиента при звонке. Она должна появляться в окне CRM при исходящем/входящем звонке и отображать инфо о контрагенте. Будем лечить это. Потому что эта «фишка» нам очень нужна.

Итак, сначала нам необходимо скачать handlebars.runtime.js:

 cd /var/www/html/crm/custom/modules/Asterisk/include/javascript/
wget  http://builds.handlebarsjs.com.s3.amazonaws.com/handlebars.min-latest.js
mv handlebars.min-latest.js handlebars.runtime.js

Теперь будем править callPopups.js:

nano callPopups.js

находим строку template = Handlebars.templates['call-template.html'];
и заменяем ее на 
var source   = '<div id="{{callbox_id}}" class="callbox"><div class="callboxhead"><div class="callboxtitle">{{title}}</div><div class="callboxoptions"><a href="#" class="callbox_close">X</a></div></div><div class="control_panel"><button class="transfer_panel"></button><button class="operator_panel"></button><!--<button class="callbox_action" data-dropdown="#dropdown-1_{{callbox_id}}"></button>--><button class="callbox_action"></button></div><div id="dropdown-1_{{callbox_id}}" class="dropdown-menu has-tip dropdown-hidden"> <!-- left: 746px; top: 631px; display: block; --><ul><li class="ul_relate_to_contact"><a href="#" class="relate_to_contact">{{relate_to_contact_label}}</a></li><li class="ul_relate_to_account"><a href="#" class="relate_to_account">{{relate_to_account_label}}</a></li><li class="ul_create_contact"><a href="#" class="create_contact">{{create_new_contact_label}}</a></li></ul></div><div class="callboxcontent"><div class="asterisk_info"><h4 class="call_type">{{call_type}}</h4><div><table class="asterisk_data"><tr class="multiplematchingcontacts"><td colspan="2"><b>{{select_contact_label}}</b>{{#each beans}}<p class="select_contact" id="contact_{{bean_id}}"><input type="radio" name="contactSelect" class={{bean_module}} value={{bean_id}}  /><a class="multiplecontacts" title="{{parent_name}}" href={{bean_link}}>{{bean_name}}</a></p>{{/each}}</td></tr><tr class="singlematchingcontact"><td>{{name_label}}</td><td><a class="contact_id" href="{{bean_link}}"><span class="call_contacts">{{bean_name}}</span></a><!-- <button class="unrelate_contact"></button> --></td></tr><tr class="parent_name_box"><td>{{company_label}}</td><td><a class="company" href="{{parent_link}}">{{parent_name}}</a></td></tr><tr class="caller_id_box"><td class="caller_id_label">{{caller_id_label}}:</td><td class="caller_id">{{caller_id}}</td></tr><tr class="phone_number_box"><td class="phone_number_label">{{phone_number_label}}:</td><td class="phone_number">{{phone_number}}</td></tr><tr class="call_duration_box"><td class="call_duration_label">{{duration_label}}:</td><td><span class="call_duration">{{duration}}</span></td></tr><!--<tr class="call_time_box">--><!--<td class="call_time_label">{{call_time_label}}:</td>--><!--<td>--><!--<span class="call_duration">{{call_time}}</span>--><!--</td>--><!--</tr>--></table></div></div></div><div class="callboxinput"><textarea rows="4" cols="30" class="callboxtextarea callboxtextareaselected"></textarea><div class="callboxbuttons"><table width="100%"><tbody><tr><td valign="bottom"><button class="save_memo">{{save_label}}</button></td></tr></tbody></table></div></div><form class="call_record_id" name="{{call_record_id}}"><input type="hidden" name="relateContactId"/><input type="hidden" name="relateContactFirstName"/><input type="hidden" name="relateContactLastName"/><input type="hidden" name="relateAccountId"/><input type="hidden" name="relateAccountName"/></form></div>';
var template = Handlebars.compile(source);

Все готово. Окна появляются, звонки идут. Теперь настроим автозагрузку 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

Автор: frundik

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js