Build notes › topic
WhatsApp platform
How Meta's WhatsApp Business Platform actually behaves: what its APIs accept, what they accept and then silently ignore, what changes on a date Meta has announced, and who sits between a business and Meta.
Covered here: 24-hour customer service window · agent_decision_tree · AiSensy alternative · binary excel xlsx sheetjs catalog import · Business Solution Provider · catalog_management scope · catalogue sync · Cloudflare D1 bound parameter limit chunkIds 90 · Cloudflare D1 correlated subquery ORDER BY · Content Addressable Storage media pipeline
-
2 October 2026 · Live in production · recorded user test
The WhatsApp follow-ups we tested like a shop owner
Klaros now remembers what a business promises a customer in a WhatsApp chat: “I’ll send the photos tomorrow” becomes a follow-up, due at the right time, for whoever owes it. Before it shipped we used it the way a shop owner would, in six recorded scenes, with 33 checks read back from the real server. The recording caught a query Cloudflare D1 refuses, which would have broken the list for every business, and the customer’s name squeezed out of the chat header on laptops and phones.
-
23 September 2026 · Performance & media engineering
The WhatsApp media pipeline that ran out of memory: Native HKDF Decryption, CAS Storage, and RFC 7233 Streaming
Scraper bridges and naive BSP architectures serialize WhatsApp media into Base64 JSON strings over WebSocket IPC, creating 4x memory inflation and tab freezes. This note details our native HKDF-SHA256 key derivation engine, AES-256-CBC deciphering from mmg.whatsapp.net, Content-Addressable Storage (CAS), and RFC 7233 byte-range HTTP 206 partial streaming.
-
23 September 2026 · Campaign reliability & auto-responder triage
The WhatsApp broadcast that started talking to itself: Eliminating auto-responder loops
Out-of-office auto-responders and BSP system error messages trigger infinite bot ping-pong loops on WhatsApp campaigns. Meta Cloud API provides no is_bot header, so standard CRMs either loop indefinitely or mute real customers. Here is how we engineered deterministic correspondent triage, context-aware thresholding, and prompt refusal gates in Klaros.
-
22 September 2026 · Thought leadership & customer context
WhatsApp Is Not a Marketing Channel. It Is a Living Room.
The businesses that treat WhatsApp like a billboard optimize for messages. The businesses that treat it like a living room optimize for memory, context and what happens next. Explains the transition from Net to Spear to Living Room, the true cost of forgetting, and how Klaros grounds decisions, authorized execution, and verified outcomes on top of conversation memory.
-
8 September 2026 · AI architecture & maturity framework
Klaros Pragmatic AI Maturity: A Situational Agentic Framework for WhatsApp CRM
Modern AI engineering focuses heavily on autonomous multi-agent swarms and self-improving prompt harnesses. However, in commercial WhatsApp CRM messaging, unconstrained swarms carry massive risks of rate limits, hallucinated commitments, and high latency. This engineering note details the Klaros Situational AI Maturity Framework: an 8-level fail-closed priority decision tree in agent-decision.mjs, a $0 zero-token Jaccard Q&A cache in learned-answer.mjs, a fact-fenced RAG responder in ai-auto-reply.mjs, and a pre-validation JSON repair engine in json-repair.mjs for open local LLMs (Ollama/Qwen). Evaluates YC Harness Club principles against production CRM requirements.
-
7 September 2026 · commerce & platform
Building an Enterprise Edge-Native PIM Master for Precious Commodity Commerce
Generic PIM systems assume static product pricing and flat catalog models, failing when applied to precious metal commodities, gold/silver purity formulas, and heavy multi-channel catalog syndication. This engineering note details how we built an enterprise-grade, edge-native PIM Master on Cloudflare Workers, D1, and R2. We cover our dynamic live spot-rate pricing engine with a 36-hour stale-rate circuit breaker, parent-child matrix schema migration, 4-pillar fault-tolerant binary sheet and remote image ingestion pipeline, rotatable Google Merchant Center XML feed syndication, and zero-dependency 60 FPS DOM virtualized catalog table.
-
3 September 2026 · platform & migration
What survives when you move to the official WhatsApp API
The most-asked question about leaving an unofficial WhatsApp library is whether you lose your history, and most answers to it are wrong in the flattering direction. Verified against our own sync code rather than asserted: contacts, groups and memberships transfer, in batches of 500, idempotently, and can be re-run safely. Conversation history does not transfer at all, because Meta does not permit importing prior conversations into the Cloud API, and no vendor can work around a restriction that lives on Meta’s side. This note documents exactly which fields survive, why the history limit is structural rather than a missing feature, what an empty thread costs an agent on day one, and the one thing worth doing in the fortnight before you switch.
-
3 September 2026 · reliability & platform
The WhatsApp broadcast that quietly lost its tail
Every HTTP client is taught the same rule: 4xx is your fault, do not retry; 429 and 5xx are transient, back off and try again. Meta breaks it. The WhatsApp Cloud API returns its throughput caps, 130429, 131048 and 131056, as ordinary 4xx rather than 429, so a correct implementation of that rule permanently fails every message caught by a cap that would have cleared on its own within the hour. On a broadcast that means the back half of the send is discarded and marked failed while the front half delivered, and nothing in the response says a cap was involved. Documents the three codes, why the failure is invisible, the classifier that fixed it, and the free CC-BY dataset of every code we document, with their retry semantics, generated from the classifier that actually runs on our send path.
-
3 September 2026 · reliability & platform
The WhatsApp session that logged itself out 377 times
A WhatsApp Web session that regenerated QR codes 377 times in one night, and the process leak underneath it. Killing a Chromium without confirming it had died left eleven of them alive at once, every one holding the same LocalAuth directory, every one invoking takeoverOnConflict against the others, until WhatsApp did the only sensible thing and logged the device out. The logout was not Meta detecting automation. It was our own zombies fighting over one auth directory. Documents the full cascade, why SIGKILL is not a kill, and the three fixes: a verified kill that polls until the PIDs are actually gone, a per-session lifecycle mutex so a teardown always completes before the next spawn, and a relink policy that parks a session instead of regenerating QR codes unattended for hours.
-
29 August 2026 · platform & cost
The day there is no free way to answer a WhatsApp customer
Meta starts charging for WhatsApp service messages on 1 October. It starts charging for utility templates inside an open window on the same day, which closes the escape route every explainer is recommending. Our own cost screen called those replies free in six places, including a recommendation that overstated what you had wasted. Also: a deadline we asserted nine times and could not verify, and why Meta's own pricing page still says the window is free.
-
28 August 2026 · commerce
Building a WhatsApp catalogue that tells the truth
Meta's catalogue batch endpoint returns HTTP 200 even when every item was rejected. The script we wrote specifically to verify a token could write reported success against a catalogue that was empty and had always been empty. Eleven bugs from three weeks of building catalogue and product infrastructure, almost all of the same shape: something reporting success for work it had not done. Includes a paywall that only worked while the feature was switched off, a complete edit endpoint with no button behind 5,187 passing tests, and the two calls we got wrong ourselves.
-
8 August 2026 · the landscape
What you are actually buying when you buy WhatsApp
Not about us, for once. Ask an owner sending ten thousand messages a month what Meta charges them per message and most cannot say, because the number arrives inside somebody else's invoice. A map of the three layers: what Meta actually bills for (less than you think, and replying is free), why the Solution Partner and Tech Provider distinction is about billing rather than capability, what the middle layer genuinely earns its fee doing, and the three questions that decide whether you can ever leave.
-
31 July 2026 · engineering
WhatsApp payments with Razorpay: what the docs leave out
Collecting payment inside a chat in India, written while shipping it. The
order_detailspayload that passes validation, why a bare UPI VPA is rejected, the INR-only rule and how it fails silently, payment links versus subscriptions in a thread, whether your notes reach the webhook, and the signature check that rejects every real event while returning a clean boolean. -
In progress
The half of a sale that nobody demos
Every platform shows you the payment landing. Almost none show you the twenty minutes afterwards: who gets told, who packs it, what the buyer hears while they wait, and what happens when it ships four days later and the messaging window has closed.
-
In progress
Where the ask ends and the shop begins
A payment request is messaging machinery. A product library is a commerce application, and the part most likely to be replaced by a real one. On finding that seam in our own code, and making it a documented extension point instead of a function that happened to sit in the middle of a file.
-
In progress
What a feature looks like when nothing consumes it
Contact limits computed on every request and enforced nowhere. A tier ladder that is marketing copy at runtime. On the difference between building a capability and shipping one, found in our own codebase.
Get the next one on WhatsApp
Message the line and type NOTES. The latest one comes straight back, in the same thread, from the number that sends everything else. Reply STOP whenever you like and it stops.
Send NOTES on WhatsAppAsk our WhatsApp number what it costs
The most honest demo we have is the purchase itself. Message the line and type pricing: you will get our live catalog as a WhatsApp list, real remaining slots, and a payment link on whatever you tap. Buy the self-deployed licence and your signed key arrives in the same thread, for infrastructure we cannot reach. You are experiencing the product before you own it.
+91 97893 77634 · you message first, so nothing reaches you without your say-so.