What you do, what Chert does
| Step | Owner | Time |
|---|---|---|
| 1. Install the package into your Org | You | 5 min |
| 2. Assign the Chert Messaging User Permission Set | You | 2 min |
3. Add the chertConversation component to record pages | You | 5 min |
| 4. Add Quick Actions to Contact list views | You | 5 min |
5. Configure the Chert_Tenant.Default Custom Metadata record | You + Chert (paired) | 5 min |
| 6. Connect the Slack channel for reply notifications | Chert | — |
| 7. (Optional) Wire a Flow handoff from your existing email sequencer | You | 10 min |
Before You Begin
| Requirement | How to verify |
|---|---|
| Lightning Experience enabled | From Setup, search Lightning Experience Transition Assistant. Status must be turned on for all users. |
| My Domain deployed to users | From Setup, search My Domain. Step 4 (Deploy to Users) must be complete. |
| API enabled on the Org’s edition | Enterprise, Unlimited, Performance, and Developer Editions include API. Professional requires the API add-on. Essentials is not supported. |
| Installer is a System Administrator | The user must hold Download AppExchange Packages, Customize Application, and Modify Metadata Through Metadata API Functions. |
Outbound HTTPS to console.trychert.com | If your Org enforces an outbound IP allowlist, allow the Chert API host. |
| Salesforce CLI installed locally | Run sf --version. Must be 2.0.0 or later. Install via npm install -g @salesforce/cli. |
| Chert tenant credentials | Confirm with Chert that you have a tenant_slug, signing_secret, and ingest_token in hand before step 5. |
The seven steps
Install the package into your Org
0.1.0-2):test.salesforce.com; production uses login.salesforce.com.Install into the sandbox first:- Click the sandbox link above. Salesforce prompts you to log in.
- Log in with a sandbox System Administrator account.
- On the Install Chert Messaging screen, choose Install for Admins Only. (You’ll grant end-user access via the Permission Set in step 2 — installing for All Users right away skips the Permission Set discipline.)
- Click Install. The install takes 2–5 minutes for a fresh org, longer if there are many existing automations.
- When the screen shows Installation Complete, you’re done with the sandbox install.
- From Setup, search Installed Packages → confirm Chert Messaging appears with the expected version number.
- From Setup, search Setup Audit Trail → search for
Chert_to see the per-component install entries. - From Setup → Object Manager → Contact → Fields & Relationships → confirm these custom fields exist:
Chert_Phone_Confidence__cChert_Phone_Source__cLinkedIn_URL__cChert_Last_Enriched_At__cChert_Enrichment_Status__c
| Symptom | Cause | Fix |
|---|---|---|
Install failed: FIELD_INTEGRITY_EXCEPTION | Your Org has a custom field with the same API name as one in the package | Tell Chert which field conflicts; we can rename the package field and reissue the install link. |
Install failed: API access required | Org edition lacks API access (e.g., Essentials, Professional without add-on) | Confirm prerequisites in Before You Begin. |
User Doesn't Have Access after install | The installer’s profile lacks Download AppExchange Packages | Re-run as a System Administrator. |
contact@trychert.com. The
install-link path documented above is recommended for everyone else.Assign the Chert Messaging User Permission Set
- From Setup, enter Permission Sets.
- Click Chert Messaging User.
- Click Manage Assignments → Add Assignments.
- Select the users who will send or review iMessages, then click Assign.
Chert_Message__c, Read + Edit
on the Chert-prefixed Contact and Lead enrichment fields, Apex class
access for the eight package classes, and Named Credential access to
Chert_Endpoint. No View All Data, no Modify All Data. Full
breakdown in Configuration.Verify:- From Setup → Permission Sets → Chert Messaging User, confirm the user count under Manage Assignments matches what you assigned.
- Sign in as one of the assigned users (use the Login As option from Setup → Users) and confirm Step 3’s component appears.
Add the chertConversation component to record pages
- From Setup, enter Lightning App Builder.
- For each of the three shipped pages, click the page name then click Activation:
Lead Record Page ChertContact Record Page ChertAccount Record Page Chert(optional)
- Choose the activation scope:
- Org Default — applies to every Lead/Contact/Account record across the Org.
- App Default — scoped to one Lightning app (e.g., Sales Console).
- Profile / Record Type — narrowest; assign only to specific profiles or record types.
- Click Save.


Add Quick Actions to Contact list views
| Quick Action | Component | Purpose |
|---|---|---|
Enrich_Phone_Numbers | chertBulkEnrich | Bulk-enrich missing mobile numbers across selected Contacts |
Start_Chert_Sequence | chertSequenceLauncher | Enroll selected Contacts into a Chert sequence |
- From Setup → Object Manager → Contact → Search Layouts for Salesforce Classic (or List View Button Layout in Lightning).
- Edit the List View layout.
- Add Enrich Phone Numbers and Start Chert Sequence to the Selected Buttons list.
- Save.
- Open any Lead, Contact, or Account record and see the three-tab Chert Messaging component
- Open the Contacts list view, select rows, and see the Enrich Phone Numbers + Start Chert Sequence buttons
- See
Chert_Message__candChert_Tenant__mdtin Object Manager - Find Chert Messaging User under Permission Sets
Configure the Chert_Tenant.Default Custom Metadata record
- From Setup, enter Custom Metadata Types.
- Click Manage Records next to Chert Tenant.
- Edit the Default record.
- Paste these values from your Chert onboarding handoff:
Tenant_Slug__c— your Org’s identifier with ChertSigning_Secret__c— HMAC-SHA256 key for outbound requestsIngest_Token__c— bearer token Chert presents on inbound webhooksChert_Base_URL__c— leave default unless directed to a regional deployment
- Click Save.
Option A — Developer Console (easiest)
Option A — Developer Console (easiest)
- From the App Launcher (waffle icon, top-left), search for Developer Console. It opens in a popup window.
- In the popup, click Debug → Open Execute Anonymous Window.
- Paste this Apex snippet, replacing the placeholder Lead ID with a real Lead from your Org:
- Check the Open Log box, then click Execute.
- In the resulting log, search for
USER_DEBUG. You should see:
Option B — VS Code with the Salesforce Extensions
Option B — VS Code with the Salesforce Extensions
- Save the snippet above as
scripts/apex/ping-chert.apex. - From the command palette: SFDX: Execute Anonymous Apex with Editor Contents.
- Output appears in the VS Code Output panel under the Apex channel.
Option C — sf CLI
Option C — sf CLI
ok: true, a non-null messageId, and an
actual iMessage delivered to the recipient device within ~2 seconds.Common failures:| Output | Cause | Fix |
|---|---|---|
errorCode: signature_invalid | Signing_Secret__c does not match what Chert provisioned | Re-paste the secret. Check for trailing whitespace/newline. |
errorCode: tenant_not_found | Tenant_Slug__c does not match | Re-paste the slug. |
errorCode: phone_invalid | phone not in E.164 format | Use +1 prefix and digits only, no spaces or dashes. |
errorCode: all_servers_at_capacity | Chert side has no free phone-line slot for this recipient right now | Not a config problem; retry in a few minutes or contact Chert. |
Connect the Slack channel for reply notifications
- Install the Chert Notifications Slack app into your workspace.
- Bind the app to the channel you nominate (typically
#chert-repliesor a channel scoped to the team that owns outbound). - Configure the per-channel feature flags (daily summary canvas, low-leads alert, settings mirror).
(Optional) Wire a Flow handoff from your existing email sequencer
- From Setup, enter Flow → New Flow → Record-Triggered Flow.
- Object: Lead (or Contact, or your sequencer’s enrollment object).
- Trigger: A record is updated.
- Entry condition: whatever your sequencer sets to mark a step as complete and ready to hand off (e.g.,
Outreach_Step__c = 'iMessage'). - Add an Action element. Search for Chert Send iMessage.
- Bind:
phone→{!$Record.MobilePhone}(orPhone)message→ a text template, e.g.,Hey {!$Record.FirstName}, following up on the email I sent.recordId→{!$Record.Id}idempotencyKey→{!$Record.Id}:imessage:1(deterministic; replays are no-ops)
- Add a Decision branch on the action’s
duplicateoutput:duplicate = true→ log success but don’t re-sendok = false→ write the error to a custom field for retry
- Save and activate the Flow.
Chert_Message__c row plus a
standard Task appear on the record’s Activity Timeline.Verify the Installation End-to-End
Once all seven steps are complete:- Open any Lead with a valid mobile number.
- Open the Chert Messaging component → Conversation tab.
- Type a test message and click Send. The bubble should appear with a status indicator.
- From Setup → Apex Jobs, confirm no failed
ChertEnrichjobs. - From Setup → Setup Audit Trail, search for
Chert_to confirm the install + configuration entries. - Reply from the recipient device. Within a few seconds, the inbound bubble appears in the Conversation tab and a
Chert_Message__crow + a standardTaskare inserted on the Lead.
Troubleshoot
RunLocalTests fails with MIXED_DML_OPERATION
RunLocalTests fails with MIXED_DML_OPERATION
Chert Messaging component does not appear on a record
Chert Messaging component does not appear on a record
INSUFFICIENT_ACCESS when invoking ChertSendIMessage
INSUFFICIENT_ACCESS when invoking ChertSendIMessage
ChertSendIMessage. Re-assign in step 2.Outbound calls fail with UNAUTHORIZED_ENDPOINT
Outbound calls fail with UNAUTHORIZED_ENDPOINT
Outbound calls return signature_invalid
Outbound calls return signature_invalid
Signing_Secret__c in your Chert_Tenant.Default record does not
match what Chert provisioned. Re-paste from the secure handoff and
confirm there is no trailing whitespace or newline.Inbound replies do not appear in Salesforce
Inbound replies do not appear in Salesforce
Ingest_Token__c is wrong (Chert can’t authenticate to the
ingestion REST endpoint) or your Org’s network rules block inbound
HTTPS from Chert’s webhook range. Ask Chert to replay the most recent
event from console.trychert.com → Events → Replay. If the replay
401s, fix the token; if it 500s with a network error, contact your
network admin.Upgrade from a Previous Version
Re-runsf project deploy start against the same target Org with the
new source tree. Custom Metadata records, Permission Set assignments,
and Lightning Record Page activations are preserved. Active Flows
referencing ChertSendIMessage continue to work as long as the
action’s input contract is unchanged. Coordinate breaking changes per
version with Chert.
What’s next
Once the seven steps are complete and the end-to-end test in Verify the Installation End-to-End passes, you’re live. Next:Run the tutorial
Review the configuration
Plan a pilot
Read the security model
See Also
- Configuration for per-component setup detail.
- Architecture for the component map, sequence diagrams, and ERD.
- Limits and Considerations for governor-limit math.

