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