Выполнение сборки (Dialogflow)

Выполнение определяет диалоговый интерфейс вашего проекта действий для получения вводимых пользователем данных и логику для обработки вводимых данных и в конечном итоге выполнения действия.

Обзор

Ваше выполнение получает запросы от Ассистента, обрабатывает запрос и отвечает. Этот процесс двусторонних запросов и ответов продвигает разговор вперед, пока вы в конечном итоге не выполните первоначальный запрос пользователя.

Следующие шаги описывают, как вы можете реализовать выполнение с помощью Actions SDK с Node.js или клиентской библиотекой Java/Kotlin:

  1. Инициализируйте объект ActionsSdkApp .
  2. Создайте функции для обработки запросов в вашей логике выполнения.

Построение диалогов

Инициализируйте объект 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. Чтобы выполнить намерения, поступающие в запросы, создайте функции, которые обрабатывают сработавшие намерения.

Для обработки запросов:

  1. Выполните любую логику, необходимую для обработки пользовательского ввода.

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

  1. Вызовите функцию 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");