https://oracle-hcm-sim.solutions-8f6.workers.dev Zendesk mode LIVE - pdi-l5aiRun the integration check. The Worker calls your sandbox and reports, check by check, whether authentication, the six groups, the group id map, the clinician end user, the sidebar app install and the Guide article are actually in place, with the fix for anything that is not. It also offers a live ticket test that creates a ticket, comments, solves and deletes it, which is the only way to prove write access end to end.
Worker › Settings › Variables and Secrets. All optional. Without them, tickets are simulated and every screen still works.
The type dropdown offers two choices, Text and Secret. There is no JSON type: the group map goes in as Text, on one line.
| Name | Type | Required | Value |
|---|---|---|---|
ZENDESK_SUBDOMAIN | Text | For live mode | the subdomain only, for example fmc-sandbox. No https://, no .zendesk.com, no trailing slash. |
ZENDESK_EMAIL | Text | For live mode | the email of the agent or admin the API token belongs to. Not a secret, and keeping it as Text lets the integration check show you who the Worker is acting as. |
ZENDESK_API_TOKEN | Secret | For live mode | Admin Center › Apps and integrations › APIs › Zendesk API › add API token. Copy it once, at creation. Secret values are write only: the dashboard will not show it back to you, so store it in your password manager as well. |
CLINICIAN_EMAIL | Text | Recommended | the end-user account you sign in as during the demo. Becomes the requester of the parent ticket and the only identity the help center panel matches. Current value carey.grant89@gmail.com |
ZENDESK_GROUP_MAP | Text | Recommended | one line of JSON, no line breaks: {"HR":360001,"IT":360002,"CLINICAL_IT":360003,"FACILITIES":360004,"CREDENTIALING":360005,"COMPLIANCE":360006}. Type it in a plain text field: a curly quote pasted in from a document is the usual reason this value gets rejected, so the Worker repairs curly quotes and a trailing comma and tells you it did. Ids can be numbers or strings. Keys are matched loosely, so HR_COMPLIANCE, HR / Compliance and COMPLIANCE all mean the same group. The integration check resolves every id against your real groups. |
ZENDESK_FORM_ID | Text | Optional | id of the Clinician Onboarding ticket form, used for the parent request. |
ZENDESK_TASK_FORM_ID | Text | Optional | id of the Clinician Onboarding Task form, used for the sixteen task tickets. |
ZENDESK_FIELD_MAP | Text | Optional | one line of JSON mapping field keys to ticket field ids. The full field spec, with types and option tags, and a copy-ready skeleton, is at /fields. |
CLINICIAN_PASSWORD | Secret | Optional | the help center password set on the clinician at hire. Defaults to a built-in demo password, so this is only needed to use your own. Two Zendesk requirements: the API user must be an admin, and Support › Settings › Security › Global must allow admins to set passwords, which is off by default. The live ticket test on the integration check tells you whether it worked. |
TASK_REQUESTER | Text | Optional | who the departmental task tickets belong to. Default clinician, meaning every onboarding ticket is requested by the person being onboarded. Set to agent to put the task tickets back on the API user and leave only the parent ticket with the clinician. |
DEMO_PIN | Secret | Optional | only if the Worker URL will be shared. Write calls then need the X-Demo-Pin header. |
Values are trimmed, so a stray trailing space will not break anything. Anything left unset simply turns that behavior off: no Zendesk credentials means simulated tickets, no group map means tag based routing, no PIN means no PIN.
Optional KV: bind a namespace as STATE so demo state survives isolate recycling. Without it state lives in memory, which is fine for one presenter in one sitting.
users/create_or_update with the name, role end user and verified true, sets their help center password, then requests every onboarding ticket as that user. Run the demo twice and the same user is reused.Upload fmc-onboarding-sidebar.zip at Admin Center › Apps and integrations › Zendesk Support apps › Upload private app. When it asks for settings, set Worker URL to:
https://oracle-hcm-sim.solutions-8f6.workers.dev
The app is a thin ZAF v2 host. Its UI and logic are served from this Worker at /app.js, so you can change the app without reuploading it to Zendesk.
Open the help center source. It gives you two pieces: a theme snippet for document_head.hbs that loads the status widget, and the article HTML for an article titled Your clinician onboarding journey.
The help center is end-user facing only. The status panel reads HelpCenter.user.email and calls /api/my-status, which returns an onboarding record only when the signed-in email matches CLINICIAN_EMAIL. Anyone else gets "no onboarding request is associated with this account", and an anonymous visitor gets a sign-in prompt. Internal task tickets are tagged internal with no requester, so they never appear in the clinician's request list.
For the help center half of the demo you need a browser signed in as the clinician, in a second profile or an incognito window. After the hire, use:
| Where | Value |
|---|---|
| Sign-in page | https://pdi-l5ai.zendesk.com/hc/en-us/signin |
| Password | FMCOnboarding2026! (built-in default) for whichever clinician you hired |
| Dr. Emily Carter | carey.grant89@gmail.com (the configured inbox) |
| Dr. Marcus Bell | carey.grant89+marcus@gmail.com (plus addressed, same inbox) |
| Sofia Delgado, PA-C | carey.grant89+sofia@gmail.com (plus addressed, same inbox) |
| Priya Raman, RN | carey.grant89+priya@gmail.com (plus addressed, same inbox) |
| Dr. Aaron Fox | carey.grant89+aaron@gmail.com (plus addressed, same inbox) |
The hire sets the password on whichever clinician you pick, so only that one can sign in until you hire another. Plus addressing keeps them separate users in Zendesk while every message still arrives in the one inbox. It works with Gmail and most modern providers.
The hire sets this password on the user each run, so it is always current. If the password step is refused, the integration check says why, and setting it once by hand on that user has the same effect.
This page shows the password in the clear. It is a sandbox end user for a fictional clinician, but treat the Worker URL as internal, and set DEMO_PIN if it will be shared.
| Route | Purpose |
|---|---|
GET /api/state | Demo state. Every onboarding in records, and one of them projected flat. Choose which with ?record=, ?email= or ?ticket=, else the console's focus. |
GET /api/my-status?email= | End-user view, scoped to one signed-in email. No internal ticket ids. |
GET /api/preflight | Integration check against the live sandbox. Read only. |
GET /api/scope-test | Proves the help center payload is scoped to one identity. |
POST /api/smoke-test | Creates, comments on, solves and deletes one throwaway ticket. |
POST /api/hire | Create the employee, parent ticket and unblocked task tickets. Body {"clinicianId":"fox"} picks who, defaulting to the first on the roster. |
POST /api/tasks/:id/complete | Solve a task ticket and create anything it unblocks. |
POST /api/tasks/:id/reopen | Reopen a task. |
POST /api/credential | {"status":"Approved"} or {"status":"Pending"}. |
POST /api/fast-forward | {"mode":"to_gate"} or {"mode":"to_readiness"}. |
POST /api/sync-hcm | Write completion back to Oracle HCM. |
POST /api/solve | Solve the parent ticket. |
POST /api/reset | Reset everything, or one onboarding with {"recordId":"fox"}. |
POST /api/focus | {"recordId":"bell"} switches which onboarding the console shows. |