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

Материал из Меасофт
Перейти к: навигация, поиск
м (Интеграция мобильного приложения)
 
(не показано 7 промежуточных версий 4 участников)
Строка 1: Строка 1:
== Что это? ==
+
MeaSoft интегрируется с Asterisk — это самый популярный телефонный сервер, который не заменяет телефонную компанию, а дополняет ее.
Наша система пока напрямую к <rspoiler text="операторам телефонной связи">Манго, UIS, Гравител и др.</rspoiler> не подключается. Ведутся некоторые изыскания на эту тему, но пока не очень обещающие.
 
Однако, она интегрируется с Астериском. Это самый популярный телефонный сервер, который ни в коем случае не заменяет телефонную компанию, а наоборот - ее дополняет. Работает так: Вы в телефонной компании берете линии связи (номера телефонов, каналы и т.д.), можете одновременно брать разные каналы в разных компаниях (с разными тарифами, из разных регионов и т.д), можете добавлять свои, например, GSM-шлюзы для экономии на звонках с помощью безлимитных или безлимитных внутри сети сим-карт. Эти линии заводятся в сервер Астериск, к нему же подключаются ваши телефоны, он же программируется - откуда куда какие линии должны задействоваться. К нему же подключается наша система, причем отдельно - офисная и курьерское приложение.  
 
Что вы получаете:
 
  
'''В офисе:'''
+
Как это работает: вы в телефонной компании берете линии связи (номера телефонов, каналы и т. д.), можете одновременно брать разные каналы в разных компаниях (с разными тарифами, из разных регионов и т.д), можете добавлять свои, например GSM-шлюзы для экономии на звонках с помощью безлимитных или безлимитных внутри сети SIM-карт. Эти линии заводятся в сервер Asterisk, к нему подключаются ваши телефоны, он программируется — откуда куда какие линии должны быть задействованы. К нему же подключается MeaSoft, причем отдельно офисная система и курьерское приложение.
* Операторы звонят просто кнопкой из программы
 
* Журнал звонков (можно даже записи разговоров примотать) прямо в программе, с привязкой к заказам, клиентам, вашим сотрудникам.
 
* При входящем звонке программа показывает оператору - кто звонит: Определяет по базе клиента (вплоть до конкретного сотрудника), курьера или получателя.
 
* Отслеживание звонков курьеров с привязкой к заказам (можно даже записи разговоров примотать).
 
* Экономия: Вы можете подключить телефоны всех ваши офисов (в том числе в разных городах) к одному серверу, и связь между ними будет бесплатной, вы можете делать исходящие звонки через GSM-шлюзы, вы можете подключить номера из разных регионов и все филиалы будут звонить в эти регионы через эти линии по локальным тарифам.
 
* Снижение нагрузки на операторов: Вы можете настроить Астериск так, чтобы, например, он направлял звонки от клиентов или курьеров не всем операторам, и их личным менеджерам (в том числе и на мобильный телефон!).
 
  
'''У курьеров:'''
+
Что вы получаете:
* Экономия: Звонок от курьера через телефонию делается так, что сервер курьеру перезванивает, для курьера звонок бесплатный. Для большей экономии можно использовать GSM-шлюзы, чтобы звонок шел через сим-карту с бесплатной связью внутри оператора курьера.
 
* Запись разговора курьера с получателем.
 
  
'''У получателей:'''
+
В офисе:
* Солидность: Звонок от курьера получателю можно отправлять с вашего основного городского номера, и у получателя будет определяться не "левый" мобильный номер (обратную связь с которым вы даже не отследите), а красивый фирменный номер.
+
* операторы звонят просто кнопкой из программы;
* Снижение нагрузки на операторов: Помимо того, что система определяет кто звонит и подсказывает это оператору, Астериск можно настроить так, чтобы он сразу маршрутизировал звонок на курьера, если звонит получатель, заказ которого находится на руках у курьера.
+
* журнал звонков прямо в программе, с привязкой к заказам, клиентам, вашим сотрудникам. Можно подключить записи разговоров;
* Отзывы: Вы можете сделать в астериске, после звонка, сбор отзывов о работе как операторов так и курьеров, и мы можем настроить их получение прямо в систему с привязкой к заказу, курьеру и т.д., наравне со сбором отзывов о доставке через [[Личный кабинет курьерской службы#Сбор отзывов|web-сервис]].
+
* при входящем звонке программа показывает оператору, кто звонит: определяет по базе клиента (вплоть до конкретного сотрудника), курьера или получателя;
 +
* отслеживание звонков курьеров с привязкой к заказам. Можно подключить записи разговоров;
 +
* экономия: вы можете подключить телефоны всех ваших офисов (в том числе в разных городах) к одному серверу, и связь между ними будет бесплатной. Вы можете делать исходящие звонки через GSM-шлюзы, можете подключить номера из разных регионов, и все филиалы будут звонить в эти регионы через эти линии по локальным тарифам;
 +
* снижение нагрузки на операторов: вы можете настроить Asterisk так, чтобы, например, он направлял звонки от клиентов или курьеров не всем операторам, и их личным менеджерам (в том числе и на мобильный телефон).
  
'''Безопасность:'''
+
У курьеров:
* При базовом использовании, когда вы/курьеры можете звонить, система ведет журнал, и оператору выскакивают уведомления кто звонит, сервер телефонии и его администраторы не имеют доступа ни к каким данным системы. В сервер телефонии передаются только номера телефонов, на которые нужно позвонить, вся остальная информация о звонках идет из сервера телефонии к нашей системе.
+
* экономия: звонок от курьера через телефонию делается так, что сервер курьеру перезванивает, для курьера звонок бесплатный. Для большей экономии можно использовать GSM-шлюзы, чтобы звонок шел через SIM-карту с бесплатной связью внутри оператора курьера;
* Для того, чтобы телефония могла маршрутизировать звонки на ответственных курьеров, менеджеров клиентов и т.д. - мы должны дать ей доступ к этой информации, которая ей необходима. Однако это как правило только номера телефонов клиентов, курьеров, менеджеров, и связи между ними - то есть данные достаточно обезличенные, могут не включать в себя названия, имена, адреса и прочее.
+
* запись разговора курьера с получателем.
  
Астериск здесь выступает прокладкой между вами и телефонной компанией. Им пользуются многие наши клиенты (да и не наши тоже!), и мы сами. Это например, позволяет нашим операторам сразу сказать "Здравствуйте, Иван", если вы звоните со своего мобильного телефона. Содержание сервера обычно стоит в районе 10 т.р. в месяц (аренда сервера в ДЦ + обслуживание), но плюсы, которые он дает эти расходы хорошо окупают.
+
У получателей:
 +
* солидность: звонок от курьера получателю можно отправлять с вашего основного городского номера, и у получателя будет определяться фирменный номер;
 +
* снижение нагрузки на операторов: gомимо того, что система определяет кто звонит и подсказывает это оператору, Asterisk можно настроить так, чтобы он сразу маршрутизировал звонок на курьера, если звонит получатель, заказ которого находится на руках у курьера;
 +
* отзывы: вы можете настроить сбор отзывов после звонка о работе операторов и курьеров, и мы можем настроить их получение прямо в систему с привязкой к заказу, курьеру и т. д., наравне со сбором отзывов о доставке через [[Личный кабинет курьерской службы#Сбор отзывов|веб-сервис]].
  
'''Без интеграции с Астериск:'''
+
Безопасность:
При звонке из мобильного приложения фиксируется только факт попытки звонка. При этом нет ни записи разговора, ни длительности его, ни статуса: дозвонился или нет. Офисное приложение при нажатии кнопки звонка вызывает программу для звонков, установленную по умолчанию в Windows - это может быть программный телефон или Skype. О дальнейшей судьбе этой попытки позвонить мы так же ничего не знаем.
+
* при базовом использовании, когда вы/курьеры можете звонить, система ведет журнал, и оператор видит уведомления о том, кто звонит, сервер телефонии и его администраторы не имеют доступа ни к каким данным системы. В сервер телефонии передаются только номера телефонов, на которые нужно позвонить, вся остальная информация о звонках идет из сервера телефонии к нашей системе;
 +
* чтобы телефония могла маршрутизировать звонки на ответственных курьеров, менеджеров клиентов и т. д., ей нужно дать доступ к этой информации — как правило, это только номера телефонов клиентов, курьеров, менеджеров и связи между ними. Данные достаточно обезличенные, могут не включать в себя названия, имена, адреса и прочее.
 +
 
 +
Asterisk выступает посредником между вами и телефонной компанией. Им пользуются многие наши клиенты и мы сами. Это позволяет нашим операторам сразу сказать «Здравствуйте, Иван», если вы звоните со своего мобильного телефона.
 +
 
 +
Без интеграции с Asterisk при звонке из мобильного приложения фиксируется только факт попытки звонка. При этом нет ни записи разговора, ни его длительности, ни статуса: дозвонился или нет. Офисное приложение при нажатии кнопки звонка вызывает программу для звонков, установленную по умолчанию в Windows — это может быть программный телефон или Skype. О дальнейшей судьбе этой попытки позвонить мы также ничего не знаем.
  
 
== Где взять сервер? ==
 
== Где взять сервер? ==
Сам сервер можно арендовать в ДЦ или установить у себя в офисе. Установить на него телефонию, настроить под вас и сопровождать должны специалисты. Они же помогут и в выборе сервера. Рекомендовать можем проверенных нами админов из https://southbridge.io/, впрочем, на рынке их не мало.
+
Сам сервер можно арендовать в ДЦ или установить у себя в офисе. Установить на него телефонию, настроить под вас и сопровождать должны специалисты. Они же помогут и в выборе сервера. Рекомендовать можем проверенных нами админов из 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].
  
Включите AMI, задайте адреса, с которых можно получить к нему доступ в файле /etc/asterisk/manager.conf
+
Включите AMI, задайте адреса, с которых можно получить к нему доступ в файле /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 на всякий случай вам в помощь]).
  
Создайте пользователя - обычно это делается в файлах /etc/asterisk/manager_custom.conf или /etc/asterisk/manager.conf
+
Все подключения от клиентов на андроиде происходят с IP-адресов наших серверов: 82.202.165.93, 138.201.228.71, так что смело указывайте только их — этого требует безопасность.
  
Откройте порт в файерволе (обычно 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 произвольных номера.
+
Осторожно! AMI — вещь достаточно дырявая, и открытие порта на весь мир очень опасно. Тем более что через эту функцию можно за ваш счет соединить 2 произвольных номера.
  
Пропишите настройки подключения здесь: [https://home.courierexe.ru/extraclient/phones_settings https://home.courierexe.ru/extraclient/phones_settings]
+
Пропишите настройки подключения [https://home.courierexe.ru/extraclient/phones_settings здесь]:
*'''Адрес сервера''' - IP или доменное имя. Предполагается, что у сервера Asterisk, естественно, статичный внешний IP или проброшен порт AMI, иначе ничего работать не будет.
+
* '''Адрес сервера''' — IP или доменное имя. Предполагается, что у сервера Asterisk статичный внешний IP или проброшен порт AMI, иначе ничего работать не будет;
*'''Порт сервера''' - На каком порту находится AMI
+
* '''Порт сервера''' — на каком порту находится AMI;
*'''Имя пользователя''' - Логин AMI, созданный в manager.conf (или manager_custom.conf)
+
* '''Имя пользователя''' — логин AMI, созданный в manager.conf (или manager_custom.conf);
*'''Пароль''' - пароль пользователя.
+
* '''Пароль''' — пароль пользователя;
*'''Канал''' - канал, через который должен происходить звонок. Обычно выглядит как "SIP/trunk_name", где trunk_name - название транка, прописанного, обычно, в файле /etc/asterisk/sip.conf
+
* '''Канал''' — канал, через который должен происходить звонок. Обычно выглядит как «SIP/trunk_name», где trunk_name — название транка, прописанного, обычно, в файле /etc/asterisk/sip.conf. Для старых версий драйвера SIP можно указывать «SIP/trunk_name», в этом случае номер звонящего будет подставляться в конце: «SIP/trunk_name/79001234567».
  
Для старых версий драйвера SIP можно указывать "SIP/trunk_name", в этом случае номер звонящего будет подставляться в конце: "SIP/trunk_name/79001234567".
+
Для новых версий драйвера SIP можно указывать:
 +
:«SIP/{NUMBER}@trunk_name», в этом случае полный номер звонящего будет подставляться вместо {NUMBER}: «SIP/79001234567@trunk_name»;
 +
:«SIP/{SHORTNUMBER}@trunk_name», в этом случае номер звонящего без кода будет подставляться вместо {SHORTNUMBER}: «SIP/1234567@trunk_name».
  
Для новых версий драйвера 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. Заполните это поле, даже если не вы не интегрируете приложение с телефонией, это позволит курьерам совершать звонки в офис из приложения;
 +
* '''Префикс курьера''' — префикс, который будет добавляться к номеру вызывающего абонента;
 +
* '''Префикс клиента''' — префикс, который будет добавляться к номеру вызываемого абонента.
  
*'''Контекст''' - Контекст обработки запроса. Обычно настраиваются в диалплане в файле /etc/asterisk/extensions.conf
+
Сохраните настройку и проверьте ее работоспособность: введите 2 телефона и нажмите на кнопку '''Тест'''. MeaSoft отправляет запрос на Asterisk, и он должен позвонить сначала на первый телефон, потом, после поднятия трубки, идет вызов на второй номер, и происходит их коммутация.
*'''Внутренний телефон офиса''' - Внутренний номер, на который приходит звонок, при выборе "Позвонить в офис". Рекомендуется в настройках Asterisk сделать этот номер - номером группы менеджеров.
 
*'''Городской телефон офиса''' - Внешний номер телефона офиса. Приложение будет звонить по сотовой сети на этот номер в случае, если не удалось послать запрос на соединение с офисом в Asterisk. '''Заполните это поле''', даже если не вы не интегрируете приложение с телефонией, это позволит курьерам совершать звонки в офис из приложения!
 
*'''Префикс курьера''' - Префикс, который будет добавляться к номеру вызывающего абонента.
 
*'''Префикс клиента''' - Префикс, который будет добавляться к номеру вызываемого абонента.
 
  
Сохраните настройку, и проверьте ее работоспособность, введя 2 телефона, и нажав кнопку "Тест". Система должна отправить запрос на Asterisk, и он должен позвонить сначала на первый телефон, потом, после поднятия трубки, идет вызов на второй номер, и происходит их коммутация. К сожалению, на этом уровне наша система может "поймать" и отобразить только ошибки подключения к AMI, т.е. ошибочный адрес сервера и/или неверный/закрытый порт. В случае неверного указания остальных данных, включая логин и пароль, система "подумает", что все прошло гладко, запрос она сформировала и на сервер отправила. В случае, если все хорошо - вы получите телефонный звонок. Если же этого не произошло - проверьте все введенные данные, попробуйте посмотреть что происходит в астериске - команда "asterisk -r".
+
На этом уровне MeaSoft может зафиксировать ошибку только в адресе сервера или если указан неверный/закрытый порт. Если звонок не удался, проверьте все введенные данные, посмотрите, что происходит в Asterisk с помощью команды <code>asterisk -r</code>.
  
'''Обратите внимание''': для успешных звонков из мобильного приложения, в карточке курьера должен быть введен номер мобильного телефона в соответствующее поле!
+
'''Примечание'''. Для успешных звонков из мобильного приложения в карточке курьера должен быть введен номер мобильного телефона в соответствующее поле.
  
 
При осуществлении вызова сервер приложения посылает на Asterisk AMI-запрос вида:
 
При осуществлении вызова сервер приложения посылает на Asterisk AMI-запрос вида:
Строка 79: Строка 85:
 
   Action: Logoff
 
   Action: Logoff
  
$CALL-FROM-NUMBER и $CALL-TO-NUMBER нормируются, и приводятся к международному формату +7ХХХХХХХХХХ (для России и Казахстана). Для других стран, возможно, тестирование не проводилось, в случае проблем - обращайтесь, будем изучать форматирование номеров в конкретной стране.
+
$CALL-FROM-NUMBER и $CALL-TO-NUMBER нормируются и приводятся к международному формату +7ХХХХХХХХХХ (для России и Казахстана). Для других стран, возможно, тестирование не проводилось, в случае проблем обращайтесь, будем изучать форматирование номеров в конкретной стране.
  
Как Вы уже заметили, данная настройка подразумевает наличие глубоких знаний в области администрирования asterisk-сервера, поэтому, убедительная просьба: если Вы ими не обладаете, прежде чем звонить нам и просить помощи, обратитесь к специалисту, поддерживающему вашу телефонию, покажите ему данное руководство. С очень большой вероятностью ему все будет понятно, и он все настроит за 30 минут. Наша служба технической поддержки не обладает достаточной квалификацией в данной области, и, скорее всего, мы не сможем оказать вам поддержку в этом вопросе.
+
Настройка подразумевает наличие глубоких знаний в области администрирования сервера Asterisk, поэтому убедительная просьба: если вы ими не обладаете, прежде чем звонить нам и просить помощи, обратитесь к специалисту, поддерживающему вашу телефонию, покажите ему это руководство. С очень большой вероятностью ему все будет понятно, и он все настроит за 30 минут. Наша служба технической поддержки не обладает достаточной квалификацией в данной области, и, скорее всего, мы не сможем оказать вам поддержку в этом вопросе.
  
 
== Интеграция системы с телефонным сервером ==
 
== Интеграция системы с телефонным сервером ==
Интеграция офисной системы с Asterisk происходит аналогично курьерской (см. выше) с той разницей, что запросы на астериск идут не с единого сервера, а непосредственно с пользовательских рабочих мест, поэтому файервол на сервере телефонии нужно настраивать соответственно.  
+
Интеграция офисной системы с Asterisk происходит аналогично курьерской (см. выше) с той разницей, что запросы на Asterisk идут не с единого сервера, а непосредственно с пользовательских рабочих мест, поэтому файервол на сервере телефонии нужно настраивать соответственно.
  
Параметры подключения нужно вводить в разделе "Справочники" -> "Переменные" -> "Подключения" -> "Asterisk".
+
Параметры подключения нужно вводить в разделе '''Справочники''' > '''Переменные''' > '''Подключения''' -> '''Asterisk'''.
  
Так же обязательно нужно в карточках пользователей "Настройка" - "Пользователи" ввести внутренние номера абонентов. У пользователя может быть несколько номеров, перечисленных через запятую. При нажатии кнопки "Позвонить", программа будет соединять первый телефон из списка. При входящих звонках - будет показывать сообщение при звонке на любой из номеров в списке.
+
В карточках пользователей '''Настройка''' > '''Пользователи''' введите внутренние номера абонентов. У пользователя может быть несколько номеров, перечисленных через запятую. При нажатии на кнопку '''Позвонить''' программа будет соединять первый телефон из списка. При входящих звонках будет показывать сообщение при звонке на любой из номеров в списке.
  
 
== Обратные запросы от Asterisk ==
 
== Обратные запросы от Asterisk ==
Иногда возникает необходимость серверу телефонии получить данные из БД при входящем звонке. Для этого он напрямую подключается к MySQL, база данных courier. Приведем наиболее популярные задачи их решения:
+
Если серверу телефонии нужно получить данные из БД при входящем звонке, он напрямую подключается к MySQL, база данных courier.
  
*Звонит получатель, нужно его соединить с курьером, у которого находится его заказ. Такое особенно актуально, если мобильное приложение курьера звонит через офисную телефонию, у получателя определяется номер телефона офиса, и он перезванивает. Запрос ниже выдает сразу номер телефона курьера, с которым нужно соединить.
+
Приведем наиболее популярные задачи и их решения:
 +
 
 +
* Звонит получатель, нужно его соединить с курьером, у которого находится его заказ. Это особенно актуально, если мобильное приложение курьера звонит через офисную телефонию, у получателя определяется номер телефона офиса, и он перезванивает. Запрос ниже выдает сразу номер телефона курьера, с которым нужно соединить.
  
 
  SELECT k.code, k.name, k.`phonem`, k.`phonek`
 
  SELECT k.code, k.name, k.`phonem`, k.`phonek`
Строка 101: Строка 109:
 
  AND c.VALUE='79161234567'  /*Вот тут нормированный телефон звонящего ИМЕННО в таком формате*/
 
  AND c.VALUE='79161234567'  /*Вот тут нормированный телефон звонящего ИМЕННО в таком формате*/
  
*Звонит курьер, нужно его соединить с менеджером. Запрос вернет внутренний номер менеджера курьера:
+
* Звонит курьер, нужно его соединить с менеджером. Запрос вернет внутренний номер менеджера курьера:
  
 
  SELECT k.code, k.name, u.extPhone AS managerext
 
  SELECT k.code, k.name, u.extPhone AS managerext
Строка 108: Строка 116:
 
  AND c.VALUE='79161234567'  /*Вот тут нормированный телефон звонящего ИМЕННО в таком формате*/
 
  AND c.VALUE='79161234567'  /*Вот тут нормированный телефон звонящего ИМЕННО в таком формате*/
  
*Звонит клиент, нужно его соединить с менеджером. Запрос вернет внутренний номер менеджера клиента, а так же статус клиента. Запрос очень упрощен. По-хорошему надо в первую очередь смотреть контакты не столько привязанные к клиентам, сколько к их контактным лицам (таблица fio, код 39).
+
* Звонит клиент, нужно его соединить с менеджером. Запрос вернет внутренний номер менеджера клиента, а также статус клиента. Запрос очень упрощен. По-хорошему надо в первую очередь смотреть контакты, не столько привязанные к клиентам, сколько к их контактным лицам (таблица fio, код 39).
  
 
  SELECT k.code, k.company, u.extPhone AS managerext, c.State
 
  SELECT k.code, k.company, u.extPhone AS managerext, c.State
Строка 115: Строка 123:
 
  AND c.VALUE='79161234567'  /*Вот тут нормированный телефон звонящего ИМЕННО в таком формате*/
 
  AND c.VALUE='79161234567'  /*Вот тут нормированный телефон звонящего ИМЕННО в таком формате*/
  
* Определить просто отправление из тех, что в работе. Возвращает данные отправления, заказа и клиента
+
* Определить просто отправление из тех, что в работе. Возвращает данные отправления, заказа и клиента:
  
 
  SELECT *
 
  SELECT *
Строка 123: Строка 131:
 
  AND c.VALUE='79161234567'  /*Вот тут нормированный телефон звонящего ИМЕННО в таком формате*/
 
  AND c.VALUE='79161234567'  /*Вот тут нормированный телефон звонящего ИМЕННО в таком формате*/
  
Конечно, при желании можно все это объединить в один запрос, и гораздо быстрее за одно действие получить информацию о том, кто это звонит, и что с ним надо делать. Здесь приведены только шаблонные запросы. В общих словах - таблица contacts содержит все индексированными контактные данные из всех таблиц системы (ну, из большинства). И все обращения за поиском по телефону должны заходить именно с нее. Коды таблиц для поля SourceCodeType можно посмотреть в таблице schema.table_list.
+
Конечно, при желании можно все это объединить в один запрос и гораздо быстрее за одно действие получить информацию о том, кто звонит и что с ним надо делать. Здесь приведены только шаблонные запросы. В общих словах: таблица contacts содержит все индексированными контактные данные из большинства таблиц системы. И все обращения за поиском по телефону должны заходить именно с нее. Коды таблиц для поля SourceCodeType можно посмотреть в таблице schema.table_list.
  
 
== Записи разговоров ==
 
== Записи разговоров ==
В разных конфигурациях Астериска по-разному организуется хранение записей разговоров, поэтому для того, чтобы их прикреплять к звонкам в системе необходима настройка "по месту". Нужно, чтобы ваш администратор телефонного сервера предоставил FTP-доступ к хранилищу записей, и наши специалисты настроят модуль автоматизации, чтобы он привязывал ссылки на файлы на сервере к звонкам в системе.
+
В разных конфигурациях Asteriks по-разному организуется хранение записей разговоров, поэтому чтобы их прикреплять к звонкам в системе, необходима настройка «по месту». Нужно, чтобы ваш администратор телефонного сервера предоставил FTP-доступ к хранилищу записей, и наши специалисты настроят модуль автоматизации, чтобы он привязывал ссылки на файлы на сервере к звонкам в системе.
 +
 
 +
== Устранение неполадок ==
 +
Если при попытке совершения исходящего звонка из системы появляется ошибка «Ошибка соединения с сервером телефонии», проверьте доступность порта, указанного в настройках телефонии, с помощью стандартного компонента Windows «Клиент Telnet». Если через «Клиент Telnet» не удается подключиться к порту, обратитесь к системному администратору, отвечающему за телефонию, чтобы он проверил настройки прав доступа к указанному порту.

Текущая версия на 13:22, 3 апреля 2024

MeaSoft интегрируется с Asterisk — это самый популярный телефонный сервер, который не заменяет телефонную компанию, а дополняет ее.

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

Что вы получаете:

В офисе:

  • операторы звонят просто кнопкой из программы;
  • журнал звонков прямо в программе, с привязкой к заказам, клиентам, вашим сотрудникам. Можно подключить записи разговоров;
  • при входящем звонке программа показывает оператору, кто звонит: определяет по базе клиента (вплоть до конкретного сотрудника), курьера или получателя;
  • отслеживание звонков курьеров с привязкой к заказам. Можно подключить записи разговоров;
  • экономия: вы можете подключить телефоны всех ваших офисов (в том числе в разных городах) к одному серверу, и связь между ними будет бесплатной. Вы можете делать исходящие звонки через GSM-шлюзы, можете подключить номера из разных регионов, и все филиалы будут звонить в эти регионы через эти линии по локальным тарифам;
  • снижение нагрузки на операторов: вы можете настроить Asterisk так, чтобы, например, он направлял звонки от клиентов или курьеров не всем операторам, и их личным менеджерам (в том числе и на мобильный телефон).

У курьеров:

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

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

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

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

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

Asterisk выступает посредником между вами и телефонной компанией. Им пользуются многие наши клиенты и мы сами. Это позволяет нашим операторам сразу сказать «Здравствуйте, Иван», если вы звоните со своего мобильного телефона.

Без интеграции с Asterisk при звонке из мобильного приложения фиксируется только факт попытки звонка. При этом нет ни записи разговора, ни его длительности, ни статуса: дозвонился или нет. Офисное приложение при нажатии кнопки звонка вызывает программу для звонков, установленную по умолчанию в 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-адресов наших серверов: 82.202.165.93, 138.201.228.71, так что смело указывайте только их — этого требует безопасность.

Осторожно! AMI — вещь достаточно дырявая, и открытие порта на весь мир очень опасно. Тем более что через эту функцию можно за ваш счет соединить 2 произвольных номера.

Пропишите настройки подключения здесь:

  • Адрес сервера — 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»;
«SIP/{SHORTNUMBER}@trunk_name», в этом случае номер звонящего без кода будет подставляться вместо {SHORTNUMBER}: «SIP/1234567@trunk_name».
  • Внутренний телефон офиса — внутренний номер, на который приходит звонок при выборе «Позвонить в офис». Рекомендуется в настройках Asterisk указать в этом поле номер группы менеджеров;
  • Городской телефон офиса — внешний номер телефона офиса. Приложение будет звонить по сотовой сети на этот номер в случае, если не удалось послать запрос на соединение с офисом в Asterisk. Заполните это поле, даже если не вы не интегрируете приложение с телефонией, это позволит курьерам совершать звонки в офис из приложения;
  • Префикс курьера — префикс, который будет добавляться к номеру вызывающего абонента;
  • Префикс клиента — префикс, который будет добавляться к номеру вызываемого абонента.

Сохраните настройку и проверьте ее работоспособность: введите 2 телефона и нажмите на кнопку Тест. MeaSoft отправляет запрос на Asterisk, и он должен позвонить сначала на первый телефон, потом, после поднятия трубки, идет вызов на второй номер, и происходит их коммутация.

На этом уровне MeaSoft может зафиксировать ошибку только в адресе сервера или если указан неверный/закрытый порт. Если звонок не удался, проверьте все введенные данные, посмотрите, что происходит в Asterisk с помощью команды 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.

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

Обратные запросы от 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.

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

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

Устранение неполадок

Если при попытке совершения исходящего звонка из системы появляется ошибка «Ошибка соединения с сервером телефонии», проверьте доступность порта, указанного в настройках телефонии, с помощью стандартного компонента Windows «Клиент Telnet». Если через «Клиент Telnet» не удается подключиться к порту, обратитесь к системному администратору, отвечающему за телефонию, чтобы он проверил настройки прав доступа к указанному порту.