Интеграция с телефонией — различия между версиями

Материал из Меасофт
Перейти к: навигация, поиск
(Интеграция системы с телефонным сервером)
м (Обратные запросы от Asterisk)
(не показано 12 промежуточных версий 2 участников)
Строка 1: Строка 1:
 +
== Что это? ==
 +
Наша система пока напрямую к <rspoiler text="операторам телефонной связи">Манго, UIS, Гравител и др.</rspoiler> не подключается. Ведутся некоторые изыскания на эту тему, но пока не очень обещающие.
 +
Однако, она интегрируется с Астериском. Это самый популярный телефонный сервер, который ни в коем случае не заменяет телефонную компанию, а наоборот - ее дополняет. Работает так: Вы в телефонной компании берете линии связи (номера телефонов, каналы и т.д.), можете одновременно брать разные каналы в разных компаниях (с разными тарифами, из разных регионов и т.д), можете добавлять свои, например, GSM-шлюзы для экономии на звонках с помощью безлимитных или безлимитных внутри сети сим-карт. Эти линии заводятся в сервер Астериск, к нему же подключаются ваши телефоны, он же программируется - откуда куда какие линии должны задействоваться. К нему же подключается наша система, причем отдельно - офисная и курьерское приложение.
 +
Что вы получаете:
 +
 +
'''В офисе:'''
 +
* Операторы звонят просто кнопкой из программы
 +
* Журнал звонков (можно даже записи разговоров примотать) прямо в программе, с привязкой к заказам, клиентам, вашим сотрудникам.
 +
* При входящем звонке программа показывает оператору - кто звонит: Определяет по базе клиента (вплоть до конкретного сотрудника), курьера или получателя.
 +
* Отслеживание звонков курьеров с привязкой к заказам (можно даже записи разговоров примотать).
 +
* Экономия: Вы можете подключить телефоны всех ваши офисов (в том числе в разных городах) к одному серверу, и связь между ними будет бесплатной, вы можете делать исходящие звонки через GSM-шлюзы, вы можете подключить номера из разных регионов и все филиалы будут звонить в эти регионы через эти линии по локальным тарифам.
 +
* Снижение нагрузки на операторов: Вы можете настроить Астериск так, чтобы, например, он направлял звонки от клиентов или курьеров не всем операторам, и их личным менеджерам (в том числе и на мобильный телефон!).
 +
 +
'''У курьеров:'''
 +
* Экономия: Звонок от курьера через телефонию делается так, что сервер курьеру перезванивает, для курьера звонок бесплатный. Для большей экономии можно использовать GSM-шлюзы, чтобы звонок шел через сим-карту с бесплатной связью внутри оператора курьера.
 +
* Запись разговора курьера с получателем.
 +
 +
'''У получателей:'''
 +
* Солидность: Звонок от курьера получателю можно отправлять с вашего основного городского номера, и у получателя будет определяться не "левый" мобильный номер (обратную связь с которым вы даже не отследите), а красивый фирменный номер.
 +
* Снижение нагрузки на операторов: Помимо того, что система определяет кто звонит и подсказывает это оператору, Астериск можно настроить так, чтобы он сразу маршрутизировал звонок на курьера, если звонит получатель, заказ которого находится на руках у курьера.
 +
* Отзывы: Вы можете сделать в астериске, после звонка, сбор отзывов о работе как операторов так и курьеров, и мы можем настроить их получение прямо в систему с привязкой к заказу, курьеру и т.д., наравне со сбором отзывов о доставке через [[Личный кабинет курьерской службы#Сбор отзывов|web-сервис]].
 +
 +
'''Безопасность:'''
 +
* При базовом использовании, когда вы/курьеры можете звонить, система ведет журнал, и оператору выскакивают уведомления кто звонит, сервер телефонии и его администраторы не имеют доступа ни к каким данным системы. В сервер телефонии передаются только номера телефонов, на которые нужно позвонить, вся остальная информация о звонках идет из сервера телефонии к нашей системе.
 +
* Для того, чтобы телефония могла маршрутизировать звонки на ответственных курьеров, менеджеров клиентов и т.д. - мы должны дать ей доступ к этой информации, которая ей необходима. Однако это как правило только номера телефонов клиентов, курьеров, менеджеров, и связи между ними - то есть данные достаточно обезличенные, могут не включать в себя названия, имена, адреса и прочее.
 +
 +
Астериск здесь выступает прокладкой между вами и телефонной компанией. Им пользуются многие наши клиенты (да и не наши тоже!), и мы сами. Это например, позволяет нашим операторам сразу сказать "Здравствуйте, Иван", если вы звоните со своего мобильного телефона. Содержание сервера обычно стоит в районе 10 т.р. в месяц (аренда сервера в ДЦ + обслуживание), но плюсы, которые он дает эти расходы хорошо окупают.
 +
 +
'''Без интеграции с Астериск:'''
 +
При звонке из мобильного приложения фиксируется только факт попытки звонка. При этом нет ни записи разговора, ни длительности его, ни статуса: дозвонился или нет. Офисное приложение при нажатии кнопки звонка вызывает программу для звонков, установленную по умолчанию в Windows - это может быть программный телефон или Skype. О дальнейшей судьбе этой попытки позвонить мы так же ничего не знаем.
 +
 +
== Где взять сервер? ==
 +
Сам сервер можно арендовать в ДЦ или установить у себя в офисе. Установить на него телефонию, настроить под вас и сопровождать должны специалисты. Они же помогут и в выборе сервера. Рекомендовать можем проверенных нами админов из https://southbridge.io/, впрочем, на рынке их не мало.
 +
 
== Интеграция мобильного приложения ==
 
== Интеграция мобильного приложения ==
Для чего это нужно: использование звонков через корпоративную телефонию позволяет снизить расходы на мобильную связь, организовать централизованную запись, учет и контроль совершаемых вызовов.
 
 
 
Для осуществления звонков из мобильного приложения через сервер телефонии [https://ru.wikipedia.org/wiki/Asterisk Asterisk] используется подключение через [http://asteriskpbx.ru/display/Asterisk/Asterisk+Managment+Interface+%28AMI%29 AMI].
 
Для осуществления звонков из мобильного приложения через сервер телефонии [https://ru.wikipedia.org/wiki/Asterisk Asterisk] используется подключение через [http://asteriskpbx.ru/display/Asterisk/Asterisk+Managment+Interface+%28AMI%29 AMI].
  
Строка 8: Строка 40:
 
Создайте пользователя - обычно это делается в файлах /etc/asterisk/manager_custom.conf или /etc/asterisk/manager.conf
 
Создайте пользователя - обычно это делается в файлах /etc/asterisk/manager_custom.conf или /etc/asterisk/manager.conf
  
Откройте порт в файерволе (обычно 5038, прописывается в /etc/asterisk/manager.conf) ([https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Security_Guide/sect-Security_Guide-Firewalls.html на всякий случай Вам в помощь]). Все подключения от клиентов на андроиде происходят с одного IP-адреса: 46.30.41.46, так что смело "зажимайте" только на него - этого требует безопасность. Осторожно! AMI - вещь достаточно дырявая, и открытие порта на весь мир очень опасно. Тем более что через эту функцию можно за ваш счет соединить 2 произвольных номера.
+
Откройте порт в файерволе (обычно 5038, прописывается в /etc/asterisk/manager.conf) ([https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Security_Guide/sect-Security_Guide-Firewalls.html на всякий случай Вам в помощь]). Все подключения от клиентов на андроиде происходят с одного IP-адреса: 138.201.228.71, так что смело "зажимайте" только на него - этого требует безопасность. Осторожно! AMI - вещь достаточно дырявая, и открытие порта на весь мир очень опасно. Тем более что через эту функцию можно за ваш счет соединить 2 произвольных номера.
  
 
Пропишите настройки подключения здесь: [https://home.courierexe.ru/extraclient/phones_settings https://home.courierexe.ru/extraclient/phones_settings]
 
Пропишите настройки подключения здесь: [https://home.courierexe.ru/extraclient/phones_settings https://home.courierexe.ru/extraclient/phones_settings]
Строка 16: Строка 48:
 
*'''Пароль''' - пароль пользователя.
 
*'''Пароль''' - пароль пользователя.
 
*'''Канал''' - канал, через который должен происходить звонок. Обычно выглядит как "SIP/trunk_name", где trunk_name - название транка, прописанного, обычно, в файле /etc/asterisk/sip.conf
 
*'''Канал''' - канал, через который должен происходить звонок. Обычно выглядит как "SIP/trunk_name", где trunk_name - название транка, прописанного, обычно, в файле /etc/asterisk/sip.conf
*'''Контекст''' - Контекст обработки запроса. Обычно настраиваются в диалплане в файле /etc/asterisk/extensions.conf
+
 
 +
Для старых версий драйвера SIP можно указывать "SIP/trunk_name", в этом случае номер звонящего будет подставляться в конце: "SIP/trunk_name/79001234567".
 +
 
 +
Для новых версий драйвера SIP можно указывать "SIP/{NUMBER}@trunk_name", в этом случае номер звонящего будет подставляться вместо {NUMBER}: "SIP/79001234567@trunk_name".
 +
 
 +
*'''Контекст''' - Контекст обработки запроса. Обычно настраиваются в диалплане в файле /etc/asterisk/extensions.conf <spoiler text="Тут настраивается запись исходящих">В стандартной поставке Asterisk не записывает исходящие звонки от курьеров. Решение - в /etc/asterisk разместить файл кастомного диалплана [http://courierexe.ru/download/extensions_custom.conf extensions_custom.conf]. В файле в 5-й строке нужно заменить транк на тот, который используется в вашей установке. Далее в настройках подключения мобильного приложения используйте контекст "from-courier". Чтобы в CDR звонки курьеров имели номер звонящего курьера, во второй строке файла уберите "<COURIER>". Это добавлено для того, чтобы можно было отфильтровать все звонки курьеров. Для уменьшения размера файлов записей рекомендуем использовать кодек G.729</spoiler>
 
*'''Внутренний телефон офиса''' - Внутренний номер, на который приходит звонок, при выборе "Позвонить в офис". Рекомендуется в настройках Asterisk сделать этот номер - номером группы менеджеров.
 
*'''Внутренний телефон офиса''' - Внутренний номер, на который приходит звонок, при выборе "Позвонить в офис". Рекомендуется в настройках Asterisk сделать этот номер - номером группы менеджеров.
 
*'''Городской телефон офиса''' - Внешний номер телефона офиса. Приложение будет звонить по сотовой сети на этот номер в случае, если не удалось послать запрос на соединение с офисом в Asterisk. '''Заполните это поле''', даже если не вы не интегрируете приложение с телефонией, это позволит курьерам совершать звонки в офис из приложения!
 
*'''Городской телефон офиса''' - Внешний номер телефона офиса. Приложение будет звонить по сотовой сети на этот номер в случае, если не удалось послать запрос на соединение с офисом в Asterisk. '''Заполните это поле''', даже если не вы не интегрируете приложение с телефонией, это позволит курьерам совершать звонки в офис из приложения!
 +
*'''Префикс курьера''' - Префикс, который будет добавляться к номеру вызывающего абонента.
 +
*'''Префикс клиента''' - Префикс, который будет добавляться к номеру вызываемого абонента.
  
 
Сохраните настройку, и проверьте ее работоспособность, введя 2 телефона, и нажав кнопку "Тест". Система должна отправить запрос на Asterisk, и он должен позвонить сначала на первый телефон, потом, после поднятия трубки, идет вызов на второй номер, и происходит их коммутация. К сожалению, на этом уровне наша система может "поймать" и отобразить только ошибки подключения к AMI, т.е. ошибочный адрес сервера и/или неверный/закрытый порт. В случае неверного указания остальных данных, включая логин и пароль, система "подумает", что все прошло гладко, запрос она сформировала и на сервер отправила. В случае, если все хорошо - вы получите телефонный звонок. Если же этого не произошло - проверьте все введенные данные, попробуйте посмотреть что происходит в астериске - команда "asterisk -r".
 
Сохраните настройку, и проверьте ее работоспособность, введя 2 телефона, и нажав кнопку "Тест". Система должна отправить запрос на Asterisk, и он должен позвонить сначала на первый телефон, потом, после поднятия трубки, идет вызов на второй номер, и происходит их коммутация. К сожалению, на этом уровне наша система может "поймать" и отобразить только ошибки подключения к AMI, т.е. ошибочный адрес сервера и/или неверный/закрытый порт. В случае неверного указания остальных данных, включая логин и пароль, система "подумает", что все прошло гладко, запрос она сформировала и на сервер отправила. В случае, если все хорошо - вы получите телефонный звонок. Если же этого не произошло - проверьте все введенные данные, попробуйте посмотреть что происходит в астериске - команда "asterisk -r".
 +
 +
'''Обратите внимание''': для успешных звонков из мобильного приложения, в карточке курьера должен быть введен номер мобильного телефона в соответствующее поле!
  
 
При осуществлении вызова сервер приложения посылает на Asterisk AMI-запрос вида:
 
При осуществлении вызова сервер приложения посылает на Asterisk AMI-запрос вида:
  
 
   Action: login
 
   Action: login
  Events: on
 
 
   Username: $USERNAME
 
   Username: $USERNAME
 
   Secret: $PASSWORD
 
   Secret: $PASSWORD
Строка 32: Строка 72:
 
   Channel: $CHANEL/$CALL-FROM-NUMBER
 
   Channel: $CHANEL/$CALL-FROM-NUMBER
 
   WaitTime: 30
 
   WaitTime: 30
   CallerId:  
+
   CallerId: 0
 
   Exten: $CALL-TO-NUMBER
 
   Exten: $CALL-TO-NUMBER
 
   Context: $CONTEXT
 
   Context: $CONTEXT
Строка 38: Строка 78:
 
    
 
    
 
   Action: Logoff
 
   Action: Logoff
 +
 +
$CALL-FROM-NUMBER и $CALL-TO-NUMBER нормируются, и приводятся к международному формату +7ХХХХХХХХХХ (для России и Казахстана). Для других стран, возможно, тестирование не проводилось, в случае проблем - обращайтесь, будем изучать форматирование номеров в конкретной стране.
  
 
Как Вы уже заметили, данная настройка подразумевает наличие глубоких знаний в области администрирования asterisk-сервера, поэтому, убедительная просьба: если Вы ими не обладаете, прежде чем звонить нам и просить помощи, обратитесь к специалисту, поддерживающему вашу телефонию, покажите ему данное руководство. С очень большой вероятностью ему все будет понятно, и он все настроит за 30 минут. Наша служба технической поддержки не обладает достаточной квалификацией в данной области, и, скорее всего, мы не сможем оказать вам поддержку в этом вопросе.
 
Как Вы уже заметили, данная настройка подразумевает наличие глубоких знаний в области администрирования asterisk-сервера, поэтому, убедительная просьба: если Вы ими не обладаете, прежде чем звонить нам и просить помощи, обратитесь к специалисту, поддерживающему вашу телефонию, покажите ему данное руководство. С очень большой вероятностью ему все будет понятно, и он все настроит за 30 минут. Наша служба технической поддержки не обладает достаточной квалификацией в данной области, и, скорее всего, мы не сможем оказать вам поддержку в этом вопросе.
  
 
== Интеграция системы с телефонным сервером ==
 
== Интеграция системы с телефонным сервером ==
Интеграция офисной системы с телефонией позволяет упростить работу операторов и администраторов компании: набор номера одной кнопкой из программы, автоматическое определение компании и ФИО клиента, ведение журнала звонков.
+
Интеграция офисной системы с Asterisk происходит аналогично курьерской (см. выше) с той разницей, что запросы на астериск идут не с единого сервера, а непосредственно с пользовательских рабочих мест, поэтому файервол на сервере телефонии нужно настраивать соответственно.
 +
 
 +
Параметры подключения нужно вводить в разделе "Справочники" -> "Переменные" -> "Подключения" -> "Asterisk".
 +
 
 +
Так же обязательно нужно в карточках пользователей "Настройка" - "Пользователи" ввести внутренние номера абонентов. У пользователя может быть несколько номеров, перечисленных через запятую. При нажатии кнопки "Позвонить", программа будет соединять первый телефон из списка. При входящих звонках - будет показывать сообщение при звонке на любой из номеров в списке.
  
Интеграция офисной системы с Asterisk происходит аналогично курьерской (см. выше) с той разницей, что запросы на астериск идут не с единого сервера, а непосредственно с пользовательских рабочих мест, поэтому файервол на сервере телефонии нужно настраивать соответственно.  
+
== Обратные запросы от Asterisk ==
 +
Иногда возникает необходимость серверу телефонии получить данные из БД при входящем звонке. Для этого он напрямую подключается к MySQL, база данных courier. Приведем наиболее популярные задачи и их решения:
 +
 
 +
*Звонит получатель, нужно его соединить с курьером, у которого находится его заказ. Такое особенно актуально, если мобильное приложение курьера звонит через офисную телефонию, у получателя определяется номер телефона офиса, и он перезванивает. Запрос ниже выдает сразу номер телефона курьера, с которым нужно соединить.
 +
 
 +
SELECT k.code, k.name, k.`phonem`, k.`phonek`
 +
FROM contacts c JOIN givn g ON g.address=c.Source JOIN kurier k ON k.code=g.`kurier`
 +
WHERE c.SourceCodeType=3  /*Контакты именно получателей*/
 +
AND g.State=1              /*Статус "На руках у курьера"*/
 +
AND c.VALUE='79161234567'  /*Вот тут нормированный телефон звонящего ИМЕННО в таком формате*/
 +
 
 +
*Звонит курьер, нужно его соединить с менеджером. Запрос вернет внутренний номер менеджера курьера:
 +
 
 +
SELECT k.code, k.name, u.extPhone AS managerext
 +
FROM contacts c JOIN kurier k ON k.code=c.Source JOIN users u ON u.`user`=k.`manager`
 +
WHERE c.SourceCodeType=1  /*Контакты именно курьеров*/
 +
AND c.VALUE='79161234567'  /*Вот тут нормированный телефон звонящего ИМЕННО в таком формате*/
 +
 
 +
*Звонит клиент, нужно его соединить с менеджером. Запрос вернет внутренний номер менеджера клиента, а так же статус клиента. Запрос очень упрощен. По-хорошему надо в первую очередь смотреть контакты не столько привязанные к клиентам, сколько к их контактным лицам (таблица fio, код 39).
 +
 
 +
SELECT k.code, k.company, u.extPhone AS managerext, c.State
 +
FROM contacts c JOIN clients k ON k.code=c.Source LEFT JOIN users u ON u.`user`=k.`manager`
 +
WHERE c.SourceCodeType=2  /*Контакты именно клиентов*/
 +
AND c.VALUE='79161234567'  /*Вот тут нормированный телефон звонящего ИМЕННО в таком формате*/
 +
 
 +
* Определить просто отправление из тех, что в работе. Возвращает данные отправления, заказа и клиента
 +
 
 +
SELECT *
 +
FROM contacts c JOIN address a on a.code=c.Source join zakaz b on a.zakaz=b.code join clients k on k.code=b.source
 +
WHERE c.SourceCodeType=3  /*Контакты именно получателей*/
 +
AND a.date_put is null    /*Заказ в работе, не закрытый*/
 +
AND c.VALUE='79161234567'  /*Вот тут нормированный телефон звонящего ИМЕННО в таком формате*/
 +
 
 +
Конечно, при желании можно все это объединить в один запрос, и гораздо быстрее за одно действие получить информацию о том, кто это звонит, и что с ним надо делать. Здесь приведены только шаблонные запросы. В общих словах - таблица contacts содержит все индексированными контактные данные из всех таблиц системы (ну, из большинства). И все обращения за поиском по телефону должны заходить именно с нее. Коды таблиц для поля SourceCodeType можно посмотреть в таблице schema.table_list.
  
Параметры подключения нужно вводить в разделе "Справочники" -> "Переменные" -> "Подключения" -> "Asterisk"
+
== Записи разговоров ==
 +
В разных конфигурациях Астериска по-разному организуется хранение записей разговоров, поэтому для того, чтобы их прикреплять к звонкам в системе необходима настройка "по месту". Нужно, чтобы ваш администратор телефонного сервера предоставил FTP-доступ к хранилищу записей, и наши специалисты настроят модуль автоматизации, чтобы он привязывал ссылки на файлы на сервере к звонкам в системе.

Версия 13:42, 30 апреля 2020

Что это?

Наша система пока напрямую к операторам телефонной связи
не подключается. Ведутся некоторые изыскания на эту тему, но пока не очень обещающие.

Однако, она интегрируется с Астериском. Это самый популярный телефонный сервер, который ни в коем случае не заменяет телефонную компанию, а наоборот - ее дополняет. Работает так: Вы в телефонной компании берете линии связи (номера телефонов, каналы и т.д.), можете одновременно брать разные каналы в разных компаниях (с разными тарифами, из разных регионов и т.д), можете добавлять свои, например, GSM-шлюзы для экономии на звонках с помощью безлимитных или безлимитных внутри сети сим-карт. Эти линии заводятся в сервер Астериск, к нему же подключаются ваши телефоны, он же программируется - откуда куда какие линии должны задействоваться. К нему же подключается наша система, причем отдельно - офисная и курьерское приложение. Что вы получаете:

В офисе:

  • Операторы звонят просто кнопкой из программы
  • Журнал звонков (можно даже записи разговоров примотать) прямо в программе, с привязкой к заказам, клиентам, вашим сотрудникам.
  • При входящем звонке программа показывает оператору - кто звонит: Определяет по базе клиента (вплоть до конкретного сотрудника), курьера или получателя.
  • Отслеживание звонков курьеров с привязкой к заказам (можно даже записи разговоров примотать).
  • Экономия: Вы можете подключить телефоны всех ваши офисов (в том числе в разных городах) к одному серверу, и связь между ними будет бесплатной, вы можете делать исходящие звонки через GSM-шлюзы, вы можете подключить номера из разных регионов и все филиалы будут звонить в эти регионы через эти линии по локальным тарифам.
  • Снижение нагрузки на операторов: Вы можете настроить Астериск так, чтобы, например, он направлял звонки от клиентов или курьеров не всем операторам, и их личным менеджерам (в том числе и на мобильный телефон!).

У курьеров:

  • Экономия: Звонок от курьера через телефонию делается так, что сервер курьеру перезванивает, для курьера звонок бесплатный. Для большей экономии можно использовать GSM-шлюзы, чтобы звонок шел через сим-карту с бесплатной связью внутри оператора курьера.
  • Запись разговора курьера с получателем.

У получателей:

  • Солидность: Звонок от курьера получателю можно отправлять с вашего основного городского номера, и у получателя будет определяться не "левый" мобильный номер (обратную связь с которым вы даже не отследите), а красивый фирменный номер.
  • Снижение нагрузки на операторов: Помимо того, что система определяет кто звонит и подсказывает это оператору, Астериск можно настроить так, чтобы он сразу маршрутизировал звонок на курьера, если звонит получатель, заказ которого находится на руках у курьера.
  • Отзывы: Вы можете сделать в астериске, после звонка, сбор отзывов о работе как операторов так и курьеров, и мы можем настроить их получение прямо в систему с привязкой к заказу, курьеру и т.д., наравне со сбором отзывов о доставке через web-сервис.

Безопасность:

  • При базовом использовании, когда вы/курьеры можете звонить, система ведет журнал, и оператору выскакивают уведомления кто звонит, сервер телефонии и его администраторы не имеют доступа ни к каким данным системы. В сервер телефонии передаются только номера телефонов, на которые нужно позвонить, вся остальная информация о звонках идет из сервера телефонии к нашей системе.
  • Для того, чтобы телефония могла маршрутизировать звонки на ответственных курьеров, менеджеров клиентов и т.д. - мы должны дать ей доступ к этой информации, которая ей необходима. Однако это как правило только номера телефонов клиентов, курьеров, менеджеров, и связи между ними - то есть данные достаточно обезличенные, могут не включать в себя названия, имена, адреса и прочее.

Астериск здесь выступает прокладкой между вами и телефонной компанией. Им пользуются многие наши клиенты (да и не наши тоже!), и мы сами. Это например, позволяет нашим операторам сразу сказать "Здравствуйте, Иван", если вы звоните со своего мобильного телефона. Содержание сервера обычно стоит в районе 10 т.р. в месяц (аренда сервера в ДЦ + обслуживание), но плюсы, которые он дает эти расходы хорошо окупают.

Без интеграции с Астериск: При звонке из мобильного приложения фиксируется только факт попытки звонка. При этом нет ни записи разговора, ни длительности его, ни статуса: дозвонился или нет. Офисное приложение при нажатии кнопки звонка вызывает программу для звонков, установленную по умолчанию в Windows - это может быть программный телефон или Skype. О дальнейшей судьбе этой попытки позвонить мы так же ничего не знаем.

Где взять сервер?

Сам сервер можно арендовать в ДЦ или установить у себя в офисе. Установить на него телефонию, настроить под вас и сопровождать должны специалисты. Они же помогут и в выборе сервера. Рекомендовать можем проверенных нами админов из https://southbridge.io/, впрочем, на рынке их не мало.

Интеграция мобильного приложения

Для осуществления звонков из мобильного приложения через сервер телефонии Asterisk используется подключение через AMI.

Включите AMI, задайте адреса, с которых можно получить к нему доступ в файле /etc/asterisk/manager.conf

Создайте пользователя - обычно это делается в файлах /etc/asterisk/manager_custom.conf или /etc/asterisk/manager.conf

Откройте порт в файерволе (обычно 5038, прописывается в /etc/asterisk/manager.conf) (на всякий случай Вам в помощь). Все подключения от клиентов на андроиде происходят с одного IP-адреса: 138.201.228.71, так что смело "зажимайте" только на него - этого требует безопасность. Осторожно! AMI - вещь достаточно дырявая, и открытие порта на весь мир очень опасно. Тем более что через эту функцию можно за ваш счет соединить 2 произвольных номера.

Пропишите настройки подключения здесь: https://home.courierexe.ru/extraclient/phones_settings

  • Адрес сервера - IP или доменное имя. Предполагается, что у сервера Asterisk, естественно, статичный внешний IP или проброшен порт AMI, иначе ничего работать не будет.
  • Порт сервера - На каком порту находится AMI
  • Имя пользователя - Логин AMI, созданный в manager.conf (или manager_custom.conf)
  • Пароль - пароль пользователя.
  • Канал - канал, через который должен происходить звонок. Обычно выглядит как "SIP/trunk_name", где trunk_name - название транка, прописанного, обычно, в файле /etc/asterisk/sip.conf

Для старых версий драйвера SIP можно указывать "SIP/trunk_name", в этом случае номер звонящего будет подставляться в конце: "SIP/trunk_name/79001234567".

Для новых версий драйвера SIP можно указывать "SIP/{NUMBER}@trunk_name", в этом случае номер звонящего будет подставляться вместо {NUMBER}: "SIP/79001234567@trunk_name".

  • Внутренний телефон офиса - Внутренний номер, на который приходит звонок, при выборе "Позвонить в офис". Рекомендуется в настройках Asterisk сделать этот номер - номером группы менеджеров.
  • Городской телефон офиса - Внешний номер телефона офиса. Приложение будет звонить по сотовой сети на этот номер в случае, если не удалось послать запрос на соединение с офисом в Asterisk. Заполните это поле, даже если не вы не интегрируете приложение с телефонией, это позволит курьерам совершать звонки в офис из приложения!
  • Префикс курьера - Префикс, который будет добавляться к номеру вызывающего абонента.
  • Префикс клиента - Префикс, который будет добавляться к номеру вызываемого абонента.

Сохраните настройку, и проверьте ее работоспособность, введя 2 телефона, и нажав кнопку "Тест". Система должна отправить запрос на Asterisk, и он должен позвонить сначала на первый телефон, потом, после поднятия трубки, идет вызов на второй номер, и происходит их коммутация. К сожалению, на этом уровне наша система может "поймать" и отобразить только ошибки подключения к AMI, т.е. ошибочный адрес сервера и/или неверный/закрытый порт. В случае неверного указания остальных данных, включая логин и пароль, система "подумает", что все прошло гладко, запрос она сформировала и на сервер отправила. В случае, если все хорошо - вы получите телефонный звонок. Если же этого не произошло - проверьте все введенные данные, попробуйте посмотреть что происходит в астериске - команда "asterisk -r".

Обратите внимание: для успешных звонков из мобильного приложения, в карточке курьера должен быть введен номер мобильного телефона в соответствующее поле!

При осуществлении вызова сервер приложения посылает на Asterisk AMI-запрос вида:

 Action: login
 Username: $USERNAME
 Secret: $PASSWORD
 
 Action: originate
 Channel: $CHANEL/$CALL-FROM-NUMBER
 WaitTime: 30
 CallerId: 0
 Exten: $CALL-TO-NUMBER
 Context: $CONTEXT
 Priority: 1
 
 Action: Logoff

$CALL-FROM-NUMBER и $CALL-TO-NUMBER нормируются, и приводятся к международному формату +7ХХХХХХХХХХ (для России и Казахстана). Для других стран, возможно, тестирование не проводилось, в случае проблем - обращайтесь, будем изучать форматирование номеров в конкретной стране.

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

Интеграция системы с телефонным сервером

Интеграция офисной системы с Asterisk происходит аналогично курьерской (см. выше) с той разницей, что запросы на астериск идут не с единого сервера, а непосредственно с пользовательских рабочих мест, поэтому файервол на сервере телефонии нужно настраивать соответственно.

Параметры подключения нужно вводить в разделе "Справочники" -> "Переменные" -> "Подключения" -> "Asterisk".

Так же обязательно нужно в карточках пользователей "Настройка" - "Пользователи" ввести внутренние номера абонентов. У пользователя может быть несколько номеров, перечисленных через запятую. При нажатии кнопки "Позвонить", программа будет соединять первый телефон из списка. При входящих звонках - будет показывать сообщение при звонке на любой из номеров в списке.

Обратные запросы от Asterisk

Иногда возникает необходимость серверу телефонии получить данные из БД при входящем звонке. Для этого он напрямую подключается к MySQL, база данных courier. Приведем наиболее популярные задачи и их решения:

  • Звонит получатель, нужно его соединить с курьером, у которого находится его заказ. Такое особенно актуально, если мобильное приложение курьера звонит через офисную телефонию, у получателя определяется номер телефона офиса, и он перезванивает. Запрос ниже выдает сразу номер телефона курьера, с которым нужно соединить.
SELECT k.code, k.name, k.`phonem`, k.`phonek`
FROM contacts c JOIN givn g ON g.address=c.Source JOIN kurier k ON k.code=g.`kurier`
WHERE c.SourceCodeType=3   /*Контакты именно получателей*/
AND g.State=1              /*Статус "На руках у курьера"*/
AND c.VALUE='79161234567'  /*Вот тут нормированный телефон звонящего ИМЕННО в таком формате*/
  • Звонит курьер, нужно его соединить с менеджером. Запрос вернет внутренний номер менеджера курьера:
SELECT k.code, k.name, u.extPhone AS managerext
FROM contacts c JOIN kurier k ON k.code=c.Source JOIN users u ON u.`user`=k.`manager`
WHERE c.SourceCodeType=1   /*Контакты именно курьеров*/
AND c.VALUE='79161234567'  /*Вот тут нормированный телефон звонящего ИМЕННО в таком формате*/
  • Звонит клиент, нужно его соединить с менеджером. Запрос вернет внутренний номер менеджера клиента, а так же статус клиента. Запрос очень упрощен. По-хорошему надо в первую очередь смотреть контакты не столько привязанные к клиентам, сколько к их контактным лицам (таблица fio, код 39).
SELECT k.code, k.company, u.extPhone AS managerext, c.State
FROM contacts c JOIN clients k ON k.code=c.Source LEFT JOIN users u ON u.`user`=k.`manager`
WHERE c.SourceCodeType=2   /*Контакты именно клиентов*/
AND c.VALUE='79161234567'  /*Вот тут нормированный телефон звонящего ИМЕННО в таком формате*/
  • Определить просто отправление из тех, что в работе. Возвращает данные отправления, заказа и клиента
SELECT *
FROM contacts c JOIN address a on a.code=c.Source join zakaz b on a.zakaz=b.code join clients k on k.code=b.source
WHERE c.SourceCodeType=3   /*Контакты именно получателей*/
AND a.date_put is null     /*Заказ в работе, не закрытый*/
AND c.VALUE='79161234567'  /*Вот тут нормированный телефон звонящего ИМЕННО в таком формате*/

Конечно, при желании можно все это объединить в один запрос, и гораздо быстрее за одно действие получить информацию о том, кто это звонит, и что с ним надо делать. Здесь приведены только шаблонные запросы. В общих словах - таблица contacts содержит все индексированными контактные данные из всех таблиц системы (ну, из большинства). И все обращения за поиском по телефону должны заходить именно с нее. Коды таблиц для поля SourceCodeType можно посмотреть в таблице schema.table_list.

Записи разговоров

В разных конфигурациях Астериска по-разному организуется хранение записей разговоров, поэтому для того, чтобы их прикреплять к звонкам в системе необходима настройка "по месту". Нужно, чтобы ваш администратор телефонного сервера предоставил FTP-доступ к хранилищу записей, и наши специалисты настроят модуль автоматизации, чтобы он привязывал ссылки на файлы на сервере к звонкам в системе.