Zakresy uprawnień
Cztery zakresy, sprawdzane na bieżąco przy każdym żądaniu. Które endpointy wymagają których zakresów i dlaczego oznaczenie jako przeczytane jest wysyłką.
Zakresy są przypisane do poświadczenia — do klucza API lub do zgody OAuth. Są cztery.
| Zakres | Uprawnia do |
|---|---|
whatsapp.read | GET /connections, GET /connections/{id}, GET /account, GET /messages |
whatsapp.send | POST /messages, POST /messages/read |
whatsapp.events | GET /webhook, PUT /webhook, POST /webhook/rotate oraz w ogóle odbierania dostaw |
whatsapp.manage | POST /connections, POST /connections/{id}/pairing-code, POST /connections/{id}/restart, POST /connections/{id}/logout, DELETE /connections/{id} |
Oznaczenie jako przeczytane to wysyłka, nie odczyt
POST /messages/read wymaga zakresu whatsapp.send. Wygląda jak operacja odczytu, ale
przesyła potwierdzenie z Państwa numeru na urządzenie klienta — jest więc
operacją wychodzącą. Zaletą jest to, że każdy klient, który może już wysyłać,
może też oznaczać wiadomości jako przeczytane: bez nowego zakresu i bez ponownej zgody.
Zakresy są sprawdzane na bieżąco
Zakresy oraz lista dostępnych połączeń są ustalane przy każdym żądaniu. Nic nie jest zapisywane w tokenie i nic nie trzeba odświeżać. Wynikają z tego dwie rzeczy:
- Odwołanie klucza lub zawężenie jego zakresów działa już przy następnym wywołaniu.
- Świeżo utworzone połączenie jest widoczne przy następnym wywołaniu. Nie ma opóźnienia propagacji i nic nie trzeba wystawiać ponownie.
Niewystarczający zakres
Poświadczenie, któremu brakuje zakresu wymaganego przez endpoint, otrzymuje
403 insufficient_scope. Proszę opierać się na kodzie, a nie na statusie — 403 zwraca
również odmowa wynikająca z listy dozwolonych adresów IP (ip_not_allowed), a oba przypadki wymagają
przeciwnych poprawek: w jednym trzeba zmienić zakresy klucza, w drugim dodać adres.
Zob. Błędy i idempotentność.
Proszę prosić o mniej
Zakres, którego Państwo nie nadadzą, to ten, którego nie da się nadużyć, jeśli klucz wycieknie.
Zadanie raportowe tylko do odczytu potrzebuje whatsapp.read i niczego więcej; moduł
wysyłający powiadomienia potrzebuje whatsapp.send; tylko proces provisioningu wymaga
whatsapp.manage, który może usuwać połączenia.