Integrator guides
Task-oriented guides for engineers who put meta-whatsapp-rs into a product: the e-commerce backend (marketing, order notifications, invoices, WhatsApp OTP login) and the multi-tenant CMS (each merchant connects their own number with Embedded Signup and chats with customers in-app).
They sit between the README quick start and the API reference (cargo doc -p meta-whatsapp-rs --all-features --open). The design and its reasons are in architecture.md; what exists and what does not is in coverage.md and parity.md, and what comes next in roadmap.md; product decisions, all but one decided, are in OPEN_QUESTIONS.md.
Checked against meta-whatsapp-rs 7940d15 (2026-09-24), Graph API v25.0. Every Rust name in these pages was checked against the source at that commit, and the snippets were compiled against it; bots.md was written later (2026-09-26) with the crate it describes; its snippets are copied from the skill example the gate compiles (the copies themselves are not checked). On another revision, trust the rustdoc over these pages.
Which guide for which job
| Guide | Read it when you | Example | Agent skill |
|---|---|---|---|
| getting-started.md | set up the Meta app, add the dependency, send a first message, handle errors | send_message | meta-whatsapp-rs-setup, meta-whatsapp-rs-errors |
| embedded-signup.md | let each merchant of your CMS connect their own number | embedded_signup | meta-whatsapp-rs-embedded-signup, meta-whatsapp-rs-token-vault |
| webhooks.md | deploy the webhook endpoint and decide what to do with each event | cms_inbox | meta-whatsapp-rs-webhook-endpoint, meta-whatsapp-rs-webhook-events, meta-whatsapp-rs-live-updates |
| cms-inbox.md | build the merchant ↔ customer chat (history, live updates, replies) | cms_inbox | meta-whatsapp-rs-cms-inbox |
| marketing-and-commerce.md | send campaigns and order updates, collect opt-ins, show products | send_message | meta-whatsapp-rs-marketing, meta-whatsapp-rs-commerce, meta-whatsapp-rs-templates, meta-whatsapp-rs-send-templates |
| otp-login.md | log users in (or verify a number) with a WhatsApp code | otp_login | meta-whatsapp-rs-otp-login |
| documents.md | send invoices, receipts and voucher images | invoice_document | meta-whatsapp-rs-documents |
| bots.md | answer commands, button taps and free text with a bot: guards, cooldowns, middleware, plugins, Markdown replies, Meta's command menu | bot.rs | meta-whatsapp-rs-bot |
| production.md | pick storage, manage keys, log safely, scale, pin versions | — | meta-whatsapp-rs-production, meta-whatsapp-rs-storage |
| server.md | run the HTTP service for an app not written in Rust: configure it, create tenants and keys, send, receive Meta's webhooks and poll events | client.ts, send.ts, events.ts (TypeScript callers, type-checked against the service's OpenAPI document) | meta-whatsapp-rs-server, meta-whatsapp-rs-server-send, meta-whatsapp-rs-server-events |
Reading order
E-commerce backend: getting-started → webhooks → marketing-and-commerce → documents → otp-login → production.
CMS: getting-started → embedded-signup → webhooks → cms-inbox → production.
Not in Rust: getting-started (the Meta app) → server.
How to read the code
- Snippets are excerpts. Names such as
merchant_id,save_merchant_wabaorpoolstand for your own code and values; everything imported frommeta_whatsapp_rsis the real API. use meta_whatsapp_rs::prelude::*;brings in the client, ids,Recipient, the message and template builders, the webhook pieces, the store and sink traits and the inbox. Everything else is one path away.- Each runnable example's header lists the environment variables it reads and the command that runs it. The two servers (
embedded_signup,cms_inbox) refuse to start withoutWA_TENANTS, a bearer-token stand-in for your own authentication, and listen on127.0.0.1unlessWA_BINDsays otherwise.
Meta's documentation
Meta's pages are the authority on everything that happens on Meta's side (dashboards, review, limits, prices). Links point at https://developers.facebook.com/documentation/business-messaging/whatsapp/<path>; append .md to any of them for Markdown. The guides paraphrase them and were written against the pages as they read on 2026-09-24; Meta changes dashboards without notice, so when a screen looks different, the linked page wins.