Działania konwersacyjne zostaną wycofane 13 czerwca 2023 r. Więcej informacji znajdziesz w artykule Wycofanie czynności konwersacyjnych.

Realizacja zamówień za pomocą biblioteki klienta Actions on Google Node.js (Dialogflow)

Jeśli tworzysz webhooka realizacji zamówień w języku JavaScript, zalecamy skorzystanie z biblioteki klienta Actions on Google Node.js.

Wprowadzenie

Biblioteka klienta Node.js to biblioteka realizacji zamówień Actions on Google oferująca takie funkcje:

  • Obsługuje wszystkie funkcje Actions on Google, w tym odpowiedzi tekstowe i multimedialne, logowanie się na konto, przechowywanie danych i transakcje.
  • Zapewnia idiomalną warstwę abstrakcji w języku JavaScript, która zawiera interfejs API webhooka HTTP/JSON.
  • Obsługuje najniższy poziom komunikacji między realizacją a platformą Actions on Google.
  • Można ją zainstalować przy użyciu znanych narzędzi do zarządzania pakietami, takich jak npm lub yarn.
  • Umożliwia łatwe wdrażanie webhooka realizacji zamówień na bezserwerowych platformach obliczeniowych, takich jak Cloud Functions dla Firebase lub AWS Lambda. webhooka realizacji zamówień możesz też hostować u dostawcy usług w chmurze lub w samodzielnie hostowanym i samozarządzanym środowisku.
  • Jest zgodny z Node.js w wersji 6.0.0 i nowszymi.

Biblioteki klienta możesz używać w połączeniu z integracją Dialogflow z Actions on Google lub z pakietem SDK Actions.

Pełne przykłady kodu umożliwiające korzystanie z biblioteki klienta możesz znaleźć na stronie przykładów.

Wyświetl dokumentację API

Dokumentacja API znajduje się na stronie klienta Actions on Google Node.jsGitHub.

Lokalną kopię pliku referencyjnego możesz też wygenerować, uruchamiając to polecenie z katalogu, z którego został pobrany kod biblioteki klienta:

yarn docs

Wygenerowane dokumenty będą dostępne w folderze docs katalogu, z którego został pobrany kod biblioteki klienta.

Jak to działa

Zanim skorzystasz z biblioteki klienta, warto się dowiedzieć, w jaki sposób webhook wykorzystuje tę bibliotekę do przetwarzania żądań użytkowników wysyłanych przez Actions on Google do Twojej realizacji.

Gdy utworzysz webhooka z informacjami o realizacji w języku JavaScript, możesz wdrożyć i hostować kod w bezserwerowym środowisku obliczeniowym, takim jak Cloud Functions dla Firebase lub AWS Lambda. Możesz też hostować kod samodzielnie bez dodatkowej pracy z użyciem internetowej platformy ekspresowej.

W środowisku wykonawczym webhooka realizacji zamówień może wywoływać funkcje w bibliotece klienta, aby przetwarzać żądania użytkowników i wysyłać odpowiedzi z powrotem do Actions on Google w celu wyrenderowania ich w danych wyjściowych użytkownika.

Najważniejsze zadania, które Twój webhook obsługuje za pomocą biblioteki klienta, są pokrótce opisane poniżej:

Ilustracja 1. Ogólna architektura biblioteki klienta Node.js
  1. Odbieranie żądań użytkownika: gdy użytkownik wysyła zapytanie do Asystenta Google, platforma Actions on Google wysyła żądanie HTTP do webhooka realizacji. Żądanie zawiera ładunek JSON zawierający intencję i inne dane, takie jak nieprzetworzony tekst danych wejściowych użytkownika i funkcje interfejsu na urządzeniu użytkownika. Więcej przykładów ładunku JSON znajdziesz w przewodnikach dotyczących formatu webhooka Dialogflow i formatu webhooka konwersacji.
  2. Wykrywanie formatu wywołania platformy: w przypadku obsługiwanych platform biblioteka klienta automatycznie wykrywa format wywołania platformy (np. jeśli żądanie pochodzi z platformy Express Express lub AWS Lambda) i wie, jak płynnie obsługiwać komunikację na platformie Actions on Google.
  3. Przetwarzanie modułów obsługi: biblioteka klienta przedstawia interfejs API webhooka konwersacji HTTP/JSON dla Dialogflow i SDK pakietu SDK jako funkcję usługi. Webhook realizacji realizacji używa odpowiedniej usługi do utworzenia globalnej instancji app. Instancja app działa jako moduł obsługi żądań HTTP i rozumie konkretny protokół usługi.
  4. Przetwarzanie rozmowy: biblioteka klienta przedstawia informacje dotyczące poszczególnych rozmów jako obiekt Conversation, który jest dołączony do instancji app. Webhook realizacji może używać obiektu Conversation do pobierania przechowywanych danych z rozmów lub informacji o stanie, wysyłania odpowiedzi do użytkowników lub wyłączania mikrofonu.
  5. Przetwarzanie oprogramowania pośredniczącego: biblioteka klienta umożliwia utworzenie własnego oprogramowania pośredniczącego, składającego się z co najmniej 1 funkcji zdefiniowanej przez Ciebie przed uruchomieniem modułu obsługi intencji. Webhook realizacji może używać oprogramowania pośredniczącego do dodawania właściwości lub klas pomocniczych do obiektu Conversation.
  6. Przetwarzanie modułu obsługi intencji: w bibliotece klienta możesz definiować moduły obsługi intencji zrozumiałych dla webhooka. W przypadku Dialogflow Biblioteka klienta kieruje żądanie do odpowiedniego modułu obsługi intencji, mapując go na dokładny ciąg nazwy intencji zdefiniowanej w konsoli Dialogflow. W przypadku pakietu SDK SDK jest on kierowany na podstawie właściwości intent wysłanej z Actions on Google.
  7. Wysyłanie odpowiedzi do użytkowników: aby utworzyć odpowiedzi, webhooka wywołującego wywołuje funkcję Conversation#ask(). Funkcję ask() można wywoływać wiele razy, aby stopniowo zwiększać liczbę odpowiedzi. Biblioteka klienta serializuje odpowiedź na żądanie HTTP z ładunkiem JSON i wysyła ją do Actions on Google. Funkcja close() działa podobnie jak ask(), ale zamyka rozmowę.

Konfigurowanie lokalnego środowiska programistycznego

Zanim wdrożysz webhooka realizacji zamówień, zainstaluj najpierw bibliotekę klienta.

Instalowanie biblioteki klienta

Najprostszym sposobem zainstalowania 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 korzystasz z npm: npm install actions-on-google
  • Jeśli używasz włóczki: yarn add actions-on-google

Konfigurowanie folderów projektów

W zależności od tego, gdzie zamierzasz wdrożyć webhooka realizacji zamówień (Google Cloud Functions dla Firebase, AWS Lambda lub własne hostowanie Express), być może trzeba będzie utworzyć konkretną strukturę folderu projektu, 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 sekcjach Konfigurowanie Node.js i interfejsu wiersza poleceń Firebase oraz Inicjowanie Firebase dla Cloud Functions. W przypadku Cloud Functions dla Firebase zazwyczaj w pliku /functions/index.js wpisujesz webhooka o realizacji zamówień.

Tworzenie instancji aplikacji

Actions on Google używa określonych formatów wiadomości do wymiany żądań i odpowiedzi z webhookiem realizacji w zależności od tego, czy tworzysz działanie konwersacyjne za pomocą Dialogflow, czy pakietu SDK Actions albo akcję Smart Home.

Aby reprezentować różne protokoły żądania i odpowiedzi, biblioteka klienta oferuje 3 funkcje usługi:

Protokół webhooka rozmowy jest używany przez obie usługi konwersacyjne (Dialogflow i SDK pakietu SDK), ale każda usługa inaczej pakuje wiadomości.

Do utworzenia instancji app używasz usługi. Instancja app implementuje globalny stan i realizację zamówień w webhooku oraz obsługuje komunikację między Actions on Google i realizacją za pomocą protokołu danej usługi.

Możesz skonfigurować właściwości instancji app i wywoływać jej metody, by kierować zachowanie webhooka realizacji zamówień. Możesz też łatwo połączyć instancję app ze środowiskiem bezserwerowym takim jak Cloud Functions dla Firebase, które przyjmuje funkcje JavaScriptu jako moduły obsługi żądań HTTP.

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

  1. Wywołaj funkcję require(), aby zaimportować moduł „actions-on-google” i załadować wybraną usługę. Ten fragment kodu pokazuje na przykład, jak można wczytać usługę dialogflow i niektóre elementy używane do tworzenia odpowiedzi i przypisać ją do stałej nazwy dialogflow:

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

    actions-on-google oznacza zależność określoną w pliku package.json w folderze projektu (w tym przykładzie pliku package.json).

    Podczas uzyskiwania dostępu do instancji app możesz opcjonalnie określić klasy reprezentujące odpowiedzi rozszerzone, intencje pomocnicze i inne funkcje Actions on Google, których chcesz użyć. Pełną listę prawidłowych zajęć znajdziesz w dokumentacji dotyczącej modułów odpowiedzi na rozmowę i intencji pomocniczych.

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

    const app = dialogflow();

  3. Aby skonfigurować instancję app podczas inicjowania, jako pierwsze argumenty możesz wywołać obiekt options podczas wywoływania usługi. Więcej informacji znajdziesz na stronie DialogflowOptions. Ten fragment kodu pokazuje na przykład, jak zapisać nieprzetworzony ładunek JSON z żądania lub odpowiedzi użytkownika za pomocą flagi { debug: true }:

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

Ustawianie modułów obsługi zdarzeń

Aby przetwarzać zdarzenia związane z Actions on Google utworzone przez bibliotekę klienta w trakcie cyklu życia interakcji z nią, będziesz używać biblioteki klienta do tworzenia modułów obsługi umożliwiających przetwarzanie żądań użytkowników i wysyłania odpowiedzi.

Możesz tworzyć funkcje działające jako moduły obsługi następujących typów zdarzeń rozpoznawanych przez bibliotekę klienta:

  • Zdarzenia intencji: intencje to unikalne identyfikatory, które usługa Actions on Google wysyła do realizacji, gdy użytkownik poprosi o określoną funkcję. Jeśli używasz Dialogflow, odpowiada to dopasowywaniu zapytania użytkownika do intencji w agentze Dialogflow.
  • Zdarzenia błędu:W przypadku wystąpienia błędu JavaScript lub biblioteki klienta możesz użyć odpowiedniej funkcji app instancji catch, aby prawidłowo przetworzyć wyjątek błędu. Zaimplementuj 1 funkcję catch do obsługi wszystkich błędów, które są ważne w Twojej realizacji.
  • Zdarzenia zastępcze: zdarzenie zastępcze ma miejsce, gdy użytkownik wyśle zapytanie, którego Actions on Google nie rozpoznaje. Za pomocą funkcji fallback instancji app możesz zarejestrować ogólną moduł obsługi zastępczej, który będzie aktywowany, gdy żaden pasujący moduł obsługi intencji nie zostanie dopasowany do przychodzącego żądania realizacji. Zaimplementuj jedną funkcję fallback do obsługi wszystkich zdarzeń zastępczych. Jeśli używasz Dialogflow, Dialogflow może uruchomić konkretną intencję zastępczą, jeśli żadna inna intencja nie zostanie dopasowana. Należy utworzyć odpowiedni dla tej intencji moduł obsługi intencji.

Za każdym razem, gdy użytkownik wyśle żądanie do Twojego działania, instancja app tworzy obiekt Conversation reprezentujący tę sesję rozmowy. Dostęp do tego obiektu uzyskuje się za pomocą nazwy zmiennej conv przekazanej w funkcji obsługi intencji jako pierwszego argumentu funkcji. Zwykle za pomocą obiektu conv w modułach obsługi otrzymasz odpowiedź.

Zapytania użytkowników mogą też zawierać parametry, które może być wyodrębniona i użyta do zawężenia odpowiedzi.

  • Jeśli korzystasz z Pakietu SDK Actions, parametry definiujesz w pakiecie działań. Przykład pokazujący, jak pobierać parametry z intencji, znajdziesz w przykładowym kodzie Elza.
  • Jeśli używasz Dialogflow, wartości parametrów znajdziesz w zmiennej params. Przykłady obsługi intencji z parametrami w Dialogflow znajdziesz w sekcji Parametry dostępu i kontekst.

Ustawianie modułów obsługi intencji

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

Jeśli używasz Dialogflow, nie musisz ustawiać modułów obsługi dla każdego intencji w agencie. Zamiast tego możesz skorzystać z wbudowanej funkcji obsługi odpowiedzi Dialogflow, która automatycznie obsługuje intencje bez implementowania własnych funkcji obsługi. W ten sposób możesz na przykład przekazać domyślną intencję powitalną do Dialogflow.

W przykładzie poniżej pokazano moduły obsługi intencji dotyczące powitania i pożegnania. Anonimowe funkcje tego modułu przyjmują argument conv i wysyłają prostą odpowiedź 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!');
});

Zwróć uwagę, że funkcja close() jest podobna do funkcji ask(), ale powoduje zamknięcie mikrofonu i zakończenie rozmowy.

Więcej informacji o tworzeniu modułów obsługi intencji znajdziesz w artykule o tworzeniu modułu 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() instancji app. Jeśli na przykład używasz Dialogflow, jest to funkcja DialogflowApp#catch().

Poniższy przykład pokazuje prosty moduł przechwytywania błędów, który wysyła błąd do danych wyjściowych konsoli i wysyła z łatwością prostą odpowiedź na pytanie użytkownika za pomocą funkcji 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ń zastępczych

Aby ustawić ogólny moduł obsługi zastępczej w przypadku, gdy nie pasuje intencja do przychodzącego żądania realizacji, wywołaj funkcję fallback() instancji app. Jeśli na przykład używasz Dialogflow, jest to funkcja DialogflowApp#fallback().

Poniższy przykład pokazuje prosty moduł zastępczy, który przesyła prostą odpowiedź w formie ciągu znaków 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 opisano typowe przypadki użycia modułów obsługi intencji za pomocą biblioteki klienta. Informacje o tym, jak biblioteka klienta pasuje do intencji, znajdziesz w sekcji „Przetwarzanie modułu obsługi intencji” w artykule Jak to działa.

Parametry dostępu i konteksty

Jeśli używasz Dialogflow, możesz zdefiniować parametry i kontekst w agentze Dialogflow, aby zachować informacje o stanie i kontrolować przepływ rozmów.

Parametry są przydatne do przechwytywania ważnych słów, wyrażeń lub wartości w zapytaniach użytkownika. Dialogflow wyodrębnia odpowiednie parametry z zapytań użytkowników w czasie działania. Wartości tych parametrów możesz przetwarzać w webhooku realizacji, aby określać, jak odpowiadać użytkownikom.

Za każdym razem, gdy użytkownik wyśle żądanie do Twojego działania, instancja DialogflowApp tworzy obiekt parameters reprezentujący wartości parametrów wyodrębnione przez Dialogflow z tego żądania. Dostęp do tego obiektu uzyskuje się przez nazwę zmiennej params.

Fragment kodu poniżej pokazuje, jak uzyskać dostęp do właściwości name z obiektu params, gdy użytkownik wysyła żądanie:

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

Oto alternatywny fragment, który działa tak samo. Pary nawiasów klamrowych ({}) wykonują zniszczenie JavaScriptu, aby pobrać właściwość name z obiektu parameters i użyć jej jako zmiennej lokalnej:

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

We fragmencie kodu nazwa parametru to full-name, ale jest przestrukturowana 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. Za pomocą kontekstów możesz zarządzać stanem rozmowy, przepływem i rozgałęzieniem. Biblioteka klienta zapewnia dostęp do kontekstu za pomocą obiektu DialogflowConversation#contexts. Z tego fragmentu kodu dowiesz się, jak automatycznie ustawić kontekst 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('...');
});

Dostęp do wyników intencji asystenta

Dla wygody użytkowników Biblioteka klienta udostępnia klasy intencji użytkownika pomocniczego, które łączą typowe rodzaje danych użytkowników, o które często proszą Akcje. Należą do nich klasy odpowiadające wynikom w intencjach pomocnych Actions on Google. Intencje Asystenta przydają się, gdy chcesz, aby Asystent Google obsługiwał różne części rozmowy, w których użytkownik musi podać informacje, aby kontynuować rozmowę.

Przykład: wyniki potwierdzeń

Zamiar pomocniczy potwierdzenia umożliwia pytanie użytkownika o tak lub nie oraz uzyskanie odpowiedzi. Ten fragment kodu pokazuje, jak webhook może dostosować swoją odpowiedź na podstawie wyników zwróconych przez intencja potwierdzenia. Pełniejszy przykład znajdziesz w dokumentacji referencyjnej klasy Confirmation.

// 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 webhooka może dostosowywać odpowiedź na podstawie danych wejściowych użytkownika w przypadku karuzeli. Komponent karuzeli umożliwia akcję wybór opcji do wyboru przez użytkowników. Pełniejszy przykład znajdziesz w dokumentacji referencyjnej 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 rozmowę

Biblioteka klienta udostępnia klasy odpowiedzi z wątku, które reprezentują rozbudowane odpowiedzi lub elementy multimedialne, które może wysłać akcja. Takie odpowiedzi i elementy zwykle wysyłasz, gdy użytkownicy nie muszą podawać żadnych danych, aby kontynuować rozmowę.

Przykład: Obraz

Ten fragment kodu pokazuje, jak webhook Twojej realizacji może wysłać element Image w odpowiedzi, która zostanie automatycznie dodana do odpowiedzi BasicCard przez bibliotekę:

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',
  }));
});

Wywoływanie asynchronicznej funkcji

Biblioteka klienta Actions on Google Node.js została zaprogramowana do asynchronicznego programowania. Moduł obsługi intencji może zwrócić obietnicę, która zakończy się po wygenerowaniu odpowiedzi przez webhooka realizacji.

W poniższym fragmencie kodu możesz sprawdzić, jak wykonać asynchroniczne wywołanie funkcji, które zwraca obiekt obietnicy, a następnie odpowiada komunikatem, jeśli webhooka realizacji zamówień otrzyma intencję „powitanie”. W tym fragmencie obietnica gwarantuje, że webhook łączący odpowiedzi zwróci odpowiedź konwersacyjną dopiero po rozwiązaniu obietnicy dotyczącej zewnętrznego wywołania interfejsu API.

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

/**
 * 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}.`);
  });
});

Ten uproszczony fragment kodu ma ten sam efekt, ale używa funkcji async await wprowadzonej w ECMA 2017 (Node.js w wersji 8). Aby użyć tego kodu w Cloud Functions dla Firebase, upewnij się, że korzystasz z prawidłowej wersji firebase-tools i odpowiedniej konfiguracji.

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 rozmów

Biblioteka klienta umożliwia webhookowi realizacji zamówień zapisywanie danych w wątkach do wykorzystania w przyszłości. Najważniejsze obiekty, których możesz używać do przechowywania danych, to:

Ten fragment kodu pokazuje, jak webhook Twojej realizacji może przechowywać dane w wybranej przez Ciebie usłudze (someProperty) i dołączać ją do obiektu Conversation#user.storage. Pełniejszy przykład znajdziesz w dokumentacji referencyjnej klasy Conversation#user.storage.

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

Za pomocą obiektu Conversation#user możesz uzyskać informacje o użytkowniku, takie jak identyfikator ciągu znaków i dane osobowe. Niektóre pola, np. conv.user.name.display i conv.user.email, wymagają odpowiednio podania właściwości conv.ask(new Permission) w przypadku NAME i conv.ask(new SignIn) w przypadku Logowania 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 z użyciem oprogramowania pośredniczącego

Możesz rozszerzyć bibliotekę klienta za pomocą oprogramowania pośredniczącego.

Warstwa middleware składa się z co najmniej 1 z określonych przez Ciebie funkcji, które biblioteka klienta uruchamia się automatycznie przed wywołaniem modułu obsługi intencji. Użycie warstwy oprogramowania pośredniczącego umożliwia zmodyfikowanie instancji Conversation i dodanie do niej dodatkowych funkcji.

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

Ten przykładowy fragment kodu pokazuje, jak możesz używać 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();
});

Eksportuj aplikację

Aby udostępnić webhooka realizacji zamówień w ramach platformy internetowej lub platformy bezserwerowej, musisz wyeksportować obiekt app jako publicznie dostępny webhook. Biblioteka klienta obsługuje wdrażanie w wielu środowiskach.

Te fragmenty kodu pokazują, jak eksportować elementy 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: hostowany serwer ekspresowy (prosty)

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

// ... app code here

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

Przykład: hostowany 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;