How to Build WhatsApp Interview Scheduling and Shift Alerts for HR Teams

Most HR teams in Pakistan and India face the same issue every week. You send fifty emails to schedule interview slots, and five candidates reply on time. Or you send an email about an open nursing or factory shift for tomorrow morning, and nobody sees it until noon the next day.
Email delivery is reliable, but open rates for HR correspondence in our region are low. SMS gets delivered, but candidates rarely reply to 5-digit shortcodes. WhatsApp solves the response speed problem, but trying to handle interview scheduling or shift alerts manually from an Android phone in the office breaks down as soon as you scale past ten hires a week.
This guide walks you through setting up an automated system for interview invitations, confirmation callbacks, and urgent shift alerts using the official WhatsApp Business Platform (Cloud API).
What You Need Before Starting
Do not buy a bulk SMS software tool or install an unofficial WhatsApp automation script from GitHub. Unofficial scripts use web scraping, and Meta bans numbers using them within 24 to 48 hours. Once a business number is banned, getting it reinstated is nearly impossible.
Before you write any code or configure a workflow, ensure you have these five items ready:
- A Verified Meta Business Manager Account: Your company must be registered with legal documentation (such as SECP registration in Pakistan or GST/MCA documents in India).
- A Dedicated Phone Number: This number cannot be currently active on any normal WhatsApp or WhatsApp Business app. If it is active, you must delete the WhatsApp account from the phone app first.
- Access to Meta Cloud API or an API Provider: You can send API requests directly to Meta's servers hosted on AWS, or use a platform like WA Link to manage message templates and webhooks through an interface.
- A Webhook Listener: A simple endpoint written in Node.js, Python, or PHP, or a workflow engine like n8n or Make, set up to receive incoming JSON payloads from Meta.
- Pre-approved Message Templates: WhatsApp does not allow you to send freeform text to a user who has not messaged you in the last 24 hours. Every single interview invite and shift notification starts with an approved template.
Understanding Template Setup for HR Workflows
When an HR team reaches out to a candidate or an employee off-shift, it is a business-initiated conversation. Meta classifies these as Utility or Marketing conversations. Interview reminders and shift alerts fall under Utility, provided you do not include sales pitch language.
Templates require specific formatting. Variables are defined using double curly braces like {{1}}, {{2}}, and so on.
1. Interview Schedule Template
Submit this exact text structure in your Meta Business Manager under Account Tools > Message Templates:
Category: UTILITY
Template Name: hr_interview_invitation_v1
Language: English (or Urdu/Hindi if preferred)
Body:
Hello {{1}}, thank you for applying for the {{2}} role at {{3}}. We would like to invite you for an interview on {{4}} at {{5}}. Please confirm your availability by clicking a button below.
Buttons (Quick Reply):
- Button 1: Confirm Slot
- Button 2: Request Reschedule
2. Open Shift Alert Template
For operations with rotas—like security agencies, hospitals, fulfillment centers, or restaurants—you need quick responses when someone calls in sick.
Category: UTILITY
Template Name: hr_shift_alert_urgent
Language: English
Body:
Urgent Shift Available: Hi {{1}}, an open shift is available for {{2}} on {{3}} from {{4}} to {{5}} at {{6}}. Base rate: {{7}}. First to accept gets assigned.
Buttons (Quick Reply):
- Button 1: Accept Shift
- Button 2: Decline
Meta takes between two minutes and six hours to review these templates. If your template gets rejected, check if you accidentally used a URL shortener like bit.ly, or left trailing spaces inside the variable tags like {{ 1 }}. That triggers Meta Error 132001 immediately.
Step-by-Step Implementation Walkthrough
Here is how the system functions in practice, from the initial API trigger to capturing candidate responses in your database.
Step 1: Dispatching the Interview Invite
When your Applicant Tracking System (ATS) or internal HR dashboard moves a candidate to the "Shortlisted" stage, your server sends an HTTP POST request to the Graph API endpoint:
https://graph.facebook.com/v19.0/YOUR_PHONE_NUMBER_ID/messages
The JSON body contains the phone number with country code (e.g., 923001234567 or 919876543210, omitting the + or leading zeros), the template name, and parameter values matching your variables.
If you use WA Link, this step can be done via our HTTP endpoints or directly inside our dashboard broadcast manager if you prefer uploading a CSV file without writing backend integration code.
Step 2: Confirming Delivery
When Meta accepts the API request, your server receives an immediate HTTP 200 response with a JSON body containing a messages.id value (e.g., wamid.HBgL...).
Save this message ID in your database linked to the candidate's record. This is how you correlate late replies and delivery statuses.
Shortly after, Meta hits your configured webhook URL with status updates. Look for three specific statuses in the incoming status object:
| Status Tag | What It Means | HR Action Required |
|---|---|---|
Step 3: Handling Common API Failures
If the message status returns failed, check the error code in the webhook payload. Two error codes occur repeatedly in HR workflows:
- Error 131026 (Message Undeliverable): The phone number is not registered on WhatsApp, or the user has blocked your business number, or they live in a country where WhatsApp platform access is restricted. Do not attempt to resend to this number via WhatsApp. Route it automatically to SMS.
- Error 131047 (Re-engagement Required): You tried to send a standard freeform message (not a pre-approved template) to a candidate after the 24-hour window closed. Change your outgoing payload to use an approved template instead.
Step 4: Capturing Candidate Responses via Webhook
When the candidate clicks "Confirm Slot" on their phone, Meta sends a web-hook event containing a button_reply object to your server. The payload looks like this in raw structure:
- Sender ID: Candidate's phone number
- Payload Type:
interactive - Button Title: Confirm Slot
- Button ID / Context: Maps back to original
wamid.HBgL...
Your server parses this JSON, updates the candidate status in your database from "Pending Confirmation" to "Confirmed", and sends a secondary automated confirmation message containing the interview room link or location map pin.
Because the candidate clicked a button, a 24-hour service window opens. Within this 24-hour window, your HR staff or automated system can reply with standard, un-templated text messages for free.
Managing Race Conditions in Urgent Shift Alerts
Sending shift alerts introduces a concurrency problem that standard interview scheduling does not. If you have 1 open shift and send a broadcast template to 15 off-duty workers, three of them might click "Accept Shift" at nearly the same second.
If your webhook receiver handles incoming requests asynchronously without locking, all three workers might receive a message saying "Shift Confirmed! See you at 8:00 AM." This creates severe operational chaos on site.
To avoid this, handle shift acceptance logic through a database transaction with row-level locking:
- Receive webhook notification that Worker A clicked "Accept Shift".
- Open database transaction and select the shift record with a lock (e.g.,
SELECT * FROM shifts WHERE id = 1042 FOR UPDATE). - Check if
status == 'OPEN'. - If
OPEN: Set status toFILLED, assignworker_id = Worker A, commit transaction, and fire a confirmation message to Worker A. - If
FILLED: Commit transaction, and send an immediate automated follow-up message to Worker A: "Sorry, this shift was just filled by another team member." - Optionally, send a message to the remaining 14 workers letting them know the shift is now closed so they don't keep trying to respond.
What Does NOT Work (Avoid These Traps)
We see teams make the same mistakes when transitioning from phone calls to WhatsApp automation. Here are things you should avoid doing:
1. Putting URL shorteners inside templates
If your interview confirmation template includes links like bit.ly/interview-loc or tinyurl.com/meet-link, Meta’s automated scanners will flag it as potential phishing. Templates containing link shorteners are rejected almost immediately. Use full domain URLs like https://careers.yourcompany.com/locations/office1 or use standard text instructions.
2. Relying on WhatsApp for under-15-minute shift handovers
WhatsApp delivery is usually fast, taking 2 to 5 seconds. However, if a worker is on a weak 2G/3G mobile network in a suburban area, delivery can lag by 10 to 20 minutes. If you need a shift filled in under fifteen minutes, do not send a WhatsApp template and wait. Pick up the phone and call.
3. Expecting candidates to type freeform dates
If you send a template asking: "Reply with what time you are free tomorrow," candidates will write things like "after lunch", "5pm end of day", "kal 3 bjay", or "15:00 sharp". Your natural language parser will break. Always use structured Quick Reply buttons or give specific options like: "Reply 1 for 10 AM, Reply 2 for 2 PM".
4. Expecting WA Link or Meta to replace your database
Tools like WA Link provide the communication infrastructure, multi-agent chat interface, broadcast engine, and API links. We do not maintain your company’s internal HR records, shifts roster, or interview database. Your CRM, ATS, or custom database remains the master record; WhatsApp is purely the message delivery channel.
What to Do Next
Start small before trying to automate your company's entire talent acquisition funnel.
- Draft your interview reminder and shift alert message texts.
- Open your Meta Business Manager and submit those two templates under Utility.
- Set up a simple webhook endpoint on your web server that logs incoming POST payloads to a file so you can inspect how WhatsApp structures responses.
- Send a test template to your own personal phone number using Meta's API sandbox or the WA Link API dashboard.
- Verify that clicking a button on your phone triggers a valid webhook payload on your server.
- Once your webhook correctly updates test records, plug it into your staging ATS or HR portal.
Frequently Asked Questions
Can we send WhatsApp interview invites to candidates who haven't saved our business number?
Yes. Because you are using official WhatsApp Business Platform templates, the message arrives directly in their WhatsApp inbox regardless of whether they have saved your corporate number in their phone contacts. However, phone numbers in green badge / official accounts show your company name directly instead of an unknown number, which raises response rates.
How much does it cost to send interview invites and shift alerts on WhatsApp?
Meta charges per 24-hour conversation window based on the user's country code. Rates vary slightly by market, with Utility conversations costing significantly less than Marketing conversations. You do not pay per individual message sent within that open 24-hour window. You can verify current Meta conversation rates directly on the official Meta WhatsApp Business Platform Pricing documentation.
What happens if a candidate sends a audio note or document instead of clicking a button?
Meta sends a webhook event with a type set to audio, document, or text. If your automated logic only checks for button_reply, it will ignore this message. Your webhook handler should have an fallback: if an unexpected payload type arrives for a candidate with an active interview status, assign that chat thread to a human HR coordinator in your multi-agent inbox.
Can we use our primary corporate office landline number for WhatsApp API?
Yes. Meta supports landline numbers for WhatsApp Business Platform accounts. During verification, instead of choosing "SMS verification", select "Voice Call verification". Meta's automated phone system will call your office landline and read out a 6-digit verification code to enter in the setup screen.