Интеграция "1С:Управление торговлей 10.3" с Yandex SpeechKit для распознавания телефонных звонков

12.03.21

Интеграция - WEB-интеграция

Распознавание телефонных звонков позволяет контролировать работу менеджеров, организовать для них дополнительный KPI, помогает разбирать конфликты и категоризировать звонки по вхождению слов. О своем опыте интеграции «1С:Управления торговлей 10.3» и сервиса Yandex SpeechKit на INFOSTART MEETUP Saint Petersburg.Online рассказал ИТ-директор компании «Умный дом» Федор Рыжков.

 

 

Я расскажу о своем опыте интеграции «1С:Управления торговлей 10.3» и сервиса Yandex SpeechKit для распознавания телефонных звонков:

  • вначале я скажу, какие плюсы приносит бизнесу дополнительное распознавание звонков и дополнительный KPI;

  • потом более подробно расскажу, как будут сохраняться файлы телефонного звонка;

  • как подключаться к сервисам Яндекса;

  • какие доработки потребуются в «1С:Управление торговлей»;

  • как масштабироваться при больших количествах звонков;

  • и сколько все это стоит для бизнеса.

 

Аналитика по телефонным звонкам для бизнеса

 

 

Что может принести бизнесу распознавание телефонных звонков?

  • Во-первых, это увеличение закрытых сделок. Если разработать скрипт разговора совместно с продажниками, с HR-менеджерами, с руководством, и контролировать, как менеджер по этому скрипту разговаривают, это поможет увеличить количество закрытых сделок.

  • Во-вторых, можно искать вхождение слов. Допустим, менеджер при разговоре с клиентом произносит несколько раз слово «Заказ», «Сделка», «Доставка» – потом по этим словам можно сделать отбор, найти в справочнике все звонки, где эти слова встречались, и, допустим, перезвонить клиенту еще раз, либо передать в доставку. Это позволит не потерять эту сделку.

  • В-третьих, в конце месяца можно посмотреть количество минут, проговоренных каждым из менеджеров, и скоррелировать это с зарплатой – это еще один KPI для менеджеров.

  • В-четвертых, это проверка ошибок. Руководство может посмотреть, кто первый предложил предоставить скидку – это сделал менеджер либо это попросил клиент. Также можно делать разбор конфликтов. Я считаю, что для бизнеса это нужно и позволяет увеличить прибыль.

 

Работа с файлами телефонных звонков

 

 

Какая ситуация с телефонией у нас была на предприятии:

  • У нас аналоговая АТС – аналоговые линии.

  • Дополнительно мы докупили комплекты SPRecord – можно перейти на сайт SPRecord, посмотреть, что это за устройство. Оно вешается параллельно аналоговой линии, записывает разговор и преобразует его в цифру – все звуковые файлы у него хранятся в формате *.wav без сжатия.

Соответственно, то, о чем я рассказываю, подходит для старых телефонных сетей. В новых цифровых сетях это уже решается гораздо проще – например, у MANGO есть отдельный сервис расшифровки телефонных звонков и отправка их на на почту.

Итак, у нас на фирме была аналоговая АТС, и все звонки записывались в формате *.wav.

 

 

Начинали мы это делать еще в 2017 году, и за это время по текущую дату записано 118 тысяч звонков.

Объем файлов за месяц занимает примерно 5 гигабайт (по данным марта 2020 года).

 

 

Что нужно сделать, чтобы как-то обработать эти файлы? Я использовал бесплатную кросс-платформенную утилиту Sox Sound eXchange. Она вызывается из командной строки и с ее помощью можно прямо из 1С выполнить следующие действия:

  • получить длительность аудио – по команде
    sox --i -d input.wav > output.txt

  • поменять дискретизацию – по команде
    sox --i -r " input.wav > output.txt

  • обрезать файл – по команде
    sox input.wav output.wav trim 20

Обрезку я использовал для исходящих звонков, где у нас обычно 20 секунд занимает дозвон – эти 20 секунд можно спокойно обрезать, чтобы сэкономить на расшифровке звонка.

У Яндекса расшифровка кратна 15 секундам, соответственно даже если вы отправляете одну секунду, вы платите за 15. Обрезав 20 секунд мы экономим на одном такте распознавания.

 

 

С аналоговой телефонии мы снимаем файлы в несжатом виде, в формате *.wav, а в Yandex их нужно отправлять в специальном формате OggOpus.

Соответственно, используем бесплатную консольную конвертацию с помощью утилиты opensenc, которую можно скачать с сайта https://opus-codec.org/

Команда выглядит так:

opusenc input.wav output.opus

На входе даем wav-формат, и получаем сжатые аудиоданные.

 

Как подключаться к сервисам Яндекса

 

 

В Яндекс.Облаке очень много сервисов, я в своей работе использовал только два:

  • Yandex Object Storage – для хранения звуковых файлов;

  • Yandex SpeechKit – для преобразования звука в текст.

Вначале, в 2017 году, Yandex Object Storage был не нужен, мы использовали Yandex SpeechKit напрямую – отправляешь wav-файл, ждешь в режиме онлайн и получаешь в текстовом виде расшифровку.

 

 

Переходим к Яндекс.Облаку.

Чтобы работать с Облаком, нужно установить тоже командный интерфейс Curl, нужно зарегистрироваться и пройти авторизацию.

Сейчас я более подробно расскажу про каждый из пунктов.

 

 

Вначале ставим Curl – это кроссплатформенная служебная программа командной строки.

Ничего сложного тут нет – просто заходим по гиперссылке https://cloud.yandex.ru/docs/cli/quickstart, скачиваем и устанавливаем.

Это нам дает возможность прямо из 1С в командной строке вызывать системные функции для работы с Яндекс.Облаком.

 

 

Далее мы:

  • Регистрируемся, получаем имя пользователя и пароль

  • В 2017 году этого было достаточно, чтобы начать работать. Сейчас, чтобы начать распознавать аудио-звонки, нам нужно создать платежный аккаунт и закинуть туда определенную сумму денег – бесплатного распознавания уже нету.

  • Далее мы создаем сервисный аккаунт, это связано с безопасностью – с каталогами Яндекс.Облака нельзя работать под общим аккаунтом, там для каждого объекта создается свой сервисный аккаунт и ему назначаются нужные права конкретно на эти объекты. В принципе, это правильно, но это немного усложнило работу.

 

 

Когда мы зарегистрировались, получаем OAuth-токен.

Как было показано предыдущих слайдах, мы установили Curl, и с его помощью запускаем команду yc init, которая привязывает профиль CLI на данном компьютере к Облаку.

В этой команде мы задаем, куда привязать профиль:

  • к какому облаку;

  • к какому каталогу;

  • и в какой зоне доступности будут происходить наши вычисления – у Яндекса на данный момент есть три зоны доступности (Владимирская, Рязанская и Московская область), где происходит расшифровка звонков.

После того как мы получили OAuth-токен, мы в принципе можем начать работать.

 

 

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

У Яндекса есть ограничение – с одного компьютера можно запускать не более 20 потоков.

Поскольку я укладывался во все лимиты Яндекс.Облака, у меня было:

  • одно облако;

  • один каталог;

  • и два ресурса – расшифровка звонков и хранение в Yandex Object Storage.

Если если вам нужна более масштабная расшифровка звонков, то необходимо поднимать, допустим, две виртуальных машины и на них на Яндексе регистрировать два облака – это позволит масштабироваться.

 

 

Итак, мы зарегистрировались, получили OAuth-токен, теперь нужно получить IAM-токен.

IAM-токен имеет ограниченное время жизни – не более 12 часов. Соответственно, 2 раза в сутки он меняется. Поэтому если он нужен при работе, допустим, в 1С, его можно получить программно вызовом команды

yc iam create-token > " + IAMtoken

 

Какие доработки потребуются в «1С:Управление торговлей»

 

 

После того ка мы зарегистрировались в Яндексе, настроили все доступы, какие изменения нам нужно произвести в 1С?

У нас используется 1С:Управление торговлей 10.3 – старая конфигурация на обычных формах.

  • Мы добавили справочник «Звонки». В нем хранятся все данные по звонку, ссылка на файл – этот звонок можно прямо из справочника прослушать.

  • У менеджеров разграничены права доступа, чтобы они видели только свои звонки, руководство видит звонки своих подчиненных, а генеральный директор видит все.

  • Далее мы добавили перечисление «Категории звонков», чтобы разделять звонки личные, звонки по заказам, либо звонки по доставке. Автоматически в программе заданы определенные правила, по которым звонок относится к нужной категории.

  • У меня используется аналоговая АТС Samsung, SPRecord считывает данные с аналоговой АТС и хранит все это в своей базе данных на Microsoft SQL. Соответственно, база на 1С может прочитать информацию о звонках с внешнего источника данных и получить эти данные

  • Обработка этих звонков автоматизирована, стартует при запуске системе – сейчас я об этом расскажу подробнее.

 

 

Вот так выглядит элемент справочника «Звонки» – там фиксируется:

  • кто звонил;

  • кому;

  • подтягивается контрагент, если в контактной информации контрагента сохранен этот телефонный номер;

  • контактное лицо контрагента;

  • телефон и конкретная линия, куда звонили;

  • служебные строки ошибок;

  • из данного элемента можно сразу же прослушать этот звонок;

  • и здесь же сохраняется текстовая расшифровка звонка.

 

 

На слайде показаны значения перечисления «Категории звонков». С помощью расшифровки по приоритету количества упоминаний ключевых слов я присваивал звонку определенную категорию. Этот приоритет устанавливали менеджеры.

 

 

В базе использовался внешний источник, который подключался к MSSQL-базе SPRecord. В этой базе есть служебная таблица, из которой мы можем получить определенные данные. Там достаточно много параметров, я использовал только несколько.

 

 

Вот так настроена автоматизация обработки звонков.

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

А в базе 1С в обработчике ПриНачалеРаботыСистемы() для этого пользователя стартует обработчик загрузки звонков.

 

Как масштабироваться при больших количествах звонков

 

 

Вначале, в 2017 году, у меня была обработка, которая распознавала короткие аудиозаписи.

В дальнейшем я перешел на распознавание длинных аудио – сейчас расскажу, почему.

 

 

Короткие аудиозаписи распознаются следующим образом:

  • сначала одна обработка ожидания проходит по списку звуковых файлов, назначает им, в каком потоке они будут отправлены в Яндекс, и завершает свою работу;

  • далее запускается обработка каждого потока, которая берет только звонки, которые принадлежат этому потоку – это позволяет масштабироваться.

При моей нагрузке мне было достаточно четыре потока отправки на Яндекс-расшифровку.

Напомню, что это распознавание коротких аудио.

Чем различаются короткие аудио от длинных? Короткие аудио-файлы распознаются онлайн – это стоит дороже и размер файла коротких аудио должен быть не больше одного мегабайта (не больше 30 секунд).

Соответственно, берется звуковой файл телефонного звонка, он нарезается на кусочки по 30 секунд с помощью программы sox, о которой я говорил выше, и далее каждый кусочек отправляется на Яндекс-расшифровку.

Отправляется он последовательно:

  • сначала отправляется первый кусочек, дожидается ответ и записывается в поле расшифровки справочных звонков;

  • далее отправляется второй кусочек, и далее третий – и так, пока не распознали весь звонок.

  • если все хорошо и ни один из кусочков не вернул ошибок, тогда помечаем звонок как обработанный.

Все это хорошо работало где-то с 2017 года по осень 2019, когда начались проблемы с тем, что при обработке телефонного звонка, нарезанного на шесть кусков, два из них могли вернуть ошибку. При повторной отправке через несколько минут снова один кусок мог вернуть ошибку и т.д.

Проблему долго решали со службой поддержки Яндекса, но так и не смогли решить. Так как мне не требовалось именно онлайн-распознавание, они предложили перейти на офлайн-расшифровку длинных аудиозаписей.

 

 

Распознавание длинных аудиозаписей происходит вот так:

  • одна обработка перебирает телефонные звонки и создает элементы в справочнике «Звонки» «1С:Управление торговлей»;

  • далее она же отправляет эти звонки в Yandex Object Storage, получает на ссылку на загруженные файлы;

  • далее она же отправляет эти ссылки на расшифровку – у Yandex SpeechKit есть ограничение, что одна минута расшифровки занимает около 10 секунд;

  • при следующей итерации эта же обработка проверяет, расшифровались эти звонки или нет – если расшифровка готова, этот текст получается и записывается в элемент справочника.

Поскольку в данном случае расшифровка производится не в онлайн-режиме, общение с Яндексом происходит очень быстро.

Единственная нагрузка – когда заливаешь звуковой телефонный разговор на Yandex Object Storage. Но в принципе, при 30 мегабит интернета это занимает несколько секунд. Напомню, что размеры wav-файлов и так достаточно маленькие, тем более что менеджеры у нас обычно общаются по 10-15 минут, не больше.

У распознавания длинных аудио есть свои лимиты – один гигабайт на размер файла или не более 4 часов. Но у нас ни один из менеджеров данный лимит не превысил.

Первоначально при распознавании коротких аудио у меня возникла проблема с нагрузкой на систему – отправка кусочков аудио у меня на тот момент была реализована через функции 1С, мне нужно было запускать 1С в четырех потоках, и каждый из потоков общался с Яндексом. Потоки могли подвисать, их нужно было перезапускать.

В дальнейшем я перешел на Curl – я в 1С запускаю Curl, он кушает меньше памяти, соответственно, он уже общается с Яндексом по отправке кусочков данных. В этом варианте зависания были решены.

При распознавании длинных аудио я тоже все общение с Яндексом вынес в Curl – 1С только запускает внешнюю команду, а все дальнейшие действия уже осуществляется через Curl.

 

Анализ затрат

 

 

Итак, переходим к важному важному – сколько же все это стоит.

Распознавание длинных аудио в 15 раз стоит одну копейку за один такт. Единица тарификации – это 15 секунд.

Короткие аудио распознаются дороже – 15 копеек за один такт.

 

 

Затраты в месяц – на графике показаны реальные затраты в марте 2020 года – всего за месяц уходит в районе 2 200 – 2 500 (это около шестидесяти трех часов).

В день это занимает там 250 рублей – кружка дорогого кофе.

 

 

На что в Яндексе больше всего уходит денег? На слайде я привел расшифровку по сервисам:

  • сразу видно, что самое дорогое – это именно распознавание аудиозаписей, оно съедает максимальный бюджет;

  • хранение на Yandex Object Storage стоит копейки. Это связано с тем, что файл на нем хранится несколько минут – мы отправляем файл на Yandex Object Storage, распознаем его и сразу удаляем.

Соответственно, весь бюджет съедает распознавание аудиозаписи.

 

Вопросы

 

  • Почему вы используете консольные команды, а не REST-запросы по API?

  • В первых версиях этой обработки я использовал запросы напрямую из 1С. Но поскольку при распознавании коротких аудиозаписей мне приходилось запускать базу 1С в несколько потоков, четыре базы 1С, запущенные на одном компьютере, существенно съедали память. Из-за этого и перешли на Curl.

  • Разве у вас файловая база? В клиент-серверной базе можно пользоваться фоновыми заданиями, сделать REST-запрос на сервере. Такая возможность есть очень давно. У меня тоже используется подобное решение, правда для других целей – стартует несколько фоновых потоков, каждый из которых что-то выполняет. В вашем случае это дало бы очень сильный выигрыш.

  • Как вы решаете случаи, когда одно слово отправлено в разных кусках – будет ли оно распознано?

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

  • Сколько времени заняла реализация проекта и какое количество суммарно сотрудников менеджеров телефонных звонков у такая статическая информация о понять масштабы?

  • Я на слайде приводил статистику – с 2017 года было обработано 118 тысяч звонков. У нас работает где-то 45 менеджеров, в месяц они наговаривают 5 гигабайт этих телефонных разговоров. Такое количество звуковой информации можно спокойно распознать в четырех потоках. Яндекс предоставляет 20 потоков, соответственно, еще есть куда расти.

  • Когда вы конвертируете wav-файлы в OggOpus, вы не пробовали играться, на каком битрейте уже распознавание хуже?

  • Я пробовал менять частоту дискретизации. Соответственно, сейчас он по умолчанию там на 11000 0,25 герц я пробовал увеличить в два раза до 22000. Размер файла увеличился в два раза, стоимость распознавания увеличилась, но качество не очень увеличилась. Скажу по опыту, что легче поставить хорошие телефонные аппараты, убрать фоновое звучание музыки – сделать тихий кабинет. Тогда все распознается идеально. Допустим, когда распознается автоответчик, что-то наговаривает, то когда Яндекс пытается это преобразовать в текст все идеально получается. Когда менеджер комкает слова либо быстро говорит – соответственно, возможны проблемы. То есть легче поменять оборудование и просить менеджеров следить за четким произнесением ключевых слов. Например, еси нужно, чтобы зафиксировалась слово «Заказ», то они должны четко сказать «Заказ», тогда это слово точно отделится пробелами от всех остальных слов и можно будет делать по нему поиск.

  • Что делать с переадресацией звонков на мобильный, звонки с мобильных, в WhatsApp и так далее? Или у вас все только через корпоративную АТС и других вариантов нет?

  • Если в компании используется мобильная телефония, то лучше перейти на цифровые АТС, например, на MANGO. Нашими силами это не решить – если звонок ушел с АТС, SPRecord его не запишет, и он не будет расшифрован.

 

*************

Данная статья написана по итогам доклада (видео), прочитанного на INFOSTART MEETUP Saint Petersburg.Online.

См. также

Сайты и интернет-магазины WEB-интеграция Системный администратор Программист Пользователь Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    17782    19    22    

16

Сайты и интернет-магазины Интеграция WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Платные (руб)

Интеграция 1С и Битрикс 24. Разработка имеет двухстороннюю синхронизацию 1С и Bitrix24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (платформа начиная с 8.3.23). При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

5040 руб.

04.05.2021    19846    13    17    

16

WEB-интеграция 8.3.8 Конфигурации 1cv8 Автомобили, автосервисы Беларусь Украина Россия Казахстан Управленческий учет Платные (руб)

Расширение предназначено для конфигурации "1С:Предприятие 8. Управление Автотранспортом. ПРОФ". Функционал модуля: 1. Заполнение регистров сведений по подсистеме "Мониторинг", а именно: события по мониторингу, координаты по мониторингу, пробег и расход по мониторингу, текущее местоположение ТС по мониторингу 2. Заполнение путевого листа: пробег по мониторингу, время выезда/заезда, табличная часть ГСМ, места стоянок по геозонам. 3. Отчеты по данным загруженным в регистры сведений. 4. Предусмотрена автоматическая загрузка данных в фоновом режиме (условия работы данной загрузке читайте в описании товара) Модуль работает без включенной константы по настройкам мониторинга. Модуль формы предоставляется с открытым кодом, общий модуль защищен. Любой заинтересованный пользователь, имеет возможность скачать демо-версию расширения.

22656 руб.

25.05.2021    14422    42    8    

18

WEB-интеграция Программист Руководитель проекта Платформа 1С v8.3 Конфигурации 1cv8 1С:Франчайзи, автоматизация бизнеса Платные (руб)

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

24000 руб.

27.09.2024    1172    1    0    

3
Оставьте свое сообщение