Кастомизация интеграции Asterisk с Terrasoft (BPM Online CRM)
В прошлой статье мы рассмотрели как выполнить интеграцию BPM online CRM с Asterisk, но стандартный функционал интеграции обладает ограниченными возможностями, в рамках же данной статьи будет рассмотрен пример расширения возможностей интеграции посредством написания дополнительного конфигурационного сервиса(https://academy.terrasoft.ru/documents/technic-sdk/7-13/razdel-konfiguraciya) в встроенных средствах разработки CRM. 1. Пройдем авторизацию в CRM системе с правами администратора и перейдем в раздел «Настройки […]

В прошлой статье мы рассмотрели как выполнить интеграцию BPM online CRM с Asterisk, но стандартный функционал интеграции обладает ограниченными возможностями, в рамках же данной статьи будет рассмотрен пример расширения возможностей интеграции посредством написания дополнительного конфигурационного сервиса(https://academy.terrasoft.ru/documents/technic-sdk/7-13/razdel-konfiguraciya) в встроенных средствах разработки CRM.
1. Пройдем авторизацию в CRM системе с правами администратора и перейдем в раздел «Настройки → Управление конфигурацией → Конфигурация → Добавить» и в выпадающем списке выберем «Исходный код».



2. В открывшейся форме редактирования исходного кода первым шагом необходимо прописать «Заголовок» и «Название» создаваемой конфигурации. И в качестве примера данной статьи рассмотрим конфигурационный сервис который будет возвращать имя клиента по его номеру прописанному в CRM, для этого пропишем следующий код, сформированный на основе официальной документации для разработчиков: https://academy.terrasoft.ru/documents/technic-sdk/7-14/sozdanie-polzovatelskogo-konfiguracionnogo-servisa
namespace Terrasoft.Configuration.UsrCustomConfigurationService
{
using System;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.ServiceModel.Activation;
using Terrasoft.Core;
using Terrasoft.Web.Common;
using Terrasoft.Core.Entities;
[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
public class UsrCustomConfigurationService: BaseService
{
// Метод, возвращающий имя контакта по его номеру.
[OperationContract]
[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped,
ResponseFormat = WebMessageFormat.Json)]
public string GetContactNamebyPhone(string Phone){
// Результат по умолчанию.
var result = "";
// Экземпляр EntitySchemaQuery, обращающийся в таблицу Contact базы данных.
var esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "Contact");
// Добавление колонок в запрос.
var colName = esq.AddColumn("Name");
// Фильтрация данных запроса по номеру и типу сравнения Contain.
var esqFilter = esq.CreateFilterWithParameters(FilterComparisonType.Contain, "Phone", Phone);
esq.Filters.Add(esqFilter);
// Получение результата запроса.
var entities = esq.GetEntityCollection(UserConnection);
// Если данные получены.
if (entities.Count > 0)
{
// Возвратить значение колонки "Name" первой записи результата запроса.
result = entities[0].GetColumnValue(colName.Name).ToString();
}
// Возвратить результат.
return result;
}
}
}

3. После заполнения всех необходимых полей из предыдущего пункта, для возможности обращения к создаваемому конфигурационному сервису его необходимо «Сохранить» и «Опубликовать»




4. Для возможности обращения к конфигурационному сервису добавим в CRM пользователя “Supervisor” и предоставим ему достаточные права для доступа к внешним сервисам. Перейдем в Настройки → Пользователи системы → Добавить → Пользователя портала, заполним основные разделы и нажать «Сохранить для применения внесенных изменений»:
Контакт — контактные данные закрепленные за пользователем
На вкладке «Основная информация»:
Имя пользователя — в примере данной статьи «Supervisor»
Пароль — пароль создаваемого
пользователя
Подтверждение пароля —
пароль создаваемого пользователя
На вкладке «Роли»:
Организационные роли — в рамках данной статьи назначим права
администратора данному пользователю




5. Выполним подключение по SSH к серверу IP АТС Asterisk для дальнейшей настройки. В зависимости от используемой системы(Windows, Linux, MacOS), подключение по SSH можно выполнить с использованием различного дополнительного программного обеспечения(Putty), либо системного терминала.
6. Создадим исполняемый php файл посредством обращения к которому из Asterisk будем получать имя звонящего клиента из CRM:
# nano /opt/bpm_check.php
И предем данный файл к виду(не забывая изменить логин, пароль и адрес CRM):
#!/usr/bin/php -q
<?php
//*********************************************
//Обращение к методу AuthService (Авторизация)
//*********************************************
//Ссылка на метод авторизации
$url = "https://048821-crm-bundle.bpmonline.com/ServiceModel/AuthService.svc/Login";
//Формируем данные для запроса содержащих логин и пароль
$requestData["UserName"] = "Supervisor";
$requestData["UserPassword"] = "password";
//Формируем json-представление данных
$jcres = json_encode($requestData);
//Инициируем сеанс cUrl
$ch = curl_init($url);
//Определяем файл для хранения cookies
curl_setopt($ch, CURLOPT_COOKIEJAR,'cookie.txt');
//Указываем метод запроса
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
//Подставляем данные для передачи в запросе
curl_setopt($ch, CURLOPT_POSTFIELDS, $jcres);
//Указываем, что результат вернем в строку при вызове метода curl_exec()
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//Формируем массив http-заголовков. Формат json.
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($jcres))
);
$result = curl_exec($ch);
curl_close($ch);
//Определяем файл для хранения cookies
$file = "cookie.txt";
$lines = file( $file );
$str = $lines[6];
$prefix = "BPMCSRF";
$index = strpos($str, $prefix) + strlen($prefix);
// Присвоим переменной токкен сессии авторизации
$token = trim(substr($str, $index));
//*********************************************
//Обращение к методу GetContactNamebyPhone созданного конфигурационного сервиса в CRM
//*********************************************
//Ссылка на метод GetContactNamebyPhone
$url_1 = "https://048821-crm-bundle.bpmonline.com/0/rest/UsrCustomConfigurationService/GetContactNamebyPhone";
$requestDataService["Phone"] = $argv[1];
//Формируем json-представление данных содеращий номер звонящего клиента передаваемый из Asterisk
$jcres = json_encode($requestDataService);
$ch5 = curl_init($url_1);
curl_setopt($ch5, CURLOPT_COOKIEFILE, 'cookie.txt');
curl_setopt($ch5, CURLOPT_COOKIEJAR,'cookie.txt');
curl_setopt($ch5, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch5, CURLOPT_POSTFIELDS, $jcres);
curl_setopt($ch5, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch5, CURLOPT_HEADER ,FALSE);
curl_setopt($ch5, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'BPMCSRF: ' .$token,
'Content-Length: ' . strlen($jcres))
);
$result5 = curl_exec($ch5);
curl_close($ch5);
$result5 = json_decode($result5, true);
//Возвращаем результат обращения содержащий имя клиента из базы CRM
echo print_r($result5['GetContactNamebyPhoneResult'],true);
unlink('cookie.txt');

7. Приступим к конфигурированию Asterisk, в качестве примера рассмотрим создание кастом контекста для входящего маршрута:
# nano /etc/asterisk/extensions_custom.conf
И приведем данный файл к виду:
[from-7495XXXXXXX]
exten => _X.,1,Set(TOEXT=${SHELL(/opt/bpm_check.php ${CALLERID(num)})})
same => n,NoOp(Name Client=${TOEXT})
same => n,Set(CALLERID(name)=${TOEXT})
same => n,Goto(from-trunk,7495XXXXXXX,1)

В результате установив данный контекст в параметрах транка используемой городской линии, при прохождении звонка с номера известного клиента, на экране телефонного аппарата(софтфона) отобразиться имя звонящего клиента:


Остались вопросы?
Я - Першин Артём, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.
категории
- DECT
- Linux
- Вспомогательный софт при работе с Asterisk
- Интеграция с CRM и другими системами
- Интеграция с другими АТС
- Использование Elastix
- Использование FreePBX
- Книга
- Мониторинг и траблшутинг
- Настройка Asterisk
- Настройка IP-телефонов
- Настройка VoIP-оборудования
- Новости и Статьи
- Подключение операторов связи
- Разработка под Asterisk
- Установка Asterisk
VoIP оборудование
ближайшие курсы
Новые статьи
10 доводов в пользу Asterisk
Распространяется бесплатно.
Asterisk – программное обеспечение с открытым исходным кодом, распространяется по лицензии GPL. Следовательно, установив один раз Asterisk вам не придется дополнительно платить за новых абонентов, подключение новых транков, расширение функционала и прочие лицензии. Это приближает стоимость владения станцией к нулю.
Безопасен в использовании.
Любое программное обеспечение может стать объектом интереса злоумышленников, в том числе телефонная станция. Однако, сам Asterisk, а также операционная система, на которой он работает, дают множество инструментов защиты от любых атак. При грамотной настройке безопасности у злоумышленников нет никаких шансов попасть на станцию.
Надежен в эксплуатации.
Время работы серверов некоторых наших клиентов исчисляется годами. Это значит, что Asterisk работает несколько лет, ему не требуются никакие перезагрузки или принудительные отключения. А еще это говорит о том, что в районе отличная ситуация с электроэнергией, но это уже не заслуга Asterisk.
Гибкий в настройке.
Зачастую возможности Asterisk ограничивает только фантазия пользователя. Ни один конструктор шаблонов не сравнится с Asterisk по гибкости настройки. Это позволяет решать с помощью Asterisk любые бизнес задачи, даже те, в которых выбор в его пользу не кажется изначально очевидным.
Имеет огромный функционал.
Во многом именно Asterisk показал какой должна быть современная телефонная станция. За многие годы развития функциональность Asterisk расширилась, а все основные возможности по-прежнему доступны бесплатно сразу после установки.
Интегрируется с любыми системами.
То, что Asterisk не умеет сам, он позволяет реализовать за счет интеграции. Это могут быть интеграции с коммерческими телефонными станциями, CRM, ERP системами, биллингом, сервисами колл-трекинга, колл-бэка и модулями статистики и аналитики.
Позволяет телефонизировать офис за считанные часы.
В нашей практике были проекты, реализованные за один рабочий день. Это значит, что утром к нам обращался клиент, а уже через несколько часов он пользовался новой IP-АТС. Безусловно, такая скорость редкость, ведь АТС – инструмент зарабатывания денег для многих компаний и спешка во внедрении не уместна. Но в случае острой необходимости Asterisk готов к быстрому старту.
Отличная масштабируемость.
Очень утомительно постоянно возвращаться к одному и тому же вопросу. Такое часто бывает в случае некачественного исполнения работ или выбора заведомо неподходящего бизнес-решения. С Asterisk точно не будет такой проблемы! Телефонная станция, построенная на Asterisk может быть масштабируема до немыслимых размеров. Главное – правильно подобрать оборудование.
Повышает управляемость бизнеса.
Asterisk дает не просто набор полезных функций, он повышает управляемость организации, качества и комфортности управления, а также увеличивает прозрачность бизнеса для руководства. Достичь этого можно, например, за счет автоматизации отчетов, подключения бота в Telegram, санкционированного доступа к станции из любой точки мира.
Снижает расходы на связь.
Связь между внутренними абонентами IP-АТС бесплатна всегда, независимо от их географического расположения. Также к Asterisk можно подключить любых операторов телефонии, в том числе GSM сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.