Kontrakt webhooku: objekt jde vybrat a odmitnuti je videt

Parametr spoustece `data` byl deklarovany jako type string a povinny, zatimco
odesilatel ho posila jako objekt a v prvni zprave hovoru ho jeste nema. Kazde
volani proto skoncilo na 400 a automatizace hodinu nedelala nic.

Za tim byly tri veci, kazda sama o sobe malicherna:

- rucne pridany parametr byl vychozi povinny, zatimco parametr odvozeny
  z ukazkoveho tela nepovinny. Dve ruzna vychozi nastaveni pro tutez vec
  v jednom formulari. Nove je nepovinny i rucne pridany: povinny znamena
  "odmitni volani" a do toho nema nikdo spadnout omylem
- objekt a seznam neslo vybrat. declarableFieldTypes nabizel jen string, number,
  boolean a date, a TriggerConfig.tsx mel jeste treti kopii toho seznamu.
  Deklarovat data jako objekt tedy neslo, i kdyz matchesType objekt umi
  a operatorsByType pro nej ma operatory
- odmitnuti nebylo nikde videt. Skoncilo jako console.warn v logu kontejneru:
  zadna udalost, zadny beh, nic na detailu automatizace

Ten treti bod je ten podstatny. Chybu v kontraktu udela ten, kdo ho psal, ale
400 dostane odesilatel - a ten s tim nic nenadela, casto je to cizi sluzba,
ktera volani neopakuje. Majitel automatizace se nedozvi nic a v portalu vypada
vsechno v poradku.

Detail automatizace proto ukazuje poslednich deset volani: cas, jestli proslo
nebo ne, a u odmitnutych duvod. Telo se schvalne neuklada, duvod uz rika, co je
spatne, a drzet payloady by znamenalo mit v pameti kopie zakaznickych dat.
Seznam je v pameti, restart ho zahodi. Incident se z toho nezaklada
a upozorneni se neposila: staci radek, implementator se ozve sam.

Vzorova automatizace ma data opravene na object a nepovinne.

Do navrhu 25 jsou zapsana rozhodnuti z diskuze: "moje tickety" jsou tickety
prirazene mne, v helpdesku ty, ktere jsem zalozil ja, a helpdeskove pozadavky
vidi lide podle teze hierarchie jako tickety. Sekce 6 popisuje tuhle zmenu.

Overeno na bezici instanci s vlastnim DATA_DIR: telo s data jako objektem
projde, prvni zprava hovoru s data null projde, telo bez callSid se dal odmita,
a vsechna tri jsou videt v seznamu poslednich volani.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
JiriUhlir
2026-09-02 10:14:48 +02:00
co-authored by Claude Opus 5
parent 72da07debe
commit e8bb4d6e54
8 changed files with 302 additions and 41 deletions
+38
View File
@@ -2,6 +2,44 @@
Nejnovejsi nahore.
## 2026-09-02 - Kontrakt webhooku: objekt jde vybrat a odmitnuti je videt
Parametr spoustece `data` byl deklarovany jako `type: string, required: true`,
zatimco odesilatel ho posila jako objekt a v prvni zprave hovoru ho jeste nema.
Kazde volani proto skoncilo na 400 a automatizace hodinu nedelala nic.
Za tim byly tri veci, kazda sama o sobe malicherna:
- **Rucne pridany parametr byl vychozi povinny**, zatimco parametr odvozeny
z ukazkoveho tela nepovinny. Dve ruzna vychozi nastaveni pro tutez vec
v jednom formulari. Nove je nepovinny i rucne pridany: povinny znamena
"odmitni volani" a do toho nema nikdo spadnout omylem.
- **Objekt a seznam neslo vybrat.** `declarableFieldTypes` nabizel jen `string`,
`number`, `boolean` a `date`, a `TriggerConfig.tsx` mel jeste treti kopii toho
seznamu. Deklarovat `data` jako objekt tedy neslo, i kdyz `matchesType` objekt
umi a `operatorsByType` pro nej ma operatory. Ted jsou v nabidce oba a klient
si vlastni kopii nedrzi.
- **Odmitnuti nebylo nikde videt.** Skoncilo jako `console.warn` v logu
kontejneru: zadna udalost, zadny beh, nic na detailu automatizace.
Ten treti bod je ten podstatny. Chybu v kontraktu udela ten, kdo ho psal, ale
**400 dostane odesilatel** - a ten s tim nic nenadela, casto je to cizi sluzba,
ktera volani neopakuje. Majitel automatizace se nedozvi nic a v portalu vypada
vsechno v poradku.
Detail automatizace proto ukazuje **poslednich deset volani**: cas, jestli
proslo nebo ne, a u odmitnutych duvod. Telo se schvalne neuklada, duvod uz rika,
co je spatne, a drzet payloady by znamenalo mit v pameti kopie zakaznickych dat.
Seznam je v pameti, restart ho zahodi - je to diagnostika posledni hodiny, ne
historie. Incident se z toho nezaklada a upozorneni se neposila: staci radek,
protoze implementator se ozve sam a tady je videt co.
Vzorova automatizace ma `data` opravene na `type: 'object', required: false`.
Overeno na bezici instanci s vlastnim DATA_DIR: telo s `data` jako objektem
projde, prvni zprava hovoru s `data: null` projde, telo bez `callSid` se dal
odmita - a vsechna tri jsou videt v seznamu poslednich volani.
## 2026-09-02 - Navrh: pristupny portal a viditelnost
Novy [25-navrh-pristupny-portal.md](25-navrh-pristupny-portal.md). Je to navrh,