Dokumentacja API

Uwagi

Uwagi o stronie placówki i potrzeby wobec API trafiają prosto do zespołu platformy — jako zgłoszenia, z których powstaje plan rozwoju. Placówka zgłasza je też z panelu (Zgłoś uwagę).

POST /api/v1/feedback

Jeden request z nagłówkiem Bearer. Wymagana jest tylko treść (do 4000 znaków); resztę pól wypełniaj, kiedy je znasz — przyspieszają naprawę.

curl
curl -X POST "https://app.pozyskajpacjenta.pl/api/v1/feedback" \
  -H "Authorization: Bearer pp_live_TWOJ_KLUCZ" \
  -H "Content-Type: application/json" \
  -d '{
    "source": "fabryka",
    "kind": "potrzeba_api",
    "category": "backend",
    "message": "GET /site: brak sposobu na zapisanie wspólnej przerwy obiadowej w godzinach otwarcia.",
    "pageUrl": "https://klinika.example/kontakt",
    "viewport": "1440x900",
    "meta": { "job": "fj_…", "agent": "frontend", "task": "T-12" }
  }'
201 Created
{ "id": "fb_3kq9x0v2m1c8r7tz", "status": "new" }
  • 400 — nic nie zapisano; invalid_json (treść nie jest JSON-em) albo invalid_body (pole ma zły format — nazwa pola jest w error),
  • 401 — brak lub zły klucz,
  • 429 — limit 120 zapytań/min (Autoryzacja) albo 20 uwag na godzinę dla placówki, osobno dla każdego źródła (feedback_rate_limited, czas do ponowienia w nagłówku Retry-After).

Rodzaj, kategoria i źródło

kindKiedy
uwagaUwaga — treść albo wygląd strony (literówka, zdjęcie, układ na telefonie)
potrzeba_apiPotrzeba API — czego frontend albo agent potrzebuje od API (brakujące pole, filtr, endpoint)
bladBłąd — coś nie działa (błąd odpowiedzi, formularz się nie wysyła)

category: tresc (Treść), wyglad (Wygląd), funkcja (Funkcja), backend (Zaplecze), inne (Inne). Domyślnie uwaga i inne.

source: site — zaplecze frontendu placówki (domyślnie), fabryka — agent budujący frontend (w meta podaj job, agent i task), client_error — raport błędu z przeglądarki przekazany przez Twoje zaplecze.

Bez danych pacjentów

Uwaga dotyczy strony albo platformy — nigdy pacjenta. Zanim cokolwiek zapiszemy, z treści, selektora, adresu strony i wartości meta usuwamy adresy e-mail, numery telefonów (także zapisane w grupach, np. 600 10 02 00) i numery w kształcie PESEL (11 cyfr z poprawną sumą kontrolną). Z adresów znika część po ? i #, a tokeny w ścieżce (np. link pacjenta /wizyta/…) zastępujemy znacznikiem [token]. W miejscu usuniętego fragmentu zostaje znacznik, np. [telefon usunięty], a odpowiedź mówi, co usunięto:

201 Created
{ "id": "fb_3kq9x0v2m1c8r7tz", "status": "new", "redacted": ["email", "phone"] }

Z adresu strony zostaje tylko domena i ścieżka — parametry zapytania i #fragment odrzucamy, bo to w nich zwykle podróżują dane z formularzy. Pole reporter (kto zgłasza) zostaje u nas i nie trafia do zgłoszenia dla zespołu.

Pola

PoleTypWymaganeOpis
messagestringtakTreść uwagi.
kind"uwaga" | "potrzeba_api" | "blad"—uwaga — treść lub wygląd; potrzeba_api — czego frontend lub agent potrzebuje od API; blad — coś nie działa.
category"tresc" | "wyglad" | "funkcja" | "backend" | "inne"—
source"site" | "fabryka" | "client_error"—site — frontend placówki; fabryka — agent fabryki H2M; client_error — raport błędu z przeglądarki.
pageUrlstring—Strona, której dotyczy uwaga (adres bezwzględny albo ścieżka od /).
viewportstring—
selectorstring—Selektor CSS elementu, którego dotyczy uwaga.
reporterstring—Kto zgłasza (np. imię osoby z personelu) — nie trafia do zgłoszenia dla zespołu.
metaobject—Płaski obiekt (do 30 kluczy, do 4000 znaków JSON): wartości tekst (do 500 znaków), liczba, true/false albo null. Np. userAgent, appVersion, a od fabryki job, agent, task.

Z SDK

sendFeedback w SDK wysyła ten sam request i zwraca { id, status, redacted? }:

TypeScript
await client.sendFeedback({
  source: "site",
  kind: "uwaga",
  category: "wyglad",
  message: "Na telefonie przycisk rezerwacji zasłania stopkę.",
  pageUrl: "/zabiegi/implanty",
  viewport: "390x844",
  selector: "[data-cta=sticky-booking]",
});

Co dzieje się dalej

Co kwadrans nowe uwagi trafiają do zespołu platformy jako zgłoszenia z oznaczeniem placówki, źródła i rodzaju. Ta sama uwaga o tej samej stronie tej samej placówki nie tworzy drugiego zgłoszenia — dopisujemy do istniejącego, że pojawiła się ponownie.

Czytaj dalej: Webhooki →