Tworzenie realizacji za pomocą biblioteki klienta Actions on Google w środowisku Node.js (Dialogflow)

Zalecanym sposobem na dostęp do korzystasz z platformy Actions on Google, jeśli tworzysz webhooka realizacji zamówień w JavaScripcie.

Wprowadzenie

Biblioteka klienta Node.js to biblioteka realizacji dla aplikacji Actions on Google, która zapewnia te funkcje:

  • Obsługuje wszystkie funkcje Asystenta Google, w tym odpowiedzi tekstowe i multimedialne, logowanie na konto, przechowywanie danych, transakcje i inne.
  • Udostępnia idiomatyczne warstwy abstrakcji w języku JavaScript, które zawijają interfejsu API webhooka HTTP/JSON.
  • Obsługuje szczegóły komunikacji na niskim poziomie między usługą a platformą Actions on Google.
  • Można ją zainstalować za pomocą dobrze znanych narzędzi do zarządzania pakietami, takich jak npm lub yarn.
  • Umożliwia łatwe wdrażanie webhooka realizacji na platformach obliczeniowych bez serwera, takich jak Cloud Functions for Firebase lub AWS Lambda. Możesz też hostować webhooka realizacji u dostawcy usług w chmurze lub we własnym, zarządzanym samodzielnie środowisku.
  • Zgodność z Node.js w wersji 6.0.0 lub nowszej.

Z biblioteki klienta możesz korzystać w połączeniu z Integracja z Dialogflow w Actions on Google lub za pomocą pakietu SDK Actions.

Pełne przykłady kodu służącego do korzystania z biblioteki klienta znajdziesz na stronie stronie z przykładami.

Wyświetl dokumentację API

Dokumentacja API jest przechowywana w bibliotece klienta Actions on Google Node.js stronie GitHub.

Można również wygenerować lokalną kopię pliku referencyjnego, uruchamiając następujące polecenie z katalogu, z którego pobrano bibliotekę klienta kod:

yarn docs

Wygenerowane dokumenty będą dostępne w folderze docs katalogu z której pobrano kod z biblioteki klienta.

Jak to działa

Zanim skorzystasz z biblioteki klienta, dowiedz się, jak webhook realizacji zamówień używa biblioteki klienta do przetwarzania żądań użytkowników, które Actions on Google wysyła do Twojej realizacji.

Po utworzeniu webhooka realizacji w JavaScript możesz wdrożyć i hostować swój kod na bezserwerowym środowisku obliczeniowym, takim jak Cloud Functions dla Firebase czy AWS Lambda. Możesz też hostować kod samodzielnie, bez dodatkowej pracy. korzystając z Express Web Framework.

W środowisku uruchomienia webhook realizacji może wywoływać funkcje w bibliotece klienta, aby przetwarzać żądania użytkownika i przesyłać odpowiedzi z powrotem do Actions on Google w celu renderowania danych wyjściowych użytkownika.

Poniżej znajdziesz krótkie podsumowanie najważniejszych zadań, które twój webhook realizacji wykonuje przy pomocy biblioteki klienta:

Rysunek 1. Ogólna architektura biblioteki klienta Node.js
  1. Odbieranie próśb od użytkowników: gdy użytkownik wysyła zapytanie do Asystenta Google, platforma Actions on Google wysyła żądanie HTTP do webhooka realizacji; prośba zawiera ładunek JSON zawierający intencję i inne dane, takie jak nieprzetworzony tekstu wprowadzanego przez użytkownika i możliwości platformy urządzenia. Więcej przykładów treści ładunku JSON znajdziesz w instrukcjach dotyczących formatu webhooka Dialogflowformatu webhooka konwersacji.
  2. Wykrywanie formatu wywołania platformy: w przypadku obsługiwanych platform biblioteka klienta automatycznie wykrywa format wywołania platformy (np. czy żądanie pochodzi z platformy internetowej Express czy z AWS Lambda) i wie, jak płynnie zarządzać komunikacją z platformą Actions on Google.
  3. Przetwarzanie modułów obsługi usługi: biblioteka klienta reprezentuje konwersacja HTTP/JSON webhook API z pakietami Dialogflow i Actions SDK jako funkcji usługi. Webhook realizacji zamówień używa odpowiedniej usługi do utworzyć globalną instancję app. Instancja app działa jako moduł obsługi HTTP rozumie konkretny protokół usługi i zapyta o nie.
  4. Przetwarzanie rozmów: biblioteka klienta reprezentuje danych o poszczególnych rozmowach w postaci obiektu Conversation dołączonego do app instancję. Webhook realizacji zamówień może używać obiektu Conversation do pobieranie przechowywanych danych lub informacji o stanie między konwersacjami, wysyłanie odpowiedzi użytkownikom lub wyłącz mikrofon.
  5. Przetwarzanie oprogramowania sprzęgającego: biblioteka klienta umożliwia tworzenie własne oprogramowanie pośredniczące usług do rozmów, które składa się z co najmniej jednej funkcji definiujesz automatyczne uruchamianie biblioteki klienta przed wywołaniem lub za pomocą modułu obsługi intencji. Twoje webhooki realizacji mogą używać pośrednika do dodawania właściwości lub klas pomocniczych do obiektu Conversation.
  6. Przetwarzanie intencji: biblioteka klienta umożliwia zdefiniowanie dla intencji odczytywanych przez webhooka realizacji. W przypadku Dialogflow Biblioteka klienta przekierowuje żądanie do odpowiedniego modułu obsługi intencji poprzez czyli mapowania na dokładny ciąg nazwy intencji zdefiniowanej w parametrze Konsola Dialogflow. W przypadku pakietu Actions SDK jest ona kierowana na podstawie przesłanej właściwości intent w Actions on Google.
  7. Wysyłanie odpowiedzi do użytkowników: aby utworzyć odpowiedzi, webhook realizacji wywołuje funkcję Conversation#ask(). Funkcja ask() może być były wywoływane wielokrotnie, aby stopniowo tworzyć odpowiedź. biblioteka klienta zserializuje odpowiedź do żądania HTTP z użyciem atrybutu ładunek JSON i wysyłanie go do Actions on Google. Funkcja close() działa podobnie do funkcji ask(), ale zamyka rozmowę.

Konfigurowanie lokalnego środowiska programistycznego

Zanim wdrożysz webhooka realizacji zamówienia, najpierw zainstaluj z biblioteką klienta.

Instalowanie biblioteki klienta

Najłatwiejszy sposób na zainstalowanie biblioteki klienta w lokalnym środowisku programistycznym jest użycie menedżera pakietów, takiego jak npm lub yarn.

Aby zainstalować, uruchom jedno z tych poleceń w terminalu:

  • Jeśli używasz npm: npm install actions-on-google
  • Jeśli używasz przędzy: yarn add actions-on-google

Konfigurowanie folderów projektu

W zależności od tego, gdzie zamierzasz wdrożyć webhooka realizacji (funkcje Google Cloud Functions dla Firebase, AWS Lambda lub własnego konta Express), konieczne może być utworzenie aby zapisać pliki.

Jeśli na przykład używasz Cloud Functions dla Firebase, możesz skonfigurować wymagane foldery projektu, wykonując czynności opisane w Skonfiguruj Node.js i interfejs wiersza poleceń Firebase oraz Zainicjuj Firebase dla Cloud Functions. W przypadku Cloud Functions dla Firebase zwykle zapisujesz webhooka realizacji w pliku /functions/index.js.

Tworzenie instancji aplikacji

Actions on Google używa określonych formatów wiadomości do wymiany próśb i odpowiedzi za pomocą webhooka realizacji zamówień, w zależności od tego, czy tworzysz Działanie wykorzystujące Dialogflow lub pakiet SDK Actions. lub stworzenie funkcji inteligentnego domu.

Aby reprezentować te różne protokoły żądań i odpowiedzi, biblioteka klienta udostępnia 3 funkcje usługi:

protokołu webhooka rozmowy, jest używany przez usługi konwersacyjne (Dialogflow i Actions SDK), ale w każdej usługa inaczej opakowuje wiadomości.

Używasz usługi do tworzenia instancji app. Instancja app jest hermetyzacją globalny stan i logikę realizacji webhooka i obszarów obsługi, komunikacji między Actions on Google a realizacją zamówień za pomocą protokołu w zależności od usługi.

Możesz skonfigurować właściwości instancji app i wywoływać ich metody, aby będzie ukierunkować działanie webhooka realizacji. Możesz też łatwo podłączyć instancję app w bezserwerowe środowisko obliczeniowe, takie jak Cloud Functions dla Firebase – który akceptuje funkcje JavaScriptu jako moduły obsługi żądań HTTP.

Aby utworzyć instancję app w webhooku realizacji zamówień, wykonaj te czynności:

  1. Wywołaj funkcję require(), aby zaimportować „actions-on-google” oraz i wczytywanie odpowiedniej usługi. Na przykład ten fragment kodu pokazuje, może wczytać usługę dialogflow i niektóre elementy używane do tworzenia odpowiedzi, i przypisz ją do stałej nazwy dialogflow:

    // Import the service function and various response classes
    const {
      dialogflow,
      actionssdk,
      Image,
      Table,
      Carousel,
    } = require('actions-on-google');

    Tutaj actions-on-google odnosi się do zależności określonej package.json w folderu projektu (możesz odwołać się do ten przykładowy plik package.json ).

    Po uzyskaniu instancji app możesz opcjonalnie określić klasy reprezentujące szczegółowe odpowiedzi, intencje pomocnicze i inne funkcje Actions on Google, których chcesz używać. W przypadku atrybutu pełną listę prawidłowych klas, które możesz wczytać. Zapoznaj się z dokumentacją odpowiedź na rozmowę, i intencja pomocnicza modułów.

  2. Utwórz instancję app, wywołując załadowaną usługę. Przykład:

    const app = dialogflow();

  3. Aby skonfigurować instancję app podczas inicjowania, możesz podać options jako pierwszy argument przy wywołaniu usługi. (Zobacz DialogflowOptions, aby uzyskać więcej informacji). Na przykład ten fragment kodu pokazuje, jak zapisać nieprzetworzony ładunek JSON z żądanie lub odpowiedź użytkownika, ustawiając flagę { debug: true }:

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

Ustawianie modułów obsługi zdarzeń

Aby przetworzyć zdarzenia związane z Actions on Google utworzone przez bibliotekę klienta w cyklu życia interakcji użytkownika z Akcją, użyjesz biblioteka klienta do tworzenia modułów obsługi służących do przetwarzania żądań użytkowników i odsyłania ich odpowiedzi.

Możesz tworzyć funkcje, które działają jako moduły obsługi tych głównych typów zdarzeń rozpoznawanych przez bibliotekę klienta:

  • Zdarzenia intencji: intencje to unikalne identyfikatory, które Actions on Google wysyła do Twojego punktu realizacji, gdy użytkownik zażąda określonej funkcji. Jeśli używasz Dialogflow, odpowiada to dopasowaniu przez Dialogflow zapytania użytkownika do intencji w Twoim agencie Dialogflow.
  • Zdarzenia błędu: jeśli wystąpi błąd JavaScriptu lub biblioteki klienta, możesz użyć funkcji catch instancji app, aby przetworzyć wyjątek błędu w odpowiedni sposób. Należy wdrożyć jedną funkcję catch, aby obsługiwać wszystkie błędy, które mają znaczenie dla realizacji.
  • Zdarzenia zastępcze: zdarzenie zastępcze występuje, gdy użytkownik wysyła zapytanie, którego Actions on Google nie może rozpoznać. Za pomocą usługi app fallback instancji, aby zarejestrować ogólny moduł obsługi awaryjnej, który jest wyzwalana, jeśli do przychodzącej realizacji zamówienia nie został dopasowany żaden moduł obsługi intencji użytkownika. Należy wdrożyć jedną funkcję fallback do obsługi wszystkich zdarzeń kreacji zastępczych. Jeśli korzystasz z Dialogflow, Dialogflow może wywołać określony intencję zastępczą, gdy nie zostaną dopasowane żadne inne intencje. Należy utworzyć dla danej intencji zastępczej.

Za każdym razem, gdy użytkownik wysyła żądanie do Twojej akcji, wystąpienie app tworzy Conversation. reprezentujący sesję rozmowy. Dostęp do tego obiektu uzyskuje się przez: nazwa zmiennej conv przekazywana w funkcji obsługi intencji jako pierwszego argumentu funkcji. Zwykle będziesz używać usługi conv w modułach obsługi, aby wysłać odpowiedź do użytkownika.

Zapytania użytkowników mogą również zawierać parametry, które akcja może wyodrębnić i wykorzystać aby doprecyzować odpowiedzi.

  • Jeśli używasz pakietu SDK Actions, parametry definiujesz w pakiecie akcji. Przykład wyodrębniania parametrów z intencji znajdziesz w przykładowym kodzie Eliza.
  • Jeśli korzystasz z Dialogflow, możesz uzyskać dostęp do wartości parametrów za pomocą zmiennej params. Aby zobaczyć przykłady intencji obsługi za pomocą: w Dialogflow znajdziesz w artykule na temat parametrów dostępu i kontekstów.

Ustawianie modułów obsługi intencji

Aby ustawić moduł obsługi intencji, wywołaj funkcję intent() w elemencie app instancji. Jeśli na przykład używasz Dialogflow, jest to DialogflowApp#intent() . W argumentach określ nazwę intencji i podaj funkcję obsługi.

Jeśli korzystasz z Dialogflow, nie musisz konfigurować modułów obsługi dla każdej intencji w z naszym agentem. Zamiast tego możesz skorzystać z wbudowanego w Dialogflow modułu obsługi odpowiedzi, aby automatycznie obsługiwać intencje bez implementowania własnych funkcji modułu obsługi. W ten sposób możesz na przykład przekazać do Dialogflow domyślną intencję powitalną.

Przykład poniżej pokazuje moduły obsługi intencji dla „powitania” i „pa” do intencji użytkownika. Anonimowe funkcje obsługi przyjmują argument conv i odsyłają je do siebie prosta odpowiedź w postaci ciągu znaków dla użytkownika za pomocą funkcji conv.ask():

app.intent('Default Welcome Intent', (conv) => {
  conv.ask('How are you?');
});

app.intent('bye', (conv) => {
  conv.close('See you later!');
});

Funkcja close() jest podobna do funkcji ask(), ale zamyka mikrofon i kończy rozmowę.

Więcej informacji o tworzeniu modułów obsługi intencji znajdziesz tutaj: Utwórz moduł obsługi intencji

Ustawianie modułów obsługi zdarzeń błędów

Aby ustawić moduły obsługi błędów, wywołaj funkcję catch() w elemencie app instancji. Jeśli na przykład używasz Dialogflow, jest to DialogflowApp#catch() function.)

Poniższy przykład pokazuje prosty moduł obsługi błędów przechwytywania, który wysyła błąd do w konsoli i wysyła z powrotem prostą odpowiedź w postaci ciągu, aby poprosić użytkownika o funkcja conv.ask():

app.catch((conv, error) => {
  console.error(error);
  conv.ask('I encountered a glitch. Can you say that again?');
});

Ustawianie modułów obsługi zdarzeń kreacji zastępczych

Aby ustawić ogólny moduł obsługi awaryjnej, gdy dla przychodzącego żądania nie ma dopasowania do żadnego zamiaru, wywołaj funkcję fallback() instancji app. Jeśli na przykład używasz Dialogflow, jest to DialogflowApp#fallback() function.)

Poniżej znajduje się przykład prostego modułu obsługi zastępczego, który wysyła prostą odpowiedź w formie ciągu znaków do promptu użytkownika za pomocą funkcji conv.ask():

app.fallback((conv) => {
  conv.ask(`I couldn't understand. Can you say that again?`);
});

Tworzenie modułu obsługi intencji

W tej sekcji omawiamy typowe przypadki użycia modułów obsługi intencji za pomocą biblioteki klienta. Aby zobaczyć dopasowanie biblioteki klienta przejdź do sekcji „Przetwarzanie intencji” w Dowiedz się, jak to działa.

Parametry i konteksty dostępu

Jeśli używasz Dialogflow, możesz zdefiniować parameters oraz konteksty w agencie Dialogflow do obsługi; przekazywać informacje i kontrolować przebieg rozmowy.

Parametry przydają się do rejestrowania ważnych słów, wyrażeń i wartości dotyczących użytkownika zapytań. Dialogflow wyodrębnia odpowiednie parametry z zapytań użytkowników na stronie środowiska wykonawczego i możesz przetworzyć te wartości parametrów w webhooku realizacji, określić, jak reagować na użytkowników.

Gdy użytkownik wyśle żądanie do Twojego działania, instancja DialogflowApp utworzy obiekt parameters, który reprezentuje wartości parametrów wyodrębnione przez Dialogflow z tego żądania. Dostęp do tego obiektu uzyskuje się przez nazwę zmiennej params.

Z tego fragmentu dowiesz się, jak uzyskać dostęp do usługi name z poziomu params obiekt, gdy użytkownik wysyła żądanie:

app.intent('Default Welcome Intent', (conv, params) => {
  conv.ask(`How are you, ${params.name}?`);
});

Oto alternatywny fragment kodu, który robi to samo. Nawiasy klamrowe ({}) przeprowadza niszczenie JavaScriptu , aby użyć właściwości name z obiektu parameters i użyć jej jako funkcji lokalnej :

app.intent('Default Welcome Intent', (conv, {name}) => {
  conv.ask(`How are you, ${name}?`);
});

W tym fragmencie kodu nazwa parametru to full-name, ale jest zdestrukturyzowana i przypisana do zmiennej lokalnej o nazwie name:

app.intent('Default Welcome Intent', (conv, {'full-name': name}) => {
  conv.ask(`How are you, ${name}?`);
});

Konteksty to zaawansowana funkcja Dialogflow. Kontekstów możesz używać do zarządzania stanem, przebiegiem rozmowy i ich rozgałęzienia. Biblioteka klienta zapewnia dostęp do kontekstu za pomocą DialogflowConversation#contexts obiektu. Ten fragment kodu pokazuje, jak ustawić kontekst programowo w webhooku realizacji i jak pobrać obiekt kontekstu:

app.intent('intent1', (conv) => {
  const lifespan = 5;
  const contextParameters = {
    color: 'red',
  };
  conv.contexts.set('context1', lifespan, contextParameters);
  // ...
  conv.ask('...');
});

app.intent('intent2', (conv) => {
  const context1 = conv.contexts.get('context1');
  const contextParameters = context1.parameters;
  // ...
  conv.ask('...');
});

app.intent('intent3', (conv) => {
  conv.contexts.delete('context1');
  // ...
  conv.ask('...');
});

Wyniki zapytań o pomoc

Dla wygody biblioteka klienta udostępnia klasy intencji pomocniczej zawierające typowe typy danych użytkownika, o które często proszą akcje. Te m.in. klasy reprezentujące wyniki różnych działań w Actions on Google. intencjami pomocniczymi. Intencji pomocniczych używasz wtedy, gdy żeby Asystent Google obsługiwał te części rozmowy, w których użytkownik musi podać dane wejściowe, aby można było kontynuować rozmowę.

Przykład: wyniki Asystenta potwierdzenia

Intencja pomocnicza potwierdzania pozwala prosisz użytkownika o potwierdzenie „tak/nie” i uzyskasz odpowiedź. Ten fragment kodu pokazuje, jak webhook może dostosować odpowiedź na podstawie na wynikach zwracanych przez intencję pomocniczą potwierdzenia. Dla pełniejszy przykład: patrz Confirmation dokumentacji z zajęć.

// Create Dialogflow intent with `actions_intent_CONFIRMATION` event
app.intent('get_confirmation', (conv, input, confirmation) => {
  if (confirmation) {
    conv.close(`Great! I'm glad you want to do it!`);
  } else {
    conv.close(`That's okay. Let's not do it now.`);
  }
});

Ten fragment kodu pokazuje, jak webhook realizacji zamówień może dostosować swoją odpowiedź na podstawie danych wejściowych użytkownika karuzela. Komponent karuzeli pozwala akcji wyświetlić użytkownikom kilka opcji do wyboru. Pełniejszy przykład znajdziesz w dokumentacji klasy Carousel.

app.intent('carousel', (conv) => {
  conv.ask('Which of these looks good?');
  conv.ask(new Carousel({
    items: {
      car: {
        title: 'Car',
        description: 'A four wheel vehicle',
        synonyms: ['automobile', 'vehicle'],
      },
      plane: {
        title: 'Plane',
        description: 'A flying machine',
        synonyms: ['aeroplane', 'jet'],
      }
    }
  }));
});

// Create Dialogflow intent with `actions_intent_OPTION` event
app.intent('get_carousel_option', (conv, input, option) => {
  if (option === 'one') {
    conv.close(`Number one is a great choice!`);
  } else {
    conv.close(`Number ${option} is a great choice!`);
  }
});

Konfigurowanie obiektów odpowiedzi na rozmowy

Biblioteka klienta udostępnia klasy odpowiedzi na rozmowę, które reprezentują rozbudowane odpowiedzi lub elementy multimedialne, które może wysyłać Twoja akcja. Zazwyczaj wysyłasz te odpowiedzi lub elementy, gdy użytkownicy nie muszą nic robić, aby kontynuować rozmowę.

Przykład: obraz

Ten fragment kodu pokazuje, jak webhook realizacji zamówienia może wysłać Image w odpowiedzi, która zostanie automatycznie dołączona do odpowiedzi BasicCard przez biblioteka:

app.intent('Default Welcome Intent', (conv) => {
  conv.ask('Hi, how is it going?');
  conv.ask(`Here's a picture of a cat`);
  conv.ask(new Image({
    url: '/web/fundamentals/accessibility/semantics-builtin/imgs/160204193356-01-cat-500.jpg',
    alt: 'A cat',
  }));
});

Wykonywanie asynchronicznych wywołań funkcji

Biblioteka klienta Actions on Google Node.js jest przeznaczona do programowania. Moduł obsługi intencji może zwrócić błąd obietnica korzystna, gdy Webhook realizacji zamówień zakończył generowanie odpowiedzi.

Poniższy fragment kodu pokazuje, jak wywołać funkcję asynchroniczną w zwróci obiekt obietnicy, a następnie odpowiedz z wiadomością, jeśli Twój webhook realizacji otrzymuje „powitanie” intencji. W tym fragmencie kodu obietnica gwarantuje, że Webhook realizacji zwraca odpowiedź konwersacyjną dopiero po przesłaniu obietnicy dla zewnętrzne wywołanie interfejsu API zostało zakończone.

W tym przykładzie używamy fałszywego interfejsu API do pobierania danych pogodowych.

/**
 * Make an external API call to get weather data.
 * @return {Promise<string>}
 */
const forecast = () => {
  // ...
};

app.intent('Default Welcome Intent', (conv) => {
  return forecast().then((weather) => {
    conv.ask('How are you?');
    conv.ask(`Today's weather is ${weather}.`);
  });
});

Poniższy uproszczony fragment kodu ma taki sam efekt, ale korzysta z parametru Funkcja async await została wprowadzona w ECMA 2017 (Node.js w wersji 8). Aby użyć funkcji w Cloud Functions dla Firebase, sprawdź, czy używasz prawidłowa wersja firebase-tools i mają prawidłową konfigurację.

app.intent('Default Welcome Intent', async (conv) => {
  const weather = await forecast();
  conv.ask('How are you?');
  conv.ask(`Today's weather is ${weather}.`);
});

Przechowywanie danych dotyczących rozmów

Biblioteka klienta umożliwia webhookowi realizacji zamówienia zapisywanie danych w rozmowach na potrzeby przyszłego wykorzystania. Kluczowe obiekty, których możesz używać do przechowywania danych, to między innymi:

Ten fragment kodu pokazuje, jak webhook realizacji zamówienia może przechowywać dane w arbitralnie zdefiniowaną przez siebie właściwość (someProperty) i dołącz ją do Conversation#user.storage obiektu. Aby uzyskać pełniejszy przykład, zobacz Conversation#user.storage dokumentacji z zajęć.

app.intent('Default Welcome Intent', (conv) => {
  conv.user.storage.someProperty = 'someValue';
  conv.ask('...');
});

Obiekt Conversation#user może służyć do uzyskiwania informacji o użytkowniku, w tym identyfikatora ciągu znaków i danych osobowych. Niektóre pola, takie jak conv.user.name.display i conv.user.email wymaga żądania conv.ask(new Permission) dla NAME i conv.ask(new SignIn) odpowiednio w przypadku Logowanie przez Google.

const {Permission} = require('actions-on-google');
app.intent('Default Welcome Intent', (conv) => {
  if (conv.user.last.seen) {
    conv.ask('Welcome back! How are you?');
  } else {
    conv.ask('Nice to meet you! How are you doing?');
  }
});

app.intent('permission', (conv) => {
  conv.ask(new Permission({
    context: 'To greet you personally',
    permissions: 'NAME',
  }));
});

// Create Dialogflow intent with `actions_intent_PERMISSION` event
app.intent('get_permission', (conv, input, granted) => {
  if (granted) {
    conv.close(`Hi ${conv.user.name.display}!`);
  } else {
    // User did not grant permission
    conv.close(`Hello!`);
  }
});

Skalowanie za pomocą oprogramowania pośredniczącego

Bibliotekę klienta możesz rozszerzyć za pomocą oprogramowania pośredniczącego.

Warstwa middleware składa się z co najmniej 1 zdefiniowanej przez Ciebie funkcji, którą biblioteka klienta automatycznie wykonuje przed wywołaniem obsługi intencji. Użycie warstwy pośredniczącej pozwala modyfikować Conversation instancję i dodać dodatkowe funkcje.

Usługi Dialogflow i Actions SDK udostępniają funkcję app.middleware() który umożliwia dodawanie właściwości lub klas pomocniczych do obiektu Conversation instancji.

Oto przykład użycia oprogramowania pośredniczącego:

class Helper {
  constructor(conv) {
    this.conv = conv;
  }

  func1() {
    this.conv.ask(`What's up?`);
  }
}

app.middleware((conv) => {
  conv.helper = new Helper(conv);
});

app.intent('Default Welcome Intent', (conv) => {
  conv.helper.func1();
});

Eksportowanie aplikacji

Aby udostępnić webhooka realizacji na platformie internetowej lub bezserwerowej platformie obliczeniowej, musisz wyeksportować obiekt app jako publicznie dostępny webhooka. biblioteka klienta obsługuje wdrażanie w wielu środowiskach z pudełka.

Te fragmenty kodu pokazują, jak eksportować plik app w różnych środowiskach wykonawczych:

Przykład: Cloud Functions dla Firebase

const functions = require('firebase-functions');
// ... app code here
exports.fulfillment = functions.https.onRequest(app);

Przykład: wbudowany edytor Dialogflow

const functions = require('firebase-functions');

// ... app code here

// Exported function name must be 'dialogflowFirebaseFulfillment'
exports.dialogflowFirebaseFulfillment = functions.https.onRequest(app);

Przykład: własny serwer ekspresowy (prosty)

const express = require('express');
const bodyParser = require('body-parser');  

// ... app code here

express().use(bodyParser.json(), app).listen(3000);

Przykład: własny serwer Express (wiele tras)

const express = require('express');
const bodyParser = require('body-parser');

// ... app code here

const expressApp = express().use(bodyParser.json());

expressApp.post('/fulfillment', app);

expressApp.listen(3000);

Przykład: brama AWS Lambda API

// ... app code here

exports.fulfillment = app;