SetRetail10 ◾️ Запись аудиофайлов с микрофона на кассе

Публичное пространство

SetRetail10 ◾️ Запись аудиофайлов с микрофона на кассе

Только для клавиатурной кассы!

https://crystals.atlassian.net/browse/SRTB-9608

https://crystals.atlassian.net/browse/CR-12942

10.4.20.0

Описание

Реализована система фоновой записи аудио с микрофона кассы для последующего анализа качества обслуживания.

Ценность

Система обеспечивает объективную оценку работы персонала путем анализа:

  • Стандартов обслуживания: приветствие, вежливость, завершение диалога.

  • Ключевых метрик: предложение дополнительных товаров, оформление сервисов, обработка возражений.

  • Процессуальных моментов: соблюдение скриптов, длительность обслуживания, эмоциональный тон.

Требования к оборудованию и подключению аудиоустройств

Функциональность поддерживает работу с микрофонами, соответствующими следующим конфигурациям:

  • Подключение аналогового микрофона (разъем 3,5 мм) напрямую к звуковому входу компьютера.

  • Подключение микрофона через внешнюю USB-звуковую карту, соединенную с компьютером (только в системах БЕЗ встроенной аудиоплаты).

    • Важно: Если в компьютере есть встроенная звуковая карта, подключение USB-звуковой карты работать не будет.

Логика работы

Запись звука на кассе

  • Включение/выключение: Функция активируется глобальной настройкой audiofile.recording.enabled.

  • Расписание: Запись запускается согласно расписанию в audiofile.recording.cronExpression. Если расписание не задано, запись ведется постоянно.

  • Запуск и остановка:

    • Запись стартует при авторизации пользователя.

    • Останавливается при блокировке кассы.

  • Формирование файлов:

    • Продолжительность одного файла задается в audiofile.recording.period.minutes.

    • Общая длительность сессии записи ограничена настройкой audiofile.recording.operation.time.

  • Обработка событий:

    • Переавторизация пользователя или перезагрузка кассы немедленно прерывает текущую запись, и файл сохраняется.

  • Обработка ошибок: Система работает в фоновом режиме, ошибки записи не отображаются в интерфейсе кассы.

 

Передача аудиофайлов в хранилище

0d9c9ad5-c91f-4c7b-ae57-2d105fd7a42a.png

На кассе реализована двухэтапная система управления аудиофайлами с отправкой в облачное хранилище.

Структура хранения файлов:

Все аудиозаписи сохраняются в директорию /home/tc/storage/records/, которая содержит:

  • raw/ - записанные аудиофайлы, требующие сжатия

  • created/ - аудиофайлы, готовые к отправке

  • sent/ - аудиофайлы, успешно переданные в хранилище

Внутри каждой из папок файлы автоматически распределяются по вложенным директориям по дате записи:

  • Год (YYYY)

  • Месяц (MM)

  • День (DD)

Пример конечного пути:
/home/tc/storage/records/created/2025/11/25/ShopNumber_CashNumber_2024_12_25_10_30_45

Формат именования файлов:
Файлы именуются по шаблону: ShopNumber_CashNumber_YYYY_MM_DD_HH_MM_SS

  • HH_MM_SS - временная метка начала записи по времени кассы.

Пример: 172_2_2025_05_06_11_45_32

Режимы передачи:

  1. Онлайн-отправка

    • В активной сессии записи каждый новый файл немедленно отправляется в хранилище после сохранения в папку created/.

    • После успешной отправки файл перемещается в sent/.

  2. Фоновая отправка пачек

    • В периоды без записи система отправляет скопившиеся файлы пачками.

    • Размер пачки задается в audiofile.recording.transfer.batch.size (по умолчанию — 1 файл).

    • Приоритет отдается самым свежим файлам по дате создания.

Управление процессом передачи:

  • При начале записи во время отправки пачки: текущая пачка завершается, затем активируется онлайн-отправка.

  • Количество попыток отправки: audiofile.recording.transfer.number.of.attempts.

  • При смене режима работы счетчик попыток для текущей пачки сбрасывается.

  • Неотправленные файлы остаются в created/ для следующих итераций выгрузки.

Передача аудиофайлов с кассы по расписанию

Для оптимизации сетевой нагрузки реализован режим передачи аудиофайлов по расписанию, управляемый настройками.

Принцип работы:

  • Расписание активировано: Выгрузка файлов в S3 происходит только в указанные временные интервалы

  • Расписание отключено: Передача работает в штатном режиме согласно основному алгоритму

Логика управления:

  • Наличие настройки расписания переводит систему в режим контролируемой выгрузки

  • Вне расписания файлы накапливаются в папке created/ без attempts отправки

  • При активации расписания система начинает передачу по стандартному алгоритму (пачками, с приоритетом свежих файлов)

 

Политика управления дисковым пространством

Для обеспечения стабильной работы кассы реализована система автоматической очистки аудиофайлов по времени и условиям места на диске.

Удаление неотправленных файлов:

  • Файлы в папке created/ удаляются после превышения лимита времени из настройки audiofile.recording.desync.period.days.

  • Логика: Если файл находится в папке created/ дольше установленного срока → он подлежит удалению.

  • Значение по умолчанию: 3 дня (при отсутствии настройки).

  • Приоритет удаления: Первыми удаляются самые старые файлы.

Удаление отправленных файлов:

  • Файлы в папке sent/ удаляются после превышения лимита из настройки audiofile.recording.cash.lifespan.days.

  • Логика: Если файл находится в папке sent/ дольше установленного срока → он подлежит удалению.

Защита от переполнения диска:

  • При снижении свободного места до 15% и менее система автоматически останавливает запись аудио.

  • Стратегия очистки: Удаление начинается с наиболее старых файлов.

 

Примеры работы

Запись аудиофайлов

Предварительные условия:

  • На кассе подключён микрофон

  • На кассе настроена выгрузка аудиофайлов в хранилище

  • На кассе включена и настроена функциональность записи аудиофайлов:

    • В настройке выставлена продолжительность записи: 10 минут

    • Расписание: с понедельника по пятницу с 10 утра

    • Продолжительность работы функциональности: 10 часов

    • Срок хранения аудиофайла: 1 день

    • Количеств попыток выгрузки файлов за итерацию: 3

    • Настройка подрезки файлов:

      1. Допустимый период отсутствия синхронизации: 3 дня.

  • Передача аудиофайлов по расписанию ВЫКЛ.

Основной сценарий:

Период: ПН-ПТ

  1. Кассир включает кассу и открывает смену в 9 утра.

  2. Кассир авторизуется.

  3. Касса не производит активацию записи звука.

  4. В 10 часов - активируется функциональность записи аудиофайлов на кассе.

  5. Касса проверяет наличие авторизованного пользователя.

  6. На кассе авторизован кассир.

  7. Касса начинает запись аудиофайла.

  8. По истечении 10 минут запись первого аудиофайла завершается, файл сохраняется.

  9. После сохранения аудиофайла - касса отправляет его в хранилище.

  10. Касса начинает запись нового аудиофайла.

  11. Касса в течение дня записывает аудиофайлы по 10 минут.

  12. Во время записи очередного аудиофайла кассир блокирует кассу.

  13. Касса прекращает запись аудиофайлов с кассы.

  14. Касса сохраняет аудиофайл и отправляет его в хранилище.

  15. До момента авторизации кассира (пока касса заблокирована) - касса не производит запись аудиофайлов.

  16. Касса проверяет, есть ли невыгруженные аудиофайлы на кассе

    1. Есть - формирует пачку из неотправленных файлов и передает их в хранилище S3.

  17. Кассир авторизуется на кассе.

  18. Касса начинает запись аудиофайла.

  19. Касса завершает отправку пачки.

  20. По истечении 10 минут запись файла завершается, файл сохраняется и отправляется в хранилище.

  21. Касса производит запись, сохранение и отправку файлов в онлайн-режиме до момента блокировки.

  22. По истечении 10 часов с момента активации функциональности записи аудиофайлов на кассе - касса перестает производить запись аудиофайлов.

    1. Следующая активация функциональности согласно расписанию - на следующий день в 10 утра

Период: СБ -ВС

  1. Кассир включает кассу и открывает смену в 9 утра.

  2. Кассир авторизуется.

  3. Касса не производит запись аудиофайлов в течение дня, так как в расписании это не задано.

 

Передача аудиофайлов по расписанию

Предварительные условия:

  • Включена и настроена функциональность синхронизации аудиофайлов по расписанию audiofile.transfer.enabled

    • Расписание запуска передачи невыгруженных аудиофайлов: каждый день в 00:00

    • Продолжительность передачи невыгруженных аудиофайлов в хранилище: 8 часов

    • Количество попыток передачи невыгруженных аудиофайлов в хранилище: 1

    • Максимальное количество выгружаемых файлов при синхронизации: 60

Основной сценарий:

  1. Касса в течение дня производит запись и сохранение аудиофайлов на кассе. Отправка файлов не производится.

  2. В 00:00 касса проверяет, ведется ли сейчас запись аудиофайлов на кассе.

  3. Запись аудиофайлов прекращена.

  4. Касса начинает передавать невыгруженные аудиофайлы пачками в хранилище.

  5. В течение 8 часов касса производит передачу невыгруженных аудиофайлов в хранилище.

  6. В 08:00 касса прекращает передачу невыгруженных аудиофайлов в хранилище.

 

Ограничения

  1. При перезагрузке кассы в процессе записи файла запись файла будет прервана.

  2. Если микрофон не подключен или неисправен, функциональность записи звука на кассе работать не будет.

  3. Подключение любых иных устройств для записи звука с кассы, кроме описанных в Требованиях к оборудованию, не гарантирует работу функциональности.

  4. Функциональность реализуется только для POS кассы.

Описание настроек

Все настройки невизуализированные, расположены в базе данных в таблице sales_management_properties, module_name = AUDIO_RECORDING.

Скрипт для просмотра настроек:

SELECT * from sales_management_properties WHERE module_name = 'AUDIO_RECORDING';
image-20251016-095224.png

Параметр

Описание

Значение

Параметр

Описание

Значение

Настройки записи аудиофайлов на кассе

audiofile.recording.enabled

Включение функциональности записи аудиофайлов на кассе

true/false.

audiofile.recording.cronExpression

Расписание запуска функциональности записи аудиофайлов на кассе.

Например: задавать настройку для записи звука каждый день с пн. по пт. с 10 утра до 8 вечера, в остальное время запись звука на кассе не производится

CRON-выражения в формате Quartz Scheduler.

В выражениях обязательно должен использоваться символ ? (знак вопроса) в одном из двух полей: "день месяца" ИЛИ "день недели".

В Quartz Scheduler эти два поля являются взаимоисключающими. Знак ? указывает системе "не задавать значение" для соответствующего поля.

Пример корректного выражения:
0 0 9 * * ? — ежедневно в 9:00 (знак ? в поле "день недели")

Без ? выражение будет считаться невалидным и вызовет ошибку при обработке, так как система не сможет определить, по каким правилам рассчитывать расписание.

Для создания выражений можно использовать сервис Free Online Cron Expression Generator and Describer - FreeFormatter.com

 

audiofile.recording.operation.time

Продолжительность работы функциональности записи аудиофайлов на кассе.

Часы.

audiofile.recording.period.minutes

Продолжительность записи одного аудиофайла.

Минуты.

audiofile.recording.cash.lifespan.days

Срок хранения отправленных фалов на кассе. По истечении этого периода объекты будут удалены.

Значение по умолчанию: 1 день

Дни.

audiofile.recording.desync.period.days

Допустимый период отсутствия синхронизации с момента последней попытки синхронизации.

Касса по тайм-коду будет определять файлы, у которых отсутствовала синхронизации более 3 дней и удалять их.

Значение по умолчанию: 3 дня

Дни.

audiofile.recording.transfer.batch.size

Максимальное количество аудиофайлов выгружаемых за итерацию.

Значение по умолчанию: 1 файл

 

audiofile.recording.transfer.number.of.attempts

Количество попыток выгрузки файла/пачки за итерацию

Значение по умолчанию: 2

 

audiofile.recording.transfer.cleanup.period.hour

Период запуска очистки файлов

Часы

Настройки передачи аудиофайлов по расписанию

audiofile.transfer.enabled

Включение функциональности передачи аудиофайлов в определенный период времени.

true/false.

audiofile.transfer.cronExpression

Расписание запуска передачи невыгруженных аудиофайлов.

CRON-выражения в формате Quartz Scheduler.

В выражениях обязательно должен использоваться символ ? (знак вопроса) в одном из двух полей: "день месяца" ИЛИ "день недели".

В Quartz Scheduler эти два поля являются взаимоисключающими. Знак ? указывает системе "не задавать значение" для соответствующего поля.

Пример корректного выражения:
0 0 9 * * ? — ежедневно в 9:00 (знак ? в поле "день недели")

Без ? выражение будет считаться невалидным и вызовет ошибку при обработке, так как система не сможет определить, по каким правилам рассчитывать расписание.

audiofile.transfer.operation.time

Продолжительность передачи невыгруженных аудиофайлов в хранилище.

Часы.

Настройки интеграции с хранилищем S3

audiofile.transfer.s3.endpoint

Адрес хранилища S3

 

audiofile.transfer.s3.access_key

Access key

 

audiofile.transfer.s3.secret_key

Secret key

 

audiofile.transfer.s3.bucket

Наименование корзины - целевого каталога в хранилище S3, куда требуется загружать аудиофайлы

 

 

© 1994-2025, ООО «Кристалл Сервис Интеграция».
Все права защищены.

Политика обработки персональных данных