Personalization
Personalization in RME draws from Salesforce data and the Enterprise Intelligence Engine — not from a separate marketing database.
Data sources
| Source | Example |
|---|---|
| Record context | {{Order.OrderNumber}}, {{Case.Subject}} |
| Related records | {{Contact.Account.Name}}, {{Order.Items}} |
| Formula and custom fields | Any field the running user can read |
| EIE signals | Relationship strength, last meeting, next best action |
| Runtime parameters | Values passed explicitly on the request |
Field-level security applies at render time. A field the running user cannot read renders as empty, never as a data leak.
Conditional content
{{#if EIE.RelationshipStrength > 70}}
<p>Thanks for being one of our most engaged customers.</p>
{{else if Contact.CreatedDate | withinDays: 30}}
<p>Welcome aboard — here is how to get started.</p>
{{else}}
<p>Here is your monthly summary.</p>
{{/if}}
AI-assisted content
RME can call the Enterprise Intelligence Engine to generate or refine a block of content at send time, with a deterministic fallback if the model is unavailable.
RME_Message.builder()
.templateName('Renewal_Outreach')
.toContact(contactId)
.aiBlock('summary', new Map<String, Object>{
'instruction' => 'Summarize the last three support cases in two sentences.',
'grounding' => 'CASE_HISTORY',
'fallback' => 'Your recent support activity is attached.'
})
.send();
Generated content is stored on the message record, so every AI-authored communication is auditable after the fact.
Guardrails
- Maximum one AI block per transactional message
- Generated content is length-capped and profanity-filtered before send
- Consent and suppression checks run after generation, never before
Continue to Message Scheduling.
Was this helpful?
Last updated 1 month ago