Skip to content

🧩 ClientVerse Modules — Dispatch Requires the ClientVerse Modules package. Clients on Core only won't see this.

Dispatch

Available since: ClientVerse Modules 0.1 (shipped).

What it is

Dispatch is ClientVerse's data-driven notification and digest engine. An admin defines what to send, who receives it, how often, and through which channel; a scheduled job then evaluates that definition, builds one message per recipient from live Salesforce data, and delivers it by email and/or in-app notification. The same engine powers ClientVerse's ERM (Experience / Relationship Management) review workflows — for example single-threaded-relationship review and auto-promotion.

Think of it as "reports that find you" plus the review actions that go with them, instead of dashboards people have to remember to open.

Who it's for

  • Admins build and tune dispatches (the bulk of the configuration objects target this persona).
  • Attorneys and BD are the recipients — they read digests/notifications, take actions from them, and manage their own subscriptions.

How it works

Dispatch is built from a small set of objects in a clear hierarchy. Full object meanings are in objects/dispatch.yaml; field-level reference is in the Data Dictionary.

1. Definition

A Dispatch Definition (Dispatch_Definition__c) is the central configuration record — the roadmap board tracks the digest-generation work behind it (P3.3, P3.6). One definition describes:

  • What to query — Primary_Object__c and Entry_Criteria__c select the qualifying records.
  • Who receives it — Subscriber_Source__c (criteria, list, or role) plus Subscriber_Criteria__c.
  • When it runs — Frequency__c, Run_Times__c, Day_of_Week__c, Day_of_Month__c, Timezone__c.
  • How it's branded and sent — Email_Subject_Template__c, From_Name__c, From_Address__c, Reply_To__c, and Enable_Reply_Routing__c (route replies back into Salesforce via a flow).
  • Delivery mode — Context_Mode__c (per-recipient vs shared digest) and Use_External_MAP__c (send through an external marketing platform instead of Salesforce email).

Dispatch_Definition__c has 52 fields in Modules 0.8.0 (per catalog.json); the rest cover throttling, retry, branding HTML, and activity creation.

Since Modules 0.8.0, a cloned definition starts without the original's run state.

2. Run

When the schedule fires, a Dispatch Run (Dispatch_Run__c) records that execution. It is the audit trail for one send: Run_Type__c (scheduled / manual / test), Status__c, Records_Evaluated__c, Items_Created__c, Items_Sent__c, Items_Failed__c, and an Error_Summary__c for troubleshooting.

3. Run Item — per-recipient delivery

A run produces one Dispatch Run Item (Dispatch_Run_Item__c) per recipient: the fully rendered, addressed message. It stores Rendered_Subject__c / Rendered_Body__c, the delivery Status__c, and engagement timestamps (Sent_At__c, Opened_At__c, Clicked_At__c, Reply_Received__c). Skip_Reason__c explains anything that wasn't sent.

4. Delivery & subscriptions

Recipients are enrolled through Dispatch Subscriptions (Dispatch_Subscription__c). A subscription links a subscriber (Subscriber_User__c or Subscriber_Contact__c) to a definition, with per-subscriber overrides: Delivery_Channel__c (email, in-app, or both), Frequency_Override__c, and Filters_JSON__c. Assignment_Source__c records whether it came from auto-enrollment or a manual opt-in; Unsubscribed_Date__c records opt-out. Role-based auto-enrollment is driven by Dispatch_Role_Mapping__mdt (e.g. enroll all relationship managers in a given digest).

5. Sections & data tables

A digest body is composed of ordered Dispatch Sections (Dispatch_Section__c) — each a rich-text block or a data table, with its own Visibility_Rule__c and Hide_If_Empty__c. A table section is configured by Dispatch DataTable Config (Dispatch_DataTable_Config__c) — its Data_Source_Type__c (SOQL template, report, list view, or Apex), row limit, sort, and Enable_Inline_Edit__c — and its columns by Dispatch DataTable Column (Dispatch_DataTable_Column__c), which set field, format, alignment, width, and highlight rule. This is the Data Table Component from the roadmap (P3.5).

Since Modules 0.8.0:

  • Group By. Digest emails and review tables can group rows by one column, or by several nested columns.
  • The digest data table loads in installed orgs. Before 0.8.0 it never ran in an installed org. Its Single Threaded column is also corrected.

6. Actions

A digest or notification can carry call-to-action buttons defined by Dispatch Action (Dispatch_Action__c): Action_Type__c of Flow, URL, or record update, with placement and a Visibility_Condition__c. Each action declares what it records via Log_Action_Type__c.

Correction. Earlier revisions of this guide referred to a Dispatch_Action_Log__c audit object. It was removed before Modules 0.1.0 and has never shipped. Recipient actions and engagement live on the Run Item (Dispatch_Run_Item__c): Actions_Taken__c, plus Opened_At__c, Clicked_At__c, View_Count__c, Reply_Count__c, and Reply_Received__c.

7. ERM review workflows

Dispatch underpins ClientVerse's relationship-review behaviors (roadmap NCR 1–5):

  • Single-threaded review — surface relationships served by only one person for review, with action gating and defined deletion behavior (NCR 1–3).
  • Auto-promotion on review-window expiry — Review_Window_Hours__c sets how long reviewers have; Auto_Promotion_Behavior__c decides what happens when the window lapses (NCR 4).
  • Mark-private visibility enforcement — private relationships stay hidden from digests (NCR 5).

What changed in Modules 0.8.0:

  • Review timing. A record can no longer be auto-promoted before its principal's digest has shown it. The review window runs from when the digest was actually sent, and each digest run schedules its own follow-up. Auto-promotion no longer fails on the "ERM New Contact Review" template.
  • Digest email. Deadlines appear in Eastern and Pacific time, and there are new pending-count and ReviewDeadline merge tokens. Action buttons are driven by their own configuration, so renaming an action no longer breaks them.
  • Review links need a Confirm click. Opening an ERM review link no longer completes the action; the reviewer has to click Confirm. This stops mail scanners from approving or promoting a record when they prefetch the link.
  • Magic-link actions. A digest column can let a reviewer Promote or Mark Private from the email without logging in. It needs an ERM Experience site, CV_ERM_Magic_Link_Guest on its guest user, a Magic_Link_Policy__mdt record, and a MagicLinkAction column added to your ERM definition. The shipped ERM definition doesn't use the column yet.
  • Lead promotion. Promoting a Lead carries its relationship and capture date to the new Contact, and every promoting action, including Tag, now converts the Lead instead of leaving it stranded.

How to use it

User view (attorneys / BD)

  • You receive digests and notifications on the channel your subscription specifies; opens and clicks are tracked on the Run Item.
  • Manage your enrollment from your Dispatch Subscriptions — change channel or frequency, adjust filters, or unsubscribe.
  • Use the action buttons in a digest (run a flow, open a record, complete an ERM review) directly from the message; every action is logged.
  • The Outlook App integration (roadmap P3.4) brings ClientVerse content into Outlook for recipients who live in email. Since Modules 0.8.0 the Outlook pane resolves digests.
  • An ERM review link opens a confirmation step; the action happens only when you click Confirm.

Admin view

  1. Create a Dispatch_Definition__c, set its primary object and entry criteria, schedule, and branding.
  2. Add Dispatch_Section__c records for the body; for tabular sections add a Dispatch_DataTable_Config__c and its columns.
  3. Define recipients via Subscriber_Source__c and/or Dispatch_Role_Mapping__mdt auto-enrollment.
  4. Add any Dispatch_Action__c call-to-actions.
  5. Set Active__c to enable scheduling. Use a test run to preview before going live.
  6. Monitor Dispatch_Run__c / Dispatch_Run_Item__c for delivery health and Error_Summary__c.

Configuration pointers

  • Setup app: CV_Dispatch_Setup; permission sets CV_Dispatch_Admin and CV_Dispatch_User (CV_Dispatch_Lawyer is the pre-0.4.0 end-user set and still works). All of them require CV_Modules_Access first.
  • Batch sizing (definition batch, run-item batch, insert chunk) is tuned via Dispatch_Config__mdt.
  • See the Admin Guide for step-by-step setup and the Configuration Reference for the custom-metadata settings.

Key objects

Cited from objects/dispatch.yaml and clientverse-modules-0.8.0.json (Dispatch owns 12 objects in Modules 0.8.0):

Object Role
Dispatch_Definition__c Central configuration for one notification/digest
Dispatch_Subscription__c A recipient's enrollment + overrides
Dispatch_Run__c One execution (audit record)
Dispatch_Run_Item__c One rendered, addressed message per recipient
Dispatch_Section__c A content block (rich text or data table)
Dispatch_DataTable_Config__c / Dispatch_DataTable_Column__c Table source + columns
Dispatch_Action__c Call-to-action buttons (audit now recorded on Dispatch_Run_Item__c)
Dispatch_Settings__c Org throttle state (contact-email limit)
Dispatch_Config__mdt, Dispatch_Role_Mapping__mdt Batch config, role auto-enrollment
ERM_Privacy_Preference__c One entry on a lawyer's personal list of people, addresses, threads or domains excluded from ERM capture (new in 0.8.0; deliberately not reportable or searchable)

Dispatch also extends Activity (lookup back to the Run Item that created a task/event) and the Core Clientverse_Log__c (so Dispatch activity surfaces in Core logging). Since Modules 0.8.0 it also adds two ERM fields to User: ERM_Capture_Enabled__c and ERM_Privacy_Region__c.

Limits & known issues

  • Core dependency. Modules 0.8.0 requires Core 1.1.10 (declared dependency ClientVerse Core Unlocked@1.1.10-2). The floor moved up from 1.1.7 in this release, so an org running Modules 0.4.0 without trouble can still be below it — upgrade Core before Modules. See ../../_package-facts/sync-report.md.
  • Contact email throttling. Org-level daily contact-email limits are enforced through Dispatch_Settings__c; sends beyond the limit are skipped (Skip_Reason__c) until the next reset. Since Modules 0.8.0, sends to User overrides also count against the org's daily email limit.
  • External delivery via Use_External_MAP__c depends on an external marketing platform being configured.
  • AI-authored digest content is not a Dispatch feature. The AI module, which arrived in Modules 0.4.0, ships separately and is not wired into digest rendering — a digest's content comes from its sections and data tables, not from a model. See AI — shipped, early access.