agentsclimarketplace

Growth meta whatsapp

Skill andredezzy/maccing/skills/growth-meta-whatsapp

Use when a WhatsApp dispatch needs building, sending, or rescuing, on Meta Cloud API or a BSP. Triggers — template rejected or paused; messages not delivering; errors 131026, 131049, 132015, 131031, 130497; quality rating dropped; number restricted or WABA suspended; messaging tier, throughput, or 24-hour-window limits; per-message pricing; opt-in/LGPD; webhooks, Flows, media; chip warming, BSP migration, outsourced dispatch.From its SKILL.md

Install
npx -y skills add andredezzy/maccing --skill growth-meta-whatsapp

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 3 stars3 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

20.4 KB, as published. Nobody here has run it

WhatsApp Business Platform — Production Reference (2025-2026)

Naming: Meta's umbrella is WhatsApp Business Platform; the current API is the Cloud API. "WhatsApp Business API" is legacy phrasing (the On-Premises API sunset Oct 23, 2025). "WABA" (WhatsApp Business Account) is an account entity, not an API. API current version: v23.0+. All conversation-based pricing replaced by per-message pricing July 1, 2025.

Depends on: the growth-meta skill (BM health, verification, account quality/classifier, proxy/isolation, disposable-BM strategy, ban mechanics). ALWAYS load growth-meta first. Do NOT load growth-meta-ads unless doing CTWA.

Also depends on: the database-mapping skill, for anything that measures a dispatch. Measurement has to know which table holds a person, which column holds a phone, and what counts as money arriving or leaving; that binding is the project's and lives in its database map. Load database-mapping before measuring — a dispatch whose project is unmapped, or mapped against a schema that has since moved, cannot be measured, and the engine stops rather than guessing. It is named here rather than left to a hook: the reach has to work in any project and any harness, with nothing auto-loading it on your behalf.

Related: growth-meta-ads (CTWA campaign setup + CAPI attribution); growth-ycloud (the YCloud BSP platform) + growth-ycloud-api (YCloud v2 REST API).


MANDATORY — read context AND report the full BM roster BEFORE any action
(including before clarifying questions):
1. READ `.maccing/growth/README.md` (the platform/account index), if it exists.
2. ENUMERATE every BM — never assume one. The path is `meta/<profile>/<bm>/`, so
   list `.maccing/growth/meta/*/` (profiles) and `.maccing/growth/meta/*/*/` (BMs),
   then READ the root README, EVERY profile README, and EVERY BM README found.
3. Also READ EVERY WABA README: `.maccing/growth/meta/*/*/whatsapp/*/README.md`.
4. TELL the operator a roster of ALL BMs up front — one line each
   (profile · BM · verification/tier · WhatsApp number · quality · wallet/ramp) —
   INCLUDING BMs unrelated to the current task. Never silently narrow to one BM.
Skipping this = operating on stale data and hiding live assets from the operator.

Send Doctrine — read this before the routing table

⚠️ DOCTRINE — the campaign/broadcast SEND is ALWAYS operator-executed, NEVER automated by the agent. The agent builds and validates the recipient list, runs the pre-send health gate, picks the template, and reconciles results afterward — but the human operator is the one who uploads the list and clicks Send in the BSP UI (e.g. YCloud → Campaigns → New campaign). The agent MUST NOT submit a marketing broadcast programmatically: no POST /v2/whatsapp/messages loop over a list, no broadcast endpoint, no sendDirectly fan-out. Why: a broadcast is irreversible, costs real money, reaches hundreds of real people, and one mistake (wrong template, wrong list, wrong variable mapping) can crater a hard-won quality rating or permanently ban the number — a human at the trigger is the last safety gate. Scope: this covers bulk campaign/broadcast sends; single transactional/inbox replies inside the 24h service window are not the target.

Duplicated verbatim from references/sending-and-scale.md on purpose: the router below hands out files that contain a working send, so the prohibition has to load first. Do not "de-duplicate" it away.


Routing Table

IntentReferenceUse for
Message types, payloads, interactive messages, typing indicator, read receiptreferences/message-types.mdAll send-message JSON shapes; text, image, video, document, audio, sticker, location, contacts, reaction, buttons, lists, flows, typing
Template creation, approval, pacing, limits, dispatch strategyreferences/templates.mdCreating templates via API, template JSON, approval process, quality states, pacing vs pausing, Template Strategy for marketing broadcasts (copy, image headers, forbidden words, opt-out)
Quality KPIs, throughput tiers, daily limits, quality rating, recovery protocol, queue managementreferences/sending-and-scale.md80 MPS throughput, messaging limit tiers, quality system, quality KPIs, recovery protocol, bulk send queue code
WhatsApp Flows (native in-chat forms, appointments, surveys)references/flows.mdFlow JSON schema, API endpoints, dynamic flows backend, payment flows (Brazil/India)
Webhook events, payloads, signature verification, BSUID, best practicesreferences/webhooks.mdIncoming message webhooks, status updates, BSUID June 2026 change, Express handler code, queue-first architecture
Media upload, retrieve, download, cachingreferences/media.mdSupported formats, size limits, upload/retrieve/download API, media ID reuse strategy
Node.js/TypeScript SDK, raw fetch, integration patternsreferences/integration-sdk.md@great-detail/whatsapp SDK setup, webhook handler, raw fetch, order lifecycle/CTWA/CRM patterns
Error codes, retry logic, delivery failures, 131026/131049/132015references/error-codes.mdFull error code table by category, retry strategy TypeScript snippet, real-world broadcast baselines
Opt-in/opt-out, LGPD (Brazil), GDPR, anti-spam, content restrictions, Business Profile compliance, display-name approval, verification, OBA, financial-nichereferences/compliance.mdConsent requirements, opt-out recognition, LGPD 5-year retention, 2026 AI restriction, Business Profile API + field definitions, display-name approval, verification, OBA requirements, financial-niche restrictions
Per-message pricing, free windows (CSW/CTWA), Meta rate card, cost optimization, BSP comparison table, WhatsApp Paymentsreferences/pricing-and-billing.mdPMP rates by market, free window rules, volume tier discounts, Meta base rate card, cost calc, full BSP comparison table, WhatsApp Payments (Brazil/India)
Direct Cloud API setup, BSP migration, number quality/longevity, cold listsreferences/waba-provisioning.mdDirect Cloud API setup sequence, switching BSP / migrating WABA (PIN reset, device-trust gotchas), cold list strategy
Outsourced dispatch (a third party sends on their numbers), and the campaign measurement contractreferences/outsourced-dispatch.mdOutsource-vs-own-WABA call, unit price vs own CPDM, phone×segment attribution, split-test design, statistical power / MDE, copy-vs-product verification, vendor checklist, entity correlation; declaring cells and controls and calling measure from @maccing/growth
Disposable BM pipeline, proxy/isolation stack, BM sources, profile acquisition, phone number strategy, display name strategygrowth-meta skillFull disposable-BM strategy, proxy comparison table, BM setup sequence, Number Warming Protocol (official WABA), phone number acquisition
YCloud BSP platform (campaigns, inbox, contacts, webhooks)growth-ycloud skillBSP platform operations, campaign management, YCloud features
YCloud v2 REST API (send message, list messages, webhook endpoints, pagination)growth-ycloud-api skillYCloud API reference, pagination gotchas (page not offset), HMAC signature, campaign-send lag caveat, broadcast monitoring

1. Platform Overview

WhatsApp Business App vs. Cloud API

DimensionWhatsApp Business AppWhatsApp Cloud API
TargetSmall business, 1-2 agentsEnterprise, automation, scale
AccessFree mobile appREST API (Meta-hosted)
VolumeManual, limitedProgrammatic, unlimited
AutomationNoneFull (chatbots, CRM, flows)
TemplatesBasicFull template library
Multi-agentNoYes (via inbox platform)
AnalyticsNoneFull metrics API
CostFreePer-message charges apply

On-Premises API: Permanently shut down October 23, 2025. Cloud API is the only path. Error code 1005 = number still on on-prem.

Coexistence — one number on both the Business App and Cloud API

Meta's own name for this is "API Solutions for Business App Users"; support and partner channels call it Coexistence. It is entered through Embedded Signup: the business connects its existing WhatsApp Business app account and number to Cloud API, then keeps answering 1:1 from the phone while the API sends at volume, with both directions mirrored (Meta primary doc).

  • Who can offer it: the integrator must already be a Solution Partner or Tech Provider; the business must run WhatsApp Business app 2.24.17+.
  • Sync: contacts, and 1:1 history for the most recent 6 months, are synchronizable — but only if you subscribe to the history, smb_app_state_sync and smb_message_echoes webhook fields AND fire both smb_app_data sync calls within 24h of onboarding. Miss that window and the customer must offboard and redo Embedded Signup.
  • Confirm the state: GET /{PHONE_NUMBER_ID}?fields=is_on_biz_app,platform_type — both modes live is is_on_biz_app: true plus platform_type: CLOUD_API.
  • What it costs you: throughput is fixed at 20 mps (against the 80 default), Broadcast lists are disabled (existing ones go read-only), and group chats, disappearing messages, view-once, live location and voice/video calls are unsupported on the Cloud API side.
  • Window and billing: a customer service window opens only when a user messages a number that is already onboarded. Messages sent from the app sit outside the CSW entirely — they neither create nor extend a Cloud API window, and are not billed as Cloud API.
  • Offboarding is client-side: the Deregister API will NOT deregister a coexisting number. The business disconnects in-app (Settings → Account → Business Platform → Disconnect Account), which fires account_update with PARTNER_REMOVED.
  • Expect error 131060 (an unsupported messages webhook) on a user's first inbound and from unsupported companion devices — normal, usually clears within seconds.

Dispatch verdict: the 20 mps ceiling and the loss of Broadcast lists make coexistence an inbox/service posture, not a broadcast posture. Do not onboard a number you intend to broadcast from.

Integration paths:

  1. Direct Cloud API — REST against Meta directly. Full control, requires engineering effort.
  2. BSP (Business Solution Provider) — managed infrastructure with inbox, automation, analytics UI. Recommended BSP: YCloud (see growth-ycloud skill).

2. Cloud API Setup

Prerequisites: Meta Developer account, verified Meta Business Manager, verified business entity, phone number not previously on any WhatsApp account.

Step-by-step:

  1. Create Meta Business Account at business.facebook.com
  2. Register as Meta Developer at developers.facebook.com
  3. Create a Business type app → Set Up WhatsApp product
  4. Add phone number → verify via SMS or voice call
  5. Generate System User permanent token (Admin role, permissions: whatsapp_business_messaging, whatsapp_business_management, catalog_management) — never use the 24h temporary token in production
  6. Configure HTTPS webhook endpoint → subscribe to the messages field
  7. (Optional) Apply for OBA blue badge (WABA 30+ days old, verified, 2FA, notable coverage)

API version: v23.0. Base URL: https://graph.facebook.com/v23.0/{phone_number_id}/messages. Pin to a specific version in production.

Webhook verification handler:

app.get('/webhook', (req, res) => {
  const mode = req.query['hub.mode'];
  const token = req.query['hub.verify_token'];
  const challenge = req.query['hub.challenge'];
  if (mode === 'subscribe' && token === process.env.WEBHOOK_VERIFY_TOKEN) {
    res.status(200).send(challenge);
  } else {
    res.sendStatus(403);
  }
});

13. WhatsApp Business Calling API (July 2025)

GA July 15, 2025. Voice calls directly within WhatsApp conversations.

CSW interaction: A user-initiated call opens and resets the 24-hour Customer Service Window, identical to an inbound message. After a call, businesses can send free-form service messages and free utility templates for 24 hours.

Two call types: user-initiated (inbound) and brand-initiated (outbound, to opted-in users).

Requirements: System User token with whatsapp_business_messaging, HTTPS webhook subscribed to calls field, WebRTC implementation (or BSP), IVR via DTMF.

Key features: full conversation thread visible during call, click-to-call buttons in interactive/template messages, IVR via DTMF.


14. Marketing Messages Lite API (MM Lite)

Launched April 2025. A dedicated API for marketing broadcasts using Meta's ads AI to optimize delivery timing and recipient selection.

AspectMM Lite APICloud API
PurposeMarketing broadcastsAll message types
AI optimizationYes (Meta ads AI)No
Delivery rateUp to 9% higherStandard
US usersNot deliveredNot delivered (since April 2025)
InteractionOne-way (templates only)Two-way

When to use: large marketing broadcasts → MM Lite; customer support, utility, two-way → Cloud API.

Note for 360dialog / Gupshup users: prefer MM API route to avoid their ~6-7% marketing surcharge that applies only on the standard Cloud API endpoint.


15. WhatsApp Business Management API

Phone Number Management: GET /{WABA_ID}/phone_numbers, add/register numbers programmatically, set display names, manage 2FA PINs.

Template Management:

POST /{WABA_ID}/message_templates  # Create
GET  /{WABA_ID}/message_templates  # List (filter: ?status=APPROVED)
POST /{TEMPLATE_ID}                # Update
DELETE /{TEMPLATE_ID}              # Delete

QR Code Management: POST /{PHONE_NUMBER_ID}/message_qrdls — create pre-filled chat QR codes.

Analytics: GET /{WABA_ID}/analytics?start=...&end=...&granularity=DAY&metric_types=SENT,DELIVERED,READ


16. Business Profile Fields

See references/compliance.md for all Business Profile field definitions, the POST /{PHONE_NUMBER_ID}/whatsapp_business_profile API reference, display-name approval mechanics, verification, OBA requirements, and financial-niche profile compliance.


18. 2025-2026 Key Changes Summary

ChangeDateImpact
On-Premises API sunsetOctober 23, 2025All must use Cloud API
Per-message pricing (PMP replaces CBP)July 1, 2025Each template message billed individually
Utility free in CSWJuly 1, 2025Utility templates inside 24h window are free
Auth rates -65% to -78% (LATAM)July 1, 2025Major OTP cost reduction
Marketing blocked to US numbersApril 1, 2025No marketing to US users (error 131049)
MM Lite API launchedApril 2025AI-optimized marketing delivery
Messaging limits: portfolio-levelOctober 7, 2025All numbers in portfolio share tier
Tier evaluation: every 6 hours2025Faster scaling
WhatsApp Business Calling GAJuly 15, 2025Voice calls in WhatsApp
Blue badge replaces green badge2024 (rolled out 2024-2025)UI change only; existing badges converted
Service conversations unlimited-freeNovember 1, 2024No monthly cap; all service conversations free
Utility/Auth body cap: 512 charsOctober 1, 2025Error 2388040 if exceeded at creation
Flagged phone-number status eliminatedOctober 7, 2025Red quality only blocks advancement, no auto-downgrade
Verified tier floor raised to 2,000/dayOctober 7, 2025Was 1,000
HTTPS URL requirement for templatesJanuary 1, 2026Shorteners rejected; must be live HTTPS
Brazil BRL local billingJuly 1, 2026Eligible accounts billed in BRL
Meta CA cert change (mTLS)March 31, 2026Update trust store: meta-outbound-api-ca-2025-12.pem
BSUID added to webhooksMarch 31, 2026New identity.user_id field
BSUID may replace phone in fromJune 2026+CRM must handle both identifiers
AI chatbot restriction2026Only task-specific AI allowed
Auto-categorization enforcementApril 9/16, 2025Meta auto-corrects category; repeat offenders lose UTILITY access 7 days
Carousel messages (interactive)unverified2-10 cards, CSW only (non-template) — references/message-types.md
Business App + Cloud API coexistenceunverifiedSame number in both; 20 mps ceiling, Broadcast lists disabled — §1 → Coexistence

Two dates above read unverified on purpose. Neither feature page carries a publication or updated date, and Meta's public changelog — the one place a landing date is published — returned HTTP 500 on every attempt. So the "February 2026" and "January 2026" dates previously asserted here could not be confirmed against a primary source, and are no longer asserted. Both features are confirmed from Meta docs — interactive media carousel and coexistence — only their ship dates are unknown. To close the gap, retry the changelog; do not restore a remembered date.


19. Quick Reference

Essential Endpoints

POST https://graph.facebook.com/v23.0/{PHONE_NUMBER_ID}/messages        # Send message
POST https://graph.facebook.com/v23.0/{PHONE_NUMBER_ID}/media           # Upload media
GET  https://graph.facebook.com/v23.0/{MEDIA_ID}                        # Get media URL
POST https://graph.facebook.com/v23.0/{WABA_ID}/message_templates       # Create template
GET  https://graph.facebook.com/v23.0/{WABA_ID}/message_templates       # List templates
GET  https://graph.facebook.com/v23.0/{WABA_ID}/phone_numbers           # Get phone numbers
POST https://graph.facebook.com/v23.0/{WABA_ID}/flows                   # Create flow
POST https://graph.facebook.com/v23.0/{FLOW_ID}/publish                 # Publish flow
GET  https://graph.facebook.com/v23.0/{WABA_ID}/analytics               # Analytics

Required Permissions

whatsapp_business_messaging    # Send/receive messages
whatsapp_business_management   # Manage templates, phone numbers, settings
catalog_management             # Product catalog integration (optional)

New Integration Checklist

  • Meta Business account created and verified
  • App created in Meta Developer dashboard
  • Phone number added and verified (6-digit code)
  • System User created with Admin role
  • Permanent access token generated and stored securely
  • Webhook endpoint deployed with HTTPS
  • Webhook verification challenge handler implemented
  • Webhook signature verification implemented (x-hub-signature-256)
  • messages field subscribed in webhook settings
  • At least one template created and approved
  • Opt-in collection mechanism in place before any proactive messaging
  • Env vars: WA_PHONE_NUMBER_ID, WA_BUSINESS_ACCOUNT_ID, WA_ACCESS_TOKEN, APP_SECRET, WEBHOOK_VERIFY_TOKEN
  • CRM stores both phone number AND BSUID fields
  • Error handling with retry logic implemented
  • Idempotent webhook processing with message ID deduplication

Cost Calculation Formula

Monthly Cost = Σ (messages_delivered × country_rate × category_multiplier)
             - volume_discounts (utility/auth only)
             - free_CSW_utility_messages
             - free_72h_CTWA_messages

Effective Rate: Marketing >> Utility > Authentication >> Service (free)

Keep looking

Skills are one crate of 627,801. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.