Przejdź do treści

Powiadomienia push

allee wysyła POST z JSON na Twój adres https, gdy coś się zmieni: zamówienie, oferta, wiadomość, zwrot, reklamacja, koniec wsadu lub raportu, zdarzenie bezpieczeństwa klucza. Wzór: Amazon SP-API Notifications, podpis jak Stripe.

1. Destynacja

Twój serwer musi odpowiedzieć na wyzwanie DESTINATION_VERIFICATION: 2xx z treścią {"challenge": "<payload.challenge>"} w 5 s. W odpowiedzi dostaniesz secret — tylko raz.

curl -sS -X POST "${ALLEE_API_URL:-https://api.allee.pl}/allee/notifications/destinations" \
  -H "Authorization: Bearer $ALLEE_API_KEY" \
  -H "Accept: application/vnd.allegro.public.v1+json" \
  -H "Content-Type: application/vnd.allegro.public.v1+json" \
  --data-binary @- \
  -w '\nHTTP %{http_code}\n' <<'JSON'
{
  "name": "Serwer sklepu",
  "url": "https://sklep.example.com/allee/webhook"
}
JSON

2. Subskrypcja

curl -sS -X POST "${ALLEE_API_URL:-https://api.allee.pl}/allee/notifications/subscriptions/ORDER_CHANGE" \
  -H "Authorization: Bearer $ALLEE_API_KEY" \
  -H "Accept: application/vnd.allegro.public.v1+json" \
  -H "Content-Type: application/vnd.allegro.public.v1+json" \
  --data-binary @- \
  -w '\nHTTP %{http_code}\n' <<'JSON'
{
  "destinationId": "b24ba1c2-f3d2-4872-8c7a-9df3c560f76d"
}
JSON

Sprawdź odbiór: POST /allee/notifications/destinations/{destinationId}/test.

3. Odbiór i podpis

Nagłówki każdego powiadomienia:

Allee-Signature: t=1794205145,v1=5257a869e7ecebeda32affa62cdca3fa51cad7e77a0e56ff536d0ce8e108d8bd
Allee-Notification-Id: 660f7167-ff79-4bb4-92e7-1d90b6189d83
Allee-Notification-Type: ORDER_CHANGE
Allee-Delivery-Attempt: 1

v1 = HEX(HMAC-SHA256(secret, t + "." + surowa_treść)). Sprawdzaj podpis na surowych bajtach treści (przed parsowaniem JSON), odrzucaj podpisy starsze niż 300 s i duplikaty notificationId. Po rotacji sekretu nagłówek ma dwa v1 — przyjmij, gdy pasuje którykolwiek. Kod poniżej przeszedł test na prawdziwym powiadomieniu (i odrzucił zmienioną treść) w każdym języku:

#!/usr/bin/env bash
# Weryfikacja podpisu powiadomienia allee w powłoce (openssl) — do testów ręcznych; w produkcji użyj kodu swojej aplikacji.
naglowek="$ALLEE_WEBHOOK_PODPIS"          # wartość nagłówka Allee-Signature
t=$(printf '%s' "$naglowek" | tr ',' '\n' | sed -n 's/^ *t=//p')
oczekiwany=$( { printf '%s.' "$t"; cat "$ALLEE_WEBHOOK_PLIK"; } | openssl dgst -sha256 -hmac "$ALLEE_WEBHOOK_SECRET" | sed 's/^.*= //')
teraz=$(date +%s)
if [ $(( teraz - t )) -le 300 ] && [ $(( t - teraz )) -le 300 ] && printf '%s' "$naglowek" | tr ',' '\n' | sed 's/^ *//' | grep -qx "v1=$oczekiwany"; then
  echo OK
else
  echo ODRZUCONE
fi

Ponowienia

Odpowiedz 2xx w 5 s, a pracę wykonaj w tle. Brak 2xx → ponowienia wykładnicze (30 s, 1 min, 2 min, 5 min … do 24 h), potem destynacja jest wyłączana i dostajesz powiadomienie w panelu. Historia: GET /allee/notifications/deliveries.

Typy

TypTreść (payload)
ORDER_CHANGEORDER_CHANGE — zmiana zamówienia.
OFFER_STATUS_CHANGEOFFER_STATUS_CHANGE — aktywacja, zakończenie.
OFFER_ISSUES_CHANGEOFFER_ISSUES_CHANGE — nowe problemy oferty.
MESSAGE_RECEIVEDMESSAGE_RECEIVED — nowa wiadomość kupującego (bez treści — pobierz GET /messaging/messages/{id}).
RETURN_CHANGERETURN_CHANGE — zwrot.
ISSUE_CHANGEISSUE_CHANGE — reklamacja lub dyskusja.
FEED_PROCESSING_FINISHEDFEED_PROCESSING_FINISHED — wsad przetworzony.
REPORT_PROCESSING_FINISHEDREPORT_PROCESSING_FINISHED — raport gotowy.
API_KEY_SECURITY_EVENTAPI_KEY_SECURITY_EVENT — zdarzenie bezpieczeństwa klucza lub aplikacji.
SELLER_COMPLIANCE_CHANGEDSELLER_COMPLIANCE_CHANGED — zmienił się stan zgodności (status, braki, oświadczenia albo blokada). Szczegóły: GET /allee/sellers/compliance. Bez danych osobowych.
OFFER_NOTICE_RECEIVEDOFFER_NOTICE_RECEIVED — nowe zgłoszenie nielegalnej treści dotyczące oferty lub sklepu. Szczegóły: GET /allee/notices.
OFFER_RESTRICTEDOFFER_RESTRICTED — decyzja allee wobec oferty lub konta. Uzasadnienie: GET /allee/decisions/{id}.
TEST_NOTIFICATIONTEST_NOTIFICATION — wysyłane przez …/test.
DESTINATION_VERIFICATIONDESTINATION_VERIFICATION — weryfikacja adresu przy zakładaniu destynacji.