Troubleshooting
Start with RME Admin → Diagnostics, then work down this table.
Send failures
| Symptom | Likely cause | Resolution |
|---|---|---|
DOMAIN_NOT_VERIFIED | DNS records missing or not propagated | Re-check SPF/DKIM records; re-run Verify Domain after propagation |
UNAUTHORIZED from provider | Expired or rotated API key | Update the External Credential principal |
You have uncommitted work pending | Callout after DML in a trigger | Move the send into a Queueable or sendAsync() |
CIRCUIT_OPEN | Provider error rate crossed threshold | Check provider status page; failover should have engaged |
TEMPLATE_NOT_FOUND | Template inactive or wrong locale | Activate the version; confirm Locale__c resolution |
RATE_LIMITED | Provider or org ceiling reached | Raise the limit or spread the send with scheduling |
QUIET_HOURS | Request inside a restricted window | Use DEFER on the channel policy, or exempt the transactional category |
Nothing is delivered but status is SENT
- Confirm webhooks are registered with the provider and reaching the Site endpoint.
- Check the Site guest user has access to the webhook Apex class.
- Look for
401responses in the provider's webhook activity log — a signature or secret mismatch. - Run a backfill for the affected window:
RME_EventBackfill.run(provider, from, to).
Messages land in spam
| Check | Target |
|---|---|
| SPF | Single record, includes the provider, ends in -all |
| DKIM | Signature aligns with the visible From domain |
| DMARC | Policy present and aligned |
| Reputation | Google Postmaster Tools, provider reputation dashboard |
| Content | Text-to-image ratio, link shorteners, spam-trigger phrasing |
| List quality | Bounce and complaint rates within thresholds |
Merge fields render empty
- The running user lacks field-level security on the field.
recordIdcontext was not passed on the request.- The field path crosses a relationship that is null on the record.
- Run
RME_TemplateRenderer.preview()and inspectmissingMergeFields.
Events arrive twice
Expected. Platform Events are at-least-once and providers retry. Make subscribers idempotent on Provider_Message_Id__c + Event_Type__c + Occurred_At__c.
SMS not received
- Verify the number is valid E.164 and not on the suppression list.
- Check 10DLC brand and campaign registration status for US traffic.
- Confirm the recipient has not sent STOP.
- Review carrier filtering feedback on the message record's
Reason_Code__c.
Diagnostics
RME_Diagnostics.Result r = RME_Diagnostics.run();
for (String issue : r.issues) System.debug(issue);
Diagnostics validates credentials, domain status, webhook reachability, scheduled jobs, permission set assignments, and provider health.
Continue to Roadmap.
Was this helpful?
Last updated 1 month ago