Как реализовать прослушивание и перемотку записей звонков из Asterisk в 1С?

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

При интеграции телефонии Asterisk с платформой 1С часто возникает задача оперативного прослушивания записей разговоров непосредственно из интерфейса программы. Стандартный подход подразумевает использование ПоляHTMLДокумента и тега audio. Однако разработчики сталкиваются с серьезной проблемой: Asterisk по умолчанию сохраняет записи в формате WAV, который либо не воспроизводится в некоторых движках браузеров 1С, либо не поддерживает функцию перемотки (seeking). В этой статье мы подробно разберем, как решить эту проблему с помощью конвертации и правильной настройки серверной части.

Анализ проблемы: почему WAV не подходит для 1С

Разберем ситуацию: при использовании тега audio в ПолеHTMLДокумента файл формата WAV часто загружается целиком, прежде чем начнется воспроизведение. Более того, кнопка прокрутки на временной шкале остается неактивной. Это происходит по двум причинам:

  1. Формат контейнера: Не все браузерные движки (особенно старый Trident/Internet Explorer) корректно обрабатывают заголовки WAV для потокового вещания.
  2. Отсутствие поддержки Range-запросов: Для реализации перемотки веб-сервер, отдающий файл, должен поддерживать HTTP-заголовок Accept-Ranges. Если 1С запрашивает файл напрямую с сервера, где лежит запись, а сервер не настроен, перемотка работать не будет.

Решение 1: Конвертация WAV в MP3 с помощью FFmpeg

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

Для конвертации файла используем следующую команду:

ffmpeg -i input.wav -codec:a libmp3lame -qscale:a 2 output.mp3

Рассмотрим параметры этой команды подробнее:

Решение 2: Настройка Asterisk для прямой записи в MP3

Вместо того чтобы выполнять постобработку, мы можем настроить Asterisk на запись звонков сразу в формате MP3. Это значительно упрощает архитектуру решения. Рассмотрим, как это реализовать. В современных версиях Asterisk (13 и выше) при наличии установленной библиотеки lame в системе, можно использовать расширение .mp3 в функции MixMonitor.

Пример настройки в плане нумерации (extensions.conf):

same => n,MixMonitor(${RECORD_FILENAME}.mp3)

В этом случае 1С будет получать прямую ссылку на уже готовый MP3-файл, который нативно поддерживается всеми современными движками ПоляHTMLДокумента (включая Chromium в платформе 8.3.14+).

Решение 3: Реализация перемотки (Seeking) через HTTP-заголовки

Даже если мы используем MP3, перемотка может не заработать, если файл отдается скриптом (например, на PHP или через HTTP-сервис 1С) без поддержки Partial Content. Выясним причину: браузер при перемотке посылает запрос с заголовком Range: bytes=start-end. Если сервер отвечает кодом 200 OK и отдает файл целиком, браузер не может "прыгнуть" в нужную позицию.

Если вы используете Nginx для раздачи файлов записей, убедитесь, что поддержка диапазонов включена (по умолчанию она активна). Если же вы отдаете файл через 1С или самописный скрипт, необходимо реализовать обработку заголовков вручную:

  1. Проанализировать заголовок Range в запросе.
  2. Вернуть статус 206 Partial Content.
  3. Установить заголовок Content-Range, указав смещение в байтах.
  4. Отправить только затребованную часть бинарных данных.

Использование современных технологий: WaveSurfer.js

Для создания профессионального интерфейса прослушивания в 1С мы рекомендуем использовать JavaScript-библиотеку WaveSurfer.js. Она позволяет не только проигрывать аудио, но и визуализировать форму волны (waveform). Это крайне полезно для менеджеров, так как позволяет визуально определить, когда в разговоре были паузы.

Рассмотрим пример того, как может выглядеть HTML-код внутри 1С:


<div id="waveform"></div>
<script src="https://unpkg.com/wavesurfer.js"></script>
<script>
  var wavesurfer = WaveSurfer.create({
    container: '#waveform',
    waveColor: 'violet',
    progressColor: 'purple'
  });
  wavesurfer.load('URL_К_ВАШЕМУ_MP3_ФАЙЛУ');
</script>

Этот код вставляется в ПолеHTMLДокумента с помощью метода УстановитьТекст(). Проанализируем ситуацию: использование такой библиотеки снимает часть проблем с нативными плеерами браузеров, так как библиотека берет на себя управление аудио-контекстом.

Сравнение FFmpeg и SoX

Иногда вместо FFmpeg для задач телефонии рекомендуют использовать утилиту SoX (Sound eXchange). Разберем, в чем ее преимущества. SoX специализируется исключительно на аудио и позволяет выполнять специфические для голоса операции быстрее:

Пример команды SoX для конвертации:

sox input.wav output.mp3

Интеграция в 1С через Native API или КомандаСистемы

Если возникла необходимость делать конвертацию именно силами 1С на стороне клиента (что не рекомендуется, но иногда необходимо), у нас есть два пути:

  1. Вызов внешней утилиты: Использование метода ЗапуститьПриложение. Нам потребуется заранее развернуть ffmpeg.exe в папке с базой или в системной директории.
    
    Команда = "ffmpeg -i " + ПутьКWav + " " + ПутьКMp3;
    ЗапуститьПриложение(Команда,, Истина);
    
  2. Внешняя компонента: Поиск или написание Native API компоненты, которая оборачивает lame.dll. Это позволит конвертировать данные прямо в оперативной памяти без создания временных файлов на диске, что повышает безопасность и производительность.

Подводя итог, наиболее рациональным решением является настройка Asterisk на выдачу MP3-файлов или использование FFmpeg на сервере телефонии. Это гарантирует стабильную работу ПоляHTMLДокумента в 1С, поддержку перемотки и совместимость с любыми версиями платформы.

← На главную