Use this recipe when you want every incoming inbound inquiry (form, landing-page submission, voice transcript, or imported lead) to run the same handoff: log it, tag it, alert an owner, and optionally draft a reply.
Before you start
- You need the
workflows.createandworkflows.publishpermissions (owner / admin roles by default). - One Inbound inquiry record must already exist in your org — that is the entity the workflow triggers on. Visit Inquiries to confirm.
- See Inquiries vs leads vs opportunities if you are not yet sure which lifecycle stage you are working with.
1. Pick the trigger
- From Workflows click Create workflow.
- In the Trigger dropdown choose Inquiry received
(
inbound.inquiry.received). - Fill in:
- Machine name — lowercase, used internally (e.g.
inquiry-triage). - Display name — what operators will see (e.g. "Inquiry triage").
- Description — a one-liner. The publish review dialog shows it.
- Machine name — lowercase, used internally (e.g.
- Click Create. The Builder opens for the new draft.
Trigger filters
Click the trigger node, then Configure, to narrow the firing set:
| Filter | Use it to… |
|---|---|
| Entity type | Pinned to inquiry. Required. |
| Status | Only fire for a specific InquiryStatus (e.g. new). |
| Owner | Only fire when the inquiry is assigned to a specific user. |
| Tag | Only fire if the inquiry already carries a specific tag. |
| Source channel | Restrict to form, voice, email, etc. |
Leave a filter blank to match every value.
2. Add the first action
Click Add on the right-side panel (or the + after the trigger
node) and pick one of these — they each match a different operator
intent:
a. Log triage to the timeline — Append timeline event
The simplest start. Writes an immutable row to the inquiry's timeline so the audit trail records that triage fired. No customer-visible effect.
- Entity ref — type
inquiry, idPathtrigger.inquiry.id. - Event type —
inquiry.triage_started(free text). - Summary template — e.g.
Triage queued for {{contact.displayName}}.
b. Tag the inquiry — Add tag
Use this to bucket triage queues. Useful when you want a downstream view to filter on "needs reply", "international", "out of scope", etc.
- Entity —
inquiry, idPathtrigger.inquiry.id. - Tag — pick a tag from this org (you must create it first under Tags).
c. Alert an owner — Send Vertiqa notification
Pushes a governed in-app / email notification to the inquiry owner.
- Recipients —
OrgMemberwith idPathtrigger.inquiry.contactIdis rarely what you want; for owner alerts add a downstreamStage-gate Automovefirst, or use a static role recipient. - Template —
workflow.inquiry_received(or a custom template key set up under Notifications). - Channels — usually
Email+InApp. - Notification class —
Operational. - Preference / Channel policy — leave both as
respect_preferences/allow_configuredunless you have a reason to override.
d. Draft a reply for human review — Draft customer reply
Drafts an email back to the original contact and puts it in the operator's review queue. The customer never sees it until a person approves.
- Entity —
contact, idPathtrigger.inquiry.contactId. - Template —
inquiry_acknowledgement. - Draft channel —
Email. - Reviewer role —
OrgRole/manager.
e. Hand off to the Draft Assist agent — Start Agent Library run
Runs the draft_assist AI agent against the inquiry. Output lands as
an artifact in the Agent Library queue for operator review.
- Agent type —
draft_assist(the only Agent Library agent eligible forinbound_inquiry). - Entity ref — type
inbound_inquiry, idPathtrigger.inquiry.id. - Requester —
workflow_actor. - Failure behavior —
stop_workflowwhile you are first testing; switch tonotify_owneronce trusted.
3. (Optional) Branch on status
If you want the workflow to behave differently for, say, "voice" inquiries vs "form" inquiries:
- Click Add → Condition after the trigger.
- Context path —
entity.sourceChannel. - Operator —
equals. - Value —
voice(or whatever channel you care about). - Add downstream actions on the yes branch; add a sibling tree on the no branch.
The publish review dialog reports the branch count, so a healthy
"branch then merge" workflow shows e.g. 2 branches.
4. Validate
Click Validate workflow in the top bar. Autosave runs and the right-side panel reports:
- Saved with warnings — green, you can publish. Warnings (like "Draft customer reply requires human review before any customer-facing output") are informational.
- Errors — red. Each error has a path (
$.nodes[<id>].config.<field>) pointing at the node and field to fix.
Common errors and what they mean:
| Code | Meaning | Fix |
|---|---|---|
required_field_missing | A config field flagged required is empty. | Click the node and fill in the field. |
unsupported_trigger | The trigger ID is unknown or deferred. | Pick a different trigger; the catalog shows which ones are deferred. |
unsupported_action | The action ID is unknown. | Re-select the action — the catalog may have shifted. |
unsafe_context_path | An idPath is not in the trigger's safe-context allowlist. | Use one of the paths shown when you select the trigger. |
stale_reference | A tag / pipeline / stage / owner ID no longer exists. | Pick a current value. |
5. Publish
Click Publish workflow. The review dialog shows:
- Trigger — what fires the workflow.
- Yes path / No path — branches you defined.
- Human review gates / Customer-facing output / Agent launches / Child workflow starts / Stage-gate decisions — buckets of nodes Vertiqa flags as customer-impacting.
- External messages stay manual-review only — confirmation that nothing autonomously emails a customer.
- Immutable workflow version — publishing creates a frozen
workflow_versionsrow. New runs use the new version; existing runs keep the version they started on.
Click Confirm publish workflow. The page swaps to
Version version-<uuid> and the workflow is now armed.
6. Verify it fires
- Open Inquiries and submit a test inquiry from the Portal or trigger one via your live form.
- Wait a few seconds, then open the workflow's Runs tab.
- You should see a new execution row with status
completed,waiting, orfailed. Click Open to see the node timeline.
If nothing shows up:
- Confirm the workflow is published and active in the list.
- Check the inquiry's
sourceChannelmatches any filter you set. - Make sure the inquiry actually went through the
POST /api/v1/crm/inbound-inquiriespath — handcrafted DB rows don't emit the outbox event the runtime listens for.