Руководитель компании
0,0
рейтинг
13 февраля 2013 в 11:46

Разработка → Что можно получить от интеграции 1С:CRM 8 и телефонии Asterisk


Мы более года тесно занимаемся разработкой решений по интеграции телефонии на базе Asterisk и программ 1С. В первую очередь мы испытываем решения на себе, и я хочу поделиться опытом о том, что можно получить от такой интеграции.

У нас используется терминальная схема работы с 1С:CRM. На столе у каждого сотрудника IP телефон, который подключен по локальной сети к IP ATС Askozia, развернутой вместе с терминальным 1С сервером внутри VMware инфраструктуры в ближайшем ЦОДе.

Click to call




Первое, что сделали — организовали набор номеров из 1C с помощью отправки прямой команды на Asterisk с указанием внутреннего номера сотрудника и внешнего номера клиента. Выглядит это очень просто, сотрудник жмет на номер телефона в базе 1С:CRM в терминальной сессии, звонит телефон на столе, снимаем трубку, звонок пошел на клиента. Удобно, просто, реализовали за 15 минут, сэкономили кучу времени менеджерам.
Технически — это было соединение по FTP и создание call файла с информацией о том, кто кому должен позвонить. Позже переделали с использованием компоненты для 1С.

Отображение названия клиента при входящем звонке


Очень удобно при входящем звонке видеть название фирмы клиента на IP телефоне, а не голый номер. Для этого мы использовали AGI скрипт, который при входящем звонке обращается к серверу 1С: Предприятия 8 и из базы 1C:CRM берет название клиента, транслитерирует его и вставляет в поле Caller ID. Подробности реализации в моем прошлом посте. Это очень удобная функция, история звонков на Asterisk буквально заговорила, вместо голых номеров — названия клиентов.


Карточка клиента при входящем звонке




Для того чтобы получить карточку клиента при входящем звонке нужно сделать так, чтобы во время звонка сервер Asterisk дернул каким-нибудь образом 1С: Предприятие, да еще и клиентский сеанс того пользователя, чей телефон в данный момент зазвонил.
Одна из самых сложных для нас задач — пришлось разрабатывать клиентскую компоненту для связи 1С и Asterisk, о которой я писал в этом посте.
Для реализации этой функции мы использовали AJAM интерфейс Asterisk — это командный интерфейс, позволяющий реализовать управление телефонной станцией и получать обратную связь от нее.
На базе этой компоненты была реализована панель телефонии 1С, которая запускается вместе с сеансом 1С:CRM у каждого пользователя и взаимодействует с Asterisk во время звонка.
В результате при входящем звонке мы отображаем информацию о клиенте, открываем документ событие, который менеджеры дозаполняют в процессе разговора. А в скрытое поле документа Событие записываем уникальный идентификатор звонка, но об этом чуть позже :)

История звонков в 1С


Создавать события на входящие звонки — хорошая практика при использовании CRM систем, но не всегда получается это сделать оперативно, да и не все менеджеры «любят» забивать звонки в CRM, если им конечно не платят за количество событий:). Мы организовали небольшой PHP скрипт на стороне Asterisk, который отдает порциями записи CDR, а сервер 1С: Предприятия 8 регламентным заданием забирает записи и вносит их в регистр сведений, таким образом, в 1С создается идентичная копия базы данных CDR Asterisk.


В каждой записи таблицы содержится уникальный идентификатор звонка, и мы теперь точно знаем, создал менеджер событие на конкретный звонок или нет, но это еще не все…

Тотальная запись разговоров и их прослушивание


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


Да их можно разложить по папочкам, но найти все звонки одного клиента, особенно если звонили с разных номеров, можно только используя интеграцию с CRM системой.
Небольшая модификация dialplan asterisk, и в одном из полей CDR мы храним имя файла записи разговора. В итоге мы внутри 1С: Предприяития получаем таблицу истории звонков с ссылками на запись разговора и уникальными идентификаторами звонка, теми же самыми, что сохранены в документе Событие, который открывался в начале звонков.


Это хороший инструмент для менеджера и его руководителя.
Менеджер может постепенно вносить информацию в CRM систему о заявках клиентов, прослушивая записи своих разговоров прямо из документа событие. Руководитель может проверить все ли звонки обработаны менеджерами и на каждый ли звонок создан документ. Естественно, он также может прослушать любой разговор подчиненного.
С другой стороны, в карточке каждого клиента можно сделать закладку, в которой будут накапливаться разговоры с сотрудниками данного клиента с возможностью быстро найти и прослушать нужный разговор. Это удобно и позволяет мгновенно находить решения конфликтных ситуаций. Скажу честно, мы ни разу не пользовались записью разговора для решения конфликта, но после упоминания в разговоре с конфликтующей стороной факта наличия записи, дальнейший разбор ситуации идет намного мягче независимо от того прав ли был клиент :)

Отображение города звонящего




На память мы помним несколько кодов городов, но когда звонки начинали поступать с разных концов страны, появилась идея отображать название города при входящем звонке, чтобы менеджеры адекватно реагировали на вопросы о том, можем ли мы приехать и продемонстрировать наш продукт в городе Хабаровск :)
Реализация не сложная. С сайта Россвязи взяли соответствие номеров и городов, загнали в регистр сведений, при входящем звонке определяем город и отображаем его в панели телефонии.

Отображение компании звонящего на карте




Город знаем, подключаем Яндекс карту и через API в 1С при входящем звонке отображаем графически расположение клиента. Если он уже в базе, то отображаем вплоть до улицы и дома. Удобно, но есть свои нюансы, идея требует доработки.

Отображение произвольного 1С отчета в момент звонка




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

Отправка факсимильного сообщения в один клик




Я ненавижу факсы, но бывает так, что клиент очень просит отправить ему факс с печатью. Как это сделать из интегрированной системы? Не просто, но вполне возможно. Asterisk умеет отправлять факсы в текущий разговор, используя графический формат TIFF. 1С умеет формировать печатную форму документа с печатью и сохранять ее в формат PDF. Отлично, во время разговора открываем документ счет, жмем кнопку отправить факс, 1С сохраняет форму в формат PDF и отправляет ее на сервер Asterisk, параллельно переводя звонок в служебный канал отправки факса, сообщая Asterisk информацию о текущем разговоре и имени отправляемого PDF файла. Asterisk выполняет запуск скрипта конвертации PDF в TIFF, затем отправляет TIFF файл в текущий разговор, а по окончании передачи отправляет в 1С сообщение о результате доставки.

Статистическая обработка CDR средствами системы компоновки данных 1С


Накопив достаточно большую базу звонков за год работы, мы попробовали применить мощный аналитический модуль системы 1С для построения графиков на основе CDR таблицы, загруженной в 1С: Предприятие 8. Вот пример пары отчетов, которые у нас получились:

Статистика звонков по дням недели:


Распределение звонков по часам:


Анализ использования исходящих каналов:


Умная маршрутизация звонка




В CRM системе 1С есть специализированное поле, которое позволяет закрепить клиента за конкретным менеджером. Этот механизм можно использовать для «умной маршрутизации». Как это работает? При старте системы 1С:CRM формирует список своих клиентов, а точнее номеров «своих» клиентов и держит их в памяти. У каждого пользователя системы свой список. При входящем звонке, когда клиент набирает многоканальный номер и готовится услышать приветствие голосового меню (IVR), панель телефонии каждого сотрудника сверяет свой список номером с номером звонящего, и если номер совпадает, перехватывает звонок на себя. Получается, что перевод звонка срабатывает только в том случае, если панель телефонии и сеанс 1С активен. Если 1С закрыта, значит пользователь не на месте, потому отрабатывает стандартный маршрут с секретарем и отделами.
Для клиента это выглядит интересным образом, он звонит на общий многоканальный номер и сразу соединяется с нужным сотрудником, IVR не успевает даже произнести первые звуки приветствия.

Функция подслушать разговор и шепнуть коллеге


Эту идею мы подсмотрели у Switchvox.

В Asterisk есть замечательная функция «супервизора».


Как это работает?
Звонит клиент и попадает на новичка, который рассказывает о наших продуктах, отвечает на вопросы клиента. Мне, как руководителю отдела, становится интересна тема разговора, и я в один клик подсоединяюсь к разговору в режиме слушателя, клиент задает вопрос о цене или скидке которую мы готовы предложить, один клик и я включаю режим шепота, говорю коллеге: «10% если, купит на 100000 рублей». После чего новичок, не прерывая разговор, продолжает обсуждать с клиентом сделку, учитывая мое замечание, которое слышал только он. При необходимости я могу вмешаться в разговор и организовать трехстороннюю конференцию несколькими кликами в списке сотрудников.

Управление статусами, перевод вызова из 1С


На дорогих IP телефонах есть функция BLF, которая позволяет отображать статус IP телефона другого сотрудника. По цвету лампочки сразу понятно разговаривает, занят или свободен коллега.


Так как наша 1С:CRM система соединена с Asterisk, мы получаем информацию о статусах напрямую в 1С и можем ее отображать на экране, а также менять логику работы панели в зависимости от состояния.


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

Заключение


Идей много, если я что-то упустил, предлагайте, будет интересно обсудить и реализовать.
Более подробно о нашем проекте интеграции 1С и Asterisk можно почитать на сайте проекта.
Николай Бекетов @jorikfon
карма
30,0
рейтинг 0,0
Руководитель компании
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (27)

  • –2
    Один раз я столкнулся с вопросом интеграции одного и другого, Немного вникнув в вопрос я от этого отказался. Вы сделали много работы, это впечатляет.
    А по сути вопроса я ничего не скажу, сейчас, к сожалению или счастью, я работаю в другой области.
  • +1
    Отображение города звонящего

    Когда же это будет доступно на обычных сотовых телефонах?
    • 0
      это доступно, но не в России. Причем из коробки на обычном ведроиде.
    • +2
      У меня стоит на телефоне прошивка Сyanogenmod 10. При входящем звонке под номером высвечивается город.
      • 0
        Вот точно, помню что на Андроиде было такое.
  • +2
    Понравилась статья! Для меня тема весьма интересная.
  • 0
    А разве лицензия на Я-карты разрешает из бесплатное коммерческое использование?
    • 0
      Не знаю, мы это не выпускали в публичный релиз и не разбирались, надо полистать что за комм использование считается, а что нет. В 1С есть внутренняя геосхема, можно на ней отображать. Пока только внутри компании для себя сделали посмотреть нужно ли это :)
      • +1
        Спасибо, понятно.
  • +1
    С какими телефонами работает ваш Asterisk? и кстати, как у него с передачей русских CLID? и вы говорите про BLF — какие это модели? поддержка протокола BLF из коробки или доделывали сами?
    • 0
      Asterisk работает практически с любыми IP телефонами, а Askozia в частности умеет выполнять автонастройку этих моделей. Русские CallerID не пробовали пока, но вроде Yealink умеют это делать судя по этому посту.
      У нас есть Yealink SIP-T28 и Yealink VP530 в обоих BLF заработал с Askozia из коробки.
      Как настраивать BLF писал Sebastian из Askozia Team, вот наш перевод.
      • 0
        Список внушает. Спасибо. В свое время я поставил на * крест по причине отсутствия многих нужных вещей, может здесь уже что-то поменялось?

        А через LDAP с AD Askozia умеет телефонный справочник собирать?
        Умеет показывать входящий CLID на группу _без_ подъема трубок?
        • 0
          С AD нет.
          CallerID отображает при звонке на группу. Причем мы сделали так, что отображается не просто номер, а название клиента из 1С.
        • +2
          C AD телефонный справочник можно сделать через agi, при базовом уровне программирования, займет не много времени!
    • +1
      C Yealink телефонами русский CallerID работает без проблем, также и BLF. А вообще от asterisk CallerID можно отдавать в любой кодировке, даже налету перекодировать через iconv!
    • 0
      Grandstream — прекрасные телефоны.
      Руский CallerID, BLF, все штатно, без костылей.
      Использую дистрибутив FreePBX.
      • 0
        А модели какие? Прошивки без доработок?
  • 0
    А можете подробнее рассказать про то, как реализовывали переадресацию и перехват звонков в 1С?
    Занимался таким же проектом весной 2012, делал один, как компоненту на cpp, так и интеграцию в 1С, разве что в настройки Астериска меня не пускали. Реализовал все через AMI интерефейс, данные о звонке точно так же по окончанию получал через CDR. Компонента соединялась с Астериском (на подобие telnet) и парсила события (в самом Астериске был фильтр на определенные Events). Но проблемы были именно с переадресацией, смог реализовать только через промежуточный справочник внутри 1С — в итоге решение мне самому не понравилось, сроки были всего 2 месяца.
    • 0
      Да все просто, как только приходит событие с номером клиента, сравниваем с номером в заранее подготовленной таблице у каждого пользователя и, если совпало, вызываем командой Redirect безусоловный перевод на себя. Срабатывает только тогда, когда 1С у пользователя запущена, а значит он на рабочем месте :)
      Тем не менее хотим переделать этот механизм на более интеллектуальный. Добавить перевод на отдел, если сотрудник не ответил.
      • 0
        Этот момент мне понятен, про перехват, хотя пару дней я ломал себе голову, как же это сделать, но логика-то проста :)
        А вот именно редирект на другого сотрудника, вы используете условный или безусловный?
        Я кажется сейчас понимаю, что моя проблема была в безусловном переводе, где я хотел чтобы оператор, на которого я переадресую звонок видел не мой внутренний номер, а номер клиента с внешки.
        • 0
          Используем безусловный, и по моему проблем с Caller ID нет, проверим еще раз, отпишусь.
          • 0
            Т.е. оператор, назовем его оператор_2, видит номер абонента, которого переводит оператор_1 или же внутренний номер оператора_1? :)
            Интересно, а на какое событие вы тогда опираетесь, из тех что выдает Астериск?
        • 0
          можно добавлять к входящему CLID внутренний CLID сотрудника. 5651(49523344555) — например, главное чтобы помещалось на экране телефона.
  • 0
    Используем безусловный, и по моему проблем с Caller ID нет, проверим еще раз, отпишусь.
  • 0
    Asterisk умеет отправлять факсы в текущий разговор, используя графический формат TIFF.

    А подробнее можно ??
    • 0
      Можно, о чем вам более подробно рассказать? В ASTERISK есть функция отправки факса :)
      exten => s,1,SendFAX(bwfax.tif,dfzs)

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.