Use caseYour customers follow their order on WhatsApp, and you know they read it.
As soon as an order moves to shipped, the customer gets their tracking message on WhatsApp. Your admin sees it delivered, then read. If they reply, the AI agent takes the conversation.
The shipment, the tracking, the read receipt: 38 seconds.
From the request in Claude Code to the order marked read, on a real WhatsApp conversation.
How it flows.
Step by step, for real.
- 1
The shipping template
Claude Code creates it with
create_template: utility category, the first name and the order number, a “Track my parcel” button to your tracking page. Meta approves it, often within minutes, andget_template_statusconfirms it. - 2
The send on shipping
When an order moves to shipped, your app sends the template with
POST /v1/sends, with an idempotency key taken from the order: replayed within 24 hours, it does not send twice. The send identifier it returns is stored on the order. - 3
Delivered, then read
Your route, declared with
create_webhook_endpoint, receivesmessage.deliveredthenmessage.read(unchecked by default, you tick them on purpose): it finds the order by the send identifier and shows it “Read”. - 4
If they reply
Their reply opens a conversation, taken by the AI agent that answers for the workspace (
set_default_responder), with your delivery policy in its knowledge. On Pro, your team can take over in the console’s Inbox.
What you type in Claude Code
With the plugin installed, one sentence is enough: Claude Code creates the template, wires the send and the route, and tests.
when an order moves to shipped (lib/orders.ts), send the customer a whatsapp with tracking, and mark in the admin when they read it. if they reply, the AI agent takes over
The send on shipping, as Claude Code writes it
import { messagingme } from './messagingme';
// What this case needs from your orders: Claude Code wires these two functions to your own database.
const todo = (what: string): never => { throw new Error(`lib/orders.ts: ${what} is not connected yet`); };
export async function saveSendId(orderId: string, sendId: string): Promise<void> { return todo('saveSendId'); }
export async function setWhatsappStatus(sendId: string, status: 'delivered' | 'read'): Promise<void> { return todo('setWhatsappStatus'); }
// Call it when an order moves to shipped. The template order_shipped has two variables, the first name then the
// order number, and a URL button to your tracking page.
export async function notifyShipped(order: { id: string; phone: string; firstName: string }): Promise<void> {
const send = await messagingme.POST('/v1/sends', {
body: {
target: { template: { name: 'order_shipped', language: 'en' } },
recipients: [{ phone: order.phone, variables: { firstName: order.firstName, order: order.id } }],
params: [
{ position: 1, source: { type: 'variable', key: 'firstName' } },
{ position: 2, source: { type: 'variable', key: 'order' } },
],
},
// Replayed within 24 hours (the life of the key), the shipment does not send twice.
idempotencyKey: `shipped-${order.id}`,
});
// The delivery and read receipts carry this sendId: it ties them back to the order.
await saveSendId(order.id, send.sendId);
}
lib/orders.ts · all the code in the guide
What you pay.
- The Free plan is enough to start: 1,000 templates sent a month and 100 contacts, the API and the MCP server included; beyond that, Pro.
- The AI agent is paid from the prepaid AI credit, per answer.
- Meta bills your business directly for each utility template, according to its rate card and the customer’s country.
Frequently asked questions.
Must the customer have agreed to receive messages?
Meta asks that the person agreed to be contacted on WhatsApp, for example by ticking it at checkout. A customer who replies STOP receives nothing more.
What if the customer turned off read receipts?
WhatsApp then never sends the read receipt: the order stays “Delivered” in your admin.
How much does a notification cost?
Free includes 1,000 templates a month. Meta bills each utility template to your business, according to its rate card and the customer’s country.
What if the send is replayed?
Within 24 hours, the same idempotency key, taken from the order, returns the same send: the customer gets one message.
Set up your notifications today.
The plugin in two commands, then the sentence above in Claude Code. No account to create.