VoiceXML — распознавание DTMF в записи

Я уже некоторое время работаю с IVR, но у нас есть случай, когда я хотел бы получить немного опыта/отзывов:

Можно ли записать сообщение, в котором пользователь может нажать тон DTMF, чтобы указать паузу, в которую мы вставим свой собственный звук? В этом случае пользователь запишет что-то вроде: «Доброе утро, [DTMF], пожалуйста, позвоните в офис по телефону [DTMF], чтобы согласовать вашу учетную запись».

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

У кого-нибудь есть опыт с чем-то вроде этого?

Спасибо

Джим Стэнли Blackboard Connect


person Jim Stanley    schedule 18.03.2013    source источник
comment
Какую платформу VoiceXML вы используете?   -  person gawi    schedule 20.03.2013


Ответы (2)


В VoiceXML вы должны использовать элемент record. для записи сообщения от пользователя. Элемент record имеет вызов атрибута dtmfterm, который, если установлено значение true (настройка по умолчанию), прекратит запись. Если для этого атрибута задано значение false, запись прекращается, когда достигается значение параметра maxtime или достигается тишина на время finalsilence. Установка для dtmfterm значения false приведет к тому, что DTMF будет частью записи. Установка для параметра dtmfterm значения true приведет к прекращению записи.

Я создал приложения, которые используют записи, созданные вызывающим абонентом, но никогда не манипулируют записями, как в ваших требованиях. Что вы можете сделать, так это объединить записи вместе. Вот QA, который показывает, как объединить записи wav, используя С#.

Вам придется поэкспериментировать с тем, сможете ли вы определить, какая клавиша DTMF была нажата, используя грамматики. Спецификация ускользает от этого, но она может быть несколько специфичной для платформы VoiceXML IVR, которую вы используете. Если вы знаете, какая клавиша DTMF использовалась, вы можете указать пользователю нажать *, чтобы вставить тишину, и #, чтобы прекратить запись. Оба прекратят запись, но логика в вашем VoiceXML снова вернется к записи, если нажата *, и полностью остановит процесс записи, если нажата #. Затем вы должны использовать конкатенацию, чтобы соединить эти записи вместе, и использовать wav-файл с предварительно записанной тишиной в процессе конкатенации, который вставляется между фрагментами, записанными пользователями.

Судя по тегам, вы используете C# и MVC для своего приложения VoiceXML. Существует проект с открытым исходным кодом под названием VoiceModel, который упрощает разработку приложений VoiceXML с использованием ASP.NET MVC 4. Вы можете прочитать о том, как он обрабатывает запись в этой среде здесь.

person Kevin Junghans    schedule 18.03.2013
comment
Кевин, нажатие * для включения нескольких записей — это идея, о которой я не подумал, и она вполне может оказаться тем, что мы ищем. Я бы интегрировал это в наш существующий проект VoiceXML (хотя я рассмотрю VoiceModel для дальнейшего использования) — я предполагаю, что метод контроллера, который в настоящее время получает один файл, может получить несколько файлов, закодированных в заголовке HTTP. Еще раз спасибо! Джим Стэнли Blackboard Connect - person Jim Stanley; 19.03.2013
comment
У Кевина правильный подход к аспектам VoiceXML. Тон DTMF может быть воспроизведен с некоторой постобработкой звука. Тоны DTMF громкие и специфические. Некоторый базовый код аудиофильтра должен помочь вам найти начало и конец тона, которые затем можно заменить вашим собственным звуком. - person Jim Rush; 19.03.2013

Если вы хотите вставить паузу и хотите остаться в теге пользовательского интерфейса, до сих пор, сколько работы у меня было в IVR, единственный dtmf, с которым мы могли бы оставаться в пользовательском интерфейсе, — это *, и мы возвращали бы grammar "REPEAT "при нажатии '* ' , в тег условия пользовательского интерфейса для REPEAT вы должны добавить wav-файл молчания (паузы).

В части записи мы использовали osdmtype = record, который сопоставлялся с xslt, который помог в записи и распознавании ответа клиента да/нет.
Но, тем не менее, я немного запутался в требовании, мне нужно больше деталей.
Извините, я не могу добавлять комментарии, так как не хватает представителей.
Вы можете написать мне, или я могу добавить больше ответов здесь.

person Rameez Ahmed Sayad    schedule 18.03.2013
comment
Если подумать, то мне нужно включить тег ‹record› с атрибутом dtmfterm, установленным в false, но при этом позволить пользователю завершить запись, нажав #. Согласно одной ссылке VXML, это возможно, но в наших тестах установка dtmfterm в false не останавливается при нажатии #. - person Jim Stanley; 18.03.2013
comment
Я не уверен, но был еще один атрибут «оператор терминатора», который по умолчанию был установлен как «#», поэтому мы использовали для явного обновления оператора терминатора на «» (пусто). Означает, что '#' теперь может возвращать другую грамматику при нажатии. Просто попробуйте проверить эти строки. - person Rameez Ahmed Sayad; 18.03.2013
comment
Хм, мы редко использовали тег ‹grammar› в нашем коде, и у меня возникли трудности с его реализацией (Qwest — наш IVR-провайдер для разработчиков). Я пытаюсь сделать следующее и получаю ошибки неверного типа сообщения.... - person Jim Stanley; 18.03.2013
comment
‹form› ‹grammar type=application/x-jsgf mode=dtmf› ( # ) ‹/grammar› ‹record name=wavFile beep=true maxtime=180s finalsilence=10s dtmfterm=false type=audio/x-wav› - person Jim Stanley; 18.03.2013
comment
Ах да, еще ‹property name=termchar value=# /› - person Jim Stanley; 18.03.2013
comment
не Qwest , CenturyLink ;) ваши типы грамматики кажутся другим форматом 'x-jsgf' , мы обычно использовали '*.grxml' не что иное, как сам xml. ‹br/› но это не должно быть проблемой, так как вы говорите, что CenturyLink ваш поставщик IVR для разработчиков, я могу вам помочь, напишите мне по адресу [email protected] - person Rameez Ahmed Sayad; 19.03.2013