Под капотом SpeechNotRecognized
Рассказывает лингвист-разработчик Лена Шукшина
Событие speechNotRecognized на самом деле скрывает за собой два разных явления.
- Первое — нераспознанная реплика. Человек что-то сказал, но ASR не смог распознать, что именно. Событие
speechNotRecognized
прилетает после того, как человек замолчал. - Второй — тишина,
speechNotRecognized
прилетает после таймаута слушания (5 сек по умолчанию или значение, заданное с помощью$dialer.NoInputTimeout
).
Иногда нам хочется реагировать на эти два события по-разному. Например, если человек молчит, говорить “алло, алооо, не молчите”, а если не смогли распознать — попросить повторить.
Отличить эти два вида speechNotRecognized
можно по наличию $request.rawRequest.utterances
. У нераспознанной реплики это поле будет, у тишины — нет.
Пример стейта:
state: SpeechNotRecognized
if: $request && $request.rawRequest && $request.rawRequest.utterances
a: Извините, не расслышала. Не могли бы вы повторить?
else:
a: Алло, алло, вас не слышно!