Przenoszenie agenta na żywo

1. Wprowadzenie

53003251caaf2be5.png 6717b85f57d859d3.png

Ostatnia aktualizacja: 23.08.2021

Przenoszenie agenta na żywo za pomocą Business Messages

Dostępna w Business Messages funkcja przenoszenia na żywo z pracownikiem obsługi klienta umożliwia agentowi rozpoczęcie rozmowy jako bot i przełączenie rozmowy na pracownika obsługi klienta (członka). Twój bot może odpowiadać na typowe pytania, takie jak godziny otwarcia, a Twój pracownik obsługi klienta może zapewnić użytkownikom dostosowane wrażenia z większym dostępem do kontekstu użytkownika. Gdy przejście między tymi 2 funkcjami przebiega płynnie, użytkownicy otrzymują szybkie i precyzyjne odpowiedzi na swoje pytania, co przekłada się na wyższy współczynnik zwrotów i większe zadowolenie klienta.

Dzięki temu ćwiczeniu w Codelabs dowiesz się, jak w pełni wykorzystać funkcję transferu agenta na żywo.

Co utworzysz

W ramach tego ćwiczenia w Codelabs utworzysz webhook dla agenta, który może wysyłać i odbierać zdarzenia przenoszenia agenta na żywo. Skorzystasz z podstawowego interfejsu dostarczonego w kodzie startowym.

49aca3df6b196c50.png

Czego się nauczysz

  • Jak przechowywać stan rozmowy i nim zarządzać.
  • Jak używać Business Messages do wysyłania na żywo zdarzeń przenoszenia agenta.
  • Dowiedz się, jak skonfigurować webhooka i podstawowy interfejs użytkownika do dołączania do rozmów jako agent.
  • Sprawdzone metody korzystania z interfejsu Business Messages API.

Skupia się on na użyciu interfejsu Business Message API do implementacji przenoszenia agentów na żywo. Możesz przeczytać kod startowy na każdym etapie, ale musisz tylko wdrożyć kod związany z Business Messages.

Czego potrzebujesz

  • agenta Business Messages, w tym klucz konta usługi. Aby utworzyć agenta, postępuj zgodnie z instrukcjami podanymi w przewodniku po tworzeniu agenta.
  • Działająca konfiguracja Cloud Datastore połączona z projektem GCP agenta. Aby to zrobić, skorzystaj z krótkiego wprowadzenia do Cloud Datastore. Nie musisz wiedzieć, jak korzystać z Cloud Datastore.
  • Komputer z zainstalowanym pakietem SDK Google Cloud i zainstalowanym systemem Node.js (w wersji 10 lub nowszej).
  • Urządzenie z Androidem (w wersji 5 lub nowszej) lub urządzenie z iOS do testowania wrażeń użytkownika.
  • Doświadczenie w programowaniu aplikacji internetowych. Napisanie niewielkiego kodu JavaScript może wymagać debugowania tego, co piszesz.

2. Utwórz bota echo

W tym kroku wdrożysz podstawowego przedstawiciela bota o nazwie „Echo bot”. Ten bot pobiera wiadomości użytkowników, zapisuje je w wątku rozmowy w Cloud Datastore, a następnie rejestruje ich echa. wiadomość użytkownika, odpowiadając na tę samą treść. Gdy już będziesz mieć bota i infrastrukturę logowania, możesz dodać do niego w następnych krokach pełną implementację transferu agenta.

Pobierz kod startowy

W terminalu skopiuj kod początkowy Live Agent Transfer do katalogu roboczego projektu za pomocą tego polecenia:

git clone https://github.com/google-business-communications/bm-nodejs-live-agent-transfer

Omówienie kodu startowego

Przyjrzyjmy się strukturze kodu startowego, której będziesz używać w trakcie ćwiczeń z programowania.

Przejdź do katalogu step-1 i wyświetl jego zawartość. Zawiera te elementy:

  • bin: ten katalog zawiera skrypt startowy www, który konfiguruje serwer.
  • libs: w tym katalogu znajduje się katalog datastore_util.js, który zawiera wygodne metody odczytu danych z Cloud Datastore i ich zapisu. Nie musisz rozumieć, jak działa ten plik. Wystarczy, że będziesz pamiętać o dostępnych metodach i ich działaniu.
  • resources: zawiera klucz konta usługi w postaci pliku o nazwie credentials.json.
  • routes: plik index.js zawiera webhooka i wszystkie jego metody pomocnicze. To jest główny plik, z którym będziesz pracować i do którego będziesz dodawać elementy.
  • views: ten katalog zawiera pliki szablonów EJS dla elementów interfejsu. W kolejnych krokach będzie zawierać więcej plików.
  • app.js, app.yaml, package.json: te pliki konfiguruje aplikację i jej zależności.

Przed wdrożeniem pobierz klucz konta usługi GCP i skopiuj plik danych logowania JSON do każdego katalogu zasobów w przykładowym kodzie. Zrób to na każdym etapie ćwiczeń z programowania.

cp credentials.json bm-nodejs-live-agent-transfer/step-<step number>/resources/credentials.json

Wdrażanie kodu startowego

W terminalu przejdź do katalogu step-1 z przykładem. Następnie skonfiguruj narzędzie gcloud tak, aby używało Twojego projektu Google Cloud, ustawiając identyfikator projektu użyty do rejestracji w interfejsach API.

gcloud config set project <PROJECT_ID>

Aby wdrożyć aplikację, uruchom to polecenie:

gcloud app deploy

Zapisz adres URL wdrożonej aplikacji w danych wyjściowych ostatniego polecenia:

Deployed service [default] to [https://PROJECT_ID.appspot.com]

Wdrożony przez Ciebie kod startowy zawiera aplikację internetową z webhookiem do odbierania wiadomości z Business Messages. Aplikacja powtarza wiadomości do użytkownika i loguje ich wątki w Cloud Datastore.

Skonfiguruj agenta

Otwórz stronę ustawień konta w konsoli programisty Business Communications i ustaw webhooka na adres URL wdrożonej aplikacji. Na przykład: https://PROJECT_ID.appspot.com/callback/.

Następnie na stronie Informacje o agencie skonfiguruj główne i dodatkowe typy interakcji na bota i człowieka.

db0cca5b74f999ad.png

Rozmowa z botem echo

Otwórz agenta w Konsoli programisty. Pojawi się strona Przegląd, na której możesz sprawdzić szczegóły agenta. Skopiuj testowy adres URL agenta, który pasuje do urządzenia testowego. Użyj tego adresu URL na urządzeniu mobilnym, aby uruchomić platformę konwersacyjną agenta.

536313929e5c0b3e.png

Skontaktuj się z agentem, wysyłając kilka wiadomości. W interfejsie konwersacyjnym są kopiowane tylko Twoje wypowiedzi – nie jest to zbyt przydatne dla użytkowników. Gdyby tylko był jakiś sposób na rozmowę z prawdziwą osobą!

3. Dołączam do rozmowy

Teraz spójrzmy na rozmowę z perspektywy pracownika obsługi klienta na żywo. Jako pracownik obsługi klienta musisz dowiedzieć się kilku rzeczy o rozmowie, zanim do niej dołączysz, na przykład jej identyfikatora. Warto też wiedzieć, czy użytkownik poprosił o rozmowę z pracownikiem obsługi klienta. W tym kroku wyświetlisz te informacje i dołączysz do rozmowy jako pracownik obsługi klienta, korzystając z podstawowej strony zarządzania relacjami z klientami (CRM).

Kod startowy tego kroku dodaje podstawowy system CRM, który zawiera listę wszystkich trwających wątków rozmów dotyczących agenta. Spójrzmy na system CRM, aby sprawdzić, jakie rozmowy mogą wymagać uwagi pracownika obsługi klienta.

Przejdź do katalogu step-2 i wdróż aplikację ponownie tak jak w poprzednim kroku.

Po wdrożeniu aplikacji zobaczysz docelowy adres URL. Otwórz ten adres URL w przeglądarce, aby zobaczyć listę z wątkiem rozmowy rozpoczętym w poprzednim kroku. Stan rozmowy to obecnie „Zarządzany przez bota” bo bot echo pełni rolę przedstawiciela naszego agenta w tej rozmowie.

8f624e9befb8e827.png

Pojawia się przycisk Dołącz do czatu, który nie powoduje jeszcze żadnych działań. Za pomocą tego interfejsu nie można też określić, czy użytkownik chce porozmawiać z pracownikiem obsługi klienta.

Business Messages udostępnia zdarzenie na żywo wymagane przez agenta, które wskazuje, kiedy użytkownik chce porozmawiać z pracownikiem obsługi klienta. Musisz śledzić ten stan, aby wyświetlać go w interfejsie.

Spójrz na metodę wywołania zwrotnego w index.js. Komentarz TODO wskazuje miejsce, w którym musisz przechwycić żądanie użytkownika dotyczące aktywnego agenta i zaktualizować stan wątku.

step-2/routes/index.js

/**
 * The webhook callback method.
 */
router.post('/callback', async function(req, res, next) {
  ...
    } else if (requestBody.userStatus !== undefined) {
      if (requestBody.userStatus.requestedLiveAgent !== undefined) {
  ...
        // TODO: Update the thread state to QUEUED_THREAD_STATE.
      }
    }
  });
...
});

Aby wczytać bieżący wątek rozmowy i zaktualizować stan na QUEUED_THREAD_STATE, musisz użyć metod w usłudze libs/datastore_utils.js.

Jeśli nie wiesz, co zrobić, zapoznaj się z rozwiązaniami. Kod startowy zawiera katalog solutions pod każdym krokiem, który wymaga podania kodu. Katalogi te zawierają kopię całej aplikacji z pełną implementacją danego kroku.

Po zakończeniu wdrażania i ponownym wdrożeniu aplikacji użyj rozszerzonego menu w rozmowie na urządzeniu mobilnym, aby poprosić o pomoc na żywo z pracownikiem obsługi klienta.

e58d2b77e9c64492.png

Teraz, gdy wrócisz do systemu CRM, w wątku rozmowy powinna pojawić się informacja „Poproszono o pracę z pracownikiem obsługi klienta”. Ten użytkownik potrzebuje pomocy człowieka! Aby przycisk działał, musisz wdrożyć punkt końcowy joinConversation.

Znajdź drugi komentarz TODO w skróconej wersji metody /joinConversation.

step-2/routes/index.js

/**
 * Updates the thread state and sends a representative join signal to the user.
 */
router.post('/joinConversation', async function(req, res, next) {
  let conversationId = req.body.conversationId;

  // TODO: Update the thread state to LIVE_AGENT_THREAD_STATE and post a REPRESENTATIVE_JOINED event.

  res.json({
    'result': 'ok',
  });
});

Musisz ponownie zaktualizować stan wątku, tym razem na LIVE_AGENT_THREAD_STATE. Aby opublikować zdarzenie REPRESENTATIVE_JOINED, musisz też użyć metody conversations.events.create interfejsu Business Messages API.

Aby utworzyć ładunek żądania, ustaw pola opisane w tej tabeli:

Nazwa pola

Wskazówka

parent

Ustaw dla tego parametru: „confersations/{confersationId}”.

eventId

Wygeneruj losowy identyfikator zdarzenia.

auth

Użyj podanej metody initCredentials.

resource

To jest treść zdarzenia. Należy ustawić typ zdarzenia i reprezentatywny.

Jeśli potrzebujesz pomocy, zajrzyj na stronę z informacjami o metodzie tworzenia lub na stronę z informacjami o zdarzeniach.

Po zakończeniu wdrażania wdróż aplikację ponownie i kliknij przycisk Dołącz do czatu. Pojawi się okno Dołączona rozmowa, a stan czatu zmieni się na „Czat na żywo”. Gdy otworzysz rozmowę na urządzeniu mobilnym, zobaczysz na czacie informację o dołączeniu do rozmowy przez pracownika obsługi klienta.

Gratulacje! W następnym kroku dowiemy się, jak nawiązać kontakt z pracownikiem obsługi klienta na żywo.

4. Czatuj jako pracownik obsługi klienta

Po dołączeniu do rozmowy możesz wysłać kilka wiadomości w roli agenta.

Przejdź do katalogu step-3 i wdróż aplikację ponownie. W systemie CRM kliknij wątek rozmowy z poprzedniego kroku. Powinien być widoczny podstawowy interfejs czatu. W tym miejscu możesz wyświetlać wiadomości użytkowników w czasie rzeczywistym.

46dd083f08f43961.png

Jednak wysłanie wiadomości przez agenta nie zostało zaimplementowane. Musisz to zrobić na tym etapie.

Otwórz plik routes/index.js i spójrz na 3 nowo dodane punkty końcowe:

  • /messages: pobiera plik widoku messages.ejs i renderuje go w przeglądarce. Kliknięcie wątku rozmowy w indeksie spowoduje przejście na jedną z tych stron.
  • /retrieveMessages: pobiera treść wątku i zwraca sformatowaną listę wszystkich wiadomości w wątku. Strona z wiadomościami okresowo wywołuje ten punkt końcowy, aby wyświetlić najnowsze komunikaty.
  • /sendMessage: wysyła do użytkownika wiadomość od przedstawiciela agenta. Ta opcja jest wywoływana na stronie wiadomości, gdy klikniesz Wyślij. Obecnie nie jest zaimplementowany.

Teraz spójrz na istniejącą metodę storeAndSendResponse:

step-3/routes/index.js

/**
 * Updates the thread, adds a new message and sends a response to the user.
 *
 * @param {string} message The message content that was received.
 * @param {string} conversationId The unique id for this user and agent.
 * @param {string} threadState Represents who is managing the conversation for the CRM.
 * @param {string} representativeType The representative sending the message, BOT or HUMAN.
 */
async function storeAndSendResponse(message, conversationId, threadState, representativeType) {
...
}

Webhook już używa tej metody do wysyłania odpowiedzi bota echo. Ta metoda najpierw zapisuje dane wiadomości przychodzących w obiekcie Cloud Datastore dla danego wątku. Następnie wysyła wiadomość z odpowiedzią. Przyjrzyj się uważnie obiektowi wiadomości, który tworzy, szczególnie w przypadku typu reprezentatywnego.

Teraz zaimplementuj punkt końcowy /sendMessage samodzielnie. Większość czynności możesz wykonać, korzystając z istniejącej metody storeAndSendResponse. Ważne jest, aby pamiętać o wybraniu odpowiedniego przedstawiciela.

Gdy wszystko będzie gotowe, wdróż ponownie aplikację i wróć do rozmowy w systemie CRM. Twoje wiadomości będą teraz wyświetlane w historii czatu. Na urządzeniu mobilnym możesz też zobaczyć wiadomości agenta.

49aca3df6b196c50.png

Zanim przejdziesz dalej, upewnij się, że wiesz, jak działają nowe punkty końcowe. W następnym kroku dodasz własny punkt końcowy, aby opuścić rozmowę.

5. Opuszczanie rozmowy

Gdy odpowiesz mu na pytania, możesz opuścić rozmowę i pozwolić mu ponownie porozmawiać z botem. W Business Messages ta zmiana jest sygnalizowana przez zdarzenie REPRESENTATIVE_LEFT.

Przejdź do katalogu step-4, wdróż ponownie aplikację i wróć do wątku rozmowy. U dołu wątku znajduje się teraz link Zamknij i opuść rozmowę. Ten link jeszcze nie działa, ponieważ punkt końcowy leaveConversation nie jest zaimplementowany.

ef4ad8107c3fff2.png

Znajdź plik index.js. Dostępny jest komentarz do zadania TODO z prośbą o utworzenie nowego punktu końcowego leaveConversation.

step-4/routes/index.js

/* 
 * TODO: Create a '/leaveConversation' endpoint that does the following:
 * - Updates the thread to BOT_THREAD_STATE.
 * - Sends a REPRESENTATIVE_LEFT event.
 * - Sends a message to the thread informing the user that they are speaking to the echo bot again.
 * 
 * Hint: You can use the same methods that '/joinConversation' uses.
 */

Aby wdrożyć to rozwiązanie, musisz wykorzystać wszystkie informacje omówione do tej pory w ramach ćwiczeń z programowania. Ten punkt końcowy powinien:

  • Zmień wątek na BOT_THREAD_STATE.
  • Wyślij wydarzenie REPRESENTATIVE_LEFT.
  • Podczas rozmowy możesz wysłać wiadomość, aby poinformować użytkownika, że rozmawia z botem echo. Użyj metody storeAndSendResponse. Pamiętaj, że ten przedstawiciel zmienił się z powrotem na: BOT.

W ostatnim kroku wyjaśniamy stan rozmowy u użytkownika. Użytkownik widzi zdarzenie, gdy przedstawiciel opuści czat, ale nie musi wiedzieć, że ponownie rozmawia z botem echo. Wysyłanie wiadomości bezpośrednio z bota zmniejsza dezorientację użytkowników i poprawia komfort korzystania z usługi.

Skoro bot zajmuje się już sprawami, Twój pracownik obsługi klienta może dołączyć do kolejnej rozmowy. Możesz dowolnie eksperymentować z przykładowym kodem i systemem CRM. Wypróbuj różne pomysły na to, jak nawiązać współpracę z pracownikiem obsługi klienta na żywo, i zobacz, co uda Ci się wymyślić.

6. Podsumowanie

Gratulujemy ukończenia ćwiczenia z programowania dotyczącego przenoszenia agenta na żywo.

Udało Ci się utworzyć agenta, który może w całości zająć się przenoszeniem agenta na żywo. Przedstawiliśmy też jeden sposób śledzenia stanu rozmowy w Cloud Datastore.

Dzięki przenoszeniu pracowników obsługi klienta na żywo nie będziesz otrzymywać typowych próśb u bota, a bardziej złożone zapytania będą zajmować pracownicy obsługi klienta. Użytkownicy będą bardziej zadowoleni z nowej, spersonalizowanej i użytecznej funkcji, co zwiększy prawdopodobieństwo powrotu i polecania Twojej firmy znajomym.

Co dalej?

Zapoznaj się z tymi ćwiczeniami z programowania:

Więcej informacji

Dokumentacja