Help Desk

Macros

Saved replies and one-click actions for handling conversations faster

A macro is a saved reply plus a set of actions you can apply to a conversation in one click. Macros are the single biggest lever for handling more conversations per hour — any reply you find yourself writing more than twice should probably be a macro.

What a macro contains

Each macro has:

  • Title — How you find it in the macro picker.
  • Content — The reply that gets inserted into the message composer. Markdown is supported, including images.
  • Actions — A list of things to do to the conversation when the macro is applied (see below).
  • Attachments — Files that get attached to the reply.
  • Available for — Either everyone in the organization, or just yourself (personal macros). Sharing a macro with the organization requires settings permission; without it you can still build your own.
  • Business — Restrict the macro to a specific business, or make it available across all of them.
  • Folder — Macros are organized into folders so a large library stays navigable.

Variables

You can insert dynamic values into a macro's content using double curly braces. They're filled in automatically when the macro is applied to a conversation.

Hi {{customer.name}}, thanks for reaching out!

Available variables

  • {{agentName}} — Full name of the agent applying the macro.
  • {{agentFirstName}} — First name only of the agent applying the macro.
  • {{business.name}} — Name of the business the conversation belongs to.
  • {{customer.name}} — Customer's name. Also available as {{customerName}} for backwards compatibility.
  • {{customer.firstName}} — Customer's first name only. Usually the one you want in a greeting.
  • {{customer.email}} — Customer's email.
  • {{customer.phone}} — Customer's phone number.
  • {{lastOrder.orderId}} — ID of the customer's most recent order.
  • {{lastOrder.orderPlacedAt}} — When the most recent order was placed.
  • {{lastOrder.trackingId}} — Tracking ID of the most recent order.
  • {{lastOrder.trackingUrl}} — Tracking URL of the most recent order.
  • {{lastOrder.statusPageUrl}} — Order status page URL of the most recent order.
  • {{lastSubscription.nextChargeDate}} — Next charge date of the customer's most recent subscription.

Conversation metadata

Anything stored as conversation metadata is addressable as {{metadata.<key>}}:

Your parcel is on its way: {{metadata.tracking_link}}

This is the general escape hatch. The fixed variables above cover the common cases, but metadata lets a macro reach anything you can compute — data from a system we don't integrate with, a value pulled from several stores, a field from your own CRM.

Metadata is written by sidebar widgets, custom actions and event handlers via set_conversation_metadata, and by the chat widget via chat custom data (those keys are prefixed chat-widget:).

A common pattern is to have a sidebar widget look a customer up in your systems, display the result to the agent, and store the useful values as metadata in the same pass — so the agent sees the tracking link in the sidebar and can insert it with a macro.

Two things to know:

  • Keys containing a dot can't be addressed, because Mustache treats the dot as a path separator. Use underscores.
  • The value has to be there when the macro is applied. Sidebar widgets run when the agent opens the conversation, so in practice it will be — but a macro applied before a slow widget finishes will render that variable empty.

When a value isn't available

If a variable has no value (for example, the conversation has no customer attached, or the customer has no recorded phone number), it renders as an empty string. The macro doesn't error, but the result can look awkward — Hi {{customer.name}}, becomes Hi ,.

To handle missing values gracefully, use Mustache sections to provide a fallback:

{{#customer.name}}Hi {{customer.name}},{{/customer.name}}{{^customer.name}}Hi there,{{/customer.name}}

{{#customer.name}}...{{/customer.name}} renders only when the value is present, and {{^customer.name}}...{{/customer.name}} renders only when it's missing.

Actions

A macro doesn't have to just insert a reply — it can also perform actions on the conversation in the same click. Available actions:

  • Set tag — Add a tag to the conversation.
  • Assign member — Assign the conversation to a specific teammate.
  • Snooze — Snooze the conversation. The choices are 1 hour, tomorrow, next week and next month, or a specific date and time. Note these are fixed, and the day-based ones land at 09:00 — a macro doesn't use your workspace's configured snooze durations.
  • Close conversation — Close the conversation after the reply is sent.

You can chain multiple actions in a single macro. A typical "answered and done" macro inserts a reply, applies a tag, and closes the conversation — all in one keystroke.

Macro actions also work on internal notes: you can leave a note and tag, assign, snooze or close in the same submit, without sending the customer anything.

Folders

Macros live in folders. A few naming patterns that work well:

  • By topic: Returns, Shipping, Account issues, Billing
  • By stage: Triage, Ask for info, Closing replies
  • By team: VIP, Wholesale, Support tier 2

A flat list of 80 macros is unusable; the same 80 in 8 folders is fast to navigate.

When to make a macro

A good rule: if you've written the same answer (even loosely) twice, save it as a macro the third time. If the answer always closes the conversation, add a close action. If it always tags the conversation, add a tag action. The goal is that your most common conversation types resolve in a single click.

On this page