Как реализовать бесплатную или бюджетную интеграцию 1С с телефонией Asterisk?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Интеграция 1С и Asterisk — это классическая задача для автоматизации отделов продаж и служб поддержки. Часто руководство отказывается от популярных коммерческих решений (например, от компаний МИКО или Рарус) из-за высокой стоимости лицензий, особенно когда штат расширяется до 100 и более человек. В этой статье мы рассмотрим, как можно реализовать интеграцию своими силами, используя бесплатные компоненты и встроенные возможности платформы 1С.

Основные стратегии интеграции

Для начала проанализируем, какие существуют пути взаимодействия между 1С и АТС Asterisk. Их можно разделить на три основные группы:

  1. Использование готовых внешних компонент (DLL/Native): Этот способ позволяет «слушать» события АТС и отправлять команды через готовые библиотеки.
  2. Прямая работа с AMI (Asterisk Manager Interface): Реализация взаимодействия на языке 1С через текстовые протоколы обмена.
  3. Современный подход через ARI (Asterisk REST Interface) и WebSockets: Использование стандартных HTTP-запросов и двусторонней связи, доступной в новых версиях Asterisk и платформы 1С 8.3.

Вариант 1: Бесплатные и условно-бесплатные компоненты

Существует несколько библиотек, которые позволяют значительно упростить жизнь разработчику. Посмотрим на наиболее упоминаемые:

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

Вариант 2: Прямое управление через AMI

Если мы хотим избежать использования сторонних 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), отправляем команду и закрываем соединение.

Вариант 3: Использование ARI и WebSockets (для 1С 8.3.20+)

Это наиболее современный и «чистый» способ. Начиная с версии 8.3.20, в 1С появился объект WebSocketКлиент. Выясним, чем это нам поможет. Asterisk через интерфейс ARI может транслировать все события (звонок пошел, трубку сняли, разговор окончен) прямо в WebSocket-канал.

Проанализируем шаги реализации:

  1. Включаем ARI в настройках Asterisk (ari.conf).
  2. В 1С создаем WebSocketКлиент, который подключается к серверу телефонии.
  3. При поступлении входящего звонка Asterisk отправляет JSON-пакет в WebSocket.
  4. 1С ловит этот пакет, парсит номер телефона и открывает форму Справочника.Контрагенты.

Преимущество этого метода в том, что нам не нужны никакие сторонние «прослойки» и DLL. Все работает на стандартных механизмах платформы.

Обработка записей разговоров

Одной из ключевых задач является возможность прослушивания записи разговора прямо из 1С. Рассмотрим подробнее два способа реализации:

Способ А: Прямой доступ к базе Asterisk. Asterisk обычно хранит логи звонков (CDR) в базе MySQL. Мы можем настроить ВнешнийИсточникДанных в 1С для чтения этой базы. Зная уникальный идентификатор звонка (Uniqueid), мы можем найти путь к файлу записи на сервере.

Способ Б: HTTP-оповещение от Asterisk. В диалплане Asterisk (файл extensions.conf) можно прописать команду curl, которая будет выполняться сразу после завершения звонка. Посмотрим на логику:

  1. Разговор завершен.
  2. Asterisk выполняет скрипт, отправляющий HTTP-запрос на опубликованный HTTP-сервис 1С.
  3. В запросе передаются: ID звонка, длительность, номера телефонов и ссылка на файл.
  4. 1С автоматически создает документ ТелефонныйЗвонок и прикрепляет к нему ссылку на прослушивание.

Как реализовать функции «Взять трубку» и «Положить трубку»?

Важно понимать, что физически нажать кнопку на SIP-телефоне программно из 1С можно не всегда (это зависит от модели аппарата). Однако, проанализируем ситуацию с софтфонами. Если ваши сотрудники используют программные телефоны, многие из них (например, MicroSIP или Linphone) поддерживают управление через командную строку или локальный HTTP-интерфейс. В этом случае 1С просто отправляет команду локальному приложению на компьютере пользователя.

Если используются аппаратные IP-телефоны (Yealink, Grandstream), можно использовать их внутреннее API (Action URI) для управления состоянием трубки. 1С отправляет GET-запрос на IP-адрес телефона, и аппарат совершает действие.

Выводы и рекомендации

Создание собственной интеграции требует времени, но позволяет сэкономить значительный бюджет. Если перед вами стоит задача сделать это «дешево и сердито», рекомендуем начать с использования AMI для исходящих звонков и HTTP-сервисов 1С для фиксации входящих. Это даст стабильный результат без зависимости от платных лицензий и позволит легко масштабировать систему до любого количества пользователей.

← На главную