При интеграции 1С с телефонной станцией Asterisk разработчики часто используют внешние компоненты (например, ROM_Asterisk_Native) для обработки событий AMI в реальном времени. Однако при обновлении платформы 1С или смене архитектуры АТС можно столкнуться с падением сеанса, ошибками выделения памяти или некорректным сопоставлением входящих каналов вызова. Разберем основные причины этих проблем и проверенные способы их решения.
Сбой при выполнении функции ПодключитьВнешнююКомпоненту с типом ТипВнешнейКомпоненты.Native чаще всего происходит по следующим причинам:
Рассмотрим стандартный пример подключения Native-компоненты из макета конфигурации в 1С:
АдресВнешнейКомпоненты = "ОбщийМакет.ROM_Asterisk_Native";
Результат = ПодключитьВнешнююКомпоненту(АдресВнешнейКомпоненты, "Simplit", ТипВнешнейКомпоненты.Native);
Если НЕ Результат Тогда
ВызватьИсключение "Не удалось подключить внешнюю компоненту для работы с Asterisk!";
КонецЕсли;
При длительном ожидании ответа в очереди Asterisk может генерировать несколько пар событий Dial (с SubEvent: Begin и SubEvent: End) для одного и того же входящего вызова. Это происходят из-за того, что АТС скидывает канал оператора по таймауту с кодом DialStatus: CANCEL и совершает повторную попытку набора.
Проанализируем, как правильно отслеживать входящие вызовы:
Linkedid: В отличие от Uniqueid, который уникален только для конкретного канала (плеча звонка), поле Linkedid сохраняет единое значение для всей цепочки соединений от первого поступления вызова в АТС до его завершения.BridgeEnter или AgentConnect, которые приходят только в момент фактического начала разговора.Если Asterisk размещен у облачного провайдера, прямой доступ по порту AMI (5038), как правило, закрыт из соображений безопасности. Разберем альтернативные архитектурные решения:
HTTPСервис. В этом случае 1С не держит постоянное TCP-сокетное соединение, а принимает входящие JSON/XML-пакеты.HTTPСоединение.