close
HerokuPHP

Jak zbudować chatbota dla Messengera w PHP #3 – Zaawansowane wiadomości

kurs-chatbot-3

W tej części serii “Jak zbudować chatbota dla Messengera w PHP” dodamy kilka bardziej zaawansowanych odpowiedzi. Pobierzemy podstawowe informacje o użytkowniku, wyświetlimy pogodę i dodamy załączniki. Zaczynajmy.

Dostosowanie struktury webhook.php

Zanim przejdziemy do dodawania bardziej zaawansowanych odpowiedzi, musimy zmienić jedną rzecz. Obecną konstrukcję kodu możemy podzielić na 3 części:

  1. Odebranie wiadomości
  2. Przygotowanie odpowiedzi
  3. Przesłanie odpowiedzi

Teraz ta struktura działa w porządku, bo generujemy tylko tekstowe odpowiedzi. Problem pojawi się przy wysyłaniu np. zdjęć lub przycisków, bo konstrukcja zmiennej $jsonData będzie się znacznie różniła. Rozwiążemy to tworząc tą zmienną wewnątrz utworzonych wcześniej if i else.

Jeśli nie wiesz dokładnie, co masz zmienić, to pobierz poprawioną wersję i przejdź dalej.

Pobranie informacji o użytkowniku

Facebook umożliwia pobranie podstawowych danych o użytkowniku, który wysyła wiadomość do bota. Możemy pobrać:

  • imię
  • nazwisko
  • zdjęcie profilowe
  • język
  • strefę czasową
  • płeć

W tym przykładzie użyjemy tylko imienia, ale reszta jest pobierana na tej samej zasadzie. Chcemy wyświetlić imię w przywitaniu, więc zaraz po $message_to_reply = ”; dopisujemy:

W zmiennej $user_info_url zapisujemy URL do przesłania żądania. Obowiązkowo musimy tutaj podać id usera ($sender), wybrane informacje (fields) i access_token, który pobieramy z utworzonej w poprzedniej części kursu zmiennej.

Następnie przesyłamy żądanie i zapisujemy wynik w zmiennej $result. W $user dekodujemy wynik z formatu JSON. Dopiszmy teraz imię użytkownika do przywitania:

Wykonujemy standardową aktualizacje:

Możemy teraz przetestować chatbota:

powitanie imie

Wyświetlanie imienia działa poprawnie. Jeśli chciałbyś pobrać inną informację (np. nazwisko), to wystarczy użyć $user->nazwa_parametru ($user->last_name).

Wyświetlenie pogody

Dodamy teraz możliwość pobrania aktualnej pogody dla dowolnego miasta. Pomoże nam w tym API OpenWeatherMap. Musimy zacząć od utworzenia darmowego konta by uzyskać klucz weryfikacyjny. Przejdź na tę stronę i zarejestruj się:

weather rejestracja

Po rejestracji  zostaniesz przeniesiony do profilu. Wybierz zakładkę API Keys i skopiuj wygenerowany klucz:

api keys

Wróćmy teraz do webhook.php. Pomiędzy if a else dodajemy kolejny warunek:

Kod zostanie wykonany jeśli w wiadomości użytkownika znajdzie się “pogoda w” lub “prognoza pogody w”. Jeśli ten warunek jest spełniony, to wyciągamy nazwę miasta z wiadomości i zapisujemy w zmiennej $city.

Następnie przesyłamy żądanie do OpenWeatherMap. Pamiętaj, żeby dodać tutaj skopiowany wcześniej appid. Następnie sprawdzamy czy żądanie zakończyło się sukcesem (200). Wtedy prognozę zapisujemy w zmiennej $weather. Teraz możemy z $weather wyciągnąć kolejno temperaturę, zachmurzenie i prędkość wiatru. Tworzymy komunikat i zapisujemy w wiadomości.

Jeśli żądanie się nie powiodło, to wyświetlamy komunikat o błędzie.

Zaktualizujmy aplikację:

Testujemy chatbota:

pogoda

Możesz zauważyć, że pogoda wyświetli się również dla odmiany nazwy miasta np. Kraków i Krakowie.

Przesyłanie zdjęć

Kolejną rzeczą, którą umożliwia nam Facebook, jest przesyłanie do użytkownika zdjęć. Dodajmy nowy elseif pod pogodą:

Konstrukcja message znacznie różni się od poprzedniej. Dodajemy tutaj załącznik (attachment). Typ ustawiamy na image. Wewnątrz url podajemy link do zdjęcia.

Wykonujemy aktualizację Heroku:

Wyślijmy teraz wiadomość do chatbota:

zdjęcie

Wysyłanie plików

Wysyłanie plików działa na podobnej zasadzie jak zdjęcia. Dodajmy kolejny warunek:

Typ załącznika (type) musimy zmienić na file. W url standardowo podajemy adres załącznika. Wykonajmy aktualizację:

I wykonajmy test:

regulamin

Przyciski

API Messengera umożliwia dodawanie przycisków do wiadomości. Dodajmy kolejny elseif:

Ten kod wygeneruje 2 buttony – Najnowszy wpis i Strona główna, które przenoszą użytkownika do artykułu i strony głównej. Kolejne przyciski możesz dodawać wpisując:

Wykonajmy aktualizację:

I przetestujmy bota:

opcje

 

To wszystko w tej części kursu. Masz pytania lub uwagi? Napisz w komentarzu.

Pobierz gotową paczkę.

Tags : botchatbotmessenger
  • Tomek2525

    Hej! Bot działa tylko gdy to ja do niego napiszę, jeżeli pisze do niego ktokolwiek inny, to nie odpisuje. Aplikacja jest publiczna. Co z tym zrobić?

  • Pytanie można połączyć jeszcze yt albo spotify?

  • Kruku

    Cześć, super tutorial, udało mi się zrobić dwie pierwsze części, tutaj natomiast mam problem taki, że bo w odpowiedzi nie wyświetla imienia rozmówcy. Czy może to być błąd w tej linijce:
    user_info_url = “https://graph.facebook.com/v2.6/”.$sender.”?
    bo teraz jest już chyba wersja 2.8, ale sama zmiana cyferki nie pomogła. Co to może być innego?
    Pozdrawiam