Использование Followup Intents, вероятно, является неправильным способом сделать это. Как вы заметили, это слишком тяжело для более чем нескольких намерений. Это может быть полезно в определенных обстоятельствах, если вы хотите, чтобы «повторное» сообщение разъясняло ответ по-другому, но в целом оно не очень полезно. (Следует также отметить, что Followup Intents используют контексты, но не так, как описано ниже.)
Вам не нужно добавлять контекст в пользовательский интерфейс как часть исходящего контекста - вы должны установить это как часть вашего выполнения. Он будет включать параметр, который либо содержит именно то, что вы сказали, либо информацию, необходимую для воссоздания того, что вы сказали (возможно, в другой форме, если это уместно). В своем «повторном» намерении вы прочтете значение, которое вы сохранили в этом контексте, и снова отправите его в качестве вывода. Если вы используете SSML, вы можете wi sh изменить скорость или громкость, если это уместно.
Обновление на основе новых вопросов
The readme для VoiceRepeater содержит основы того, что вам нужно сделать, чтобы использовать его, но предполагает небольшое знакомство с Node. Но в целом, да, вы устанавливаете его так, как вы описываете, настраиваете Intent, который захватывает запросы на повторение и регистрирует функцию-обработчик (repeatLastStatement(app)
в файле readme), которая обрабатывает Intent для отправки ответа через voiceRepeater.lastPromptWithPrefix()
.
Также может предположить, что вы используете версию 1 библиотеки действий на Google. Я не слишком углубился в код, но похоже, что он заменяет библиотечную функцию ask
своей собственной, и я не уверен, насколько хорошо это работает с версией 2 библиотеки actions-on-google.
В отличие от Voice Repeater, мультивалютный режим не требует особой регистрации обработчиков, поскольку он пытается скрыть как можно больше шаблонов под крышками. Вам просто нужно определить ответы, которые вы, возможно, захотите использовать. Он использует схему контекста, которую я обрисовал выше, чтобы хранить ответы и делать их доступными, когда пользователь просит повторить их.
Нет видео о использовании multivocal , но простой пример включает в себя конфигурацию, иллюстрирующую, как настроить ответы для намерения «multivocal.repeat». Несмотря на то, что VoiceRepeater работает с библиотекой Actions-on-Google, Multivocal является полной заменой, предлагая более основанный на шаблонах подход к выполнению.
Однако ни один из них не поможет вам напрямую, если вы хотите реализовать его для Python. Но если вы посмотрите на источник для VoiceRepeater, вы сможете понять, как реализовать его самостоятельно в Python.
Бит ключа находится на строке 47 , где он сохраняет ответ в контексте. (Он также сохраняет ответ с префиксным сообщением.) Затем он вызывает исходную функцию, которая отправит ответ:
app.setContext("last_prompt", 100,
{
"last_prompt": textToSpeech,
"prefixed_last_prompt": repeatPrefix + lastStatement,
});
originalAsk(response);
Позже, при вызове lastPromptWithPrefix () , он использует содержимое контекста для отправки ответа.
lastPromptWithPrefix() {
return this.app.getContext("last_prompt") !== null
? this.app.getContextArgument("last_prompt", "prefixed_last_prompt").value
: "um....I don't remember what I said!";
}