Выполнение определяет диалоговый интерфейс вашего проекта действий для получения вводимых пользователем данных и логику для обработки вводимых данных и в конечном итоге выполнения действия.
Обзор
Ваше выполнение получает запросы от Ассистента, обрабатывает запрос и отвечает. Этот процесс двусторонних запросов и ответов продвигает разговор вперед, пока вы в конечном итоге не выполните первоначальный запрос пользователя.
Следующие шаги описывают, как вы можете реализовать выполнение с помощью 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");