Tworzenie agenta RBM opartego na Dialogflow (zaawansowane)

Z tego modułu dowiesz się, jak używać interfejsu Dialogflow do tworzenia interfejsu rozmowy i obsługiwać agenta RBM.

Co zamierzasz stworzyć w ćwiczeniach z programowania?

  • Agent Dialogflow działający na rozmowie agenta RBM
  • Interfejs rozmowy fikcyjnej witryny rowerowej, który zawiera informacje o rowerze i wyznacza miejsca spotkań w zakresie naprawy lub obsługi rowerów

Czego się dowiesz

  • Użycie 3 głównych konstruktów Dialogflow (celów, podmiotów i kontekstów) do tworzenia interfejsu konwersacyjnego
  • Jak połączyć interfejs konwersacyjny z własnymi usługami i interfejsami API za pomocą edytora realizacji i wbudowanego interfejsu Dialogflow (obsługiwanego przez Cloud Functions dla Firebase)
  • Jak utworzyć typy odpowiedzi RBM w Dialogflow, aby umożliwić użytkownikom szczegółowe korzystanie z RBM

Co będzie potrzebne?

  • konto Google.

Tworzenie pierwszego agenta i wysyłanie do niego zapytań

Czas trwania: 10:00

Tworzenie pierwszego agenta Dialogflow

Aby utworzyć agenta Dialogflow:

  1. Otwórz nową kartę i zaloguj się w Dialogflow.
  2. Kliknij Utwórz agenta w panelu nawigacyjnym po lewej stronie.

  3. Wpisz „"CodelabRBMBikeShop"” dla języka agenta i języka angielskiego, a następnie ustaw domyślną strefę czasową. Następnie kliknij Utwórz.

konsoli Dialogflow.

Powinna być teraz widoczna konsola Dialogflow. Jeśli pracujesz na mniejszym ekranie, a lewy panel nawigacji jest ukryty, kliknij przycisk nawigacji w lewym górnym rogu. Po kliknięciu przycisku ustawień otworzysz bieżące ustawienia agenta.

W środkowej części strony znajduje się lista intencji agenta. Domyślnie agenty Dialogflow rozpoczynają się od 2 intencji. Agent pasuje do domyślnej intencji zastępczej, gdy nie rozumie Twoich wypowiedzi. Domyślna intencja powitalna wita użytkowników. Możesz je dostosować, aby dostosować sposób działania usługi do swoich potrzeb.

Po prawej stronie jest symulator Dialogflow. Dzięki temu możesz wypróbować agenta, mówiąc lub wpisując wiadomości.

Zapytanie do agenta

Agenty Dialogflow najlepiej opisać jako moduły NLU (Natural Language Knowledge). Mogą one pojawiać się w aplikacji, usługach lub usługach, aby przekształcać naturalne żądania użytkowników w przydatne dane.

Czas, aby wypróbować agenta W symulatorze po prawej stronie kliknij pole tekstowe Wypróbuj, wpisz &"Cześć i naciśnij Enter.

Dialogflow identyfikuje zapytanie, dopasowuje je do domyślnej intencji powitalnej i odpowiada ogólnemu powitaniu. Dzieje się tak, ponieważ Dialogflow automatycznie uczy domyślną intencję powitalną z przykładowymi powitaniami.

Tworzenie agenta RBM

Zaloguj się w konsoli programisty Business Communications, a potem kliknij Utwórz agenta.

W polu Nazwa wpisz „"Your Name’s Bike Shop&quot” (np. „Sean’s Bike Agent&quot”) i wybierz region, a następnie kliknij Create agent (Utwórz agenta).

Łączenie agenta RBM z Dialogflow

Po utworzeniu agenta RBM kliknij go, aby wyświetlić stronę Przegląd. W panelu nawigacyjnym po lewej stronie kliknij link Integracje.

Domyślnie agent RBM używa Google Cloud Pub/Sub do obsługi wiadomości użytkowników. Aby połączyć agenta RBM z utworzonym wcześniej agentem Dialogflow, kliknij integrację Dialogflow.

W oknie kliknij Połącz istniejący model. Postępuj zgodnie z instrukcjami, aby przyznać agentowi RBM uprawnienia do wywoływania agenta Dialogflow, a następnie kliknij Dalej.

Na koniec musisz podać identyfikator projektu Dialogflow. Na innej karcie przeglądarki niż w Business Communications Developer Console otwórz Dialogflow i otwórz utworzony wcześniej agent CodelabRBMBikeShop. Kliknij ikonę koła zębatego obok nazwy projektu w panelu nawigacyjnym po lewej stronie.

Kliknięcie tej opcji powoduje otwarcie ustawień modelu. W sekcji GOOGLE PROJECT (Projekt projektu) znajdź i skopiuj identyfikator projektu.

Wróć do karty z otwartą konsolą Business Communications Developer Console, wklej identyfikator projektu w oknie i kliknij Rozpocznij integrację.

Ten proces trwa około dwóch minut. Po zakończeniu powinna być podświetlona opcja integracji Dialogflow i dostępny link View agent.

Wszystkie wiadomości wysyłane do agenta i od niego są teraz obsługiwane przez agenta Dialogflow CodelabRBMBikeShop.

Zaproś urządzenie testowe i wyślij wiadomość

Zanim przejdziesz do Dialogflow, skonfigurujmy urządzenie testowe. Jeśli nie masz jeszcze urządzenia, na którym można odbierać wiadomości RBM, postępuj według tego przewodnika, aby przygotować urządzenie.

W konsoli programisty Business Communications kliknij Urządzenia w panelu nawigacyjnym po lewej stronie. W formularzu wpisz pełny numer telefonu w formacie E.164 (na przykład +12223334444) i kliknij Dodaj.

Na urządzeniu otrzymasz zaproszenie do testów. Kliknij Ustaw mnie jako testera.

W przeglądarce znajdź swoje urządzenie na liście urządzeń i wyślij wiadomość testową. Jeśli otrzymasz na urządzeniu wiadomość od agenta RBM, możesz kontynuować ćwiczenia.

Tworzenie intencji powitalnej

Aby rozpocząć rozmowę, zwykle z agentem RBM opartym na Dialogflow, trzeba wykonać wywołanie interfejsu API, które określa numer telefonu użytkownika i intencję Dialogflow, która go rozpoczyna (zwykle jest to intencja powitalna agenta). Na potrzeby tego ćwiczenia pominiemy ten krok i użyjmy wątku rozmowy utworzonego w poprzednim kroku na urządzeniu testowym usługi Business Communications. Jeśli jednak chcesz dowiedzieć się więcej o tej funkcji API, zajrzyj do tego przewodnika.

Zacznijmy od dodania odpowiedzi RBM do domyślnej intencji powitalnej, by umożliwić Dialogflow ich używanie z agentem RBM. Najpierw otwórz kartę przeglądarki z uruchomioną Dialogflow. Kliknij Domyślna intencja powitalna, przewiń w dół do sekcji Responses (Odpowiedzi), kliknij + na liście typów odpowiedzi i wybierz RCS Business Messaging (RBM).

Kliknij kolejno Dodaj odpowiedzi i Prosta odpowiedź. W polu tekstowym Ustawiona odpowiedź wpisz „Cześć, witamy w sklepie rowerowym Hogarth”. Jak mogę pomóc? (zastąp Hogarth swoją nazwą), a następnie kliknij Save (Zapisz).

Nawiązywanie rozmowy

Po skonfigurowaniu intencji powitalnej wróć do urządzenia testowego i wyślij wiadomość &Cześć. Ta wiadomość aktywuje domyślną intencję powitalną. Powinno być podobne do poniższego obrazu.

Aktualizowanie intencji powitalnej

Teraz, gdy Dialogflow wysyła proste wiadomości, zaktualizujmy tę wiadomość, aby stała się bardziej przydatna. Chcemy nie tylko powitać użytkownika, ale także przedstawić mu jego działania.

Utworzony przez nas agent musi obsługiwać 2 główne funkcje: sprawdzanie godzin pracy firmy i planowanie spotkania. Zastąpmy naszą prostą wiadomość powitalną kartą zawierającą sugerowane odpowiedzi do wykonania tych interakcji.

W sekcji Domyślna intencja powitalna w sekcji Odpowiedzi wybierz kartę RCS Business Messaging (RBM). Usuń istniejącą prostą odpowiedź, klikając ikonę kosza. Następnie kliknij Dodaj odpowiedzi i wybierz Samodzielne karty informacyjne.

W samodzielnym formularzu karty informacyjnej wpisz:

  • Tytuł karty: witamy w sklepie rowerowym Hogarth.
  • Opis karty: jak mogę Ci pomóc? Wybierz jedną z następujących opcji:
  • Wybierz orientację karty: branża
  • Adres URL obrazu/wideo: https://storage.googleapis.com/df-rbm-codelab/bike-shop.jpg
  • Wybierz wysokość multimediów: średnia

Kliknij Dodaj sugestię i wpisz:

  • Tekst sugestii: Jakie są godziny otwarcia?
  • Wywołanie zwrotne sugestii: response_hours

Aby dodać kolejną sugestię, kliknij Dodaj sugestię i podaj:

  • Tekst sugestii: umów się na spotkanie
  • Wywołanie zwrotne sugestii: response_appointment

Kliknij Zapisz.

Wypróbuj tę funkcję.

Gdy model powie „Zakończono szkolenie”, wróć na urządzenie i wyślij wiadomość do pracownika obsługi klienta. Powinna wyświetlić się nowo utworzona karta samodzielna.

Kliknij W jakich godzinach?. Zwróć uwagę, że wywoływana jest domyślna intencja zastępcza. Dzieje się tak, ponieważ agent Dialogflow nie wie, jak obsłużyć dane wywołania zwrotnego skonfigurowane dla tej sugestii.

Naprawmy to.

Tworzenie intencji dotyczącej godzin otwarcia

Dialogflow wykorzystuje intencje do kategoryzowania intencji użytkownika. Intencje mają wyrażenia treningowe, które są przykładem tego, co użytkownik może powiedzieć agentowi. Ktoś może na przykład sprawdzić, w jakich godzinach działa sklep rowerowy. "W jakich godzinach działa Twoja firma?

Wszystkie te zapytania są unikalne, ale mają ten sam cel: uzyskanie informacji o tym, kiedy nasz sklep rowerowy jest otwarty.

Aby uwzględnić to zapytanie, utwórz intencję &godziny:

  1. W menu po lewej stronie kliknij + obok opcji Intents (Intencje).
  2. W polu Intent name (Nazwa intencji) wpisz "Hours&quot.
  3. W sekcji Training Phrases (Wyrażenia na potrzeby trenowania) kliknij Add user expression (Dodaj wyrażenie użytkownika) i po każdym wpisie naciśnij Enter:

    • When do you open?
    • What are your hours?
    • How late can I come in?
    • reply_hours.

    To ostatnie wyrażenie trenowania służy do mapowania danych wywołania zwrotnego skonfigurowanych w poprzedniej sekcji z tym zamiarem.

  4. W sekcji Odpowiedzi kliknij + i wybierz RCS Business Messaging (RBM).

  5. Kliknij Dodaj odpowiedzi i wybierz Prosta odpowiedź.

  6. W polu tekstowym Prosta odpowiedź wpisz „&”; jesteśmy otwarci w dni powszednie od 9:00 do 17:30.

  7. Kliknij Zapisz.

Wypróbuj tę funkcję.

Teraz zapytaj pracownika o godziny otwarcia. W oknie rozmowy z pracownikiem obsługi klienta RBM wpisz "kiedy otwórz e-maila i wyślij wiadomość do agenta.

Agent teraz poprawnie odpowiada na zapytanie. Zwróć uwagę na to, że chociaż Twoje zapytanie różniło się od wyrażeń na potrzeby trenowania (" Kiedy otwierasz?); Dialogflow nadal dopasowało zapytanie do właściwej intencji. Możesz też kliknąć Jakie są godziny otwarcia? na karcie informacyjnej.

Dialogflow używa wyrażeń treningowych jako przykładów modelu systemów uczących się, aby dopasować użytkowników do zapytań. Model systemów uczących się sprawdza zapytanie w przypadku każdego zamiaru agenta, przyznaje każdemu wynikowi wynik i zostaje znaleziona najwyższa ocena intencji. Jeśli intencja o najwyższej punktacji ma bardzo niski wynik, intencja zastępcza jest dopasowana.

Dodawanie realizacji zamówień

Nawet jeśli działa, utworzony przez nas agent działa trochę nienaturalnie. Gdy użytkownik poprosi o pomoc, np. &&;wzięć czytanie, pracownik obsługi klienta odpowie mu: Będzie to o wiele bardziej naturalne – i pomocne – jeśli pracownik obsługi klienta poinformuje nas bezpośrednio, czy sklep jest otwarty.

W tym celu nasz agent musi sprawdzić, czy sklep jest obecnie otwarty, i wygenerować inną odpowiedź w obu przypadkach. W Dialogflow ten typ skomplikowanej logiki należy wdrożyć w webhooku realizacji.

Webhook realizacji zamówień to serwer HTTP, który jest wywoływany przez Dialogflow wraz z informacjami o bieżącym stanie rozmowy. Kod realizacji wykonuje wszystkie wymagane działania, a następnie generuje odpowiedź, którą Dialogflow zwraca użytkownikowi.

Przeprowadzimy teraz proces wdrażania webhooka realizacji zamówień, który sprawi, że nasz agent będzie bardziej przydatny.

Konfiguracja: wdrażanie i włączanie realizacji

Dialogflow ma wbudowany edytor Cloud Functions dla Firebase, który umożliwia pisanie i wdrażanie kodu JavaScript do obsługi realizacji.

W oknie nawigacyjnym po lewej stronie Dialogflow kliknij Fulfillment (Realizacja), aby otworzyć stronę realizacji. Kliknij przełącznik obok Edytora wbudowanego, aby włączyć edytor Cloud Functions dla Firebase.

Zauważysz, że edytor zawiera 2 pliki: "index.js", który zawiera główny kod realizacji, oraz "package.json" ze szczegółowymi informacjami o wymaganych zależnościach.

Teraz zaimportujemy przykładowy kod, który pomoże Ci zrealizować zamówienie.

Skopiuj i wklej tekst z tego pliku do pliku "index.js" zastępując całą jego zawartość:

https://storage.googleapis.com/df-rbm-codelab/index.js

Następnie przewiń stronę na sam dół i kliknij WDRÓŻ. Mniej więcej po minucie kod zostanie wdrożony w Cloud Functions dla Firebase.

Po wdrożeniu funkcji datę i godzinę wdrożenia zobaczysz na dole strony:

Spójrz na kod realizacji. Funkcja hoursHandler wywołuje currentlyOpen, aby określić, czy sklep jest obecnie otwarty, i dodaje inną odpowiedź RBM w zależności od warunku.

function hoursHandler(agent) {
    let responseText = 'We\'re currently closed, but we open every weekday at 9am!';
    if (currentlyOpen()) {
      responseText = 'We\'re open now!! We close at 5pm today.';
    }

    let payload = {
    "fulfillmentMessages": [
        {
          "platform": "GOOGLE_RBM",
          "rbmText": {
              "text": responseText
          }
        }
      ]
    };

    return response.status(200).json(payload);
}

Wiersz intentMap.set('Hours', hoursHandler); informuje bibliotekę realizacji, że funkcja hoursHandler powinna zostać uruchomiona po dopasowaniu intencji &godzin. Musimy jednak poinformować Dialogflow, aby umożliwić realizację realizacji naszych intencji i godzin.

W menu po lewej stronie kliknij Intents (Intencje) i otwórz intencję. Otwórz sekcję Realizacja na dole i wybierz Włącz wywołanie webhooka dla tej intencji, aby ją włączyć.

Gdy zapiszesz intencję, możesz ją wypróbować. W symulatorze po prawej stronie wpisz: Jeśli klikniesz Informacje diagnostyczne i sprawdzisz odpowiedź interfejsu API, powinna pojawić się odpowiedź o realizacji. Pamiętaj, że strefa czasowa używana przez serwer Cloud Functions dla Firebase jest UTC, więc odpowiedź może nie być prawidłowa dla Twojego bieżącego czasu lokalnego.

Jeśli w realizacji wystąpi błąd, Dialogflow korzysta z dowolnej odpowiedzi zdefiniowanej w sekcji Odpowiedzi na stronie Intencji, co umożliwia agentowi przywrócenie go bez problemów.

Następnie wykorzystamy elementy do wyodrębnienia odpowiednich części zapytania użytkownika. Dzięki temu użytkownicy mogą umówić się na spotkanie z naszym sklepem rowerowym, aby naprawić lub naprawić rower.

Wyodrębnianie danych z elementami

Czas trwania: 12:00

W tej sekcji pokażemy, jak wyodrębnić dane z zapytania użytkownika, aby umożliwić mu wizytę w naszym sklepie rowerowym lub naprawić rower.

Dodaj parametry do intencji

Parametry to trafne słowa lub wyrażenia w zapytaniu, które Dialogflow wyodrębnia, aby agent mógł udzielić prawidłowej odpowiedzi. Utworzysz nową intencję z parametrami i dowiesz się, jak uwzględnić te wartości w odpowiedziach.

  1. Aby utworzyć nową intencję, kliknij + obok opcji Intents (Intencje) w panelu nawigacyjnym po lewej stronie.
  2. W przypadku nazwy zamiaru wpisz „"Umów się na spotkanie” u góry strony.
  3. Dodaj te wyrażenia jako wyrażenia treningowe:
    • reply_appointment
    • I'd like to schedule an appointment for next Thursday
    • I'd like to get my bike fixed, I have a mountain bike that needs servicing
    • My bike is broken
    • Can I schedule service for 4pm tomorrow?
    • Can you fix my road bike?
    • Can I set up an appointment for noon on Friday?

Dialogflow automatycznie wykrywa znane parametry w wyrażeniach do trenowania i je tworzy.

W sekcji Wyrażenia na potrzeby trenowania Dialogflow automatycznie wypełnia tabelę parametrów parametrami zbieranymi przez:

  • parametr jest opcjonalny (nie jest wymagany).
  • o nazwie date (data) i time (godzina)
  • odpowiada typowi systemowemu @sys.date i @sys.time**
  • ma wartości $date i $time
  • nie jest listą

Korzystanie z danych parametru

Wartości parametru możesz używać w odpowiedziach. W takich przypadkach możesz użyć w odpowiedzi odpowiedzi $date i $time, które zostaną zastąpione datą i godziną określoną w zapytaniu do agenta.

W sekcji Responses (Odpowiedzi) dodaj kartę RCS Business Messaging, dodaj ten znacznik do prostej odpowiedzi i kliknij Save (Zapisz):

Great! I've set up your appointment for $date at $time.  See you then!

Wypróbuj tę funkcję.

Teraz wyślij zapytanie do agenta za pomocą zapytania „"”. Czy mogę umówić się na 14:00 jutro? W symulatorze w panelu po prawej stronie.

U dołu danych symulatora możesz sprawdzić, czy Dialogflow poprawnie wyodrębniła parametry „jutro”, „&pmt;2pm&quot”” i prawidłowo je przeanalizowała jako datę i godzinę. Spróbuj wykonać te same czynności na urządzeniu testowym. Sprawdź w ten sposób, czy odpowiedź zawiera prawidłową datę i godzinę analizy.

Wymagane parametry

W przypadku naszego sklepu rowerowego trzeba podać wartość daty i godziny, zanim będziemy mogli zaplanować spotkanie. Domyślnie wszystkie parametry Dialogflow są opcjonalne. Aby je ustawić, musisz zaznaczyć pole obok każdego parametru, który chcesz wymusić. Zaznacz pole wyboru obok każdego parametru w intencji:

Teraz, gdy każdy parametr jest wymagany, musimy utworzyć monit dla każdego z nich. Potwierdzenia proszą użytkownika o podanie wartości parametru, który nie został podany, gdy użytkownik poinformował o nich początkowo o intencji (w tym przypadku o spotkanie). Kliknij Zdefiniuj potwierdzenia, aby utworzyć potwierdzenie dla parametru i dla każdego z nich wpisz te polecenia:

Parametr Pytaj
date W jaki dzień chcesz przyjść?
time Która godzina Ci odpowiada?

Po wpisaniu komunikatów kliknij Zapisz.

Wypróbuj tę funkcję.

Na urządzeniu kliknij sugestię Zarezerwuj spotkanie lub wpisz „Chcę poprawić rower”. Zobaczysz odpowiedź na pytanie „Który dzień chcesz odwiedzić?”? Podaj datę ("jutro"), a otrzymasz odpowiedź z pytaniem o datę. Odpowiedz na to pytanie, a określimy, kiedy spotkanie zostało ustawione.

Zapytania zawierające niektóre informacje w początkowym żądaniu (tj. „") Umówię się na jutro” i podaj właściwy parametr (data), pomiń monit o datę ("Jaki dzień chcesz odwiedzić?) i przejdź do godziny (?

Właśnie wykorzystaliśmy encje i parametry Dialogflow do stworzenia całkowicie niepowtarzalnej rozmowy bez kodu i niewielkiej konfiguracji. W następnej kolejności omówimy, jak korzystać z realizacji, aby ułatwić użytkownikom wyświetlanie odpowiedzi w rodzajach „Jak chcesz zaplanować spotkanie?”.

Konfiguracja: włączanie realizacji zamówień

W menu po lewej stronie kliknij Intents (Intencje) i otwórz intencję. Otwórz Realizacja, wybierz Włącz wywołanie webhooka dla tej intencji i Włącz wywołanie webhooka dla wypełnienia boksu, tak aby były włączone i kliknij Zapisz.

Gdy obie opcje są włączone, po uruchomieniu tej intencji Dialogflow wykorzystuje odpowiedzi na potrzeby wymaganych parametrów oraz odpowiedzi RBM dla intencji.

Wdrażanie realizacji

W oknie nawigacyjnym po lewej stronie Dialogflow kliknij Fulfillment (Realizacja), aby otworzyć stronę realizacji. Przewiń w dół do linii

intentMap.set('Hours', hoursHandler);

W następnym wierszu dodaj:

intentMap.set('Make Appointment', makeAppointment);

Dzięki temu biblioteka realizacji zamówień powinna zostać uruchomiona w ramach funkcji makeAppointment "Make Appointment".

Następnie skopiuj poniższy kod i wklej go pod funkcją currentlyOpen. Obie funkcje – getSuggestedTimes i getSuggestedDates – tworzą przydatne listy elementów, które ułatwiają odpowiedzi użytkowników.

function getSuggestedTimes() {
  return [
        {
          "reply": {
            "text": "9 am",
            "postbackData": "9:00am"
            }
        },
        {
          "reply": {
            "text": "10 am",
            "postbackData": "10:00am"
          }
        },
        {
          "reply": {
            "text": "1 pm",
            "postbackData": "1:00pm"
          }
        },
        {
          "reply": {
            "text": "2 pm",
            "postbackData": "2:00pm"
          }
        }
      ];
}

function getSuggestedDates() {
  return [
        {
          "reply": {
            "text": "Tomorrow",
            "postbackData": "Tomorrow"
          }
        },
        {
          "reply": {
            "text": "A week from now",
            "postbackData": "A week from now"
          }
        },
        {
          "reply": {
            "text": "Two weeks from now",
            "postbackData": "Two weeks from now"
          }
        }
      ];
}

Poniżej w sekcji hoursHandler skopiuj i wklej poniższy kod, a następnie kliknij Wdróż.

function makeAppointment(agent) {
    // extract required parameters
    const appointmentDate = agent.parameters.date;
    const appointmentTime = agent.parameters.time;

    const gotAppointmentDate = appointmentDate.length > 0;
    const gotAppointmentTime = appointmentTime.length > 0;

    let responseText = '';
    let suggestions = [];

    if(gotAppointmentDate && gotAppointmentTime) {
      // We have all required parameters, return success message
      responseText = 'Great! I\'ve set up your appointment for ' +
          appointmentDate + ' at ' + appointmentTime + '.  See you then!';
    }
    else if(gotAppointmentDate) {
      responseText = 'What time works for you?';
      suggestions = getSuggestedTimes();
    }
    else if(gotAppointmentTime) {
      responseText = 'What day do you want to come in?';
      suggestions = getSuggestedDates();
    }
    else {
      responseText = 'What day do you want to come in?';
      suggestions = getSuggestedDates();
    }

    let payload = {
      "fulfillmentMessages": [
      {
        "platform": "GOOGLE_RBM",
        "rbmText": {
          "text": responseText,
          "rbmSuggestion": suggestions
        }
      }
    ]
    };

    return response.status(200).json(payload);
  }

Sprawdź kod. Zwróć uwagę, że wymagane parametry są sprawdzane pod kątem wartości, a jeśli nie są ustawione, zwracają użytkownikowi odpowiedni komunikat i zbiór sugestii.

Wypróbuj tę funkcję.

Na urządzeniu kliknij sugestię Zarezerwuj spotkanie lub wpisz „Chcę poprawić rower”. Zobaczysz odpowiedź na pytanie „Jaki dzień chcesz odwiedzić?” i w razie potrzeby skorzystaj z tych sugestii: "Jutro” i „Za 2 tygodnie”; Wskaż datę ("jutro), a otrzymasz odpowiedź przez pewien czas. Odpowiedz na to pytanie, a określisz spotkanie.

Zarządzanie stanem za pomocą kontekstu

Czas trwania: 7:00

Dodaj kontekst do stanu rozmowy

Po skonfigurowaniu spotkania być może będziemy potrzebować dodatkowych informacji. Wyobraź sobie, że nasz sklep rowerowy oferuje 2 rodzaje zleceń: naprawę lub dostrajanie. Chcemy wiedzieć, których z nich potrzebuje użytkownik.

Zacznijmy od zaktualizowania odpowiedzi w sekcji „Umów się na spotkanie” i zapytania użytkownika, jakiego typu spotkania wymaga. Zastąp odpowiedź funkcjonalną w polu makeAppointment w polu realizacji tekstu tekstem poniżej, a następnie kliknij Wdróż.

responseText = 'Great! I\'ve set up your appointment for ' +
    appointmentDate + ' at ' + appointmentTime + '.  Do you need a repair for just a tune-up?';

Aby otrzymać odpowiedź na to pytanie, musimy utworzyć kolejną intencję. Pamiętaj jednak, że nowe intencje są dopasowane tylko wtedy, gdy udało się już znaleźć odpowiedź na to pytanie. Aby to egzekwować, możemy zdefiniować je jako kontynuację.

Intencje uzupełniające to zamiary, które można dopasować tylko po spełnieniu ich zamiarów (w tym przypadku „Umów się na spotkanie”). W panelu nawigacyjnym po lewej stronie kliknij Intents (Intencje) (jeśli menu jest ukryte, kliknij przycisk Menu & Ads w lewym górnym rogu). Następnie najedź kursorem na intencję „Zrób spotkanie” i kliknij Dodaj kolejną intencję, która znajduje się po prawej stronie nazwy intencji:

Następnie kliknij niestandardowo w menu.

Dialogflow automatycznie nazwała intencję dalszych działań – „wizyta – niestandardowa”, a strzałka wskazuje zależność między intencjami.

Kolejne intencje można dopasować dopiero po dopasowaniu intencji nadrzędnej. Intencję można dopasować tylko po zamiarze wykonania usługi, więc zakładamy, że użytkownik właśnie zadał pytanie lub czy potrzebuje konkretnej naprawy.

Aby znaleźć odpowiedź na to pytanie, musimy najpierw zdefiniować pytania.

Tworzenie pierwszego elementu

Dialogflow umożliwia zdefiniowanie encji dewelopera, które działają podobnie do jednostek systemowych Dialogflow. Zacznijmy od utworzenia typu encji. Zależy nam na tym, aby użytkownicy mogli wybrać, jakiego rodzaju spotkanie chcą odwiedzić w naszym sklepie. Dlatego pozwólmy na typ AppointmentType. W elemencie AppointmentType dodamy 2 elementy dla 2 różnych rodzajów mian: service i fix.

Aby utworzyć typ encji:

  1. W panelu nawigacyjnym po lewej stronie kliknij + obok opcji Encje.
  2. Jako nazwę typu encji wpisz "SessionType".
  3. Kliknij pole tekstowe i dodaj następujące wpisy:
    • usługa
    • Napraw
  4. Wpisanie wpisu spowoduje przesunięcie kursora do pola synonimu. Dodaj synonimy dla każdego wpisu. Pamiętaj, aby dodawać wszystkie słowa pojedynczo, zamiast kopiować i wklejać cały ciąg:
Wstęp Synonim
usługa
  • usługa
  • remont
  • roboty konserwacyjne
  • tuning
  • tuning
Napraw
  • Napraw
  • naprawa
  • zmień
  • uszkodzone
  • przebita opona
  • stała liczba
  1. Kliknij Zapisz.

Każdy typ elementu musi spełniać te warunki:

  • nazwę definiującą kategorię ("AppointmentType"),
  • co najmniej 1 wpis ("service", "fix")
  • jeden lub więcej synonimów ("konserwacja", "zwiększanie" itp.)

Dialogflow obsługuje proste zadania, takie jak formy liczby mnogiej i wielkie litery, ale pamiętaj, aby dodać wszystkie możliwe synonimy. Im więcej dodasz elementów, tym lepiej agent będzie w stanie określić encje.

Dodaję nowy element

Gdy zdefiniujemy już typ elementu, możemy go użyć w wyrażeniach na potrzeby trenowania naszego zamiaru – niestandardowe spotkanie:

  1. W panelu nawigacyjnym po lewej stronie kliknij Intencje, a następnie kliknij strzałkę obok opcji „Umów się na spotkanie” i podaj intencje dalsze. Kliknij &wizyta – Niestandardowe&intencja.
  2. Jako wyrażenia na potrzeby trenowania dodaj te pozycje:

    • Czy mogę prosić o moje rowery?
    • Potrzebuję naprawy.

  3. W wpisanych wyrażeniach szkoleniowych automatycznie powinien być widoczny typ elementu spotkania. Spowoduje to dodanie parametru AppointmentType do tabeli poniżej sekcji Training phrases (Wyrażenia na potrzeby trenowania). Kliknij pole wyboru, aby oznaczyć ten parametr jako REQUIRED (WYMAGANY).

  4. Kliknij Definiuj potwierdzenia i wpisz „Serwis lub naprawę roweru”. Które z nich chcesz posłuchać?

  5. W sekcji Odpowiedzi zmień odpowiedź na „" OK” zaplanujemy $USDType.", a następnie kliknij Zapisz.

Wypróbuj tę funkcję.

Na urządzeniu kliknij sugestię Zarezerwuj spotkanie lub wpisz „Chcę poprawić rower”. Zobaczysz odpowiedź na pytanie „Jaki dzień chcesz odwiedzić?” i w razie potrzeby skorzystaj z tych sugestii: "Jutro” i „Za 2 tygodnie”; Wpisz datę ("jutro), a otrzymasz odpowiedź o określonej godzinie.

Wybierz termin, a wyświetli się nowa odpowiedź z pytaniem, czy dotyczy ona usługi czy dostrajania.

Następnie wpisz „&Potrzebuję naprawy”. Powinna być widoczna odpowiedź i zaplanujemy rozwiązanie. Sygnał wskazuje, że Dialogflow wyodrębnił prawidłowy typ spotkania jako encję.

Odpowiedź dotycząca tej intencji (" OK, zaplanujemy rozwiązanie.") jest teraz nieprzydatna. Najlepiej byłoby, gdyby odpowiedź potwierdziła datę i godzinę zaplanowanego spotkania. Aby to zrobić, potrzebujemy daty i godziny, ale parametry daty i godziny są podane tylko w sekcji „Zarezerwuj spotkanie”, a nie w sekcji „Zarezerwuj spotkanie – niestandardowy”.

Podobne intencje i konteksty

Aby móc odpowiedzieć na podstawie parametru zebranego z intencji „Zrób spotkanie”, musisz wiedzieć, jak działają dalsze działania. Podobne intencje używają kontekstów do śledzenia, czy uruchomiono intencję nadrzędną. W kontekście intencji „Zrób to” i sprawdź, czy jako kontekst wyjściowy wyświetla się ciąg „Tacenie” i poprzedzaj liczbę 2:

Po dopasowaniu intencji i zadania Dialogflow Dialogflow łączy kontekst do rozmowy w trakcie rozmowy. Dlatego, gdy użytkownik odpowie na pytanie ("Czy potrzebujesz naprawy czy tylko dostrajać?), kontekst i kontekst; Wszystkie intencje z tym samym kontekstem danych wejściowych są bardzo preferowane, gdy Dialogflow pasuje do intencji.

W panelu nawigacyjnym po lewej stronie kliknij Intents (Intencje), a następnie kliknij "MakeAppointment -custom" intent.

Zauważysz, że intencja ma taki sam kontekst wejściowy ("MakeAppointment-Followup") co kontekst wyjściowy "Make Appointment&quot. Z tego powodu intencja „Dopasuj – niestandardowa” i dopasowana do wyrażenia pasuje tylko do wyrażenia „&Umów się”.

Konteksty i parametry

Wartości parametrów przechowuje konteksty, co oznacza, że możesz uzyskać dostęp do wartości parametrów określonych w &&tt;Make Appointment" w innych zamiarach, np. "MakeAppointment - custom".

Dodaj tę odpowiedź do "MakeAppointment - custom" zamiar i kliknij Save: "OK. Zaplanujmy $DateType, #MakeAppointment- Followup.date o #MakeAppointment-Followup.time. Do zobaczenia.

Teraz możesz ponownie wysłać zapytanie do agenta i uzyskać prawidłową odpowiedź. Najpierw wpisz „"”czy mogę umówić się na serwis z możliwością rowerów o 11:00 jutro, a potem odpowiedzieć na pytanie: „Potrzebuję naprawy”.

W odpowiedzi potwierdzającej spotkanie powinno być widoczne, że wartości daty i godziny zostały pobrane z kontekstu.

Ulepszanie formatu odpowiedzi

Czas trwania: 5:00

Formatowanie daty i godziny za pomocą funkcji realizacji zamówień

Jak zapewne już wiesz, data i godzina wyświetlenia komunikatu o powodzeniu są bardzo łatwe w obsłudze. Aby rozwiązać ten problem, trzeba ponownie zrealizować realizację, aby móc używać JavaScriptu do formatowania parametrów daty i godziny w sposób, który będzie łatwy do odczytania przez użytkownika.

W panelu nawigacyjnym po lewej stronie przejdź do sekcji „Utwórz spotkanie – niestandardowy&quot”, a potem kliknij Intents (Intencje) i wybierz „intencja – Niestandardowe – intencje”. Przewiń w dół strony i włącz opcję Włącz wywołanie webhooka dla tej intencji, a potem kliknij Zapisz.

Aby przejść do realizacji zamówienia, kliknij link Realizacja w panelu nawigacyjnym po lewej stronie. Skopiuj poniższy kod i wklej go pod funkcją makeAppointment.

function makeAppointmentFollowUp(agent) {
    let context = agent.getContext('makeappointment-followup');

    // extract required parameters
    const appointmentDate = new Date(context.parameters.date);
    const appointmentTime = new Date(context.parameters.time);
    const appointmentType = agent.parameters.AppointmentType;

    // format date and time to be human-readable
    const dateAsString = appointmentDate.toLocaleDateString('en-US',
        { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' });
    const timeAsString = appointmentTime.toLocaleString('en-US',
        { hour: 'numeric', minute: 'numeric', hour12: true });

    // compose response for user
    let responseText = 'Okay, we'll schedule a ' + appointmentType + ', ' + dateAsString +
        ', at ' + timeAsString + '.  We'll see you then.';

    let payload = {
      "fulfillmentMessages": [
      {
        "platform": "GOOGLE_RBM",
        "rbmText": {
          "text": responseText
        }
      }
    ]
    };

    return response.status(200).json(payload);
  }

Poniżej tej funkcji znajdź wiersz intentMap.set('Make appointment', makeAppointment); i dodaj intentMap.set('Make appointment - custom', makeAppointmentFollowUp);, by po wywołaniu intencji wywołania wywołać wywołaną wcześniej funkcję.

Spójrz na kod makeAppointmentFollowUp i sprawdź, jak parametry są wyodrębniane z kontekstu przychodzącego i z tej intencji. Przed wygenerowaniem kodu responseText formatuje teraz datę i godzinę, aby była zrozumiała dla użytkowników.

Wypróbuj tę funkcję.

Na urządzeniu kliknij sugestię Zarezerwuj spotkanie lub wpisz „Chcę poprawić rower”. Zobaczysz odpowiedź na pytanie „Jaki dzień chcesz odwiedzić?” i w razie potrzeby skorzystaj z tych sugestii: "Jutro” i „Za 2 tygodnie”; Wpisz datę ("jutro), a otrzymasz odpowiedź o określonej godzinie.

Wybierz termin, a wyświetli się nowa odpowiedź z pytaniem, czy dotyczy ona usługi czy dostrajania.

Następnie wpisz „&Potrzebuję naprawy”. Odpowiedź z określonym typem spotkania, datą i godziną będzie widoczna w czytelnym formacie.

To już wszystko.

Czas trwania: 1:00

Dobra robota!

Znasz już wszystkie etapy tworzenia agenta RBM z Dialogflow.

Baw się dobrze, tworząc nową platformę.