Cloud Radial Integration¶
Beta — limited availability
Customer Forms is in beta and currently only available to a small group of pilot users. If your team can't see this feature in the ZAI portal, that's expected.
ZAI can import an existing Cloud Radial catalog item, auto-configure the webhook on CR's side, and embed a live submission-status iframe back into CR's thank-you page. This is the easiest way to keep existing CR forms in place while moving the workflow automation to ZAI.
What gets configured¶
When you import a CR catalog item with Auto-configure Cloud Radial webhook enabled, ZAI:
- Reads the catalog — fetches the catalog item and its questions from CR.
- Generates a customer form — one ZAI form field per CR question, using the CR
jsonIdas the field name. - Provisions a webhook integration — creates the webhook URL and the field-mapping JSON that tells ZAI how to extract values from CR's payload.
- Writes back to CR — patches the catalog item's
jsonPartnerWebhookfield with the new ZAI webhook URL, and (optionally) replaces thethankYoucontent with an iframe embedding ZAI's status page.
End result: when a CR user submits the form, CR fires the webhook to ZAI, ZAI creates the submission and kicks off the workflow, and the user sees a live status iframe inside CR.
Walkthrough¶
Question to field mapping¶
Each CR question becomes a ZAI form field with:
| CR property | ZAI field |
|---|---|
jsonId |
FieldName |
label |
Label |
type |
FieldType (text / textarea / dropdown / date / number / boolean / lookup) |
isRequired |
Required |
isUserLookup |
M365 user lookup |
placeholder, defaultValue, info |
corresponding ZAI properties |
CR's payload puts answers in Ticket.Questions[] keyed by jsonId. ZAI's auto-generated webhook mapping uses a predicate path per field — for example, a CR question with jsonId: "user-mobile-number" becomes $.Ticket.Questions[?(@.Id=='user-mobile-number')].Value.
Context fields (tenant, ticket id)¶
CR's webhook payload also includes top-level context that workflows commonly need:
| ZAI field name | CR payload path |
|---|---|
tenant_id |
$.Company.CompanyTenantId |
ticket_id |
$.Ticket.TicketId |
company_name |
$.Company.CompanyName |
user_email |
$.User.UserEmail |
You don't need to add form fields for these — when the webhook fires, ZAI injects them into the submission's field values automatically and they flow to the workflow as named parameters.
Workflow field mapping¶
CR-imported forms use CR's jsonId as the field name, which rarely matches your workflow's step-parameter names. The form Edit page surfaces a Workflow Field Mapping card (only on CR-imported forms) so you can connect them.
For each workflow step parameter, pick the form field that supplies its value:
- Open the form's Edit page.
- Scroll to the Workflow Field Mapping card.
- Use the dropdowns, or click Suggest mappings for a fuzzy-name auto-match.
- Required-but-unmapped parameters show a warning badge.
- Click Save Form.
Tip
The Suggest button matches UserMobileNumber ↔ MobileNumber style names. CR's kebab-case ids (user-mobile-number) don't auto-match — adjust those manually after using Suggest.
Status iframe¶
The thank-you iframe ZAI writes back to CR looks like:
<iframe src="https://<your-zai-host>/f/status?ticket=@TicketId"
style="width:100%;min-height:480px;border:0;"
title="Request status"></iframe>
CR substitutes @TicketId with the actual PSA ticket ID at render time. The status page polls every 3 seconds and shows the overall submission status plus per-step workflow progress. Once the workflow finishes (or fails) the page stops polling.
Warning
@TicketId only resolves when the CR catalog item has Send to PSA enabled and a ticket is created. Without it the iframe will show a generic "waiting for your request" view until it times out.
Capturing a real CR webhook payload¶
When you're building the mapping by hand it helps to capture a real CR payload. The wizard's webhook capture button:
- Mints a short-lived capture URL (10 min TTL).
- You paste the URL into CR's
jsonPartnerWebhookfield temporarily. - Trigger a test submission from CR.
- The wizard auto-fills the sample payload textarea and runs path discovery.
After capture, restore the real ZAI webhook URL on CR.