Zmienne i szablony
Używaj danych ze zdarzenia i z wcześniejszych kroków w tytułach, wiadomościach i żądaniach
Ostatnio zaktualizowano
Za pomocą zmiennych tworzysz teksty, które w każdym przypadku wyglądają inaczej. Zmienną piszesz w nawiasach klamrowych, a Tillor wstawia prawdziwą wartość, gdy tylko automatyzacja działa.
Przykład tytułu zadania:
Controleer {occupation.terrain.name}Jeśli zajęcie kończy się na terenie 12, zadanie nazywa się Controleer 12.
Wstawianie zmiennej
Nad każdym polem tekstowym, w którym działają zmienne, jest przycisk Zmienna. Kliknij go, a zobaczysz listę wszystkich dostępnych danych, pogrupowanych według rekordu. Wpisz, aby wyszukać (Szukaj zmiennych), i kliknij wiersz. Tillor wstawia zmienną w miejscu kursora.
Zmienną możesz też po prostu wpisać samodzielnie. Pod polem szary blok pokazuje, jak tekst wygląda z przykładowymi danymi, więc od razu widzisz, czy się zgadza.
Zmienne działają w polach tekstowych, takich jak tytuły, opisy, podzadania, wiadomości, ID klienta, faktury lub innego rekordu, ścieżka lub URL żądania API, treść, ładunek webhooka, nazwa zdarzenia webhooka i wartości nagłówków. Przy dwóch ostatnich brakuje przycisku Zmienna, ale zmienna wpisana samodzielnie jest uzupełniana. Tillor nie sprawdza tych dwóch pól pod kątem błędów i nie pokazuje przy nich podglądu.
W polach, w których wybierasz dane do porównania, zmienną piszesz bez nawiasów klamrowych. Dotyczy to Tylko gdy, Jeśli / w przeciwnym razie i Aż przy Czekaj, aż (na przykład invoice.status), pola Pole w Rozgałęzienie oraz Data w Opóźnienie.
Jakie są zmienne
| Zmienna | Dostępna | Zawartość |
|---|---|---|
{occupation.…}, {invoice.…}, {task.…}, {reservation.…} i inne | Po zdarzeniu | Pola rekordu, którego dotyczy zdarzenie. Nazwa rekordu jest też początkiem zmiennej |
{occupation.terrain.name} | Po zdarzeniu | Pola rekordów, do których odwołuje się rekord, takich jak klient lub teren. Działa to na jeden poziom w głąb |
{triggeredBy.name}, {triggeredBy.id} | Zawsze | Kolega, który wywołał zdarzenie. Puste, jeśli zrobił to system |
{invoice.…} | Przy Faktura przeterminowana | Pola przeterminowanej faktury i klienta |
{reservation.…}, {task.…} i inne | Przy Nadeszła data | Pola rekordu, którego data nadeszła, oraz rekordów, do których się odwołuje |
{now}, {today} | Zawsze | Moment, w którym krok działa, i północ tego dnia w strefie czasowej organizacji. Razem z przesunięciem (poniżej) {today + 1 day} daje jutro |
{threadId}, {messageId} | Przy zdarzeniach dotyczących wiadomości w skrzynce, takich jak inbox:message-created | ID rozmowy i wiadomości |
| Pola zdarzenia | Po Czekaj na zdarzenie, przez Odebrano | Dane zdarzenia, na które czekano. Zastępują dane tych samych rekordów z początku przepływu |
{createdTask.id}, {createdTask.name} | Po Utwórz zadanie | Zadanie, które właśnie zostało utworzone |
{foundTask.id}, {foundTask.name}, {foundTask.priority}, {foundTask.status} | Po Znajdź zadanie, przez Znaleziono | Zadanie, które znalazł krok |
{updatedTask.id}, {updatedTask.status} | Po Ustaw status | Zadanie, którego status został zmieniony |
{updatedTask.id}, {updatedTask.priority} | Po Ustaw priorytet zadania | Zadanie, którego priorytet został zmieniony |
{updatedTask.id} | Po Zaktualizuj zadanie | Zadanie, które zostało zmienione |
{foundDocument.id}, {foundDocument.name}, {foundDocument.status}, {foundDocument.userMetadata.documentType}, {foundDocument.userMetadata.insuranceExpiryDate} | Po Znajdź dokument, przez Znaleziono | Dokument, który znalazł krok |
{updatedDocument.id} | Po Zaktualizuj dokument | Dokument, który został zmieniony |
{response.status}, {response.body}, {response.data.…} | Po Żądanie API | Odpowiedź na żądanie |
{foundCustomer.…}, {foundInvoice.…}, {foundReservation.…} i inne | Po Wyszukaj rekord, przez Znaleziono | Pola rekordu, który znalazł krok, oraz rekordów, do których się odwołuje. Nazwa to found plus typ rekordu: foundCustomer, foundReservation, foundOccupation, foundInvoice, foundPayment, foundTerrain, foundTask, foundDocument, foundAccessMethod, foundNfcTag, foundMeter, foundInboxThread lub foundInboxMessage |
{body.…}, {query.…}, {receivedAt} | Po Webhook przychodzący | Treść JSON, parametry zapytania i moment odebrania wywołania webhooka |
| Każda nazwa celu z Mapuj zmienne | Po Mapuj zmienne | To, co wpiszesz w tym kroku jako cel, na przykład {invoice.displayId} po invoice ← {foundInvoice} |
{item.…} | W krokach za Dla każdego | Pola elementu, dla którego krok właśnie działa, takie jak {item.id} |
{approvalTask.id}, {approval.decision}, {approval.label}, {approval.note}, {approval.decidedBy.name} | Po Poproś o decyzję, przez opcję | Zadanie, wybrana opcja, nazwa tej opcji, notatka i kolega, który wybrał |
{task.…}, {action.label}, {note} | Przy Wybrano akcję zadania | Zadanie, wybrany przycisk i wpisana do niego notatka |
{createdComment.id} | Po Dodaj komentarz | Komentarz, który właśnie został dodany |
{bookedInvoice.displayId} | Po Zaksięguj fakturę, przez Gotowe | Numer zaksięgowanej faktury |
{paymentLink.url} | Po Utwórz link do płatności, przez Gotowe | Link, którym klient może zapłacić online |
{consumptionInvoice.id} | Po Zafakturuj zużycie | Faktura za zużycie licznika |
{extendInvoice.id} | Po Robocza faktura przedłużenia | Robocza faktura, która przedłuża zajęcie |
{createdAccessMethod.id}, {createdAccessMethod.value} | Po Utwórz metodę dostępu | Nowy środek dostępu i jego wartość, taka jak kod QR lub PIN |
{error.message}, {error.step} | Po akcji z Kontynuuj, gdy ten krok się nie powiedzie, przez Błąd | Komunikat o błędzie i nazwa kroku, który się nie powiódł |
Jakie dokładnie pola ma rekord, widzisz na liście za przyciskiem Zmienna. Przy wyzwalaczu jest też przegląd Dane, które dostarcza to zdarzenie.
Tylko to, co jest wcześniej w przepływie
Krok może używać tylko zmiennych z wyzwalacza, który do niego dociera, i z kroków znajdujących się wcześniej na tej samej drodze. Jeśli do tego samego kroku docierają różne wyzwalacze, dostępne są tylko zmienne, które dostarcza każdy z nich. Pole z wcześniejszego kroku się liczy, jeśli każdy z tych wyzwalaczy też przechodzi przez ten krok. Jeśli użyjesz zmiennej, która w tym miejscu nie istnieje, Tillor zgłasza [Pole]: zmienna [zmienna] nie jest dostępna w tym kroku. Przepływu z takim komunikatem nie można włączyć.
Niektóre rekordy przechowują dodatkowe dane w jednym polu, jak dane dokumentu w userMetadata. Każdy klucz pod nim jest zmienną: {document.userMetadata.documentType}, {document.userMetadata.insuranceExpiryDate} albo inny klucz. Znane klucze, takie jak typ i termin ważności dokumentu, są też na liście i możesz je porównywać jako datę. Data bez godziny, taka jak 2026-10-07, pojawia się w wiadomości jako 07-10-2026.
Zmienne z Dla każdego ({item.…}) istnieją tylko w krokach za wyjściem Dla każdego, nie za Gotowe. Zmienne z wyjścia, którym nie poszedłeś, też nie istnieją: {paymentLink.url} jest tylko wtedy, gdy krok przeszedł przez Gotowe, a {foundTask.id} tylko po Znaleziono.
Przy zdarzeniach, których dane nie są opisane, Tillor nie może sprawdzić, jakie zmienne istnieją. Wtedy nie dostajesz tego komunikatu. Takie przepływy sprawdź więc szczególnie dokładnie uruchomieniem testowym.
Nowa wartość zastępuje starą
Drugie Żądanie API w tym samym przepływie zastępuje response pierwszego. To samo dotyczy createdTask po drugim Utwórz zadanie, foundTask po drugim Znajdź zadanie lub Wyszukaj rekord dla Zadanie oraz error po drugim nieudanym kroku. Dane z odpowiedzi używaj więc w kroku, który następuje zaraz po niej.
Jak wartości są uzupełniane
Tillor dostosowuje notację do rodzaju pola.
W zwykłym tekście (tytuły, opisy, podzadania):
- Daty są w strefie czasowej Twojej organizacji, na przykład
05-10-2026. Jeśli moment nie wypada dokładnie o północy, obok jest też godzina, na przykład05-10-2026 14:30 - Puste pole daje pusty tekst
- Zmienna, której Tillor nie zna, pozostaje tak, jak ją napisałeś, na przykład
{occupation.terain.name}. Literówka od razu rzuca się w oczy w zadaniu lub wiadomości - Jeśli powiązanego rekordu nie ma, zmienna pozostaje pusta. Zajęcie bez rezerwacji daje więc nic dla
{occupation.reservation.displayId}, a zdarzenie wywołane przez system daje nic dla{triggeredBy.name}. Jeśli w takim przypadku chcesz innego tekstu, postaw przed tym Jeśli / w przeciwnym razie z jest puste
W JSON (Ładunek webhooka i Treść żądania API):
- Tekst jest wstawiany bezpiecznie. Cudzysłowy, nowe wiersze i inne znaki specjalne w wartości nie mogą zepsuć JSON
- Liczby i wartości tak/nie trafiają bez cudzysłowów, więc nie dodawaj ich wokół. Tekst natomiast ujmujesz w cudzysłowy
- Daty idą jako międzynarodowa data i godzina, taka jak
2026-10-05T08:00:00.000Z, aby system odbierający dobrze sobie z nią radził
{
"reservation": "{reservation.displayId}",
"adults": {reservation.numberOfAdults}
}Jeśli po uzupełnieniu JSON nie jest prawidłowy, na przykład dlatego, że liczba jest pusta, wykonanie zatrzymuje się z komunikatem o błędzie.
W ścieżce lub URL (przy żądaniu API):
- Wartości są przekształcane tak, aby mieściły się w adresie. Nazwa ze spacją nie daje więc zepsutego adresu
- Daty też tutaj idą jako międzynarodowa data i godzina
- To, co wpiszesz sam, pozostaje takie, jak wpiszesz. Jeśli chcesz spację w wyszukiwanym haśle, wpisz sam
%20
Przesuwanie daty
Za zmienną daty może stać przesunięcie: {reservation.checkOut + 1 day}, {today - 2 weeks}, {invoice.dueDate + 3 hours|date}. Jednostki to minutes, hours, days, weeks i months (liczba pojedyncza też jest dozwolona). Dni i tygodnie mają stałą długość, więc ważność trwa tyle samo mimo zmiany czasu letniego i zimowego; miesiące idą za kalendarzem, więc 31 stycznia plus miesiąc to 28 lub 29 lutego. Na wartości, która nie jest datą, przesunięcie nic nie robi, a nieistniejąca jednostka to błąd kroku. Pola dat, takie jak Ważne do, akceptują ten sam zapis.
Formatowanie wartości
Po zmiennej postaw | i format, na przykład {invoice.amountOutstanding|currency}. Bez formatu kwota wygląda surowo, jak 1295.3. Z |currency staje się € 1.295,30.
| Format | Przykład | Wynik |
|---|---|---|
currency | {invoice.amountOutstanding|currency} | € 1.295,30 |
currency:USD | {invoice.amountOutstanding|currency:USD} | US$ 1.295,30 |
number | {invoice.amountOutstanding|number} | 1.295,3 |
number:2 | {invoice.amountOutstanding|number:2} | 1.295,30 (stała liczba miejsc po przecinku) |
date | {invoice.dueDate|date} | 30-06-2026 |
datetime | {invoice.createdAt|datetime} | 01-06-2026 16:04 |
time | {invoice.createdAt|time} | 16:04 |
upper / lower | {customer.lastName|upper} | VAN DEN BROECKE |
- Liczby i kwoty są zawsze w notacji belgijskiej: kropka dla tysięcy i przecinek dla ułamków
- Daty i godziny są w strefie czasowej Twojej organizacji
- Jeśli format nie może odczytać wartości, na przykład
|currencyna tekście, wartość po prostu pozostaje bez formatu - Format, którego Tillor nie zna, pozostaje tak, jak go napisałeś, a edytor pokazuje o tym komunikat
- W JSON i w URL sformatowana wartość jest wstawiana jako tekst. W JSON ujmij ją więc w cudzysłowy
Używanie odpowiedzi API
Po Żądanie API możesz używać pól z odpowiedzi za pomocą {response.data.…}. Odpowiedź na wyszukiwanie zadań wygląda na przykład tak:
{
"items": [
{ "id": "task_1", "priority": "LOW" }
]
}Wtedy {response.data.items.0.id} daje ID pierwszego zadania (pierwszy na liście ma numer 0), a {response.data.items.0.priority} jego priorytet.
Tillor może zaoferować pola odpowiedzi jako zmienne dopiero wtedy, gdy wie, jak odpowiedź wygląda. Możliwe są dwa sposoby:
- Pozwól automatyzacji raz naprawdę zadziałać. Tillor używa wtedy odpowiedzi z ostatniego wykonania
- Wklej przykład na karcie Uruchomienie testowe, w polu Przykładowa odpowiedź API. To pole pojawia się, gdy tylko przepływ zawiera Żądanie API. Pod nim są Pola w tej odpowiedzi. Kliknij pole, aby je skopiować, razem z nawiasami klamrowymi
Potem pola są na liście za przyciskiem Zmienna i na liście przy Pole w Rozgałęzienie.
Jeśli sam wpiszesz ścieżkę pod response.data, jest ona zawsze akceptowana, także bez przykładu. Poza tym:
{response.body}zawiera pierwsze 4000 znaków odpowiedzi. Jeśli odpowiedź jest dłuższa, reszta jest obcinana{response.data}jest puste, jeśli odpowiedź nie jest JSON albo jest bardzo duża (ponad 100 000 znaków)- Przy wyszukiwaniu bez wyniku
{response.data.items.0.id}nie istnieje. Rozgałęzienie na takim polu idzie wtedy przez Domyślne
Przykład w teście
Na karcie Uruchomienie testowe wpisujesz też przykładowe dane zdarzenia. Dzięki temu w uruchomieniu testowym widzisz, jakie wartości wstawiłby Tillor. Zobacz Testowanie i uruchomienia.
Co dzieje się potem?
- Gdy tylko automatyzacja działa, Tillor zastępuje każdą zmienną prawdziwą wartością. Zmienna, której Tillor nie zna, pozostaje tak, jak ją napisałeś.
- Jeśli jakaś dana jest pusta, miejsce pozostaje puste. Jeśli wtedy chcesz innego tekstu, postaw przed tym Jeśli / w przeciwnym razie z jest puste.