Интеграция 1С и Asterisk — это классическая задача для автоматизации отделов продаж и служб поддержки. Часто руководство отказывается от популярных коммерческих решений (например, от компаний МИКО или Рарус) из-за высокой стоимости лицензий, особенно когда штат расширяется до 100 и более человек. В этой статье мы рассмотрим, как можно реализовать интеграцию своими силами, используя бесплатные компоненты и встроенные возможности платформы 1С.
Для начала проанализируем, какие существуют пути взаимодействия между 1С и АТС Asterisk. Их можно разделить на три основные группы:
Существует несколько библиотек, которые позволяют значительно упростить жизнь разработчику. Посмотрим на наиболее упоминаемые:
Разберем принцип работы с подобными компонентами. Обычно они подключаются как внешние объекты, генерирующие внешнее событие в 1С при входящем звонке. В обработчике ВнешнееСобытие вы можете открыть карточку клиента, основываясь на полученном номере телефона.
Если мы хотим избежать использования сторонних DLL, мы можем реализовать прямое соединение с Asterisk по протоколу AMI. Это текстовый протокол, работающий через TCP-порт. Рассмотрим пример команды на инициацию звонка (Click-to-call):
ТекстКоманды = "Action: Originate" + Символы.ПС +
"Channel: PJSIP/101" + Символы.ПС + // Внутренний номер сотрудника
"Context: from-internal" + Символы.ПС +
"Exten: 89991234567" + Символы.ПС + // Номер клиента
"Priority: 1" + Символы.ПС +
"Callerid: 101" + Символы.ПС +
"Timeout: 30000" + Символы.ПС + Символы.ПС; // Двойной перенос строки обязателен
Для отправки такой команды в 1С можно использовать объект TCPClient (через внешнюю компоненту или .NET сборку). Суть проста: открываем соединение, авторизуемся (команда Action: Login), отправляем команду и закрываем соединение.
Это наиболее современный и «чистый» способ. Начиная с версии 8.3.20, в 1С появился объект WebSocketКлиент. Выясним, чем это нам поможет. Asterisk через интерфейс ARI может транслировать все события (звонок пошел, трубку сняли, разговор окончен) прямо в WebSocket-канал.
Проанализируем шаги реализации:
ari.conf).WebSocketКлиент, который подключается к серверу телефонии.Справочника.Контрагенты.Преимущество этого метода в том, что нам не нужны никакие сторонние «прослойки» и DLL. Все работает на стандартных механизмах платформы.
Одной из ключевых задач является возможность прослушивания записи разговора прямо из 1С. Рассмотрим подробнее два способа реализации:
Способ А: Прямой доступ к базе Asterisk. Asterisk обычно хранит логи звонков (CDR) в базе MySQL. Мы можем настроить ВнешнийИсточникДанных в 1С для чтения этой базы. Зная уникальный идентификатор звонка (Uniqueid), мы можем найти путь к файлу записи на сервере.
Способ Б: HTTP-оповещение от Asterisk. В диалплане Asterisk (файл extensions.conf) можно прописать команду curl, которая будет выполняться сразу после завершения звонка. Посмотрим на логику:
ТелефонныйЗвонок и прикрепляет к нему ссылку на прослушивание.Важно понимать, что физически нажать кнопку на SIP-телефоне программно из 1С можно не всегда (это зависит от модели аппарата). Однако, проанализируем ситуацию с софтфонами. Если ваши сотрудники используют программные телефоны, многие из них (например, MicroSIP или Linphone) поддерживают управление через командную строку или локальный HTTP-интерфейс. В этом случае 1С просто отправляет команду локальному приложению на компьютере пользователя.
Если используются аппаратные IP-телефоны (Yealink, Grandstream), можно использовать их внутреннее API (Action URI) для управления состоянием трубки. 1С отправляет GET-запрос на IP-адрес телефона, и аппарат совершает действие.
Создание собственной интеграции требует времени, но позволяет сэкономить значительный бюджет. Если перед вами стоит задача сделать это «дешево и сердито», рекомендуем начать с использования AMI для исходящих звонков и HTTP-сервисов 1С для фиксации входящих. Это даст стабильный результат без зависимости от платных лицензий и позволит легко масштабировать систему до любого количества пользователей.