Перейти к основному содержимому

Ошибки синтеза и воспроизведения

On-Premise

В разговоре бот может воспроизводить реплики:

Если возникла ошибка синтеза или ошибка воспроизведения файла, то по умолчанию бот пропускает такую реплику и переходит к следующей реакции.

Вы можете включить обработку таких ошибок. Обработка позволяет:

к сведению

Обработка ошибок синтеза и воспроизведения доступна, только если платформа JAICP установлена к вам в контур.

Запасной аудиофайл

Включите обработку ошибок и добавьте запасной аудиофайл. Смотрите инструкцию в документации On-Premise.

Если обработка включена, бот использует запасной аудиофайл каждый раз при ошибке синтеза или воспроизведения.

Рассмотрим такой сценарий:

state: Promo
q!: Расскажите про акции
a: У нас появилась новая акция!
audio: https://example.com/audio.wav
a: Хотите поучаствовать?

Предположим, что аудиофайл по ссылке https://example.com/audio.wav недоступен. Если бот перейдет в стейт Promo, то он:

  1. Произнесет: У нас появилась новая акция!.
  2. Попробует воспроизвести аудиофайл https://example.com/audio.wav. Возникнет ошибка, и бот воспроизведет вместо этой реплики запасной аудиофайл.
  3. Произнесет: Хотите поучаствовать?.

Событие speechInvalid

Событие speechInvalid срабатывает, когда возникла ошибка синтеза или воспроизведения.

Особенности

В стейте с событием speechInvalid:

  • Реакции начинают выполняться сразу после появления ошибки. Они выполняются асинхронно по отношению к реакциям текущего стейта.
  • Если вы укажете реплики бота, они не будут воспроизведены.
  • Используйте параметр noContext = true, чтобы контекст бота не переходил в этот стейт.
state: Promo
q!: Расскажите про акции
a: У нас появилась новая акция!
audio: https://example.com/audio.wav
a: Хотите поучаствовать?

state: Error || noContext = true
event!: speechInvalid
script:
$analytics.setComment("Проблема с синтезом или аудио");

Предположим, что аудиофайл по ссылке https://example.com/audio.wav недоступен. Если бот перейдет в стейт Promo, то он:

  1. Произнесет: У нас появилась новая акция!.
  2. Попробует воспроизвести аудиофайл https://example.com/audio.wav. Возникнет ошибка, и бот воспроизведет вместо этой реплики запасной аудиофайл.
  3. Начнет выполнять реакции из стейта Error. Бот запишет в аналитику комментарий: Проблема с синтезом или аудио.
  4. Произнесет: Хотите поучаствовать?.
  5. Будет ожидать следующий запрос пользователя или новое событие в стейте Promo, так как у стейта Error включен параметр noContext.

Остановка следующих реплик

Если возникла ошибка, вы можете остановить все последующие реплики с помощью метода $dialer.continueSpeech. Бот не будет воспроизводить реплики с помощью синтеза или из аудиофайлов, пока не получит новый запрос пользователя или событие.

Используйте этот метод только в стейте с событием speechInvalid. Передайте false в качестве аргумента:

state: Promo
q!: Расскажите про акции
a: У нас появилась новая акция!
audio: https://example.com/audio.wav
a: Хотите поучаствовать?

state: Error || noContext = true
event!: speechInvalid
script:
$dialer.continueSpeech(false);
$analytics.setComment("Проблема с синтезом или аудио")

Предположим, что аудиофайл по ссылке https://example.com/audio.wav недоступен. Если бот перейдет в стейт Promo, то он:

  1. Произнесет: У нас появилась новая акция!.

  2. Попробует воспроизвести аудиофайл https://example.com/audio.wav. Возникнет ошибка, и бот воспроизведет вместо этой реплики запасной аудиофайл.

  3. Начнет выполнять реакции из стейта Error:

    1. Получит значение, которое установил метод $dialer.continueSpeech — false.
    2. Запишет в аналитику комментарий: Проблема с синтезом или аудио.
  4. Не произнесет: Хотите поучаствовать?.

  5. Будет ожидать следующий запрос пользователя или новое событие в стейте Promo, так как у стейта Error включен параметр noContext.

подсказка

Если вы хотите, чтобы бот продолжал воспроизводить реплики, не указывайте $dialer.continueSpeech в стейте с событием speechInvalid. Или укажите в этом стейте $dialer.continueSpeech(true) — в обоих случаях поведение будет одинаковым.