Ask AI
English EN
Go to Watbot

Function reference

A function is called like this: {{ name(argument1, argument2) }}. Arguments are text in quotes, numbers, variables ($name) and, in expressions, the results of other functions.

Functions marked simple work everywhere templates work. The rest work only in message texts, conditions and some block settings — see Where templates work.

Text

Function What it does Example Result
upper(text) All letters uppercase {{ upper("hello") }} HELLO
lower(text) All letters lowercase {{ lower("HELLO") }} hello
capitalize(text) First letter uppercase {{ capitalize("anna") }} Anna
len(text) Number of characters {{ len("Monday") }} 6
trim(text) Removes spaces at both ends {{ trim(" yes ") }} yes
replace(text, what, with) Replaces every occurrence {{ replace("8-999-000", "-", "") }} 8999000
substr(text, start, length) Part of the text; start from 0 {{ substr("Monday", 0, 3) }} Mon
number_format(number, decimals, decimal_separator, thousands_separator) A number with separators. Defaults: 0 decimals, comma and space {{ number_format(1234.5, 2) }} 1 234,50
urlencode(text) Encodes text for a link https://site.com/?q={{ urlencode($query) }}
randomText(option1, option2, ...) One option at random {{ randomText("Hi", "Hello") }}
strRandom(length, uppercase) A random string of letters and digits, up to 1000 characters. Pass true as the second argument for uppercase only {{ strRandom(8, true) }} K3JD8QWZ

All functions in this section are simple.

Math

Function What it does Example Result
round(number, decimals) Rounding, to a whole number by default {{ round(2.567, 2) }} 2.57
ceil(number) Round up {{ ceil(2.1) }} 3
floor(number) Round down {{ floor(2.9) }} 2
abs(number) Absolute value {{ abs(-5) }} 5
sqrt(number) Square root {{ sqrt(16) }} 4
max(a, b, ...) Largest {{ max(3, 7, 5) }} 7
min(a, b, ...) Smallest {{ min(3, 7, 5) }} 3
rand(from, to) A random whole number {{ rand(1, 100) }}

All functions in this section are simple. Addition, subtraction, multiplication, division and powers are written with operators — see Arithmetic.

Deprecated functions

These functions still work, but in new texts use operators — it's shorter and clearer:

Deprecated function How to write it now
sum($a, $b), сумма($a, $b) {{ $a + $b }}
diff($a, $b), разность($a, $b) {{ $a - $b }}
multiplication($a, $b), произведение($a, $b) {{ $a * $b }}
div($a, $b), деление($a, $b) {{ $a / $b }}
pow($a, $b) {{ $a ** $b }}

For example, instead of {{ sum($price, $delivery) }} write {{ $price + $delivery }}.

Date and time

Warning

Time is calculated in UTC. Add your offset if needed, e.g. Moscow time (UTC+3): {{ date("H:i", "+3 hours") }}.

Function What it does
date(format, date) A date in the given format. Without a date — now. The date can be "2026-10-02", "+7 days", "next monday" and so on
time() Current time in seconds since 1970 (Unix time)
modifyDateTime(date, date_format, output_format, shift) Parses a date from a variable using its format, shifts it and outputs it in another format
modifyUnixTime(unix_time, shift, format) Shifts a Unix time; with a format it outputs a date, without one — the new Unix time

Examples:

Today is {{ date("d.m.Y") }}
See you on {{ date("d.m.Y", "+3 days") }}
Your appointment is moved to {{ modifyDateTime($appointment_date, "d.m.Y", "d.m.Y", "+1 day") }}
Access until {{ modifyUnixTime(time(), "+30 days", "d.m.Y") }}

Main format characters:

Character Meaning Example
d day with leading zero 02
j day without leading zero 2
m month with leading zero 10
n month without leading zero 10
Y year 2026
H hours, 24-hour format 14
i minutes 05
s seconds 09
N day of the week, 1 is Monday 5

The shift is written in English: "+1 day", "-2 hours", "+1 month", "next friday".

All functions in this section are simple.

Note

Older scenarios sometimes use a question mark placeholder: {{ date("d.m.Y", "+? days", $days) }} — ? is replaced with the next argument. This still works, but in expressions it's easier to join text: {{ date("d.m.Y", "+" ~ $days ~ " days") }}.

Conditions

Function What it does
printByCondition(a, operator, b, if_yes, if_no) Compares a and b and outputs one of the options. Operators: =, !=, >, >=, <, <=. If a or b is empty, outputs if_no
printByExistsCondition(value, if_yes, if_no) if_yes if the value isn't empty, otherwise if_no
{{ printByCondition($points, ">=", 100, "The gift is yours!", "Keep collecting") }}
{{ printByExistsCondition($phone_number, "Phone number saved", "Please leave your phone number") }}

Both functions are simple. In expressions the condition operator is handier: {{ $points >= 100 ? "The gift is yours!" : "Keep collecting" }}.

Contact and bot data

Function What it does Simple
var("name") A contact variable's value; handy for names with spaces yes
global("name") A global variable's value yes
printContactTags() The contact's tags, comma-separated yes
printContactVariables() All of the contact's text variables as a list "- name: value" yes
printGlobalVariables() All of the bot's global variables as a list "- name: value" yes
getBalance("currency", "label") The contact's account balance in a currency, with its symbol: getBalance("USD"). With a second argument — a number and your label: getBalance("PTS", "points") → 150 points no
getCartAmount() The cart total of the legacy "Shopping cart" block no

Warning

printGlobalVariables() outputs all global variables. Don't use it in messages to contacts if your global variables store keys or passwords.

Variables

These functions write the result to a contact variable and output nothing.

Function What it does
setSumVariablesIntoVariable("result", a, b, ...) Saves the sum to the result variable
setMultiplicationVariablesIntoVariable("result", a, b, ...) Saves the product to the result variable

The terms are numbers or variable names in quotes, at least two: {{ setSumVariablesIntoVariable("result", "price", "delivery", 100) }}.

For calculations, the "Variable operation" block is more convenient — it supports expressions too.

Lists

Function What it does
getListRow("entry id", "template") Outputs one list entry using a template
getListRows("list id", "template", how_many, "sort field", "asc" or "desc", "separator") Outputs list entries using a template, 10 by default, at most 50, each on a new line

In the template, an entry field is written in single curly braces: {Name}, {Price}. In getListRows you can insert a contact variable into the template: {$city}.

{{ getListRows("6523f0c2a1b2c3d4e5f60718", "{Name} — ${Price}", 5, "Price", "asc") }}

The bot reads only lists that belong to its owner.

Referral program

Function What it outputs
getInviteLink() The contact's personal referral link (Telegram, MAX)
getDirectInviteLink(scenario_id) A direct link to the bot with a referral parameter; with a scenario — a link that starts that scenario
getInviteLinkWithSchema(scenario_id) A referral link that starts a scenario
getLinkBySchema(scenario_id) A link that starts a scenario, without a referral parameter
getReferrals(how_many, "tag") The list of contacts invited by this contact (first level): "1. Name - username", 10 by default, at most 100. With a tag — only those with that tag
getReferralsByDepth(level, how_many, "tag") The same for the given level
getReferralsCount("tag") The number of invited contacts across all levels
getReferralsCountByDepth(level, "tag") The number of invited contacts on the given level; 0 — all levels
getReferrer(level) Who invited the contact; 2 — who invited the inviter, and so on
getReferrers(how_many_levels, from_level, "tag") The list of inviters up the chain

The functions in this section are not simple. The deprecated variants with Telegram in the name (getTelegramInviteLink and others) work the same way.

Different texts for different messengers

The text inside the function is shown only to contacts from that messenger; everyone else gets an empty spot:

Function Messenger
messageToTelegram("text") Telegram
messageToViber("text") Viber
messageToVK("text") VK
messageToWeb("text") Website web chat
Message us{{ messageToTelegram(" on Telegram: @example_support") }}{{ messageToWeb(" right in this chat") }}

The functions in this section are not simple. In an expression, such a function must stand alone — it can't go inside a condition or another function.