Как интегрировать 1С:CRM от Раруса с телефонией Asterisk и найти скрытые дополнительные реквизиты

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

При работе с конфигурацией 1С:CRM от компании «Рарус» перед разработчиками и системными администраторами часто встают две важные задачи: как «подружить» программу с существующей АТС Asterisk для управления аппаратными (IP) телефонами и как программно добраться до значений дополнительных реквизитов, которые не отображаются в стандартных таблицах запроса. В этой статье мы подробно разберем оба вопроса, проанализируем различные подходы к интеграции и выясним архитектурные особенности хранения данных в современных решениях на базе 1С.

Вариант 1. Реализация Click-to-Call через Asterisk Call-файлы и PHP

Рассмотрим ситуацию, когда необходимо реализовать простую функцию: при нажатии на номер телефона в карточке клиента в 1С должен зазвонить аппаратный телефон сотрудника, а после поднятия трубки — пойти вызов клиенту. Если штатный модуль «СофтФон» кажется слишком громоздким, проанализируем «легкий» метод реализации через механизм Call-файлов.

Суть метода заключается в том, что 1С отправляет HTTP-запрос на сервер, где расположен Asterisk. На стороне сервера PHP-скрипт формирует специальный файл-задание, который АТС подхватывает и исполняет. Разберем этот процесс по шагам.

На стороне 1С нам необходимо написать процедуру, которая будет отправлять параметры вызова (кто звонит и кому звонит) на внешний скрипт. Используем для этого объект HTTPСоединение:


&НаКлиенте
Процедура СделатьВызов(НомерСотрудника, НомерКлиента)
    СерверАТС = "192.168.1.100";
    Ресурс = "/asterisk_call.php?from=" + НомерСотрудника + "&to=" + НомерКлиента;
    
    Соединение = Новый HTTPСоединение(СерверАТС);
    Запрос = Новый HTTPЗапрос(Ресурс);
    
    Попытка
        Ответ = Соединение.Получить(Запрос);
        Если Ответ.КодСостояния = 200 Тогда
            Сообщить("Вызов инициирован успешно");
        КонецЕсли;
    Исключение
        Сообщить("Ошибка связи с сервером АТС");
    КонецПопытки;
КонецПроцедуры

На стороне сервера Asterisk PHP-скрипт создает текстовый файл с инструкциями для АТС. Важный технический нюанс: согласно документации Asterisk, нельзя создавать файл напрямую в папке /var/spool/asterisk/outgoing, так как АТС может начать читать его до того, как он будет полностью записан (проблема «полфайла»). Сначала создаем файл во временной директории, а затем перемещаем его командой mv.


// asterisk_call.php
$from = $_GET['from'];
$to = $_GET['to'];

$content = "Channel: SIP/$from\n";
$content .= "MaxRetries: 0\n";
$content .= "RetryTime: 60\n";
$content .= "WaitTime: 30\n";
$content .= "Context: from-internal\n";
$content .= "Extension: $to\n";
$content .= "Priority: 1\n";

$tmpFile = "/tmp/call_" . time() . ".call";
file_put_contents($tmpFile, $content);
exec("mv $tmpFile /var/spool/asterisk/outgoing/");

В этом сценарии АТС сначала подаст сигнал на аппарат сотрудника (Channel: SIP/$from). Как только сотрудник поднимет трубку, система соединит его с номером клиента (Extension: $to).

Вариант 2. Профессиональная интеграция через модуль «1С-Рарус: СофтФон»

Если нам требуется не только инициация вызова, но и полный контроль (запись разговоров, всплывающие карточки при входящем звонке, перевод вызова), следует рассмотреть использование штатного модуля. Выясним, как он работает с аппаратными телефонами.

Проанализируем архитектуру решения «СофтФон»:

  1. Сервер СофтФона: отдельное приложение, которое подключается к Asterisk по протоколу AMI (Asterisk Manager Interface).
  2. Клиентский модуль: встраивается в конфигурацию 1С и общается с Сервером СофтФона.

Чтобы «заставить» систему работать с хардварным телефоном, в настройках линии сотрудника выбирается режим управления внешним устройством. В этом случае сервер CRM отслеживает состояние SIP-регистрации аппарата. При клике в интерфейсе 1С сервер Asterisk отправляет команду на аппаратный телефон через AMI, инициируя обратный вызов. Плюс такого подхода в том, что система автоматически создает документ Событие (или Взаимодействие) и привязывает к нему запись разговора, которую забирает из хранилища АТС по протоколу HTTP или через общий сетевой ресурс.

Работа с данными: Где хранятся дополнительные реквизиты в 1С:CRM

Часто программисты сталкиваются с тем, что созданный в пользовательском режиме дополнительный реквизит (через механизм ПВХ — План видов характеристик) не виден в основной таблице справочника при написании запроса. Разберем, где именно искать эти данные.

В современных версиях 1С:CRM, построенных на базе БСП (Библиотеки стандартных подсистем), используется два различных механизма хранения:

1. Дополнительные реквизиты: Они предназначены для данных, которые логически являются частью объекта. Рассмотрим их хранение: они находятся непосредственно в самом объекте (например, в справочнике Контрагенты или Клиенты), но в специальной табличной части с именем ДополнительныеРеквизиты.

Посмотрим на пример запроса для получения значения такого реквизита:


ВЫБРАТЬ
    КлиентыДополнительныеРеквизиты.Значение КАК ЗначениеРеквизита
ИЗ
    Справочник.Клиенты.ДополнительныеРеквизиты КАК КлиентыДополнительныеРеквизиты
ГДЕ
    КлиентыДополнительныеРеквизиты.Ссылка = &СсылкаНаКлиента
    И КлиентыДополнительныеРеквизиты.Свойство = &СсылкаНаСвойствоПВХ

2. Дополнительные сведения: В отличие от реквизитов, «сведения» не хранятся в объекте. Они записываются в независимый регистр сведений ДополнительныеСведения. Это делается для того, чтобы изменение свойства не приводило к изменению самого объекта (не менялась дата версии, не срабатывали обработчики обновления). Если ваш запрос к табличной части пуст, проанализируем содержимое этого регистра.

Профессиональный совет: вместо написания прямых запросов к табличным частям или регистрам, рекомендуется использовать функции БСП. Это гарантирует, что ваш код не «сломается» при обновлении конфигурации. Разберем пример использования универсальной функции:


// Использование встроенного механизма БСП для получения значения
Значение = УправлениеСвойствами.ЗначениеСвойства(СсылкаНаОбъект, "ИмяСвойстваИлиСсылка");

Таким образом, мы выяснили, что для успешной интеграции с телефонией можно использовать как простые самописные скрипты для Click-to-Call, так и комплексные решения от «Раруса». А при работе с данными важно четко разделять понятия «реквизит» и «сведение», обращаясь к соответствующим табличным частям или регистрам системы 1С:Предприятие 8.3.

← На главную