Contact-level tokens
contacts.first_name, contacts.last_name, and contacts.company are resolved from the contact record at call time. Use them in persona fields, question text, or campaign goal to make every message feel personal.
How it works: Contact name is available for context — the AI guardrail still prohibits using it in outbound messages (feels presumptuous on cold SMS).
Campaign-level tokens
campaigns.campaign_goal, campaigns.product_or_service, and campaigns.assistant_name are resolved from the campaign record. Use them to make a shared template work across multiple campaigns with different products.
How it works: All seven supported tokens are tested — multiple tokens in a single string resolve correctly.
Objection handling context
The AI uses product_or_service, benefits, background, and objection_handling fields — in that priority order — when a contact asks a question the AI needs to answer. If no usable information is present, it deflects to a specialist rather than fabricating an answer.
How it works: No invented information is enforced via base guardrails — applies to every campaign without configuration.
Token validation on save
When an operator saves campaign configuration containing an unknown or malformed token, the platform returns a 400 error with a descriptive message identifying the bad token. Unknown tokens are never silently passed to the AI.
How it works: Singular legacy tokens (contact.first_name without the 's') are flagged with a corrective hint pointing to the correct format.