Weryfikacja endpointu webhooka WhatsApp
Przed dostarczeniem dowolnego zdarzenia Meta wywołuje Twój endpoint żądaniem GET zawierającym hub.mode, hub.verify_token i hub.challenge. Twój endpoint musi porównać token i zwrócić wyzwanie jako surowe body. Każda inna odpowiedź sprawi, że dostarczanie się nie rozpocznie.
Wartość, którą trzeba odesłać jako body odpowiedzi.
Wartość hub.mode w żądaniu weryfikacyjnym.
Jedyny schemat, który Meta zweryfikuje. HTTP zostanie odrzucony przed wywołaniem.
Co dokładnie wysyła Meta?
Żądanie GET do Twojego URL-a z trzema parametrami zapytania. hub.mode ma wartość subscribe. hub.verify_token to token skonfigurowany podczas ustawiania miejsca docelowego. hub.challenge to wartość wygenerowana przez Metę na potrzeby tej próby.
Twój endpoint powinien porównać hub.verify_token z wybranym przez Ciebie tokenem. Jeśli wartości się zgadzają, odpowiedź powinna mieć kod 200, a jej całe body powinno zawierać hub.challenge. Nie opakowuj go w JSON, nie dodawaj cudzysłowów ani końcowego znaku nowej linii, który niektóre frameworki dodają domyślnie.
Jeśli token się nie zgadza, zwróć 403. Na tym polega cały protokół, celowo ograniczony do minimum.
Dlaczego błędna odpowiedź zawodzi po cichu?
Ponieważ nieudana weryfikacja nie jest błędem w Twoim systemie, lecz brakiem działania po stronie Mety.
Gdy wyzwanie nie zostanie poprawnie odesłane, Meta po prostu nie rozpoczyna dostarczania do tego miejsca docelowego. Twój serwer zwraca 200 na weryfikację, logi pokazują odebrane żądanie, a żaden panel nie zgłasza problemu. Jedynym objawem jest brak wiadomości, co większość osób diagnozuje jako problem z Coexistence, a nie z uzgadnianiem połączenia.
Dlatego warto przeprowadzić weryfikację przed wywołaniem. Sprawdzamy, czy URL używa HTTPS i czy podano token weryfikacyjny, zanim wyślemy żądanie do Graph. Dzięki temu nieprawidłowy adres kończy się natychmiast, zamiast wyglądać na połączony.
Co jeszcze może zablokować weryfikację?
Trzy rzeczy, które nie mają nic wspólnego z kodem.
Uwierzytelnianie przed endpointem. Bramka, warstwa basic auth lub lista dozwolonych adresów IP odrzuci żądanie Mety, a Meta nie ma danych uwierzytelniających, które mogłaby przedstawić. Trasa weryfikacyjna musi być dostępna bez nich.
Przekierowanie. Meta wywołuje podany przez Ciebie URL, a przekierowanie 301 do kanonicznego hosta nie jest obsługiwane w sposób, który kończy uzgadnianie. Podaj końcowy URL.
Oraz framework, który serializuje odpowiedź. Zwrócenie ciągu znaków z procedury obsługi, która opakowuje wszystko w JSON, tworzy body z cudzysłowami wokół wyzwania, więc wartość się nie zgadza.
Typowe błędy
- Zwracanie JSON. Body musi zawierać surową wartość wyzwania i nic więcej.
- Umieszczenie endpointu za uwierzytelnianiem. Meta nie ma danych dostępowych i żądanie zostanie odrzucone.
- Podanie Mecie URL-a, który przekierowuje. Użyj końcowego adresu.
EasyCoexistence sprawdza, czy miejsce docelowe używa HTTPS i ma token weryfikacyjny, zanim wywoła Metę, a nieudane uzgadnianie zapisuje na osi czasu połączenia zamiast usuwać miejsce docelowe.
Najczęściej zadawane pytania
Jakiego tokenu użyć?
Dowolnego wybranego przez Ciebie ciągu znaków. Dzięki niemu Twój endpoint rozpozna żądanie Mety i odróżni je od żądań innych osób, które poznają URL.
Jak często odbywa się weryfikacja?
Podczas konfiguracji oraz ponownie po każdym ustawieniu miejsca docelowego. Działający endpoint nie jest weryfikowany przy każdym zdarzeniu.
Czy mogę przetestować to samodzielnie?
Tak. Wywołaj własny endpoint z trzema parametrami i sprawdź, czy body wraca dokładnie jako wartość wyzwania.
Co się stanie, jeśli mój serwer nie działał podczas weryfikacji?
Uzgadnianie zakończy się niepowodzeniem, a miejsce docelowe nie zostanie aktywowane. Ponowne zapisanie uruchomi je jeszcze raz.
Czytaj dalej
Gotowy, aby zacząć?
Skonfiguruj WhatsApp Coexistence w kilka minut, nie miesięcy. Aplikacja nadal działa na telefonie.
Rozpocznij bezpłatny okres próbnyZweryfikowano w