Home · Case studies · WhatsApp CV trigger
Build · Recruitment automation

When a CV gets shortlisted, WhatsApp fires in 2 seconds.

A production-grade trigger that connects the Select CV button on azizsaif.com/ai to the WhatsApp Cloud API. The recruiter gets an instant template alert; the candidate gets a shortlist confirmation. Full Node.js + Meta Graph v23.0 implementation, ready to deploy on Vercel.

► Try the WhatsApp service ↗ ► Watch the full walkthrough

Live app — create your own login & password at wcapp.fcits.ae, then follow the steps below.

Try it — step by step

Create a login, shortlist a candidate, and watch WhatsApp fire in real time. The player below walks the whole process; do it yourself on the live app.

► Watch the full video walkthrough →

  1. Open the app & create your loginGo to wcapp.fcits.ae and sign up with an email and password — takes a few seconds.
  2. Open the CV boardYou'll see incoming candidates with name, role and an AI match score.
  3. Pick a candidate & click “Select CV”The button securely POSTs to the action endpoint.
  4. WhatsApp fires in ~2 secondsThe Cloud API sends the approved template to the recruiter — and the candidate.
  5. Reply & trackReplies and delivery receipts route back through the webhook into your CRM.
wcapp.fcits.ae/signup
wcapp.fcits.ae/cv-board
SKSana K.Sales Executive · 92% matchSelect CV
RMRahul M.Accountant · 88% matchSelect CV
AAAisha A.Marketing · 84% matchSelect CV
wcapp.fcits.ae/cv-board
SKSana K.Sales Executive · 92% match✓ Selected
Firing WhatsApp via the Cloud API…
Step 1 of 4 Create your login & password
► Try the WhatsApp service ↗

Every screen, step by step

The full flow, screen by screen — exactly what you'll do on wcapp.fcits.ae. The complete video walkthrough lives on the WhatsApp services page.

wcapp.fcits.ae/signup
Emailyou@company.com
Password••••••••
CompanyFC IT Solutions
Create account →
1 Create your login

Open the app and sign up with your email, a password and your company — takes seconds.

wcapp.fcits.ae/login
Emailyou@company.com
Password••••••••
Log in →
2 Log in

Sign in with the credentials you just created.

wcapp.fcits.ae/dashboard
12Open roles
248Candidates
36Shortlisted
31WhatsApps sent
3 Your dashboard

See your roles, candidate pipeline and how many WhatsApp alerts have fired.

wcapp.fcits.ae/cv-board
SKSana K.Sales Executive · 92% matchSelect CV
RMRahul M.Accountant · 88% matchSelect CV
AAAisha A.Marketing · 84% matchSelect CV
4 Open the CV board

Incoming candidates with name, role and an AI match score.

wcapp.fcits.ae/cv-board/sana-k
SKSana K.Sales Executive
Match 92%
Visa Employment · transferable
Languages English, Arabic, Hindi
Experience 6 yrs · Dubai retail
Select CV
5 Review a candidate

Open the profile — match score, visa status, languages and fit at a glance.

wcapp.fcits.ae/cv-board
SKSana K.Sales Executive · 92% match✓ Selected
Firing WhatsApp via the Cloud API…
6 Click “Select CV”

The button securely calls the API and fires the WhatsApp template in ~2 seconds.

7 Recruiter gets the alert

The recruiter's phone buzzes with the approved template instantly.

8 Candidate gets confirmation

The candidate is notified automatically — replies route back through the webhook.

How it works

Recruiter clicks "Select CV" on /ai/cv-board.html │ ▼ POST /api/cv-selected ── (validates shared secret) │ ▼ lib/whatsapp.js → POST graph.facebook.com/v23.0/{PHONE_ID}/messages │ ▼ WhatsApp delivers approved template to recruiter (and optionally candidate)

The four key files

Action trigger

api/cv-selected.js

The endpoint the button hits. Validates shared secret, calls WhatsApp, returns the message ID.

WhatsApp client

lib/whatsapp.js

Single source of truth — sendTemplateMessage() and sendTextMessage() against Meta Graph v23.0.

Webhook

api/webhook.js

Receives inbound replies and delivery / read receipts. Handles Meta's verify handshake.

Front-end demo

public/ai/cv-board.html

Drop-in UI with working Select CV buttons that POST to the action endpoint.

The core send function

// lib/whatsapp.js
const URL = `https://graph.facebook.com/v23.0/${PHONE_ID}/messages`;

async function sendTemplateMessage(to, templateName, languageCode, bodyParams = []) {
  const payload = {
    messaging_product: 'whatsapp',
    to,
    type: 'template',
    template: {
      name: templateName,
      language: { code: languageCode },
      components: [{
        type: 'body',
        parameters: bodyParams.map(t => ({ type: 'text', text: String(t) }))
      }]
    }
  };
  const res = await fetch(URL, {
    method: 'POST',
    headers: { Authorization: `Bearer ${TOKEN}`, 'Content-Type': 'application/json' },
    body: JSON.stringify(payload)
  });
  return res.json();
}

The action trigger

// api/cv-selected.js  — fires when "Select CV" is clicked
module.exports = async function handler(req, res) {
  if (req.headers['x-api-secret'] !== process.env.API_SHARED_SECRET)
    return res.status(401).json({ error: 'Unauthorized' });

  const { candidateName, candidateRole, candidatePhone, jobTitle, recruiterName } = req.body;

  // 1) Ping the recruiter
  await sendTemplateMessage(
    process.env.RECRUITER_WHATSAPP_NUMBER,
    'cv_selected_alert', 'en',
    [recruiterName, candidateName, candidateRole, jobTitle]
  );

  // 2) Optionally notify the candidate
  if (candidatePhone) {
    await sendTemplateMessage(
      candidatePhone, 'candidate_shortlisted', 'en',
      [candidateName, jobTitle]
    );
  }
  res.status(200).json({ ok: true });
};

The approved template body

Hi {{1}}, a new CV was just shortlisted on azizsaif.com/ai.

👤 Candidate: {{2}}
💼 Role: {{3}}
📌 Position: {{4}}

Open the dashboard to review the full profile.

Submit this in Meta Business → WhatsApp Manager → Message Templates under category UTILITY. Approval typically takes under 5 minutes.

Setup in 15 minutes

  1. Create a Business app at developers.facebook.com and add the WhatsApp product.
  2. Copy the Phone Number ID, Business Account ID, and a temporary token from API Setup.
  3. In Business Settings → System Users, generate a permanent token with whatsapp_business_management + whatsapp_business_messaging.
  4. Create the two templates (cv_selected_alert, candidate_shortlisted) and wait for approval.
  5. Set the webhook callback to https://azizsaif.com/api/webhook with your verify token, subscribe to messages.
  6. Deploy to Vercel — vercel --prod — and add all env vars.

The code

The complete source — Node.js, Express, front-end, templates, Meta setup guide — lives in this repo:

Where this fits in the recruitment stack

You don't program it. You show it once.

Behind this pipeline is the engine it runs on: a Stackbirds agent learns a recruiter's job by watching it done once — then repeats it forever, on its own. Same idea as the trigger above: show the task, don't script it.  stackbirds.xyz ↗

1

Watch

A recruiter screens one batch of CVs once — the agent records every rule, score and decision.

2

Learn

It self-trains on your exact criteria, tone and edge cases — visa status, languages, role fit. No prompting each time.

3

Run

It runs the whole pipeline 24/7 — firing the WhatsApp trigger included — and hands anything unusual back to a human.

► Meet the agent · stackbirds.xyz ↗
More from the AI workforce

Also automated: hiring & accounting

AI Hiring

An AI workforce that hires

Job brief → CVs from Zoho → AI screening → an auto email & WhatsApp invite with a Google Meet link and a calendar slot. Voice-guided, screen by screen.

See the hiring demo →
AI Accounting

…and keeps the books

Scanned bills → Claude captures them → typed into Zoho Books / QuickBooks in the browser → reconciled → a board-ready P&L you can download as HTML, PDF & Excel.

See the P&L demo →

Want this wired into your hiring funnel?

I'll set up the Meta account, get templates approved, deploy, and hand you the keys.

Try the live app ↗ WhatsApp Aziz →