Realizacja kompilacji (Dialogflow)

Realizacja określa interfejs konwersacyjny, który ma uzyskać akcja danych wejściowych użytkownika i logikę ich przetwarzania, aby akcji.

Zdefiniuj rozmowę

Po zdefiniowaniu Działań możesz tworzyć odpowiadający konwersacji w przypadku tych akcji. W tym celu tworzenie intencji Dialogflow, które definiują gramatykę lub potrzeby użytkowników; aby aktywować intencję i odpowiednią realizację intencję, którą została aktywowana.

Możesz utworzyć dowolną liczbę intencji dla całego gramatyki.

Utwórz intencje

Kliknij znak + obok pozycji menu Intents (Intencje) w Dialogflow menu po lewej stronie. Pojawi się Edytor intencji, w którym możesz wpisać te informacje:

  • Nazwa intencji to nazwa intencji wyświetlana w IDE.
  • Konteksty pozwalają ograniczyć wyzwalanie intencji do konkretnych przypadków. Przeczytaj dokumentację Dialogflow na temat kontekstów. .
  • Zdarzenia wyzwalają intencje bez konieczności wypowiadania się przez użytkownika. Jeden przykładowym zdarzeniem jest zdarzenie GOOGLE_ASSISTANT_WELCOME, które umożliwia Asystent wywołujący Twoją akcję. To zdarzenie jest używane przez akcje default Action (Działanie domyślne). Więcej informacji o wbudowanych intencjach pomocniczych znajdziesz w naszej dokumentacji.
  • Wyrażenia na potrzeby nauki określają, co użytkownik musi powiedzieć (gramatyka), aby aktywować intencja. Wpisz tutaj kilka wyrażeń (5–10) poleceń, które mają uruchomić intencja. Dialogflow automatycznie obsługuje naturalne odmiany przykładu podane przez Ciebie frazy.
  • Działanie i parametry określają, jakie dane są przekazywane do realizacji, jeśli dla tej intencji jest włączona realizacja. Obejmuje to dane analizowane z danych wejściowych użytkownika i nazwy, których możesz użyć w realizacji, aby wykryć, została aktywowana intencja. Użyjesz tej nazwy później do zmapowania intencji na odpowiednią logikę realizacji. Przeczytaj sekcję Działania i parametry. w dokumentacji Dialogflow, aby dowiedzieć się więcej o definiowaniu akcji.

  • Responses (Odpowiedzi) to narzędzie Dialogflow Response Builder, w którym możesz zdefiniować odpowiedź na tę intencję bezpośrednio w Dialogflow, bez wywoływania i realizacji. Ta funkcja jest przydatna w przypadku odpowiedzi statycznych, które nie wymagają i realizacji. Możesz użyć tej opcji, aby przesłać proste wiadomości powitalne lub pożegnalne. Prawdopodobnie będziesz jednak korzystać z realizacji, aby odpowiadać użytkownikom przez większość czasu, intencji.

  • Fulfillment (Realizacja) określa, czy chcesz dzwonić do realizacji zamówienia po aktywowaniu tej intencji. Najprawdopodobniej włączysz to ustawienie dla większości w agencie Dialogflow. Aby zobaczyć ten element w intencji, musisz mieć włączoną realizację dla agenta w menu Fulfillment (Realizacja).

Tworzenie odpowiedzi w Dialogflow

W przypadku niektórych intencji może nie być konieczne zwracanie odpowiedzi przez realizację. W takich przypadkach możesz użyć kreatora odpowiedzi w Dialogflow, aby utworzyć odpowiedzi.

W obszarze Responses (Odpowiedzi) wpisz odpowiedź tekstową, do której chcesz wrócić. użytkowników. Domyślne odpowiedzi tekstowe to proste odpowiedzi tekstowe zamiany tekstu na mowę, które można sprawdzić dzięki integracji z Dialogflow. Opisujemy odpowiedzi Asystenta Google na stronie Odpowiedzi.

Tworzenie odpowiedzi związanych z realizacją zamówień

Twój kod realizacji jest przechowywany w mechanizmie realizacji akcji w webhooku. Na przykład w przykładzie z Silly Name Maker tę logikę można znaleźć w funkcji index.js w Cloud Functions dla Firebase.

Po aktywowaniu intencji, która wykorzystuje realizację, otrzymujesz żądanie z Dialogflow zawierający informacje o intencji, Następnie odpowiadasz na przez przetworzenie intencji i zwrócenie odpowiedzi. Ta prośba oraz odpowiedź jest definiowana przez webhooka Dialogflow.

Zdecydowanie zalecamy, aby do przetwarzania żądań używać biblioteki klienta Node.js i zwracanie odpowiedzi. Ogólna procedura korzystania z biblioteki klienta:

  1. Zainicjuj obiekt Dialogflow. Ten obiekt automatycznie obsługuje nasłuchiwanie żądań i analizuje je, które można obsługiwać w ramach realizacji zamówienia.
  2. Utwórz funkcje do obsługi żądań. Te funkcje przetwarzają dane wejściowe użytkownika i inne komponenty intencji oraz utworzyć odpowiedź, aby wrócić do Dialogflow.

Inicjowanie obiektu Dialogflow

Ten kod tworzy wystąpienie Dialogflow i tworzy stały fragment Konfiguracja Node.js dla Google Cloud Functions:

Node.js
'use strict';

const {dialogflow} = require('actions-on-google');
const functions = require('firebase-functions');

const app = dialogflow({debug: true});

app.intent('Default Welcome Intent', (conv) => {
  // Do things
});
exports.yourAction = functions.https.onRequest(app);
Java
public class DfFulfillment extends DialogflowApp {
  private static final Logger LOGGER = LoggerFactory.getLogger(DfFulfillment.class);

  @ForIntent("Default Welcome Intent")
  public ActionResponse welcome(ActionRequest request) {
    // Do things
    // ...
  }

Tworzenie funkcji do obsługi żądań

Gdy użytkownicy wypowiadają wyrażenie, które wyzwala intencję, otrzymujesz od Ciebie Dialogflow obsługiwany przez Ciebie za pomocą funkcji w ramach realizacji; W tym , musisz zwykle wykonać te czynności:

  1. Regulowanie logiki wymaganej do przetworzenia danych wejściowych użytkownika.
  2. Twórz odpowiedzi, które będą odpowiadać na aktywowane intencje. Weź pod uwagę używane przez użytkowników do formułowania odpowiednich odpowiedzi. Zobacz możliwości interfejsu znajdziesz więcej informacji o uwzględnianiu odpowiedzi na różnych platformach.
  3. Wywołaj z odpowiedzią funkcję ask().
.

Poniższy kod pokazuje, jak utworzyć dwie odpowiedzi TTS obsługujące intencję wywołania (input.welcome) i intencję dialogową (input.number), która wita użytkownika w akcji i powtarza liczbę wypowiedzianych słów intencję Dialogflow o nazwie:

Node.js
const app = dialogflow();
app.intent('Default Welcome Intent', (conv) => {
conv.ask('Welcome to number echo! Say a number.');
});
app.intent('Input Number', (conv, {num}) => {
// extract the num parameter as a local string variable
conv.close(`You said ${num}`);
});
Java
@ForIntent("Default Welcome Intent")
public ActionResponse defaultWelcome(ActionRequest request) {
  ResponseBuilder rb = getResponseBuilder(request);
  rb.add("Welcome to number echo! Say a number.");
  return rb.build();
}

@ForIntent("Input Number")
public ActionResponse inputNumber(ActionRequest request) {
  ResponseBuilder rb = getResponseBuilder(request);
  Integer number = (Integer) request.getParameter("num");
  rb.add("You said " + number.toString());
  return rb.endConversation().build();
}

Liczba danych wejściowych intencji niestandardowej, która towarzyszy powyższemu kodowi, używa parametru @sys.number, aby wyodrębnić liczbę z wypowiedzi użytkownika. Wtedy intencja wysyła parametr num, który zawiera numer od użytkownika, do funkcji .

Zamiast stosować osobne moduły obsługi dla każdej intencji, dla funkcji zastępczej. W funkcji kreacji zastępczej sprawdź, która intencja została aktywowana. i postępować z odpowiednimi działaniami.

Node.js
const WELCOME_INTENT = 'Default Welcome Intent';
const NUMBER_INTENT = 'Input Number';
const NUMBER_PARAMETER = 'num';
// you can add a fallback function instead of a function for individual intents
app.fallback((conv) => {
 // intent contains the name of the intent
 // you defined in the Intents area of Dialogflow
 const intent = conv.intent;
 switch (intent) {
   case WELCOME_INTENT:
     conv.ask('Welcome! Say a number.');
     break;
   case NUMBER_INTENT:
     const num = conv.parameters[NUMBER_PARAMETER];
     conv.close(`You said ${num}`);
     break;
 }
});
Java
// you can add a fallback function instead of a function for individual intents
@ForIntent("Default Fallback Intent")
public ActionResponse fallback(ActionRequest request) {
  final String WELCOME_INTENT = "Default Welcome Intent";
  final String NUMBER_INTENT = "Input Number";
  final String NUMBER_ARGUMENT = "num";
  // intent contains the name of the intent
  // you defined in the Intents area of Dialogflow
  ResponseBuilder rb = getResponseBuilder(request);
  String intent = request.getIntent();
  switch (intent) {
    case WELCOME_INTENT:
      rb.add("Welcome! Say a number.");
      break;
    case NUMBER_INTENT:
      Integer num = (Integer) request.getParameter(NUMBER_ARGUMENT);
      rb.add("You said " + num).endConversation();
      break;
  }
  return rb.build();
}

Ponowne wysyłanie próśb o brak dopasowań

Gdy Dialogflow nie może dopasować żadnej gramatyki wejściowej zdefiniowanej w intencji Trenowanie wyrażeń, aktywuje intencję zastępczą. Zwykle intencje zastępcze poproś użytkownika o podanie danych wejściowych niezbędnych do działania. Dostępne opcje wpisz wyrażenia z powtórzeniami, określając je w obszarze Response (Odpowiedź) lub użyć webhooka do przekazywania odpowiedzi.

Gdy odpowiedź użytkownika nie pasuje do wyrażeń używanych w akcji, Google Asystent próbuje obsłużyć dane wejściowe. Takie działanie ułatwia użytkownikom Czynności w trakcie rozmowy. Użytkownik pyta na przykład: „Jakie filmy grają w tym tygodniu?” a potem zmienia kontekst w trakcie rozmowy: „Co to jest jaka będzie jutro pogoda?” W tym przykładzie: „Jaka będzie jutro pogoda?” nie jest prawidłową odpowiedzią na rozmowę wywołaną przez początkowy prompt, Asystent automatycznie próbuje rozpoznać dopasowanie i przenieść użytkownika do do odpowiedniej rozmowy.

Jeśli Asystent nie może znaleźć odpowiedniego działania pasującego do polecenia użytkownika, użytkownik powróci do kontekstu akcji.

Ponieważ Asystent może przerwać Twoją akcję, aby zareagować na błąd braku dopasowań nie wykorzystuj intencji zastępczych do realizacji zapytań użytkowników. Ty powinien używać intencji kreacji zastępczych tylko do ponawiania próśb o prawidłowe dane wejściowe.

Aby utworzyć intencję zastępczą:

  1. Kliknij Intents (Intencje) w menu nawigacyjnym Dialogflow.
  2. Kliknij ⋮ obok Create Intent (Utwórz intencję), a potem wybierz Utwórz intencję zastępczą. Możesz też kliknąć ikonę Domyślna zastępcza Intent, by je edytować).
  3. Określ wyrażenia, których chcesz użyć ponownie, aby odpowiedzieć użytkownikom. Wyrażenia te powinny być konwersacyjne i powinny być jak najbardziej przydatne w bieżącym kontekście użytkownika.

    Aby zrobić to bez realizacji: określ wyrażenia w obszarze Response (Odpowiedź). od intencji. Dialogflow losowo wybiera wyrażenia z tej listy na głos z powrotem do użytkowników, dopóki nie zostanie wywołana bardziej szczegółowa intencja.

    Aby to zrobić w ramach realizacji:

    1. Przełącz opcję Włącz wywołanie webhooka dla tej intencji w sekcji Fulfillment intencji.
    2. W Twojej logice realizacji obsługi intencję zastępczą jak każdą inną zgodnie z opisem na stronie Tworzenie funkcji do obsługi żądań. .

    Na przykład ta funkcja korzysta z obiektu conv.data ( dowolnego ładunku danych, którego można używać do utrzymywania stanu) z tabeli Biblioteka klienta Node.js do przechowywania , który śledzi liczbę wywołań intencji zastępczej. Jeśli jest aktywowany więcej niż raz, akcja zostaje zakończona. Chociaż nie jest ono widoczne w ustaw ten licznik przez inne intencje na 0 gdy aktywowana jest intencja niezastępcza. (Zobacz Próbka liczb dżina ).

    Node.js
    app.intent('Default Fallback Intent', (conv) => {
     conv.data.fallbackCount++;
     // Provide two prompts before ending game
     if (conv.data.fallbackCount === 1) {
       conv.contexts.set(DONE_YES_NO_CONTEXT, 5);
       conv.ask('Are you done playing Number Genie?');
     } else {
       conv.close(`Since I'm still having trouble, so I'll stop here. ` +
         `Let's play again soon.`);
     }
    });
    Java
    @ForIntent("Default Fallback Intent")
    public ActionResponse defaultFallback(ActionRequest request) {
      final String DONE_YES_NO_CONTEXT = "done_yes_no_context";
      ResponseBuilder rb = getResponseBuilder(request);
    
      int fallbackCount =
          request.getConversationData().get("fallbackCount") == null
              ? 0
              : (Integer) request.getConversationData().get("fallbackCount");
      fallbackCount++;
      request.getConversationData().put("fallbackCount", fallbackCount);
    
      if (fallbackCount == 1) {
        rb.add(new ActionContext(DONE_YES_NO_CONTEXT, 5));
        rb.add("Are you done playing Number Genie?");
      } else {
        rb.add("Since I'm still having trouble, so I'll stop here. Let's play again soon")
            .endConversation();
      }
      return rb.build();
    }

Korzystanie z kontekstów

Jeśli chcesz, aby Dialogflow wyzwalał intencje zastępcze tylko w określonych sytuacjach, użyj kontekstów w różnych sytuacjach. Jest to przydatne, jeśli chcesz mieć różne intencje zastępcze dla różnych scenariuszy braku dopasowań.

  • Jeśli nie ustawisz kontekstów dla intencji zastępczej, globalna intencja kreacji zastępczej, która jest wyzwalana przez Dialogflow, gdy nie ma żadnej innej intencji dopasowane. Jeśli chcesz użyć tagu, musisz określić tylko jeden z nich.
  • Jeśli ustawisz kontekst danych wejściowych w intencji zastępczej, Dialogflow wyzwala tę czynność intencję zastępczą, gdy są spełnione te warunki:

    • Bieżące konteksty użytkownika to nadzbiór kontekstów zdefiniowanych w tagu intencji.
    • Nie znaleziono innych intencji.

    Pozwala to na korzystanie z wielu intencji kreacji zastępczych z różnymi kontekstami danych wejściowych, dostosowywać żądania braku dopasowań w określonych sytuacjach.

  • Jeśli ustawisz kontekst wyjściowy dla intencji zastępczej, pozostawisz użytkownika ten sam kontekst po wywołaniu i przetworzeniu intencji zastępczej.

Więcej informacji znajdziesz w sekcji Dialogflow Contexts.

Ponowne zapytanie bez danych wejściowych

Na stronie Reprompts znajdziesz szczegółowe informacje o tym, jak to zrobić. ma działać, gdy użytkownik nie będzie podawać dalszych informacji na urządzeniu głosowym, np. Google Home, które wymaga dalszej interakcji.