Biblioteka klienta Actions on Google w środowisku Node.js to zalecany sposób uzyskiwania dostępu do platformy Actions on Google i interakcji z nią, jeśli tworzysz webhooka realizacji w języku JavaScript.
Wstęp
Biblioteka klienta Node.js to biblioteka realizacji w Actions on Google, która udostępnia te funkcje:
- Obsługuje wszystkie funkcje Actions on Google, w tym odpowiedzi tekstowe i multimedialne, logowanie się na konto, przechowywanie danych, transakcje i nie tylko.
- Udostępnia idiomatyczną warstwę abstrakcji w JavaScripcie, która opakowuje interfejs API webhooka HTTP/JSON conversation.
- Obsługuje niskopoziomowe szczegóły komunikacji między realizacją zamówienia a platformą Actions on Google.
- Można ją zainstalować za pomocą znanych narzędzi do zarządzania pakietami, takich jak
npm
lubyarn
. - Umożliwia łatwe wdrożenie webhooka realizacji na bezserwerowych platformach obliczeniowych, takich jak Cloud Functions dla Firebase lub AWS Lambda. Możesz też hostować webhooka realizacji u dostawcy usług w chmurze lub w własnym środowisku zarządzanym.
- Jest zgodny z Node.js w wersji 6.0.0 i nowszych.
Możesz korzystać z biblioteki klienta w połączeniu z integracją Dialogflow z Actions on Google lub z pakietem SDK Actions.
Więcej przykładów kodu do korzystania z biblioteki klienta znajdziesz na stronie z przykładami.
Wyświetl dokumentację API
Dokumentacja interfejsu API znajduje się na stronie w GitHub bibliotece klienta Actions on Google w środowisku Node.js.
Możesz też wygenerować lokalną kopię pliku referencyjnego, uruchamiając to polecenie z katalogu, do którego został pobrany kod biblioteki klienta:
yarn docs
Wygenerowane dokumenty będą dostępne w folderze docs
katalogu, do którego został pobrany kod biblioteki klienta.
Jak to działa
Zanim skorzystasz z biblioteki klienta, warto sprawdzić, w jaki sposób webhook realizacji transakcji wykorzystuje bibliotekę klienta do przetwarzania żądań użytkowników, które Actions on Google wysyła do Twojej realizacji.
Po utworzeniu webhooka realizacji w języku JavaScript możesz wdrożyć i hostować kod w bezserwerowym środowisku obliczeniowym, takim jak Cloud Functions dla Firebase czy AWS Lambda. Możesz też hostować kod samodzielnie bez dodatkowych czynności, korzystając z Express web Framework.
W środowisku wykonawczym webhook zamówienia może wywoływać funkcje w bibliotece klienta, aby przetwarzać żądania użytkowników i wysyłać odpowiedzi z powrotem do Actions on Google, aby renderować je w danych wyjściowych użytkownika.
Poniżej podsumowaliśmy najważniejsze zadania, które wykonuje webhook w ramach realizacji za pomocą biblioteki klienta:
- 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 możliwości powierzchni urządzenia użytkownika. Więcej przykładów zawartości ładunku JSON znajdziesz w przewodnikach na temat formatu webhooka Dialogflow i formatu webhooka rozmowy.
- Wykrywanie formatu wywołania Framework: w przypadku obsługiwanych platform biblioteka klienta automatycznie wykrywa format wywołania platformy (np. jeśli żądanie pochodzi z platformy Express Web Framework lub z AWS Lambda) i wie, jak płynnie obsługiwać komunikację z platformą Actions on Google.
- Przetwarzanie modułu obsługi usług: biblioteka klienta reprezentuje interfejs API webhooka HTTP/JSON webhooka rozmowy na potrzeby Dialogflow i Actions SDK jako funkcję usługi. Webhook realizacji używa odpowiedniej usługi, by utworzyć globalną instancję
app
. Instancjaapp
jest modułem obsługi żądań HTTP i rozumie określony protokół usługi. - Przetwarzanie rozmowy: biblioteka klienta przedstawia informacje o poszczególnych rozmowach jako obiekt
Conversation
dołączony do instancjiapp
. Webhook w ramach realizacji może używać obiektuConversation
do pobierania informacji o stanie lub danych z różnych rozmów, wysyłania odpowiedzi do użytkowników lub zamykania mikrofonu. - Przetwarzanie oprogramowania pośredniczącego: biblioteka klienta umożliwia tworzenie własnych oprogramowania pośredniczącego usług rozmów, które składa się z co najmniej 1 określonej przez Ciebie funkcji, która ma być uruchamiana automatycznie przed wywołaniem modułu obsługi intencji. Webhook realizacji może używać oprogramowania pośredniczącego, aby dodawać właściwości lub klasy pomocnicze do obiektu
Conversation
. - Przetwarzanie przez moduł obsługi intencji: biblioteka klienta umożliwia definiowanie modułów obsługi intencji rozpoznawanych przez webhooka realizacji. W przypadku Dialogflow: biblioteka klienta przekierowuje żądanie do odpowiedniego modułu obsługi intencji, mapując żądanie na dokładny ciąg znaków z nazwą intencji zdefiniowanej w konsoli Dialogflow. W przypadku pakietu Actions on Google jest on kierowany na podstawie właściwości
intent
wysłanej z Actions on Google. - Wysyłanie odpowiedzi do użytkowników: aby tworzyć odpowiedzi, webhook zamówienia wywołuje funkcję
Conversation#ask()
. Funkcjęask()
można wywoływać wielokrotnie, aby stopniowo zwiększać odpowiedź. Biblioteka klienta zserializuje odpowiedź na żądanie HTTP z ładunkiem JSON i wysyła ją do Actions on Google. Funkcjaclose()
działa podobnie jak funkcjaask()
, ale zamyka rozmowę.
Konfigurowanie lokalnego środowiska programistycznego
Zanim zaimplementujesz webhooka realizacji, 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ń z terminala:
- Jeśli używasz npm:
npm install actions-on-google
- Jeśli używasz włókna:
yarn add actions-on-google
Konfigurowanie folderów projektu
W zależności od miejsca, w którym zamierzasz wdrożyć webhooka realizacji (Google Cloud Functions dla Firebase, AWS Lambda lub własnej usługi Express), może być konieczne utworzenie określonej struktury folderów projektu do zapisywania plików.
Jeśli na przykład korzystasz z 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 Zainicjowanie Firebase dla Cloud Functions. W przypadku Cloud Functions dla Firebase musisz zwykle zapisać
webhooka w pliku /functions/index.js
.
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, pakietu SDK Actions, czy też tworzysz akcję inteligentnego domu.
Aby reprezentować te różne protokoły żądań i odpowiedzi, biblioteka klienta udostępnia 3 funkcje usług:
Protokół webhooka konwersacji jest używany przez obie usługi konwersacyjne (Dialogflow i SDK Actions), ale każda usługa inaczej pakuje wiadomości.
Aby utworzyć instancję app
, użyj usługi. Wystąpienie app
zawiera globalną logikę stanu i realizacji webhooka oraz obsługuje komunikację między Actions on Google a Twoją realizacją za pomocą protokołu konkretnej usługi.
Możesz skonfigurować właściwości instancji app
i wywołać jej metody, aby wskazać działanie webhooka realizacji. Możesz też łatwo podłączyć instancję app
do bezserwerowego środowiska obliczeniowego, np. do Cloud Functions dla Firebase, które akceptuje funkcje JavaScript jako moduły obsługi żądań HTTP.
Aby utworzyć wystąpienie app
w webhooku realizacji, wykonaj te czynności:
Wywołaj funkcję
require()
, aby zaimportować moduł „actions-on-google” i załadować odpowiednią usługę. Na przykład ten fragment kodu pokazuje, jak możesz wczytać usługędialogflow
i niektóre elementy używane do tworzenia odpowiedzi, a także przypisać ją do stałej o nazwiedialogflow
:// Import the service function and various response classes const { dialogflow, actionssdk, Image, Table, Carousel, } = require('actions-on-google');
W tym przypadku
actions-on-google
odnosi się do zależności określonej w plikupackage.json
w folderze projektu (możesz zapoznać się z tym przykładowym plikiempackage.json
).Uzyskując instancję
app
, możesz opcjonalnie określić klasy reprezentujące odpowiedzi rozszerzone, intencje pomocnicze i inne funkcje Actions on Google, których chcesz używać. Pełną listę prawidłowych klas, które możesz wczytać, znajdziesz w dokumentacji modułów odpowiedzi rozmowy i intencji pomocniczej.Utwórz instancję
app
, wywołując załadowaną usługę. Przykład:const app = dialogflow();
Aby skonfigurować instancję
app
podczas inicjowania, możesz podać obiektoptions
jako pierwszy argument podczas wywoływania usługi. (Więcej informacji:DialogflowOptions
). Na przykład ten fragment pokazuje, jak zarejestrować 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 działaniami w Google utworzone przez bibliotekę klienta w trakcie cyklu życia interakcji użytkownika z akcją, musisz wykorzystać bibliotekę klienta do utworzenia modułów obsługi, które będą przetwarzać żądania użytkowników i odsyłać odpowiedzi.
Możesz tworzyć funkcje działające 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 Twojej realizacji, gdy użytkownik prosi o określoną funkcję. Jeśli korzystasz z Dialogflow, odpowiada to Dialogflow dopasowywania zapytania użytkownika do intencji w agencie Dialogflow.
- Zdarzenia błędu: jeśli wystąpi błąd kodu JavaScript lub biblioteki klienta, możesz użyć funkcji
catch
instancjiapp
, aby odpowiednio przetworzyć wyjątek błędu. Należy wdrożyć 1 funkcjęcatch
do obsługi wszystkich błędów, które są istotne w realizacji realizacji. - Zdarzenia kreacji zastępczej: zdarzenie kreacji zastępczej ma miejsce, gdy użytkownik wysyła zapytanie, którego Actions on Google nie może rozpoznać. Możesz użyć funkcji
fallback
instancjiapp
, aby zarejestrować ogólny moduł obsługi zastępczej, który będzie aktywowany, gdy żaden moduł obsługi intencji nie zostanie dopasowany do przychodzącego żądania realizacji. Należy wdrożyć 1 funkcjęfallback
do obsługi wszystkich zdarzeń zastępczych. Jeśli korzystasz z Dialogflow, Dialogflow może wywołać konkretną intencję zastąpienia, gdy nie będzie pasować żadna inna intencja. Dla tej intencji zastępczej należy utworzyć odpowiedni moduł obsługi intencji.
Za każdym razem, gdy użytkownik wysyła żądanie do akcji, wystąpienie 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. Obiektu conv
zwykle używa się w modułach obsługi do wysyłania odpowiedzi do użytkownika.
Zapytania użytkowników mogą też zawierać parametry, które akcja może wyodrębnić i wykorzystywać do precyzowania odpowiedzi.
- Jeśli używasz pakietu Actions SDK, parametry określasz w pakiecie akcji. Przykład pobierania parametrów z intencji znajdziesz w przykładowym kodzie Eliza.
- Jeśli używasz Dialogflow, możesz uzyskać dostęp do wartości parametrów za pomocą zmiennej
params
. Przykłady obsługi intencji z parametrami w Dialogflow znajdziesz w artykule Parametry i konteksty dostępu.
Ustawianie modułów obsługi intencji
Aby ustawić moduł obsługi intencji, wywołaj funkcję intent()
instancji app
. Jeśli na przykład korzystasz z Dialogflow, oto funkcja
DialogflowApp#intent()
. W argumentach określ nazwę intencji i podaj funkcję obsługi.
Jeśli używasz Dialogflow, nie musisz konfigurować modułów obsługi dla każdej intencji w agencie. Zamiast tego możesz skorzystać z wbudowanego modułu obsługi odpowiedzi Dialogflow, aby automatycznie obsługiwać intencje bez implementowania własnych funkcji obsługi. W ten sposób można na przykład przekazać do Dialogflow domyślną intencję powitalną.
Przykład poniżej pokazuje moduły obsługi intencji dla intencji „powitanie” i „bye”. Ich funkcje anonimowego obsługi przyjmują argument conv
i odsyłają użytkownikowi prostą odpowiedź w postaci ciągu 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 zamyka mikrofon i cała rozmowa się zakończyła.
Więcej informacji o tym, jak tworzyć moduły 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 przedstawia prosty moduł obsługi błędów typu catch-all, który wysyła błąd do danych wyjściowych konsoli i zwraca prostą odpowiedź w postaci ciągu tekstowego, aby wysłać użytkownikowi prośbę 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, gdy żadna intencja nie jest dopasowana 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 przedstawia prosty moduł obsługi zastępczej, który wysyła prostą odpowiedź w postaci ciągu tekstowego, aby wysłać użytkownikowi prośbę 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 kilka typowych przypadków użycia implementacji modułów obsługi intencji za pomocą biblioteki klienta. Aby sprawdzić, jak biblioteka klienta pasuje do intencji, zapoznaj się z sekcją „Przetwarzanie modułu obsługi intencji” w artykule Jak to działa.
Parametry dostępu i konteksty
Jeśli korzystasz z Dialogflow, możesz zdefiniować parametry i konteksty w agencie Dialogflow, aby utrzymywać informacje o stanie i kontrolować przebieg rozmowy.
Parametry przydają się do rejestrowania ważnych słów, wyrażeń i wartości w zapytaniach użytkowników. Dialogflow wyodrębnia odpowiednie parametry z zapytań użytkowników w czasie działania. Możesz przetwarzać te wartości parametrów w webhooku realizacji, aby określać, jak odpowiadać użytkownikom.
Za każdym razem, gdy użytkownik wysyła żądanie do akcji, instancja DialogflowApp
tworzy obiekt parameters
reprezentujący wartości parametrów wyodrębnione z tego żądania przez Dialogflow. Dostęp do tego obiektu uzyskuje się po nazwie zmiennej params
.
Ten fragment kodu pokazuje, jak uzyskać dostęp do właściwości name
z poziomu 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 kodu, który działa tak samo. Nawiasy klamrowe ({}
) wykonują demontowanie JavaScriptu, by pobrać właściwość name
z obiektu parameters
i wykorzystać ją jako zmienną lokalną:
app.intent('Default Welcome Intent', (conv, {name}) => { conv.ask(`How are you, ${name}?`); });
W tym fragmencie kodu nazwa parametru to full-name
, ale jest zdeorganizowana 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, przepływem i rozgałęzieniem rozmowy. Biblioteka klienta zapewnia dostęp do kontekstu za pomocą obiektu DialogflowConversation#contexts
. Ten fragment kodu pokazuje, 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('...'); });
Uzyskiwanie dostępu do wyników intencji pomocniczej
Dla wygody użytkowników biblioteka klienta udostępnia klasy intencji pomocniczej, które opakowują typowe typy danych użytkownika, których często żąda aplikacja. Obejmuje to klasy reprezentujące wyniki różnych intencji pomocniczych Actions on Google. Intencje pomocnicze są używane, gdy chcesz, aby Asystent Google odpowiadał tym fragmentom rozmowy, w których użytkownik musi wprowadzić dane wejściowe, aby kontynuować rozmowę.
Przykład: wyniki Asystenta potwierdzenia
Intencja pomocnicza potwierdzania umożliwia proszenie użytkownika o potwierdzenie tak/nie i uzyskanie ostatecznej odpowiedzi.
Poniższy fragment kodu pokazuje, jak webhook może dostosować swoją odpowiedź na podstawie wyników zwróconych przez intencję pomocniczą potwierdzenia. Pełniejszy przykład znajdziesz w dokumentacji referencyjnej klas 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.`); } });
Przykład: wyniki karuzeli
Poniższy fragment kodu pokazuje, jak webhook realizacji transakcji może dostosować swoją odpowiedź na podstawie danych wejściowych użytkownika w karuzeli. Dzięki komponentowi karuzela
akcja może przedstawiać użytkownikom kilka opcji do wyboru. Pełny przykład znajdziesz w dokumentacji referencyjnej klas 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 w rozmowie
Biblioteka klienta udostępnia klasy odpowiedzi na konwersację, które reprezentują odpowiedzi rozszerzone lub elementy multimedialne, które akcja może wysyłać. Zwykle wysyłasz te odpowiedzi lub elementy wtedy, gdy użytkownicy nie muszą nic wpisywać, aby kontynuować rozmowę.
Przykład: obraz
Ten fragment kodu pokazuje, jak webhook realizacji transakcji może wysłać Image
w odpowiedzi, która zostanie automatycznie dołączona 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', })); });
Wykonywanie asynchronicznych wywołań funkcji
Biblioteka klienta Actions on Google w środowisku Node.js jest przeznaczona do programowania asynchronicznego. Moduł obsługi intencji może zwrócić obietnicę, która znika po zakończeniu generowania odpowiedzi przez webhooka realizacji.
Z poniższego fragmentu kodu dowiesz się, jak wykonać asynchroniczne wywołanie funkcji w celu zwrócenia obiektu typu obiecujące, a następnie odpowiedzieć komunikatem, jeśli element w realizacji webhooka otrzyma intencję „powitanie”. W tym fragmencie kodu obietnica oznacza, że webhook realizacji będzie zwracać odpowiedź konwersacyjną dopiero po realizacji obietnicy dotyczącej zewnętrznego wywołania interfejsu API.
W tym przykładzie do pobierania danych pogodowych używamy fałszywego interfejsu API.
/** * 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 ten sam efekt, ale korzysta z funkcji async
await
wprowadzonej w ECMA 2017 (Node.js w wersji 8). Aby użyć tego kodu w Cloud Functions dla Firebase, sprawdź, czy używasz prawidłowej wersji narzędzia firebase-tools i masz 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}.`); });
Przechowuj dane rozmów
Biblioteka klienta umożliwia webhookowi realizacji zamówienia zapisywanie danych w rozmowach do wykorzystania w przyszłości. Najważniejsze obiekty, których możesz używać do przechowywania danych, to:
DialogflowConversation#data
lubActionsSdkConversation#data
: zapisuje dane w formacie JSON przez cały czas trwania pojedynczej sesji rozmowy między użytkownikiem a akcją.Conversation#user.storage
: Zapisuje dane w formacie JSON w wielu sesjach rozmów.
Poniższy fragment kodu pokazuje, jak webhook realizacji transakcji może przechowywać dane w zdefiniowanej przez Ciebie dowolnej usłudze (someProperty
) i dołączać je do obiektu Conversation#user.storage
. Pełniejszy przykład znajdziesz w dokumentacji referencyjnej klas Conversation#user.storage
.
app.intent('Default Welcome Intent', (conv) => { conv.user.storage.someProperty = 'someValue'; conv.ask('...'); });
Możesz użyć obiektu Conversation#user
, aby uzyskać informacje o użytkowniku, w tym identyfikator ciągu znaków i dane osobowe. Niektóre pola, takie jak conv.user.name.display
i conv.user.email
, wymagają żądania conv.ask(new Permission)
odpowiednio dla 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 za pomocą oprogramowania pośredniczącego
Możesz rozszerzyć bibliotekę klienta za pomocą oprogramowania pośredniczącego.
Warstwa oprogramowania pośredniczącego składa się z co najmniej 1 określonej przez Ciebie funkcji, która jest uruchamiana automatycznie przed wywołaniem modułu obsługi intencji. Za pomocą warstwy oprogramowania pośredniczącego możesz modyfikować wystąpienie Conversation
i dodawać do niego dodatkowe funkcje.
Usługi Dialogflow i Actions SDK udostępniają funkcję app.middleware()
, która umożliwia dodawanie właściwości lub klas pomocniczych do instancji Conversation
.
Ten fragment kodu pokazuje 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 dla platformy internetowej lub bezserwerowej platformy obliczeniowej, musisz wyeksportować obiekt app
jako publicznie dostępny webhook. Biblioteka klienta od razu umożliwia wdrażanie w różnych środowiskach.
Poniższe fragmenty kodu pokazują, jak wyeksportować 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 Express na serwerze (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 na serwerze (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;