Informacje o tym ćwiczeniu (w Codelabs)
1. Omówienie
Actions on Google to platforma dla deweloperów, która umożliwia tworzenie oprogramowania rozszerzającego funkcje Asystenta Google, wirtualnego osobistego asystenta Google, na ponad miliard urządzeń, w tym inteligentne głośniki, telefony, samochody, telewizory, słuchawki i nie tylko. Użytkownicy nawiązują z Asystentem rozmowy do różnych zadań, np. robią zakupy spożywcze lub rezerwowanie przejazdów. Pełną listę dostępnych opcji znajdziesz w katalogu Actions. Jako deweloper możesz używać Actions on Google do łatwego tworzenia ciekawych i skutecznych rozmów między użytkownikami a usługą innej firmy oraz zarządzania nimi.
To jest zaawansowany moduł ćwiczeń z programowania przeznaczony dla czytelników, którzy mają już doświadczenie w tworzeniu akcji dla Asystenta Google. Jeśli nie masz doświadczenia w programowaniu w Actions on Google, zdecydowanie zalecamy zapoznanie się z platformą w ramach podstawowych ćwiczeń z programowania ( Poziom 1, Poziom 2 i Poziom 3). W tych zaawansowanych modułach znajdziesz informacje o różnych funkcjach akcji, które pomogą Ci w rozszerzeniu możliwości akcji i poszerzeniu grona odbiorców.
Jednym z ważnych sposobów pomiaru powodzenia akcji jest zaangażowanie użytkowników, czyli skuteczność, z jaką akcja skłania ich do powrotu po pierwszej interakcji. Aby to sobie ułatwić, możesz zaimplementować w akcji kilka funkcji, które umożliwią użytkownikom powrót do rozmowy.
Ćwiczenia w Codelabs obejmują funkcje zwiększające zaangażowanie użytkowników i sprawdzone metody dotyczące Actions on Google.
Co utworzysz
Opracowaną wcześniej funkcję możesz ulepszyć, włączając ją w ten sposób:
- Wysyłaj użytkownikom codzienne aktualizacje, które mogą kliknąć, aby porozmawiać z akcją
- Wysyłaj użytkownikom powiadomienia push z linkiem do Twojej akcji.
- Utwórz link, który przekieruje użytkowników do akcji w przeglądarce mobilnej
Czego się nauczysz
- Czym jest zaangażowanie użytkowników i dlaczego jest ważne dla powodzenia akcji
- Jak zmodyfikować działanie, aby zwiększyć zaangażowanie użytkowników
- Których funkcji związanych z zaangażowaniem użytkowników warto używać w przypadku różnych rodzajów działań
- Jak używać interfejsu Actions API do wysyłania powiadomień za pomocą Asystenta
Czego potrzebujesz
Potrzebujesz tych narzędzi:
- wybrany edytor IDE lub edytor tekstu, np. WebStorm, Atom lub Sublime;
- Terminal do uruchamiania poleceń powłoki z zainstalowanymi środowiskami Node.js, npm i git
- przeglądarki, na przykład Google Chrome;
- Lokalne środowisko programistyczne z interfejsem wiersza poleceń Firebase
- Urządzenie mobilne (z Androidem lub iOS) z Asystentem (musisz zalogować się w Asystencie na to samo konto Google, którego używasz do tworzenia tego projektu).
Warto też znać JavaScript (ES6), ale nie jest to wymagane, by zrozumieć kod webhooka.
2. Konfigurowanie projektu
Z tej sekcji dowiesz się, jak dodać funkcje zwiększające zaangażowanie użytkowników do ukończonej, wcześniej utworzonej akcji.
Interpretacja próbki
Przykładem tego ćwiczenia w Codelabs jest prosta akcja przeznaczona dla fikcyjnej siłowni o nazwie „Action Gym”. Akcja zawiera informacje o siłowni, w tym listę zajęć zmieniających się każdego dnia. Takie działanie informacyjne dobrze sprawdza się w przypadku wszystkich funkcji związanych z zaangażowaniem użytkowników, ponieważ obracająca się lista zajęć każdego dnia dostarcza inne przydatne informacje.
Poniższy diagram przedstawia przebieg konwersacyjny w Action Gym:
W oknie wprowadź niewielkie zmiany, aby lepiej dopasować je do dodanych przez Ciebie funkcji związanych z zaangażowaniem. Ogólny wygląd rozmowy nie ulegnie jednak dużej zmianie.
Pobieranie plików podstawowych
Uruchom to polecenie, aby sklonować repozytorium GitHub na potrzeby ćwiczeń z programowania:
git clone https://github.com/actions-on-google/user-engagement-codelab-nodejs
Skonfiguruj projekt i agenta
Aby skonfigurować projekt Actions i agenta Dialogflow, wykonaj te czynności:
- Otwórz konsolę Actions.
- Kliknij Nowy projekt.
- Wpisz Nazwę projektu, np.
engagement-codelab
. - Kliknij Utwórz projekt.
- Zamiast wybierać kategorię, przewiń w dół do sekcji Więcej opcji i kliknij kartę Wątek.
- Kliknij Build your Action (Utwórz akcję), aby rozwinąć opcje, i wybierz Add Action(s) (Dodaj akcje).
- Kliknij Add Your First Action (Dodaj pierwsze działanie).
- W oknie Create Action (Utwórz działanie) wybierz Custom Intent (Intencja niestandardowa), a następnie kliknij Build (Utwórz), aby uruchomić konsolę Dialogflow.
- Na stronie tworzenia agenta w konsoli Dialogflow kliknij Create (Utwórz).
- Kliknij
(ikonę koła zębatego) w panelu nawigacyjnym po lewej stronie.
- Kliknij Eksportuj i importuj, a następnie Przywróć z pliku ZIP.
- Prześlij plik
agent.zip
z pobranego wcześniej katalogu/user-engagement-codelab-nodejs/start/
. - Wpisz
RESTORE
i kliknij Przywróć. - Kliknij Gotowe.
Wdrażanie realizacji
Po przygotowaniu projektu Actions i agenta Dialogflow wdróż lokalny plik index.js
za pomocą interfejsu wiersza poleceń Firebase Functions.
W katalogu /user-engagement-codelab-nodejs/start/functions/
sklonowanego pliku podstawowego uruchom te polecenia:
firebase use <PROJECT_ID>
npm install
firebase deploy
Po kilku minutach powinien wyświetlić się komunikat „Deploy complete!” (Wdrażanie zakończone). Oznacza to, że udało Ci się wdrożyć webhooka w Firebase.
Pobieranie adresu URL wdrożenia
W usłudze Dialogflow musisz podać adres URL tej funkcji w Cloud Functions. Aby uzyskać ten adres URL, wykonaj następujące czynności:
- Otwórz konsolę Firebase.
- Z listy opcji wybierz projekt w Actions.
- Kliknij Develop (Programowanie) > Funkcje na lewym pasku nawigacyjnym. Jeśli pojawi się prośba o wybranie ustawień udostępniania danych, możesz zignorować tę opcję, klikając Zrób to później.
- Na karcie Dashboard (Panel) powinien być widoczny wpis „fulfillment”. z adresem URL w sekcji Reguła. Zapisz ten adres URL. musisz skopiować go do Dialogflow (w następnej sekcji).
Ustaw adres URL webhooka w Dialogflow
Teraz musisz zaktualizować agenta Dialogflow, aby używał webhooka na potrzeby realizacji. W tym celu wykonaj następujące czynności:
- Otwórz konsolę Dialogflow (możesz ją zamknąć).
- W menu po lewej stronie kliknij Fulfillment (Realizacja).
- Włącz Webhook.
- Wklej URL skopiowany z panelu Firebase, jeśli jeszcze się nie wyświetla.
- Kliknij Zapisz.
Sprawdzanie, czy projekt jest prawidłowo skonfigurowany
Użytkownicy powinni mieć możliwość wywoływania akcji w celu uzyskania informacji na temat Action Gym, w tym zakodowanej na stałe odpowiedzi tekstowej z godzinami pracy oraz odpowiedzi tekstowej z planem zajęć na każdy dzień tygodnia.
Aby przetestować działanie w Symulatorze działań:
- W panelu nawigacyjnym Dialogflow po lewej stronie w konsoli Dialogflow kliknij Integrations (Integracje) > Asystent Google.
- Upewnij się, że opcja Automatyczny podgląd zmian jest włączona, i kliknij Przetestuj, aby zaktualizować projekt w Actions.
- Symulator Actions wczytuje projekt Actions. Aby przetestować działanie, wpisz
Talk to my test app
w polu Wejście i naciśnij Enter. - Otrzymasz powitalną odpowiedź w Action Gym. Spróbuj postępować zgodnie z wyświetlanymi instrukcjami, aby kontynuować rozmowę, jednocześnie upewniając się, że Twoja realizacja zawiera odpowiedź na każde dane wejściowe.
3. Dodaj subskrypcje z codziennymi aktualizacjami
Popularnym sposobem na zaangażowanie użytkowników jest prezentowanie im informacji wtedy, gdy są one najbardziej przydatne. Można to zrobić, oferując użytkownikom opcję zasubskrybowania codziennych aktualizacji dotyczących intencji, co powoduje wysyłanie do Asystenta powiadomienia z linkiem do strony, która pozwala zrealizować dany zamiar.
W tym kroku poznasz subskrypcje z codziennych aktualizacji i dodasz je do intencji Class List (Lista zajęć) w akcji. Po wykonaniu tych instrukcji rozmowa w akcji będzie wyglądać tak:
W jaki sposób zaangażuje to użytkowników?
Użytkownicy smartfonów zapewne znają powiadomienia push, które dostarczają informacji o konkretnych aplikacjach i ich aktualizacjach. Subskrypcje z codziennymi aktualizacjami to prosty sposób na uzyskiwanie dostępu do użytkowników urządzeń mobilnych poza Asystentem, pod warunkiem że intencja, o której przekazujesz aktualizacje, będzie dla nich wartościowa.
Codzienne aktualizacje mogą być przydatnym narzędziem do zwiększania zaangażowania, ale nie muszą być umieszczane w każdej Akcji. Decydując, czy dodać do akcji dzienne subskrypcje aktualizacji, weź pod uwagę te wskazówki:
- Upewnij się, że dzięki codziennym aktualizacjom użytkownicy każdego dnia widzą inne, przydatne informacje. Jeśli po kliknięciu codziennej aktualizacji za każdym razem wyświetla się ten sam komunikat, użytkownik prawdopodobnie zrezygnuje z subskrypcji po kilku dniach.
- Zadbaj o to, aby Twoje okno miało sens, jeśli użytkownik od razu przejdzie do intencji codziennej aktualizacji. Użytkownik nie musi rozpoczynać rozmowy od początku, nie powinien więc mieć dużego kontekstu.
- Pokaż użytkownikowi korzyści związane z działaniem, zanim zachęcisz go do zasubskrybowania codziennych aktualności. Użytkownik powinien myśleć „Chcę codziennie otrzymywać te treści” gdy pojawi się możliwość subskrypcji.
- Nie przytłaczaj użytkownika wielokrotnymi sugestiami subskrypcji. Zaoferuj codzienną subskrypcję z aktualnymi informacjami bezpośrednio po tym, jak pokażesz użytkownikowi treści, które mogą zasubskrybować, i unikaj objaśniania go innym.
- Po wywołaniu intencji aktualizacji niech rozmowa musi być krótka. Większość codziennych aktualizacji powinna kończyć się tylko jedną odpowiedzią, a następnie zamykać bez konieczności wprowadzania danych wejściowych użytkownika.
Włącz codzienne powiadomienia
Subskrypcje z codziennymi aktualizacjami można dodać do intencji powitalnej, która umieszcza użytkownika na początku rozmowy, lub do bardziej szczegółowego zamiaru, aby utworzyć precyzyjny link do dowolnego miejsca w rozmowie. W przypadku tego ćwiczenia w programie najbardziej sensowna jest intencja lista zajęć, ponieważ okno dialogowe zmienia się każdego dnia, a użytkownikom może być przydatne przypominanie o dostępnych zajęciach.
Aby włączyć codzienne aktualizacje intencji Lista zajęć, wykonaj te czynności:
- W Konsoli Actions kliknij kartę Develop (Programowanie) i na pasku nawigacyjnym po lewej stronie wybierz Działania.
- Kliknij Lista zajęć na liście Działania.
- W sekcji Zaangażowanie użytkowników przełącz opcję Czy chcesz oferować użytkownikom codzienne aktualizacje.
- Ustaw opisowy Tytuł treści opisujący codzienne aktualizacje. Kontekst będzie brzmiał „Kiedy mam wysłać Twój dzienny <tytuł treści>?”, dlatego zadbaj o to, aby tytuł był zarówno opisowy, jak i brzmiący prawidłowo, gdy zostanie odczytany na głos. W tym przykładzie w polu Tytuł treści ustaw wartość
list of upcoming Action Gym classes
. - Kliknij Zapisz u góry strony.
Konfiguracja Dialogflow
Aby utworzyć intencje na potrzeby codziennej subskrypcji aktualizacji, wykonaj te czynności w konsoli Dialogflow:
Zachęcanie użytkownika do subskrybowania
- Skonfiguruj nową intencję obsługiwania użytkownika proszącego o zasubskrybowanie codziennych aktualności. W konsoli Dialogflow kliknij przycisk + w panelu nawigacyjnym po lewej stronie obok opcji Intents (Intencje), aby utworzyć nową intencję.
- Nazwij nową intencję
Setup Updates
. - W sekcji Training Profiles (Wyrażenia na potrzeby trenowania) dodaj te wyrażenia użytkownika:
Send daily reminders
Reminder
Remind me
Updates
Upcoming classes
- W sekcji Fulfillment (Realizacja) przełącz opcję Włącz wywołanie webhooka dla tej intencji.
- Kliknij Zapisz u góry strony.
Podejmowanie decyzji użytkownika
- Skonfiguruj nową intencję obsługi odpowiedzi użytkownika na prośbę o subskrypcję codziennych aktualizacji. W menu nawigacyjnym po lewej stronie kliknij przycisk + obok opcji Intents (Intencje), aby utworzyć nową intencję.
- Nazwij nową intencję
Confirm Updates
. - W sekcji Zdarzenia dodaj
actions_intent_REGISTER_UPDATE
. To zdarzenie Dialogflow będzie aktywowane, gdy użytkownik zakończy proces subskrypcji codziennej aktualizacji niezależnie od tego, czy zdecydował się na subskrypcję. - W sekcji Fulfillment (Realizacja) przełącz opcję Włącz wywołanie webhooka dla tej intencji.
- Kliknij Zapisz u góry strony.
Wdrażanie realizacji
Aby wdrożyć realizację w webhooku:
Wczytaj zależności
W pliku
index.js
zaktualizuj funkcję require()
, dodając pakiet RegisterUpdate
z pakietu actions-on-google
. Dzięki temu importowanie będzie wyglądać tak:
index.js
const {
dialogflow,
Suggestions,
RegisterUpdate,
} = require('actions-on-google');
Zmiany z sugestiami
W pliku
index.js
dodaj wpis DAILY
do listy tytułów elementów z sugestią, aby definicja elementu Suggestion
wyglądała tak:
index.js
// Suggestion chip titles
const Suggestion = {
HOURS: 'Ask about hours',
CLASSES: 'Learn about classes',
DAILY: 'Send daily reminders',
};
Dodaj realizację dla nowych intencji
Gdy użytkownik zdecyduje się na subskrypcję, rozpocznij proces subskrypcji codziennych aktualizacji, wywołując pomocnik RegisterUpdate
z docelową intencją aktualizacji (Lista zajęć) i wpisz (DAILY
). Po zakończeniu procesu subskrypcji Asystent wywołuje zdarzenie actions_intent_REGISTER_UPDATE
za pomocą argumentu status
, który określa, czy subskrypcja się udała. Zaoferuj użytkownikowi kolejne prośby, które będą się zmieniać w zależności od stanu subskrypcji.
W pliku
index.js
dodaj ten kod:
index.js
// Start opt-in flow for daily updates
app.intent('Setup Updates', (conv) => {
conv.ask(new RegisterUpdate({
intent: 'Class List',
frequency: 'DAILY',
}));
});
// Confirm outcome of opt-in for daily updates
app.intent('Confirm Updates', (conv, params, registered) => {
if (registered && registered.status === 'OK') {
conv.ask(`Gotcha, I'll send you an update everyday with the ` +
'list of classes. Can I help you with anything else?');
} else {
conv.ask(` I won't send you daily reminders. Can I help you with anything else?`);
}
if (conv.screen) {
conv.ask(new Suggestions([Suggestion.HOURS, Suggestion.CLASSES]));
}
});
Proponowanie użytkownikowi alternatywnych promptów
Odpowiedź na Listę zajęć będzie podsumowywać informacje o codziennej aktualizacji subskrypcji, ale stanowi to problem. Ta sama odpowiedź zostanie wyświetlona, gdy użytkownik kliknie powiadomienie o codziennej aktualizacji, więc nadal zostanie poproszony o zasubskrybowanie codziennych powiadomień, mimo że właśnie otrzymał je z jednego. Co zrobić, aby użytkownik nie pomyślał, że musi ponownie wykupić subskrypcję?
Na szczęście argumenty Twojego obiektu conv
zawierają informacje o tym, gdzie użytkownik rozpoczął rozmowę. Możesz sprawdzić, czy argumenty conv
zawierają sekcję UPDATES
, która wskazuje, że użytkownik rozpoczął rozmowę z poziomu codziennego powiadomienia o aktualizacji, i odpowiednio zmienić odpowiedź. Możesz też użyć tej gałęzi rozmowy, aby zamknąć okno natychmiast po podaniu listy zajęć. Jest to zgodne ze sprawdzonymi metodami, aby codzienne aktualności były jak najkrótsze.
W pliku
index.js
zastąp ten kod:
index.js
// Class list intent handler
app.intent('Class List', (conv, {day}) => {
if (!day) {
day = DAYS[new Date().getDay()];
}
const classes =
[...new Set(schedule.days[day].map((d) => `${d.name} at ${d.startTime}`))]
.join(', ');
const classesMessage =
`On ${day} we offer the following classes: ${classes}. ` +
`Can I help you with anything else?`;
conv.ask(classesMessage);
if (conv.screen) {
conv.ask(new Suggestions([Suggestion.HOURS]));
}
});
tym:
index.js
// Class list intent handler
app.intent('Class List', (conv, {day}) => {
if (!day) {
day = DAYS[new Date().getDay()];
}
const classes =
[...new Set(schedule.days[day].map((d) => `${d.name} at ${d.startTime}`))]
.join(', ');
let classesMessage = `On ${day} we offer the following classes: ${classes}. `;
// If the user started the conversation from the context of a daily update,
// the conv's arguments will contain an 'UPDATES' section.
let engagement = conv.arguments.get('UPDATES');
// Check the conv arguments to tailor the conversation based on the context.
if (engagement) {
classesMessage += `Hope to see you soon at Action Gym!`;
conv.close(classesMessage);
} else {
classesMessage += `Would you like me to send you daily reminders of upcoming classes, or can I help you with anything else?`;
conv.ask(classesMessage);
if (conv.screen) {
conv.ask(new Suggestions([Suggestion.DAILY, Suggestion.HOURS]));
};
};
});
Testowanie codziennych aktualizacji
W terminalu uruchom to polecenie, aby wdrożyć zaktualizowany kod webhooka w Firebase:
firebase deploy
Aby przetestować niestandardowe ponowne wyświetlenie w symulatorze działań, wykonaj te czynności:
- W Konsoli Actions wybierz Testuj.
- Wpisz
Talk to my test app
w polu Wejście i naciśnij Enter. - Wpisz
Learn about classes
i naciśnij Enter. Odpowiedź akcji powinna teraz zawierać wysyłanie codziennych przypomnień. - Wpisz
Send daily reminders
i naciśnij Enter. - Wpisz godzinę, o której chcesz zobaczyć aktualizację, i naciśnij Enter. Na potrzeby testowania spróbuj odpowiedzieć 3–5 minut później niż jest bieżąca godzina.
W określonym przez Ciebie czasie na Twoim urządzeniu mobilnym powinno pojawić się powiadomienie od Asystenta. Pamiętaj, że do pojawienia się tego powiadomienia może minąć kilka minut. Kliknij powiadomienie. Powinien on zawierać precyzyjny link do intencji Lista zajęć w Asystencie z listą nadchodzących zajęć:
4. Dodawanie powiadomień push
Inną opcją angażowania użytkowników poza akcją jest wywoływanie interfejsu Actions API, aby wysyłać do użytkowników powiadomienia push. W odróżnieniu od codziennych powiadomień Asystent nie planuje ich automatycznie, więc możesz wysyłać je wtedy, kiedy chcesz.
W tym kroku dowiesz się, jak wdrożyć powiadomienia push w akcji, dodając nową intencję ClassCanceled i wysyłając do użytkowników powiadomienia o anulowaniu zajęć. Skonfigurujesz też te trzy komponenty niezbędne do wysyłania powiadomień:
- Konto interfejsu Actions API – aby wysyłać powiadomienia do użytkownika, wysyłasz żądanie
POST
do interfejsu API, dlatego musisz skonfigurować konto usługi i dane logowania, aby używać interfejsu z tym interfejsem API. - Pomocnik uprawnień – potrzebujesz uprawnień użytkownika, aby mieć dostęp do identyfikatora użytkownika potrzebnego do wysyłania mu powiadomień push. W tym przykładzie użyjesz funkcji biblioteki klienta, aby wywołać pomocnik uprawnień i poprosić o ten identyfikator.
- Pamięć wewnętrzna – aby wysyłać do użytkownika powiadomienia push poza rozmową, musisz przechowywać identyfikatory użytkowników w miejscu, które można w dowolnej chwili wycofać. W tym przykładzie skonfigurujesz bazę danych Firestore, w której będą przechowywane informacje o poszczególnych użytkownikach.
Po wykonaniu tych instrukcji dodasz do wątku akcji to okno:
W jaki sposób zaangażuje to użytkowników?
Użytkownicy smartfonów zapewne znają powiadomienia push, które dostarczają informacji o konkretnych aplikacjach i ich aktualizacjach. Powiadomienia push to elastyczny sposób uzyskiwania dostępu do użytkowników urządzeń mobilnych poza Asystentem pod warunkiem, że użytkownicy mają uzasadniony powód, aby je włączyć. Dzięki codziennym aktualizacjom użytkownicy wiedzą już, że będą powiadamiani każdego dnia. Jednak dzięki powiadomieniom push użytkownicy nie wiedzą, czy decydują się na otrzymywanie rzadkich powiadomień, czy też otrzymują kilka powiadomień dziennie.
Powiadomienia push mogą być przydatnym narzędziem do zwiększania zaangażowania, ale nie muszą być umieszczane w każdej akcji. Decydując, czy dodać do akcji powiadomienia push, weź pod uwagę te wskazówki:
- Zaplanuj przykładowe harmonogramy powiadomień push. Jeśli planujesz wysyłać tylko jedno powiadomienie push dziennie, rozważ korzystanie z codziennych aktualizacji.
- Zadbaj o to, aby za każdym razem, gdy od nas dostajesz powiadomienia push, będą one zawierać przydatne informacje. Powiadomienia mogą też zawierać precyzyjny link do jednej z intencji akcji, więc upewnij się, że intencja jest przydatna i trafna.
- Używaj wyraźnych prośby, gdy prosisz użytkownika o zasubskrybowanie powiadomień push. Powinien wiedzieć, czego się spodziewać w poszczególnych powiadomieniach push, i wiedzieć, jak często będą one wysyłane.
Włączanie interfejsu Actions API
- Otwórz konsolę Google Cloud i w menu wybierz nazwę projektu w Actions.
- W menu nawigacyjnym (☰) wybierz Interfejsy API i Usługi > Biblioteka.
- Wyszukaj interfejs Actions API i kliknij Włącz.
Tworzenie konta usługi
Interfejs Actions API wymaga uwierzytelniania, więc musisz utworzyć konto usługi, aby móc wysyłać żądania. Aby utworzyć i zainstalować klucz konta usługi dla interfejsu Actions API, wykonaj te czynności:
- W menu nawigacyjnym konsoli Google Cloud (☰) kliknij Interfejsy API i Usługi > Dane logowania.
- Kliknij Utwórz dane logowania > Klucz konta usługi.
- W menu Konto usługi wybierz Nowe konto usługi.
- Podaj te informacje:
- Nazwa konta usługi:
service-account
- Rola: Projekt > Właściciel
- Identyfikator konta usługi:
service-account
(zawsze poprzedzone ciągiem @<identyfikator_projektu>.iam.gserviceaccount.com) - Key type (Typ klucza): JSON
- Kliknij Utwórz.
- Przenieś pobrany plik JSON do katalogu /user-engagement-codelab/start/functions/ swojego projektu.
- Zmień nazwę pliku JSON na
service-account.json
.
Włączanie Firestore
Aby móc wysyłać powiadomienia poza rozmową, musisz mieć możliwość przechowywania identyfikatorów użytkowników, do których można się odwoływać w kodzie powiadomień. W tym przykładzie używamy bazy danych Firestore do przechowywania identyfikatorów użytkowników subskrybujących.
Aby utworzyć bazę danych Firestore dla akcji:
- W konsoli Firebase wybierz nazwę projektu Actions.
- W menu po lewej stronie kliknij Programowanie > Baza danych i kliknij Utwórz bazę danych.
- Kliknij Rozpocznij w trybie testowym.
- Kliknij Włącz.
Konfiguracja Dialogflow
Aby utworzyć proces wyrażania zgody na powiadomienia push, wykonaj te czynności w konsoli Dialogflow:
Zachęcanie użytkownika do subskrybowania
- Skonfiguruj nową intencję obsługi użytkownika proszącego o zasubskrybowanie powiadomień push w przypadku anulowanych zajęć. W konsoli Dialogflow kliknij przycisk + w panelu nawigacyjnym po lewej stronie obok opcji Intents (Intencje), aby utworzyć nową intencję.
- Nazwij nową intencję
Setup Push Notifications
. - W sekcji Training Profiles (Wyrażenia na potrzeby trenowania) dodaj te wyrażenia użytkownika:
Subscribe to notifications
Send notification
Notify me
Send class notifications
Cancelled notifications
- W sekcji Fulfillment (Realizacja) przełącz opcję Włącz wywołanie webhooka dla tej intencji.
- Kliknij Zapisz u góry strony.
Podejmowanie decyzji użytkownika
- Skonfiguruj nową intencję obsługi odpowiedzi użytkownika na prośbę o subskrypcję powiadomień push. W menu nawigacyjnym po lewej stronie kliknij przycisk + obok opcji Intents (Intencje), aby utworzyć nową intencję.
- Nazwij nową intencję
Confirm Push Notifications
. - W sekcji Zdarzenia dodaj
actions_intent_PERMISSION
. To zdarzenie Dialogflow będzie wywoływane, gdy użytkownik zakończy proces subskrypcji powiadomień push, niezależnie od tego, czy zdecydował się na subskrypcję. - W sekcji Fulfillment (Realizacja) przełącz opcję Włącz wywołanie webhooka dla tej intencji.
- Kliknij Zapisz u góry strony.
Obsługa powiadomień push
Powiadomienia push możesz powiązać z konkretną intencją, dzięki czemu użytkownicy, którzy klikną powiadomienie push, zostaną przekierowani bezpośrednio do danej intencji w akcji. W tym przykładzie dodaj nową intencję powiadomień push, która zawiera szczegółowe informacje o anulowanych zajęciach.
Aby dodać intencję, która ma być wywoływana przez kliknięcie powiadomienia push:
- W konsoli Dialogflow kliknij przycisk + w panelu nawigacyjnym po lewej stronie obok opcji Intents (Intencje), aby utworzyć nową intencję.
- Nazwij nową intencję
Class Canceled
. - W sekcji Wyrażenia na potrzeby trenowania dodaj
Cancelations
jako wyrażenie użytkownika. - W sekcji Fulfillment (Realizacja) przełącz opcję Włącz wywołanie webhooka dla tej intencji.
- Kliknij Zapisz u góry strony.
Wysyłanie powiadomień testowych w trakcie rozmowy
W środowisku produkcyjnym należy mieć osobny skrypt od kodu realizacji akcji, który wysyła powiadomienia push. Na przykład utwórz intencję, którą możesz wywołać, aby wysłać powiadomienie push podczas rozmowy z akcją. Ta intencja służy tylko do debugowania. w praktyce powiadomienia push nie powinny być obsługiwane przez Twoją realizację ani w inny sposób wywoływane w ramach rozmowy.
Aby utworzyć intencję do przetestowania powiadomień push, wykonaj te czynności:
- Na potrzeby testowania i debugowania skonfiguruj nową intencję, która pozwoli Ci wysyłać powiadomienia push do subskrybentów. W konsoli Dialogflow kliknij przycisk + w panelu nawigacyjnym po lewej stronie obok opcji Intents (Intencje), aby utworzyć nową intencję.
- Nazwij nową intencję
Test Notification
. - W sekcji Wyrażenia na potrzeby trenowania dodaj
Test notification
jako wyrażenie użytkownika. - W sekcji Fulfillment (Realizacja) przełącz opcję Włącz wywołanie webhooka dla tej intencji.
- Kliknij Zapisz u góry strony.
Włącz powiadomienia push
Aby włączyć powiadomienia push dla intencji ClassCanceled, wykonaj te czynności:
- Na pasku nawigacyjnym w konsoli Dialogflow kliknij Integrations (Integracje).
- Na karcie Asystent Google kliknij Ustawienia integracji.
- Dodaj ClassCanceled jako intencję pośrednie wywołanie. Ten krok jest niezbędny, aby Dialogflow rozpoznał, że użytkownicy mogą rozpocząć rozmowę z intencją ClassCanceled (Anulowane zajęcia) (przez kliknięcie powiadomienia push).
- Kliknij Zamknij.
- W Konsoli Actions kliknij kartę Develop (Programowanie) i na pasku nawigacyjnym po lewej stronie wybierz Działania.
- Na liście Działania kliknij Zajęcia anulowane.
- W sekcji Zaangażowanie użytkownika włącz opcję Czy chcesz wysyłać powiadomienia push?.
- Ustaw opisowy Tytuł treści opisujący powiadomienie push. Kontekst będzie wyglądał tak: „Czy mogę wysyłać powiadomienia push na temat <tytułu treści>?”, więc zadbaj o to, aby tytuł był zarówno opisowy, jak i brzmi poprawnie używany. W tym przykładzie w polu Tytuł treści ustaw wartość
class cancelations
. - Kliknij Zapisz u góry strony.
Wdrażanie realizacji
Aby wdrożyć realizację w webhooku:
Wczytaj zależności
W pliku
index.js
zaktualizuj funkcję require()
, dodając pakiet UpdatePermission
z pakietu actions-on-google
. Dzięki temu importowanie będzie wyglądać tak:
index.js
const {
dialogflow,
Suggestions,
RegisterUpdate,
UpdatePermission,
} = require('actions-on-google');
Zmiany z sugestiami
W pliku
index.js
dodaj wpis NOTIFICATIONS
do listy tytułów elementów z sugestią, aby definicja elementu Suggestion
wyglądała tak:
index.js
// Suggestion chip titles
const Suggestion = {
HOURS: 'Ask about hours',
CLASSES: 'Learn about classes',
DAILY: 'Send daily reminders',
NOTIFICATIONS: 'Get notifications',
};
Konfigurowanie nowych importów
Aby połączyć się z bazą danych Firestore, dodaj pakiet firebase-admin
i stałe do pól przechowywanych w bazie danych. Zaimportuj też pakiety google-auth-library
i request
, aby obsługiwać uwierzytelnianie i żądania do interfejsu Actions API.
W pliku
index.js
do importów dodaj ten kod:
index.js
// Firebase admin import
const admin = require('firebase-admin');
// Initialize Firestore
admin.initializeApp();
const db = admin.firestore();
// Firestore constants
const FirestoreNames = {
INTENT: 'intent',
USER_ID: 'userId',
USERS: 'users',
};
// Actions API authentication imports
const {auth} = require('google-auth-library');
const request = require('request');
Proponowanie skonfigurowania powiadomień o odwołaniu zajęć
W pliku
index.js
zastąp ten kod:
index.js
// Class list intent handler
app.intent('Class List', (conv, {day}) => {
if (!day) {
day = DAYS[new Date().getDay()];
}
const classes =
[...new Set(schedule.days[day].map((d) => `${d.name} at ${d.startTime}`))]
.join(', ');
let classesMessage = `On ${day} we offer the following classes: ${classes}. `;
// If the user started the conversation from the context of a daily update,
// the conv's arguments will contain an 'UPDATES' section.
let engagement = conv.arguments.get('UPDATES');
// Check the conv arguments to tailor the conversation based on the context.
if (engagement) {
classesMessage += `Hope to see you soon at Action Gym!`;
conv.close(classesMessage);
} else {
classesMessage += `Would you like me to send you daily reminders of upcoming classes, or can I help you with anything else?`;
conv.ask(classesMessage);
if (conv.screen) {
conv.ask(new Suggestions([Suggestion.DAILY, Suggestion.HOURS]));
};
};
});
tym:
index.js
// Class list intent handler
app.intent('Class List', (conv, {day}) => {
if (!day) {
day = DAYS[new Date().getDay()];
}
const classes =
[...new Set(schedule.days[day].map((d) => `${d.name} at ${d.startTime}`))]
.join(', ');
let classesMessage = `On ${day} we offer the following classes: ${classes}. `;
// If the user started the conversation from the context of a daily update,
// the conv's arguments will contain an 'UPDATES' section.
let engagement = conv.arguments.get('UPDATES');
// Check the conv arguments to tailor the conversation based on the context.
if (engagement) {
classesMessage += `Hope to see you soon at Action Gym!`;
conv.close(classesMessage);
} else {
classesMessage += `Would you like to receive daily reminders of upcoming classes, subscribe to notifications about cancelations, or can I help you with anything else?`;
conv.ask(classesMessage);
if (conv.screen) {
conv.ask(new Suggestions([Suggestion.DAILY, Suggestion.NOTIFICATIONS,
Suggestion.HOURS]));
};
};
});
Dodaj realizację dla nowych intencji
Gdy użytkownik poprosi o zasubskrybowanie powiadomień push, wywołaj asystenta UpdatePermission
, aby poprosić użytkownika o zgodę. Jeśli operacja się uda, argument PERMISSION
zostanie dodany do argumentów obiektu conv
, co możesz zaznaczyć, aby przestawiać wątek.
Po uzyskaniu uprawnień użytkownika pobierz identyfikator użytkownika z argumentów obiektu conv
i zapisz go w bazie danych. Później wyślesz ten identyfikator użytkownika do interfejsu Actions API, który dzięki temu Asystent określi, kto otrzyma powiadomienie.
Na koniec dodaj realizację dla intencji Class Canceled
, która jest aktywowana przez kliknięcie powiadomienia push. W tym przykładzie Twoja odpowiedź jest ciągiem zastępczym, ale w gotowej do produkcji wersji tego akcji skrypt powiadomień dostarcza bardziej dynamicznych informacji o klasie, która została anulowana.
W pliku
index.js
dodaj ten kod:
index.js
// Call the User Information helper for permission to send push notifications
app.intent('Setup Push Notifications', (conv) => {
conv.ask('Update permission for setting up push notifications');
conv.ask(new UpdatePermission({intent: 'Class Canceled'}));
});
// Handle opt-in or rejection of push notifications
app.intent('Confirm Push Notifications', (conv) => {
if (conv.arguments.get('PERMISSION')) {
let userId = conv.arguments.get('UPDATES_USER_ID');
if (!userId) {
userId = conv.request.conversation.conversationId;
}
// Add the current conversation ID and the notification's
// target intent to the Firestore database.
return db.collection(FirestoreNames.USERS)
.add({
[FirestoreNames.INTENT]: 'Class Canceled',
[FirestoreNames.USER_ID]: userId,
})
.then(() => {
conv.ask(`Great, I'll notify you whenever there's a class cancelation. ` +
'Can I help you with anything else?');
});
} else {
conv.ask(`Okay, I won't send you notifications about class cancelations. ` +
'Can I help you with anything else?');
}
if (conv.screen) {
conv.ask(new Suggestions([Suggestion.CLASSES, Suggestion.HOURS]));
}
});
// Intent triggered by tapping the push notification
app.intent('Class Canceled', (conv) => {
conv.ask('Classname at classtime has been canceled.');
});
Dodawanie powiadomień testowych
Aby wysłać do użytkownika powiadomienie push, wyślij do interfejsu Actions API żądanie POST
z identyfikatorem użytkownika, tytułem powiadomienia i intencją docelową. W tym przykładzie uruchomienie intencji powiadomienia testowego spowoduje iterację przez bazę danych Firestore i wysłanie powiadomień push do każdego użytkownika, który je subskrybuje.
Pamiętaj, że w tym przykładzie uwzględniasz kod, który wysyła powiadomienie push w ramach realizacji webhooka, i wywołujesz ten kod przez wywołanie intencji testowej w rozmowie. W przypadku akcji, które zamierzasz opublikować, kod powiadomienia push powinien znajdować się w skrypcie niezależnym od realizacji.
W pliku
index.js
dodaj ten kod:
index.js
// Debug intent to trigger a test push notification
app.intent('Test Notification', (conv) => {
// Use the Actions API to send a Google Assistant push notification.
let client = auth.fromJSON(require('./service-account.json'));
client.scopes = ['https://www.googleapis.com/auth/actions.fulfillment.conversation'];
let notification = {
userNotification: {
title: 'Test Notification from Action Gym',
},
target: {},
};
client.authorize((err, tokens) => {
if (err) {
throw new Error(`Auth error: ${err}`);
}
// Iterate through Firestore and send push notifications to every user
// who's currently opted in to canceled class notifications.
db.collection(FirestoreNames.USERS)
.where(FirestoreNames.INTENT, '==', 'Class Canceled')
.get()
.then((querySnapshot) => {
querySnapshot.forEach((user) => {
notification.target = {
userId: user.get(FirestoreNames.USER_ID),
intent: user.get(FirestoreNames.INTENT),
};
request.post('https://actions.googleapis.com/v2/conversations:send', {
'auth': {
'bearer': tokens.access_token,
},
'json': true,
'body': {'customPushMessage': notification, 'isInSandbox': true},
}, (err, httpResponse, body) => {
if (err) {
throw new Error(`API request error: ${err}`);
}
console.log(`${httpResponse.statusCode}: ` +
`${httpResponse.statusMessage}`);
console.log(JSON.stringify(body));
});
});
})
.catch((error) => {
throw new Error(`Firestore query error: ${error}`);
});
});
conv.ask('A notification has been sent to all subscribed users.');
});
Testowanie powiadomień push
W terminalu uruchom to polecenie, aby wdrożyć zaktualizowany kod webhooka w Firebase:
firebase deploy
Aby przetestować powiadomienia w Symulatorze działań, wykonaj te czynności:
- W Konsoli Actions otwórz kartę Test (Testowanie).
- Wpisz
Talk to my test app
w polu Wejście i naciśnij Enter. - Wpisz
Learn about classes
i naciśnij Enter. - Wpisz
Get notifications
i naciśnij Enter. - Jeśli akcja nie ma jeszcze uprawnień do wysyłania powiadomień push, wpisz
yes
i naciśnij Enter. - Wpisz
yes
i naciśnij Enter. Na Twoim koncie Google powinny być teraz włączone powiadomienia push dotyczące tej akcji.
- Wpisz
no
i naciśnij Enter, aby wyjść. - Wpisz
Talk to my test app
i naciśnij Enter, aby rozpocząć nową rozmowę. - Wpisz
Test notification
i naciśnij Enter.
W ciągu kilku minut otrzymasz powiadomienie testowe z usługi Action Gym Powiadomienia push Asystenta na urządzeniu mobilnym. Kliknięcie tego powiadomienia spowoduje precyzyjny link do intencji ClassAnulowano dla akcji.
5. Utwórz link do Asystenta
Do tej pory omówiliśmy funkcje zwiększające zaangażowanie, które możesz wdrożyć, aby zachęcić użytkowników do wracania do Twojej akcji. Pamiętaj jednak, że muszą one mieć wpływ na to, czy odbiorcy znajdą Twoją akcję i będą z niej korzystać.
Możesz utworzyć link do Asystenta, który połączy użytkowników urządzeń mobilnych bezpośrednio z akcją w Asystencie. Link do Asystenta to standardowy hiperlink, więc możesz go dodać do strony internetowej lub dowolnych internetowych materiałów marketingowych, takich jak blog czy post w mediach społecznościowych.
Z tego kroku dowiesz się, czym jest link do Asystenta, jak go utworzyć dla intencji powitalnej akcji oraz jak dodać go do prostej witryny do przetestowania.
W jaki sposób zaangażuje to użytkowników?
Przyciągnięcie użytkowników do akcji po raz pierwszy może być nie lada wyzwaniem, zwłaszcza gdy użytkownicy muszą je jawnie wywołać. Link do Asystenta eliminuje te utrudnienia, udostępniając użytkownikom bezpośredni link do akcji. Gdy użytkownik kliknie link do Asystenta na urządzeniu z Asystentem, zostanie przekierowany bezpośrednio do akcji. Gdy użytkownik otworzy link na urządzeniu innym niż mobilne lub nieobsługujących Asystenta, nadal zostanie przekierowany do Twojej strony w katalogu Akcje (jeśli została opublikowana), co pozwoli mu promować akcję wśród tych użytkowników.
Linki Asystenta mogą być przydatnym narzędziem do zwiększania zaangażowania, dlatego warto je utworzyć, jeśli planujesz reklamować swoją akcję na swojej stronie internetowej lub w mediach społecznościowych. Przed utworzeniem i rozpowszechnieniem linku do Asystenta pamiętaj o tych wskazówkach:
- Linki Asystenta działają dopiero po opublikowaniu akcji. Gdy projekt jest w wersji roboczej, link będzie działać tylko na Twoich urządzeniach. Pozostali użytkownicy zostaną przeniesieni na stronę 404 w katalogu Actions (Działania).
- Możesz zezwolić użytkownikom na testowanie linku do Asystenta przed opublikowaniem, publikując działanie w środowisku alfa lub beta. Pamiętaj, że tylko użytkownicy uczestniczący w testach wersji alfa lub beta będą mogli testować link do Asystenta.
- Zadbaj o to, aby intencja miejsca docelowego linku do Asystenta robiła dobre pierwsze wrażenie na nowych użytkownikach. Twoja intencja powitalna jest domyślnym miejscem docelowym linku do Asystenta, ponieważ powinien już dobrze przedstawiać akcję.
Włącz linki Asystenta
Aby utworzyć link do Asystenta dla intencji powitalnej:
- W Konsoli Actions kliknij kartę Develop (Programowanie) i na pasku nawigacyjnym po lewej stronie wybierz Działania.
- Na liście Działania kliknij actions.intent.MAIN.
- W sekcji Linki przełącz opcję Czy chcesz włączyć adres URL dla tej czynności.
- Ustaw opisowy Tytuł linku opisujący akcję. Tytuł powinien być prostą parą czasownik-rzeczownik, która opisuje, co użytkownik może zrobić za pomocą Twojej akcji. W tym przykładzie w polu Tytuł linku ustaw wartość
learn about Action Gym
. - Skopiuj fragment kodu HTML widoczny u dołu strony i zapisz go na później.
- Kliknij Zapisz u góry strony.
Wdrażanie witryny testowej
Aby przetestować link Asystenta, możesz za pomocą narzędzi Firebase wdrożyć stronę testową obok realizacji. Utworzyliśmy już prostą witrynę testową na potrzeby tego przykładu. Wystarczy, że dodasz link do Asystenta.
Przejdź do katalogu /user-engagement-codelab-nodejs/start/public/
realizacji i otwórz plik index.html
w edytorze tekstu.
W pliku
index.html
wklej fragment kodu HTML linku do Asystenta do elementu body. Plik powinien wyglądać podobnie do tego fragmentu poniżej:
index.html
<body>
<p>
<a href="https://assistant.google.com/services/invoke/uid/000000efb5f2fd97">🅖 Ask my test app to learn about Action Gym
</a>
</p>
</body>
Przetestuj link Asystenta
Uruchom w terminalu to polecenie, aby wdrożyć witrynę testową w Firebase:
firebase deploy
Po zakończeniu wykonywania polecenia wdrożenia zanotuj adres URL hostingu w danych wyjściowych.
Otwórz ten adres URL w przeglądarce na urządzeniu mobilnym, a link do Asystenta powinien pojawić się w witrynie testowej. Kliknięcie tego linku na urządzeniu mobilnym powinno otworzyć intencję powitalną akcji w Asystencie.
Możesz też spróbować otworzyć adres URL hostingu w przeglądarce na komputerze, co powinno spowodować otwarcie strony 404 w katalogu Asystenta, ponieważ akcja nie została opublikowana.
6. Dalsze kroki
Gratulacje!
Wiesz już, jak ważne jest zaangażowanie użytkowników przy tworzeniu akcji, jakie funkcje angażowania użytkowników są dostępne na platformie i jak dodać każdą z nich do akcji.
Dodatkowe materiały szkoleniowe
Aby dowiedzieć się więcej o zaangażowaniu użytkowników w akcję, zapoznaj się z tymi materiałami:
- Zaangażowanie użytkowników Dokumentacja z linkami w Asystencie: oficjalna dokumentacja Actions on Google dotycząca funkcji omawianych w tym ćwiczeniu z programowania i ogólnego zaangażowania użytkowników.
- Statystyki utrzymania użytkowników: dokumentacja funkcji Analytics w Konsoli Actions, która pokazuje informacje o utrzymaniu użytkowników w przypadku opublikowanej akcji.
- Wskazówki dotyczące projektowania konwersacyjnego: sprawdzone metody i wytyczne dotyczące projektowania funkcji zwiększających zaangażowanie użytkowników.
- Repozytorium Actions on Google GitHub: przykładowy kod i biblioteki.
- r/GoogleAssistantDev: oficjalna społeczność na Reddicie dla deweloperów współpracujących z Asystentem.
Obserwuj nas na Twitterze @ActionsOnGoogle, aby być na bieżąco z najnowszymi informacjami. Aby poinformować o swoich dokonaniach, napisz na Twitterze #AoGDevs.
Ankieta dotycząca opinii
Zanim opuścisz tę stronę, wypełnij ten formularz, aby podzielić się z nami swoją opinią.