Zendesk sends ticket webhooks to JAMS Incident Management, and JAMS calls / SMS-es / pushes your on-call team until someone responds. When they Acknowledge or Solve, JAMS writes the new status back into the Zendesk ticket and adds an internal note β so the ticket reflects who responded and how, without anyone double-bookkeeping. Zendesk tracks the work; JAMS makes sure a human actually picks up an urgent ticket.
Plan availability: The Zendesk integration is included on the Professional plan and up. See Plans & Billing.
Two directions. This page covers Zendesk β JAMS (an urgent ticket pages your on-call team). JAMS can also go the other way and open a brand-new Zendesk ticket from any other alert β see Open a Zendesk ticket from a JAMS alert near the bottom.
What you'll get
After setup:
- An urgent Zendesk ticket is created β a Trigger fires a Webhook to JAMS β recipients get a call (and/or SMS/push/email/Teams/Slack per your flow)
- Recipients press 1 to Acknowledge or 2 to Solve β or do nothing and escalation continues to the next person
- Acknowledge sets the Zendesk ticket to Open; Solve sets it to Solved
- A private (internal) comment is added to the ticket recording who acted and how
- If the ticket is Solved or Closed directly in Zendesk, JAMS stops escalating automatically
- The
/incidentspage shows everything in flight with one-click Acknowledge / Solve buttons
What you'll need
- A Zendesk Support account (a sandbox / test instance is fine for trying it out).
- An agent with permission to update tickets, plus an API token (Zendesk Admin Center β Apps and integrations β Zendesk API β Token access β Add API token). API token is the recommended auth; email/password (Basic) and a pre-issued OAuth token are also supported.
- Admin access in Zendesk to create a Webhook and a Trigger.
Step 1 β Create the Zendesk connection in JAMS
The connection bundles your API credentials, the recipients, the escalation policy, and the per-flow webhook URL.
- In JAMS, open Integrations β Zendesk from the sidebar.
- Click Create a Zendesk Connection and fill in:
- Connection name β anything memorable (e.g.
support-urgent). - Subdomain β the part before
.zendesk.com(e.g.acmeforacme.zendesk.com). - Authentication β API token (agent email + token) is recommended. Basic (email + password) and OAuth token are also available.
- Who gets notified β pick individuals, groups, or an on-call rotation, plus the channels (Call is the most reliable for urgent tickets).
- Escalation interval β how long to wait for each recipient to acknowledge before moving to the next.
- Connection name β anything memorable (e.g.
- Save Connection. JAMS shows you the webhook URL β it looks like
https://<your-JAMS-backend-host>/api/zendesk/webhook/{tenantId}/{flowId}. Copy it; you'll paste it into Zendesk next.
The credentials are used only for write-back. Inbound tickets authenticate by the secret webhook URL itself, but pushing Acknowledge / Solve back into Zendesk requires the API credentials you entered here. With API token auth, JAMS sends the standard
{agent-email}/tokenBasic header. Without working credentials, JAMS can still call your team β it just can't update the ticket.
Step 2 β Create the Webhook in Zendesk
- In Zendesk, go to Admin Center β Apps and integrations β Webhooks β Create webhook.
- Connect with: Trigger or automation.
- Name:
JAMS on-call. - Endpoint URL: paste the webhook URL from Step 1.
- Request method: POST. Request format: JSON.
- Authentication: None β the JAMS webhook URL is itself the secret.
- Create webhook (you can use the Test button later, once the Trigger is built).
Step 3 β Create the Trigger that fires the webhook
This is what makes Zendesk tell JAMS "an urgent ticket just came in."
- Go to Admin Center β Objects and rules β Business rules β Triggers β Create trigger.
- Name:
Notify JAMS on urgent. - Conditions β Meet ALL: add Ticket: Priority
isUrgent (and optionally Ticket: StatusisNew, so you only page on brand-new urgent tickets). - Actions: add Notify by β Active webhook, choose the webhook from Step 2.
- In the JSON body that appears, send the ticket fields.
ticketIdis required; the rest are recommended:
{
"ticketId": "{{ticket.id}}",
"subject": "{{ticket.title}}",
"description": "{{ticket.description}}",
"priority": "{{ticket.priority}}",
"status": "{{ticket.status}}"
}
- Create / Save.
ticketIdis the numeric ticket id ({{ticket.id}}) β JAMS stores it when the webhook arrives so it can update the exact ticket later via the Zendesk REST API. Don't substitute the external id or a custom field.
Step 4 β Add close-sync (so JAMS stops when the ticket is solved)
Without this, someone solving the ticket inside Zendesk wouldn't stop JAMS from calling the on-call. Create a second Trigger:
- Create trigger β Name:
Tell JAMS ticket solved. - Conditions β Meet ALL: Ticket: Status
isSolved (you can add another for Closed). - Actions: Notify by β Active webhook β the same webhook, with the same JSON body as Step 3.
- Save.
JAMS treats an incoming status of solved or closed as "stop escalating" and cancels any pending notifications.
How the two-way flow works
Zendesk ticket created / updated (Priority: Urgent)
β
βΌ
Trigger β Webhook POST β /api/zendesk/webhook/<tenant>/<flow>
β
βΌ
JAMS creates Incident (stores ticket id) + fires flow notifications (call, SMS, pushβ¦)
β
βΌ recipient presses 1 / 2 (or clicks button on /incidents)
β
βΌ
JAMS PUTs <subdomain>.zendesk.com/api/v2/tickets/<id>.json
{ status: open | solved, comment: { body, public:false } }
β
βΌ
Zendesk ticket reflects the new status + internal note
JAMS escalation stops (notifications cascade to "acknowledged")
Voice-call menu
When the call lands, after the ticket summary you'll hear:
"Press 1 or say acknowledge to acknowledge this ticket in Zendesk. Press 2 or say solve to solve it in Zendesk."
- 1 / "acknowledge" β Zendesk ticket β Open, with an internal note. (Zendesk has no "in progress" status; moving New β Open signals an agent is engaged.) Escalation stops; the ticket stays open.
- 2 / "solve" β Zendesk ticket β Solved, with an internal note. JAMS marks the incident resolved.
You can also press 3 to replay the message at any time.
Why Solved, not Closed? Zendesk closes solved tickets automatically after a set period, and its API generally won't let an integration set Closed directly. JAMS sets Solved, which is the correct agent-driven resolution state.
SMS replies
Reply to the alert SMS with 1 for Acknowledge or 2 for Solve. JAMS confirms with a short reply. Same Zendesk-side effect as the voice menu.
Teams / Slack / push
If your flow delivers to Teams or Slack, the alert card carries Acknowledge / Solve buttons that do the same write-back. Push and email deliver the alert and can acknowledge the JAMS escalation, but only the interactive channels (voice, SMS, Teams, Slack, and the /incidents buttons) push status back into Zendesk.
/incidents page
Open /incidents. Zendesk tickets appear alongside other sources with Acknowledge and Solve buttons. Buttons hit the same backend code as the voice/SMS path β Zendesk stays in sync.
Auto-resolve
When Zendesk reports the ticket as Solved/Closed (via the close-sync Trigger from Step 4), JAMS:
- Marks the incident resolved.
- Cancels any queued/sent notifications in the same group (no more pages for a ticket that's already handled).
- Logs
zendesk.auto_resolvedin the audit trail.
Force-close (orphan incidents only)
If an incident gets stuck because the Zendesk ticket behind it no longer exists (deleted, or a test payload), a normal Solve would try to PUT Zendesk and fail. For exactly these cases the /incidents page has a Force close button that marks the incident resolved on the JAMS side and cancels pending notifications without calling Zendesk. It's logged as zendesk.force_closed so it's distinguishable from a real solve.
Open a Zendesk ticket from a JAMS alert
Everything above is Zendesk β JAMS. JAMS can also go the other way: for alerts that didn't come from Zendesk β a JAMS job failure, an email / API / webhook alert, or a manual send β a recipient can open a new Zendesk ticket straight from the alert, without leaving the phone call or chat. Great for turning "something just broke" into a tracked ticket in one step.
Opening a ticket also acknowledges the alert. It's a single Create + Acknowledge action, so JAMS stops escalating the moment the responder files the ticket β no separate "press 1 to acknowledge" needed.
The new ticket is pre-filled from the alert:
| From the alert | Zendesk ticket field |
|---|---|
| Title / flow name | Subject |
| Message body | First comment (internal) |
| Severity | Priority (CriticalβUrgent, ErrorβHigh, WarningβNormal, InfoβLow) |
Because the new ticket is linked back to the alert, everything in How the two-way flow works then applies to it β a later Acknowledge/Solve keeps it in sync, and solving it inside Zendesk stops any remaining JAMS activity.
Turn it on (admin, once per flow)
- Make sure a Zendesk connection exists (Step 1 above). The ticket is created with those credentials, so the agent needs permission to create tickets.
- Open the flow you want β in New flow, Edit flow, or AI Helper.
- In the flow's settings, tick "Let recipients open a ticket from this alert," choose Zendesk, and pick the connection. Save.
The option only appears when your plan includes Zendesk and a connection is configured. It isn't offered on Azure Monitor flows β those alerts are already tied to their own incident.
How a recipient opens one
However the alert reaches them, there's now one extra choice on the menu:
- Voice call: the menu adds a "create ticket" option β press the number it announces, or say "create ticket."
- SMS: reply with the digit shown next to "create ticket."
- Teams / Slack: a Create Zendesk ticket button on the alert card.
- Notifications page: a π« Zendesk ticket button next to any active alert on /notifications.
JAMS confirms with the new ticket number β e.g. "Created Zendesk ticket #4821 and acknowledged the alert." Choosing it twice is safe: the second press just reports the ticket that's already open, never a duplicate.
Verify it works (end-to-end)
- In Zendesk, create a new ticket with Priority = Urgent (matching your Trigger condition).
- Within a few seconds, the on-call recipient should get a JAMS call / SMS / push.
- Press 1 on the call (or reply
1). In Zendesk, open the ticket β Status should flip to Open and an internal note should appear. - Press 2 (or click Solve on
/incidents) β the ticket moves to Solved. - Create another urgent ticket, then Solve it directly in Zendesk β JAMS should stop escalating within ~30 seconds.
Tip: Zendesk's webhook editor has a Test button (and an Activity log under the webhook) that shows the exact payload and the HTTP response from JAMS β invaluable when a Trigger isn't firing as expected.
Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
| JAMS never calls | The Trigger didn't fire, or it isn't wired to the webhook | Confirm the Trigger conditions match your test ticket (Priority Urgent), and its action is Notify by β Active webhook pointing at the right webhook. Check the webhook's Activity log for delivery attempts. |
| Webhook Activity log shows a non-2xx from JAMS | Bad JSON body or missing ticketId | Make sure the body includes "ticketId": "{{ticket.id}}" and is valid JSON. |
| Calls land, but pressing 1 says "Zendesk refused our credentials." | Wrong agent email / API token, or token access disabled | Re-enter the email + API token in the Zendesk connection (Edit). Confirm Token access is enabled in Admin Center β Zendesk API. |
| Pressing 1 says "Our Zendesk account is not authorized to update this ticket." | The agent lacks permission to update tickets | Use an agent (not an end user / light agent) with ticket-edit rights. |
| Pressing 2 (Solve) says "Zendesk rejected the update (invalid status transition)." | The ticket can't move to Solved (e.g. required fields unset) | Make sure the ticket meets your account's conditions for Solved (required fields, etc.), or solve from within Zendesk. |
| Pressing 1 says "Zendesk no longer has this ticket." | The ticket id doesn't exist (deleted) | For a genuinely deleted ticket, use Force close on /incidents. |
| Calls keep coming after the ticket was solved in Zendesk | The close-sync Trigger (Step 4) isn't firing | Confirm a Trigger fires on Status is Solved and notifies the same webhook with the same body. |
| "Create ticket" isn't offered on the alert | The flow's toggle is off, your plan doesn't include Zendesk, no connection is configured, or it's an Azure Monitor flow | Enable "Let recipients open a ticket from this alert" on the flow, confirm the plan and a saved connection. Azure Monitor flows don't support it. |
| "Create ticket" fails with "Zendesk connection not configured" or an authorization error | No usable connection, or the agent can't create tickets | Add/fix a Zendesk connection (Step 1) and use an agent with ticket-create rights. |
If you hit something not on this list, capture the time of the failed call/SMS and a screenshot of the /incidents audit log (plus the webhook's Zendesk Activity entry), then reach out to support β that gives us enough to trace through the backend's [Zendesk] log lines.