Skip to main content
Macros are your saved replies. Type / in the composer, pick one, and the text appears — variables filled in.

Create a macro

  1. Open Settings → Macros.
  2. Click New macro.
  3. Give it a short name (this is what you search for).
  4. Write the body — plain text with optional Markdown.
  5. Save.

Variables

You can reference dynamic values with {{...}}: When a value is missing, the macro leaves it out and tidies the text around it. Settings → Macros lists every variable with what happens when it is missing. Example:

Contact details on website conversations

On the web widget, Keloa can’t tell who is typing unless your site signs them in with identity verification. So on a website conversation a macro only fills in contact details the person chatting is known to own, by the same rules as flow messages:
  • {{contact.email}} shows the address when the visitor typed it in that conversation (in a message or the contact form) or in the contact form of one of their own earlier conversations your team merged into it, or when it is the verified email your site signed for the signed-in user of that conversation.
  • {{contact.phone}} shows the number when the visitor typed it in that conversation, or when your site signed it for the signed-in user of that conversation.
Otherwise the macro leaves it out, as for a contact without one. The AI follows the same rule. This applies when you insert a macro in the composer and to the closing reply sent when a conversation is resolved. Other channels, such as email and WhatsApp, fill in the email address and phone number as usual. On an anonymous website conversation, a macro only uses what the visitor said in that conversation: the name and company placeholders only show what the visitor gave there (or in the contact form of one of their own earlier conversations your team merged into it), and every {{contact.custom.<key>}} and {{company.custom.<key>}}, your team’s fields included, is left out, because the details on the contact may be someone else’s. On a signed-in user’s conversation, the name and company are the ones your site signed for that user, and custom fields only show when your site signed them for that user. See Contact details on website conversations. On a mixed website conversation, one a merge made before Keloa refused such merges mixed with another person’s or another channel’s conversation, every {{ticket.custom.<key>}} and {{conversation.custom.<key>}} is left out: the ticket fields may be that other person’s. The same goes for ticket fields filled before such a merge moved a website conversation into an email or other conversation; a field your team fills in after it shows as usual. See Website conversations merged before the rule.

Inserting a macro

In any composer, type / and start typing the macro name. Pick with arrow keys and Enter, or click. The body is inserted where your cursor is — you can still edit it before sending.

Use in flows

Macros can also be referenced from Message nodes in flows, so auto-replies stay consistent with what your team sends manually. See Messages & actions.

Good macros

  • are short — a paragraph, not a page
  • address one intent (e.g. “we received your return”, not “returns FAQ”)
  • use variables for anything that changes per contact
  • read well with no edit — if you always tweak one, update the macro

Tips

  • Keep macros under ~30. More than that and finding the right one is slower than typing.
  • Use short, searchable names — shipping-eu-delay beats Shipping EU Delay Response Template (Updated).
  • Pair common macros with tags — e.g. when a macro is about returns, also add the returns tag to the conversation so analytics pick it up.