Выполнение определяет диалоговый интерфейс вашего проекта действий для получения вводимых пользователем данных и логику для обработки вводимых данных и в конечном итоге выполнения действия.
Обзор
Ваше выполнение получает запросы от Ассистента, обрабатывает запрос и отвечает. Этот процесс двусторонних запросов и ответов продвигает разговор вперед, пока вы в конечном итоге не выполните первоначальный запрос пользователя.
Следующие шаги описывают, как вы можете реализовать выполнение с помощью Actions SDK с Node.js или клиентской библиотекой Java/Kotlin:
- Инициализируйте объект ActionsSdkApp .
- Создайте функции для обработки запросов в вашей логике выполнения.
Построение диалогов
Инициализируйте объект ActionsSdkApp .
Следующий код создает экземпляр ActionsSdkApp и выполняет стандартную настройку Node.js для облачных функций Google:
'use strict'; const {actionssdk} = require('actions-on-google'); const functions = require('firebase-functions'); const app = actionssdk({debug: true}); app.intent('actions.intent.MAIN', (conv) => { conv.ask('Hi!'); }); // More intent handling if needed exports.myFunction = functions.https.onRequest(app);
ResponseBuilder responseBuilder = getResponseBuilder(request).add("Hi!");
return responseBuilder.build();{ "expectUserResponse": true, "expectedInputs": [ { "inputPrompt": { "richInitialPrompt": { "items": [ { "simpleResponse": { "textToSpeech": "Hi!" } } ] } }, "possibleIntents": [ { "intent": "actions.intent.TEXT" } ] } ], "conversationToken": "{\"data\":{}}", "userStorage": "{\"data\":{}}" }
Создание функций для обработки запросов
Когда пользователи произносят фразу, вы получаете запрос от Google Assistant. Чтобы выполнить намерения, поступающие в запросы, создайте функции, которые обрабатывают сработавшие намерения.
Для обработки запросов:
Выполните любую логику, необходимую для обработки пользовательского ввода.
Вызовите функцию
conv.ask(), передав ответ, который вы хотите отобразить, в качестве аргумента.
Следующий код показывает, как создать простой ответ:
conv.ask(`Hi! Say something, and I'll repeat it.`);
ResponseBuilder responseBuilder =
getResponseBuilder(request).add("Hi! Say something, and I'll repeat it.");
return responseBuilder.build();{ "expectUserResponse": true, "expectedInputs": [ { "inputPrompt": { "richInitialPrompt": { "items": [ { "simpleResponse": { "textToSpeech": "Hi! Say something, and I'll repeat it." } } ] } }, "possibleIntents": [ { "intent": "actions.intent.TEXT" } ] } ], "conversationToken": "{\"data\":{}}", "userStorage": "{\"data\":{}}" }
Обработка намерений
Когда у вас есть все функции для обработки триггерных намерений, используйте app.intent , чтобы назначить обработчики намерениям.
app.intent('actions.intent.TEXT', (conv) => {
// handle text intent.
});
app.intent('actions.intent.MAIN', (conv) => {
// handle main intent.
});@ForIntent("actions.intent.MAIN") public ActionResponse main(ActionRequest request) { // handle main intent // ... } @ForIntent("actions.intent.TEXT") public ActionResponse text(ActionRequest request) { // handle text intent // ... }
Завершение разговоров
Если вам больше не нужен пользовательский ввод в ответ и вы хотите завершить разговор, вызовите функцию conv.close() . Эта функция сообщает Google Assistant озвучить текст пользователю и завершить разговор, закрыв микрофон.
Обработка основного намерения вызова
Когда пользователи запускают намерение app.intent.action.MAIN , вам обычно не требуется выполнять какую-либо обработку ввода пользователя. Если ваш пакет действий содержит много действий и охватывает множество вариантов использования, рекомендуется сориентировать пользователя, сообщив ему несколько вещей, которые он может сделать.
- Вызовите функцию
conv.ask(), передав ваш ответ в качестве аргумента. Google Ассистент произносит ваш ответ пользователю, а затем ждет, пока пользователь активирует одно из указанных вами намерений.
В следующем фрагменте показано, как обрабатывать простое приветственное намерение:
// handle the initialTrigger function handleMainIntent(conv, input) { conv.ask(input); }
private ActionResponse handleMainIntent(ResponseBuilder rb, String input) {
return rb.add(input).build();
}Состояние разговора
Если вы используете API веб-перехватчика HTTP/JSON для разговоров , вы можете поддерживать состояние своих разговоров с помощью объекта в формате JSON ( conversationToken ), который передается туда и обратно между вами и Google Assistant. Если вы используете клиентскую библиотеку Node.js , вы можете напрямую записывать и читать поле conv.data . Это поле автоматически передается туда и обратно между запросами и ответами.
conv.data = {something: 10}; let value = conv.data.something;
ResponseBuilder rb = getResponseBuilder(request);
rb.getConversationData().put("something", 10);
Object value = rb.getConversationData().get("something");