Conversational Actions will be deprecated on June 13, 2023. For more information, see Conversational Actions sunset.

Realizacja kompilacji (Dialogflow)

Stay organized with collections Save and categorize content based on your preferences.

Realizacja określa interfejs konwersacyjny dla działania, który ma zebrać dane użytkownika, i logikę przetwarzania danych wejściowych, a następnie wykonywania działania.

Zdefiniuj rozmowę

Po zdefiniowaniu działań możesz utworzyć dla nich odpowiednią rozmowę. Aby to zrobić, musisz utworzyć intencje Dialogflow, które definiują gramatykę, lub to, co muszą powiedzieć użytkownicy, żeby aktywować intencję, a także odpowiednią realizację na potrzeby jej wywołania.

Możesz utworzyć tyle intencji, ile chcesz zdefiniować w całości gramatyki rozmowy.

Tworzenie intencji

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

  • Intent name (Nazwa intencji) to nazwa intencji wyświetlana w IDE.
  • Konteksty umożliwiają uwzględnienie zamiaru w określonych przypadkach. Więcej informacji znajdziesz w dokumentacji Dialogflow dotyczącej kontekstów.
  • Zdarzenia wywołują intencje bez potrzeby podawania przez użytkowników jakichkolwiek słów. Przykładem zdarzenia jest zdarzenie GOOGLE_ASSISTANT_WELCOME, które pozwala Asystentowi Google wywołać działanie. To zdarzenie jest używane przez akcję domyślną akcji. Więcej informacji o zamiarach wbudowanych znajdziesz w naszej dokumentacji.
  • Frazy treningowe określają, co użytkownicy muszą powiedzieć (gramatyka), aby wywołać intencję. Wpisz tutaj kilka zwrotów (5–10) wypowiedzi użytkowników, aby wywołać intencję. Dialogflow automatycznie obsługuje naturalne odmiany przykładowych zwrotów.
  • Działanie i parametry określają, jakie dane są przekazywane do realizacji, jeśli włączona jest realizacja tej intencji. Obejmuje to dane analizowane na podstawie danych wejściowych użytkownika oraz nazwę, której możesz użyć do realizacji, aby sprawdzić, która intencja została wywołana. Użyjesz jej później, aby zmapować intencję na odpowiadającą jej logikę realizacji. Więcej informacji o definiowaniu działań znajdziesz w artykule Działania i parametry w dokumentacji Dialogflow.

  • Odpowiedzi to narzędzie do tworzenia odpowiedzi Dialogflow, w którym możesz zdefiniować odpowiedź na tę intencję bezpośrednio w Dialogflow, bez wywoływania tej platformy. Ta funkcja jest przydatna w przypadku odpowiedzi statycznych, które nie wymagają realizacji. Możesz skorzystać z tej opcji, aby wysłać proste powitanie lub pożegnanie. Zapewne jednak używasz tej funkcji do odpowiadania użytkownikom na większość zamiarów.

  • Fulfillment (Realizacja) określa, czy po wywołaniu tej intencji chcesz wywoływać realizację realizacji. Prawdopodobnie włączysz tę funkcję w przypadku większości zamiarów agenta Dialogflow. Aby ten element był widoczny w intencji, musisz włączyć realizację dla agenta w menu Realizacja.

Tworzenie odpowiedzi w Dialogflow

W przypadku niektórych intencji odpowiedź może nie być wymagana. W takich przypadkach możesz tworzyć odpowiedzi za pomocą kreatora odpowiedzi w Dialogflow.

W obszarze Odpowiedzi wpisz tekst odpowiedzi, który chcesz wysłać użytkownikom. Domyślne odpowiedzi tekstowe to proste odpowiedzi tekstowe TTS, które mogą działać w wielu integracjach Dialogflow. Odpowiedzi Asystenta Google są opisane na stronie Odpowiedzi.

Tworzenie odpowiedzi realizacji

Kod realizacji jest hostowany w logice realizacji webhooka dla działania. Na przykład w przykładzie w Kreatorze nazw w Silly ta metoda znajduje się w index.js dla funkcji w Cloud Functions dla Firebase.

Po uruchomieniu intencji, która korzysta z realizacji, otrzymasz żądanie z okna dialogowego zawierające informacje o intencji. Następnie odpowiadasz na żądanie, przetwarzając intencję i zwracając odpowiedź. To żądanie i odpowiedź są zdefiniowane przez webhook webhooka.

Zdecydowanie zalecamy korzystanie z biblioteki klienta Node.js do przetwarzania żądań i zwracania odpowiedzi. Aby korzystać z biblioteki klienta:

  1. Zainicjuj obiekt Dialogflow. Ten obiekt automatycznie obsługuje nasłuchiwanie żądań i ich analizowanie, dzięki czemu możesz je przetworzyć w realizacji.
  2. Utwórz funkcje do obsługi żądań. Te funkcje przetwarzają dane wejściowe użytkownika i inne komponenty intencji oraz tworzą odpowiedź, która wraca do Dialogflow.

Inicjowanie obiektu Dialogflow

Ten kod tworzy instancję Dialogflow i wykonuje schematyczny proces konfiguracji 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 wypowiedzą polecenie wywołujące intencję, otrzymasz żądanie z Dialogflow, które obsługujesz przy użyciu funkcji w Twojej realizacji. W ramach tej funkcji:

  1. Wykonywać dowolną logikę wymaganą do przetwarzania danych wejściowych użytkownika.
  2. Twórz odpowiedzi, aby reagować na wywołane intencje. Weź pod uwagę to, z jakich platform użytkownicy korzystają, aby tworzyć odpowiednie odpowiedzi. Więcej informacji o tym, jak obsługiwać reakcje na różne platformy, znajdziesz w artykule o funkcjach nawierzchni.
  3. Wywołaj funkcję ask() w swojej odpowiedzi.

Ten kod pokazuje, jak utworzyć 2 odpowiedzi TTS, które obsługują intencję wywołania (input.welcome) i intencję okna dialogowego (input.number), które powitają użytkownika w akcji i powtarzają liczbę wypowiadaną przez użytkownika w intencji 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();
}

Niestandardowa intencja Numer wejściowy, która towarzyszy powyższemu kodowi, używa encji @sys.number do wyodrębnienia numeru z wypowiedzi użytkowników. Intencja wysyła parametr num, który zawiera numer użytkownika, do funkcji w realizacji.

Zamiast tworzyć osobne moduły obsługi poszczególnych intencji, możesz też dodać funkcję zastępczą. W ramach funkcji zastępczej sprawdź, która intencja spowodowała wyświetlenie reklamy, i wykonaj odpowiednie czynności.

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 dopasowanie bez dopasowania

Gdy Dialogflow nie pasuje do żadnej gramatyki wejściowej zdefiniowanej w wyrażeniach treningowych, uruchamia intencję kreacji zastępczej. Intencje zastępcze zazwyczaj ponownie przypominają użytkownikowi wprowadzenie niezbędnych danych. Możesz je podać, podając je w obszarze Odpowiedź intencji zastępczej lub użyć webhooka do odpowiedzi.

Gdy odpowiedź użytkownika nie zgadza się z wyrażeniami treningowymi akcji, Asystent Google próbuje przetworzyć dane wejściowe. Takie działanie pomaga użytkownikom zmieniać działania w trakcie rozmowy. Użytkownik pyta na przykład „Jakie filmy grają w tym tygodniu?” i zmienia kontekst w trakcie rozmowy: „Jaka ma być jutro pogoda?”. W tym przykładzie „Jaka będzie jutro pogoda?” nie jest prawidłową odpowiedzią na rozmowę wywołaną przez pierwsze powiadomienie, Asystent automatycznie podejmuje próbę dopasowania i przenosi użytkownika do odpowiedniej rozmowy.

Jeśli Asystent nie znajdzie odpowiedniej akcji pasującej do danych wejściowych użytkownika, zostanie on przekierowany z powrotem do kontekstu akcji.

Asystent może przerywać działanie w odpowiedzi na prawidłowy scenariusz, więc nie używaj intencji zastępczych do wykonania zapytań użytkowników. Intencji zastępczych należy używać tylko do ponownego podawania użytkownikowi danych wejściowych.

Aby utworzyć intencję kreacji zastępczej:

  1. W menu nawigacyjnym Dialogflow kliknij Intents (Intencje).
  2. Kliknij ⋮ obok Utwórz intencję i wybierz Utwórz intencję zastępczą. Możesz też kliknąć intencję domyślną kreacji zastępczej, aby ją edytować.
  3. Podaj wyrażenia do ponownego przekazania użytkownikom. Wyrażenia powinny mieć charakter konwersacyjny i być jak najbardziej przydatne w obecnym kontekście użytkownika.

    Aby to zrobić bez realizacji: określ wyrażenia w obszarze Odpowiedź intencji. Dialogflow losowo wybiera wyrażenia z tej listy, by przekazywać je użytkownikom do momentu, aż uruchomi się konkretna intencja.

    W tym celu:

    1. W sekcji Realizacja intencji Włącz wywołanie webhooka dla tej intencji.
    2. W logice realizacji wykonaj intencję zastępczą jak w przypadku innych intencji, zgodnie z opisem w sekcji Tworzenie funkcji do obsługi żądań.

    Ta funkcja używa na przykład obiektu conv.data (arbitralnego ładunku danych, którego możesz używać do utrzymywania stanu) z biblioteki klienta Node.js, aby przechowywać licznik, który śledzi liczbę intencji zastępczych. Jeśli zostanie wywołany więcej niż raz, akcja zostanie zakończona. Nie jest to widoczne w kodzie, ale musisz wywołać inne intencje, aby po uruchomieniu intencji zastępczej nie zresetowano tego licznika do 0. Szczegółowe informacje o implementacji znajdziesz w przykładzie z numerem Genie.

    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();
    }

Używanie kontekstów

Jeśli chcesz, aby Dialogflow wyzwalał intencje kreacji zastępczych tylko w określonych sytuacjach, użyj kontekstów. Jest to przydatne, gdy chcesz mieć intencje awaryjne dla różnych scenariuszy niedopasowanych.

  • Jeśli nie ustawisz kontekstu w intencji intencji, uznajemy, że jest to intencja globalna, która jest wywoływana przez Dialogflow, gdy żadna inna intencja nie jest dopasowana. Powinien on być określony tylko wtedy, gdy chcesz go użyć.
  • Jeśli ustawisz konteksty wejściowe w intencji zastępczej, Dialogflow aktywuje tę intencję kreacji zastępczej, gdy:

    • Aktualne konteksty użytkownika to nadrzędny kontekst zdefiniowany w intencji.
    • Brak innych pasujących intencji.

    Dzięki temu możesz używać wielu intencji zastępczych z różnymi kontekstami wejściowymi, aby dostosowywać dopasowanie niepasujące do określonych scenariuszy.

  • Jeśli ustawisz kontekst wyjściowy w intencji zastępczej, użytkownik zostanie zachowany w tym samym kontekście po wywołaniu i przetworzeniu intencji zastępczej.

Więcej informacji znajdziesz w sekcji Konteksty Dialogflow.

Brak wprowadzenia

Na stronie Potwierdzenia znajdziesz szczegółowe informacje na temat postępowania z użytkownikami, którzy nie wprowadzają żadnych danych na urządzeniu głosowym, takim jak Google Home, który wymaga ciągłej interakcji.