понедельник, 28 июля 2014 г.

Такси-Мастер, Октелл и Яндекс ASR Cloud (распознавание голоса)

     Приветствую.
       Сегодня давно Яндекс анонсировал новый сервис - Yandex ASR Cloud.
  Сервис позволяет распознавать голос трезвого русского (на пьяного русского еще плохо ориентировано - проверял, но, думаю, они над этим работают) и преобразовывать его в текст, что может быть очень полезным для использования в IVR-меню, да и вообще облегчить работу сотрудников вашей компании, если, в итоге, вы их не уволите вовсе за ненадобностью (адский смех). Кстати, Яндекс планирует прикрутить еще и синтезатор речи в ближайшем будущем - будем ждать-наблюдать-делать хмурый вид.
     И вы такие хором скажете: "ну и нафига, есть же Google Voice? да и готовый сценарий уже есть!". А я такой вам хором один отвечу, что гугл обновили api данного сервиса до версии 2.0 и ограничил количество запросов в свой сервис 50-ю штуками-разами-кучками. Вот так вот. Все, кто использовали гугловойс, хором накрылись известно чем. Если честно, то я пока не знаю, какие условия ставит гугл для увеличения числа запросов, но точно знаю, что будет просить денег или акции газовых компаний (ведь всем же известно, что у каждого русского, есть своя доля в Газпроме).


     Справедливости ради отмечу, что Яндекс тоже просит денюжку равную 1000$ за 200.000 запросов, однако с яндексом все прозрачно и понятно в отличие (пока) от гугла, да и русскую речь он распознает получше. Хорошим плюсом является возможность получить безлимитный ключ бесплатно на две недели.
     Также в новой версии Октелл (начиная с 2.11) появился специальный компонент для работы  с Yandex ASR Cloud, а это явный признак того, что лучше бы нам использовать именно Яндекс для распознавания речи. Компонент позволяет производить запись и отправлять ее на облако Яндекса для дальнейшего распознавания и возвращает готовый текст. Если раньше приходилось все это делать кучей компонентов, то сейчас все намного проще и, как следствие, намного быстрее (ранее мы уже использовали яндекс распознавалку, но только в качестве тестов). Вся информация по новому компоненту по ссылке выше, я тут останавливаться не буду.

     Под все эти радости было решено изготовить спец-сценарий для наших клиентов, который бы мог принимать заказы при необходимости. Необходимости, как вы понимаете, бывают разные: отсутствие свободных диспетчеров, большая очередь, отсутствие диспетчеров вообще как таковых, интерес пользователей, "фишка службы такси", тяга директора службы к приключениям! 
     Сценарий, как вы понимаете, не просто распознает голос и преобразует его в текст (это можно и одним компонентом сделать), но еще умеет делать всякое. Вот функционал, который в него заложен и что он делает по умолчанию (да-да, есть разные схемы использования):
  1. Достаем путь к папке с записями разговоров
  2. Устанавливаем приветствие-уведомление о том, что это автозаказ. Приветствие унифицировано и подойдет большинству служб. Да и вообще все звукозаписи "мультислужбные". О как.
  3. Запись звукового файла ( адрес ) с сохранением в папку с остальными звукозаписями.
  4. Распознавание голоса с отправкой файла в яндекс-просторы.
  5. Проверка на то, что был ли назван пункт (село, город, деревня, хутор, поселок и т.д.). А вдруг заказ загородный? По умолчанию регион и город задается в начале сценария.
  6. Проверяем все ли так с адресом. Определился ли дом или нет. Для этого спрашиваем API Яндекс.Карт. Если не нашли, то переспросим.
  7. По тому же алгоритму вычисляем координаты этого адреса.
  8. Используя API Такси-Мастера создается заказ. Клиенту говорим, что-то приятное и прощаемся с ним. Если заказ по каким-то причинам не создался, то попросим еще раз или свяжем внаглую с диспетчером!
  9. В заказе уже определится Стоянка/Район адреса подачи, а значит подставится экипаж, который подходит к этому адресу.
  10. В заказе можно будет увидеть и скачать звукозаписи, которые были сделаны.
  11. Заказ создастся с определенным временем подачи (регулируется в ТМ WEB-сценарии).
    Ну вот и основная логика, однако в сценарии простыми манипуляциями (просто изменением маршрута звонка) можно что-то поменять. Внутри сценария я нарисовал, как правильно соединять те или иные компоненты, чтобы сценарий работал по той или иной схеме. Можно, например, заставить тётю-робота спросить также адрес назначения или не доставать координаты адреса, если в этом нет необходимости.
     Также в сценарии есть защита от спама, т.е. клиент не сможет создать больше двух заказов на свой номер, а повторить свой адрес больше трех раз тоже не получится. Однако, это все регулируется параметрами.
      Все точки Стоп сценария идут только после фразы "Идет соединение с оператором". Это значит, что куда бы вы ни ставили этот сценарий, но точкой выхода из него должен быть компонент "переключение на внутренний номер".
        Гарантировать работу вашей диспетчерской без ,собственно, диспетчера я не могу, т.к. % распознавания составляет примерно 75-80 и, как я уже сказал человек должен быть желательно трезвым и без дефектов речи. Также учитывайте, что Яндекс не ориентируется по пунктам, т.е. нельзя сказать "Торговый центр Радуга" и получить координаты данного места (пусть даже оно и одно в вашем городе), однако, если вам не нужны координаты и вы пустили все на самотек (отдали выбирать заказы водителям самостоятельно), то всегда распожалуйста! Используйте распозновалку только, когда ваши диспетчеры не справляются - для клиентов, кто >5 в очереди запускать такой сценарий.
     В общем и целом получилось добротно и пара клиентов уже обкатывает эту схему. Если вам есть, что добавить, то милости прошу в комменты, которые я скорее всего не увижу, т.к. уведомления гугла не работают по какой-то причине. Данный функционал спрашивайте у вашего менеджера или у меня.
     Успехов в работе!