All expressions begin with an "@" symbol and an open parenthesis, e.g. '@(HOUR(NOW()))' or '@(SUM(contact.<field>, 1))'. Once entered, "@(" will trigger a completion dialogue that lists and explains each function:

## Simple Syntax

This is used to embed single values, e.g.

`Hi @contact, you entered @flow.age for age. Is this correct?`

An expression can also be a function call, e.g.

`Hello @(UPPER(contact.first_name))`

Function names are not case-sensitive so UPPER is equivalent to upper. We support a subset of the functions available in Excel and these are listed below.

## Advanced Syntax

This is used to build more complex expressions using similar syntax to Excel formulae, e.g.

`Hi @(PROPER(contact)), you are @(YEAR(NOW()) - flow.year_born) years old. Is this correct?`

Expressions can also include arithmetic with the add (+), subtract (-), multiply (*), divide (/) and exponent (^) operators, e.g.

`Result is @(1 + (2 - 3) * 4 / 5 ^ 6) units`

Note that the expression is enclosed in parentheses to tell us where it ends.

You can also join strings with the concatenate (join) operator (&), e.g.

`Hello @(contact.first_name & " " & contact.last_name)`