Building HR Onboarding Prompts That Actually Trigger the Right Actions
1. Mapping HR onboarding stages into action-triggerable prompt logic
This is the first spot where most onboarding automations silently fail—you get a text-based prompt like “Welcome Sam! Fill out these forms” and expect a GPT or chatbot to know what to do next. But unless you’ve explicitly structured your steps in trigger-friendly slices, AI just echoes content instead of activating work.
What finally worked was mapping onboarding stages to clear actions with consistent signal phrases. For example:
- “Employee has accepted the offer” triggers account provisioning (via IT automation script)
- “Complete W-4 and I-9 forms” maps to a Zapier path that sends the PDF and follows up in 24 hours
- “First-day intro checklist” triggers a Notion template insertion + Slack message to hiring manager
The patterns had to be brutally specific. Originally I used more human-friendly language like “when they’ve signed everything”, but GPT-style prompts didn’t pick it up reliably. Only after switching to more literal phrasing that matched my Zap trigger text did it become consistent.
Biggest surprise: ChatGPT actually skipped over the “Send benefits walk-through” step if I didn’t explicitly label it in the original Airtable record title. No amount of context in the long description helped—title field or bust.
2. Prompt chaining GPT calls with conditional delays between them
This is where I broke everything twice trying to be clever with Make.com’s OpenAI module. The logic I wanted looked like this:
1. Prompt GPT to summarize onboarding timeline
2. Wait 10 seconds to simulate time-gapped communication
3. Send second prompt with “What happens after [summary]?”
In practice, using a simple delay module between steps caused the entire scenario to pause—but it also reset the conversation thread between calls. So I ended up passing the thread ID manually into each prompt, but even then Make would sometimes silently drop the history object due to JSON size constraints.
I didn’t find that out until debugging a weird case where the second message acted like it had no memory. The debug log showed:
{“messages”:[], “prompt”:”What comes next?”}
No error, nothing thrown, just an empty context.
I ended up hacking it by saving the GPT transcript manually into a variable and feeding it back. Basically faking memory:
{{previous_prompt_output}}\n\nNow continue the plan starting from that point.
Yes, it’s ugly. But at least it doesn’t randomly forget things under 1000 characters anymore.
3. Using embedded checklist templates instead of freeform response prompts
At first I tried to prompt GPT or Notion AI to “generate a checklist” for new hires. Do not do that. It creates nice-seeming lists that completely ignore local policy and often skip required compliance steps.
Instead, I gave up and built actual page templates in Notion with checkboxes and sample bullets already inside. Then I use automation to inject basic filled-out fields based on applicant profile tags (e.g. remote vs in-office, contractor vs full-time).
What saved it was realizing that Notion’s “Create database item from template” action actually can be triggered inside a Make webhook route. The docs don’t say that. I found it half-accidentally while watching the request log live in another tab. Notion’s internal response included a hidden field called template_used_id
.
That let me do a cleaner handoff. The final flow:
- Email arrives from HR system → Make route triggers
- Route looks up employment type from Airtable
- Correct template triggered in Notion → checklist appears aligned with role
No more “funny AI quirks” like deleting tax form reminders because “it looked redundant.” GPT is great until it starts editing compliance documents with vibes.
4. Building the Slack onboarding bot with staged message logic
I wanted it to feel like a real person was onboarding you, not a notification dump. So I set up a Slackbot flow that sends intro messages over two days, beginning the morning after the hire date.
The Slack API was surprisingly well-behaved, but the limitation I didn’t think about: Zapier’s delay until feature does not retry if Slack DMs silently error (which happens if the new hire hasn’t joined yet).
So Day 1’s “Hey [name], here’s the org chart” message fired fine. But Day 2’s deeper message (“Want to schedule a quick intro with your manager?”) failed randomly. It turns out Slack sometimes returns a 404 for users who haven’t fully authorized the app or been active yet. There’s no retry logic in Zapier for that specific 404—just dies silently.
My fix was janky but worked: I split the delayed message into its own Zap conditionally triggered by a webhook, not queued. Then added a Make scenario that pings HR if the Slack user is still unconfirmed 12 hours later. In practice it only fails ~5% of the time, but that 5% were literally joining their first team. Not the moment for silence.
5. Dynamically updating HR prompts using Airtable record comments
One of the most flexible things I tripped into: using Airtable’s record comment field (not the main field) as a prompt override input for GPT message assembly. The goal was to occasionally tweak onboarding tone or drop in manager-specific notes without rebuilding a whole Zap path.
Turns out you can pipe Airtable record comments through Make and append them into a GPT prompt body with line breaks. That gave HR folks a low-risk way to editorialize with one-off notes like:
“Manager says to reference recent all-hands for team vision.”
Originally I tried using a Notes field in the table row, but people were scared to touch official form fields. Comments felt safer culturally, and it actually worked better technically too—it avoids trigger errors when fields are blank.
The only catch: if you have multiple comments in a thread, Airtable’s API returns them as one giant blob with timestamp lines. I had to regex out the content with:
(?<=\]\s).*?(?=\n)
to strip the metadata. It’s fragile, but incredibly powerful once cleaned up. HR finally stopped Slacking me to “make the intro message sound a little warmer”.
6. Handling double-loaded prompts and accidental action loops
This one hit hard: during onboarding flows, one new hire triggered the same GPT prompt twice—once from the main portal and once from a backfilled record trying to sync their status. That led to two emails, two Notion pages, and ultimately two welcome calls booked with the same manager.
The reason? My Make scenario didn’t check whether the onboarding checklist already existed. Worse, the GPT prompt didn’t care—just kept generating fresh introductions like nothing happened.
I ended up adding a guard clause in the trigger step to stop if a key Slack thread already existed for that user ID. Not bulletproof (since users can delete messages), but better. Also added a fallback prompt override triggered by the Airtable row status: if it says “in progress”, any repeated GPT call appends “This looks like a duplicate entry. Continuing from existing flow.”
Weird behavior I caught late: GPT-generated emails sometimes varied name formatting based on username casing in the database. One hire showed up as “Jane SMITH” in the system, which led to one email saying Hi Jane and another saying HI JANE SMITH. Now I normalize names before prompt injection.
7. Real-life HR reactions to early failures and fixes
Early version was so bad that one manager just forwarded the GPT-generated day-one plan to the hire and said, “Just read this, I don’t know who made it.” The formatting didn’t carry over. And it referred to steps they’d already done because the context window had expired.
I started adding small GPT instructions like “Do not repeat steps already completed” but it didn’t always listen. What actually helped was injecting a real onboarding_steps_completed array from Airtable, like:
{"steps_completed": ["Account provisioned", "Contract signed"]}
Then I’d prompt with:
“Build a message beginning with ‘Welcome!’ that introduces the next three steps only. Use the data from this array to avoid repeats…” and pass that JSON directly into the context body.
After this update, got Slack feedback from a hiring lead: “This is freaky good now. Has it been a human this whole time?” Which is when I knew it finally started doing the right things—instead of guessing.
Still lost one new hire to a broken Zap during probation check-in though. That one fired early and asked “how’s your first 90 days going?” after 2 weeks. Missed the Airtable date delta condition by… 74 days.