This post is also available in:
Níže naleznete soupis všech dostupných základních funkcí a také pomocných funkcí (tzv. helpers), které lze použít při konstrukci těla požadavku v definici Webhook uzlu ve Flow kampaních. Jako šablonovací jazyk se používá Handlebars.js.
K otestování správné syntaxe můžete použít přímo testovací rozhraní v definici Webhooku v Sambě, případně demo od Handlebars.js.
Základní funkce
if
Slouží pro vytváření podmínek. Pokud argument vrátí false
, undefined
, null
, ""
, 0
, nebo []
, tak se blok nevykreslí.
Příklad
{{# if true}}
hello
{{/ if}}
{{# if false}}
bye
{{/ if}}
se vyhodnotí jako
hello
unless
Používá se jako opak k funkci if
– blok je vykreslen jen pokud není podmínka splněna.
Příklad 1
{{# unless true}}
hello
{{/ unless}}
{{# unless false}}
bye
{{/ unless}}
se vyhodnotí jako
bye
Příklad 2
{{# each customers}}
{{# unless @first }}
{{/ unless}}
{
...
}
{{/ each}}
vloží znak nového řádku před JSON s každým zákazníkem kromě prvního.
Příklad 3
{{# each customers}}
{
...
}
{{# unless @last }},{{/ unless}}
{{/ each}}
vloží čárku za JSON s každým zákazníkem kromě posledního.
each
Používá se pro iteraci nad seznamem.
Příklad 1
{{# each customers}}
...
{{/ each}}
iteruje nad seznamem zákazníků, kteří vstoupili do Webhook uzlu. Jedná se o základní konstrukt pro tvorbu requestu ve Webhook uzlu.
Příklad 2
"parameters": [ {{~# each parameters }} { "name": {{ json-string @key }}, "value": {{ json-string . }} }{{# unless @last }},{{/ unless }}{{/ each }} ]
výpíše do pole objektů všechny vlastní zákaznické parametry.
with
Pomocí tohoto helperu lze vyhodnotit část bloku, jen pokud existuje daná proměnná a zároveň změnit vyhodnocovací kontext. Pro zpracování případu, kdy proměnná neexistuje, lze použít sekci {{else}}
.
Příklad 1
...
"lastname": "{{ lastName }}"{{# with email }},
"email": "{{ . }}"{{/ with }},
"registration": {{ registeredOn }},
...
Zde je vložena emailová adresa do JSONu jen v případě, že je u zákazníka uvedena.
Příklad 2
...
"lastname": "{{ lastName }}",{{# with email }}
"email": "{{ . }}" {{else}}
"email": "unknown" {{/ with }},
"registration": {{ registeredOn }},
...
V tomto případě se při neexistující emailové adrese vloží vždy alespoň hodnota „unknown“.
Příklad 3
...
"lastname": "{{ lastName }}",{{# with parameters.bonus_points }}
"points": "{{ . }}" {{else}}
"points": "0" {{/ with }},
"registration": {{ registeredOn }},
...
V tomto případě se při neexistujícím vlastním parametru bonus_points vloží vždy alespoň hodnota 0.
lookup
Pomocí této funkce se lze zanořit do cesty vybraného parametru. Užitečné je to zejména pro parametry, jejichž názvy je nutné escapovat a nelze tak užít standardní tečkovou notaci.
Příklad
...
"bonus_points": "{{ lookup parameters "Bonus body" }}",
...
Takto lze funkci použít pro vložení vlastního zákaznického parametru jménem Bonus body do těla volání API.
and, or
Základní logické operátory.
Příklad
{{ and (is-null a) (is-null b) (is-null c) }}
not
Slouží k negaci pravdivostní hodnoty.
Příklad
{{ not (is-null a) }}
eq, neq, gt, gte, lt, lte
Slouží k porovnávání hodnot.
Příklad
{{ eq (is-null a) (is-null b) }}
tečková notace
Slouží k zanoření se do vybrané cesty atributu, jehož název není v rozporu s podporovaným formátem a není třeba ho escapovat. Pro netradiční názvy parametrů je třeba použít funkci lookup.
Příklad
Dohledání parametru Bonus_body v objektu parameters.
...
"bonus_points": "{{ parameters.Bonus_body }}",
...
vlnovka ~
Použití vlnovky uvnitř handlebaru odstraní všechny bílé znaky před, resp. za daným handlebarem.
Příklad 1
{{~ let "today" "2023-01-05" }}
odstraní všechny bílé znaky před tímto handlebarem.
Příklad 2
{{~ let "today" "2023-01-05" ~}}
odstraní všechny bílé znaky před i za tímto handlebarem.
Pomocné funkce
let
Pomocí této funkce lze definovat vlastní proměnné.
Příklad
{{ let "today" "2023-01-05" }}
Takto lze na začátku těla requestu definovat proměnnou „today“, kterou lze pak použít jako handlebar:
"today_is": "{{today}}"
is-null
Funkce vrací true nebo false, typicky se používá při tvorbě podmínek.
Příklad
...
"childrenNumber": {{#if (is-null childrenNumber)}}"no children"{{/if}}
...
Tímto způsobem lze u všech zákazníků, kteří mají v poli „childrenNumber“ definováno hodnotu null, uvést v API volání vybraný náhradní text.
is-defined
Funkce vrací true nebo false, typicky se používá při tvorbě podmínek. Oproti funkci is-null kontroluje existenci definice daného parametru a nikoli jen, zda je hodnota přímo null.
Příklad
...
"childrenNumber": {{#if (is-defined childrenNumber)}}"no children"{{/if}}
...
Tímto způsobem lze u všech zákazníků, kteří nemají definováno pole „childrenNumber“, uvést v API volání vybraný náhradní text.
is-undefined
Funkce vrací true nebo false, typicky se používá při tvorbě podmínek. Její výstup je negací k výstupu funkce is-defined
.
Příklad
Mějme následující JSON objekt
{"a":0,"b":null}
Rozdíly mezi funkcemi is-null
, is-defined
a is-undefined
názorně vysvětluje následující tabulka.
Funkce | Argument „a“ | Argument „b“ | Argument „c“ |
is-null | false | true | nedefinováno |
is-defined | true | true | false |
is-undefined | false | false | true |
to-upper
Změní všechna písmena na velká.
Příklad
{{to-upper "hello"}}
vrací
"HELLO"
to-lower
Změní všechna písmena na malá.
Příklad
{{to-lower "HELLO"}}
vrací
"hello"
capitalise/capitalize
Změní první písmeno každého slova na velké.
Příklad
{{capitalise "hello world"}}
vrací
"Hello World"
md5
Vytváří hash pomocí algoritmu MD5.
Příklad
{{md5 "hello world"}}
vrací
5eb63bbbe01eeed093cb22bb8f5acdc3
sha256
Vytváří hash pomocí algoritmu SHA-256.
Příklad
{{sha256 "hello world" encoding="base64url"}}
vrací
uU0nuZNNPgilLlLX2n2r-sSE7-N6U4DukIj3rOLvzek=
base64
Zakódování pomocí algoritmu base64.
Příklad
{{base64 "Dear user, how do you enjoy templating?"}}
vrací
RGVhciB1c2VyLCBob3cgZG8geW91IGVuam95IHRlbXBsYXRpbmc/
base64url
Zakódování pomocí algoritmu base64url.
Příklad
{{base64url "Dear user, how do you enjoy templating?"}}
vrací
RGVhciB1c2VyLCBob3cgZG8geW91IGVuam95IHRlbXBsYXRpbmc_
date-format
Převádí timestamp (ms) na zvolený formát data ve formátu YYYY-MM-ddTHH:mm:ss.sTZD (více informací).
Příklad
...
"registrationDate": {{ json-string (date-format registeredOn format="YYYY-MM-dd") }},
"registrationTime": {{ json-string (date-format registeredOn format="HH:mm:ss") }},
"registrationDateTime": {{ json-string (date-format registeredOn format="YYYY-MM-dd HH:mm:ss") }},
...
date-parse
Převádí datum ve formátu YYYY-MM-ddTHH:mm:ss.sTZD (více informací) na timestamp (ms).
Příklad
"registrationDate_timestamp": {{ json-string (date-parse registeredOn format="YYYY-MM-dd'T'HH:mm:ss") }}
silent
Tato funkce způsobí ignorování obsahu uvnitř bloku. Hodí se pro komentování během testování.
Příklad
{{#silent}}
this will be never rendered
{{/silent}}
json-string
Interpretuje text jako JSON string a podle toho jej zakóduje. To se může hodit v případě, kdy např. proměnná může obsahovat uvozovky.
Příklad
"customer_id": {{ json-string id }}
je bezpečnější variantou tohoto zápisu
"customer_id": "{{ id }}"
regexp
Slouží k vytváření podmínek pomocí regulárních výrazů.
filter
Hodí se např. pro vypsání všech zákaznických parametrů splňujících určitou podmínku.
Příklad 1
"parameters": [
{{~# each (filter (not is-date-param) parameters) }}
{
"name": {{ json-string @key }},
"value": {{ json-string . }}
}{{# unless @last }},{{/ unless }}
{{~/ each }}
]
Příklad 2
Pokud je potřeba filtrovat například všechny zákazníky podle určité vlastnosti, lze využít speciální _
funkci. Například pro vytvoření výstupu, kde na každém řádku bude zákaznické ID a za dvojtečkou jeho „LOYALTY_CARD_NO“, přičemž ve výsledném JSON objektu budou jen ti zákaznici, pro které je „LOYALTY_CARD_NO“ definováno, lze použít následující konstrukci:
{
{{~# each (filter (is-defined _.parameters.LOYALTY_CARD_NO) customers) }}
"{{ id }}": "{{ parameters.LOYALTY_CARD_NO }}"{{# unless @last }},{{/ unless }}
{{~/ each }}
}
now
Vrací aktuální timestamp v milisekundách. Hodnota je generována v okamžiku vytvoření batche, tj. v případě více výskytů u jednotlivých zákazníků bude mít stejnou hodnotu v rámci 1 dávky.
Pomocí této proměnné lze z timestamp a hesla vytvořit hashovaný podpis pomocí helperu sha256
.
Příklad
{{ now }}
{{ date-format (now) format="YYYY-MM-dd HH:mm:ss" timezone="Europe/Prague" }}
uuid
Vrátí identifikátor UUID pro libovolný výskyt dané proměnné, tj. lze jej použít k identifikaci celé dávky (pokud je použit pouze jednou v záhlaví) nebo pro jednotlivé zákazníky (pokud je vložen do těla požadavku). Pokud je daná dávka z nějakého důvodu zpracovávána v systému Samba znovu, není zaručeno, že identifikátory UUID budou stejné. Pokud potřebujete identifikátor GUID společnosti Microsoft, můžete použít pomocnou funkci to-upper
.
Verze
- version=“3″
- UUID je s použitím zvoleného řetězce vždy stejné (tj. není náhodné)
- version=“4″
- výchozí volba
- UUID je vždy náhodné
Příklad
{{ uuid }}
{{ uuid customers.[0].email version="3" }}