Connecting WhatsApp
Run WhatsApp Business inside Telenow — connect a number, message from a shared team inbox, manage templates, broadcast, let an AI agent reply and even answer calls, and integrate every message into your own systems. This page is the product guide; for the REST API and webhooks see the WhatsApp API.
Telenow runs as a Meta Tech Provider: you own your own WhatsApp Business Account (WABA), Telenow sets the number up on it for you, and Meta bills you directly for message usage. Telenow never resells your messages or hosts your number under its own account.
Three ways to connect
All connections live side by side in one inbox. Add as many as you like.
| Connection style | What it is | Best for |
|---|---|---|
| WhatsApp Business, set up for you (native Cloud) | Official WhatsApp Business Cloud API on a number you own — templates, broadcasts, media, AI auto-reply, calling, health. Recommended. | Real business messaging at scale |
| Existing number via WhatsApp Web (QR) | Link a phone by scanning a QR. Quick but unofficial — use a dedicated number, it can be banned by WhatsApp. | Fast, low-volume, informal use |
| Cloud provider (Meta BYO · Plivo · GupShup · AiSensy) | Wrap an account you already hold with one of these providers. | Already on a provider |
Only the native connection unlocks the full product: managed templates, 24-hour-window enforcement, rich media, broadcasts, account-health monitoring, WhatsApp Calling, and the usage meter. Feature notes below flag native-only capabilities.
Open Communicate → WhatsApp, then Add WhatsApp (owners/admins only) and pick “WhatsApp Business, set up for you” for the recommended path.
Connecting a number (native)
The number always ends up inside your own WABA, whatever its source — only how the one-time verification code is captured differs.
Three number sources
- A number you bought here — a DID you purchased on the platform, picked from a dropdown.
- A number you brought (BYOC) — any DID your workspace owns, including your-own-carrier numbers. These appear in the same picker.
- Your own number — choose My own number and type it in international format (
+, country code, no trunk0, 8–15 digits). It must be able to receive the code and must not already be active on another WhatsApp.
The wizard, field by field
- Number to use / Your number — the source above.
- Business display name — shown to everyone you message. Must match your real business (no generic or location-only names, no “Official”). Meta reviews it, and you get only 10 name changes per 30 days, so get it right.
- Send the verification code by — SMS or Phone call (voice). For Indian and other virtual numbers that usually can’t receive SMS, choose the phone call.
- Forward the verification call to — appears only for a platform number verified by voice (see below).
Embedded Signup (the one-time Meta popup)
Click Connect WhatsApp to launch Meta’s Embedded Signup popup: log into Facebook, create or select your Meta Business and your WABA, and grant permissions. Telenow then automatically exchanges the code, confirms token control of the WABA, stores your (encrypted) WABA, subscribes our app to your WABA’s webhooks, adds your number, and requests the code. Your WABA stays customer-owned.
The verification code — SMS vs voice-call-forward
Meta sends a 6-digit code to your number, by SMS or VOICE:
- SMS — auto-captured if your carrier’s inbound SMS is wired to Telenow (an admin step); otherwise you read it and paste it.
- Phone call (voice) — for virtual numbers that can’t be answered by a person. Because Meta rings the number (which your AI agent would otherwise pick up, losing the code), Telenow temporarily forwards Meta’s verification call to a phone you control:
- The “Forward the verification call to” field takes a phone you can answer. It cannot be the number being verified (the wizard blocks that).
- For ~15 minutes, all calls to the selected number ring your forward phone instead of your agent. Answer it, hear the code, type it in.
- Resend places a new call and restarts the 15-minute window.
- SIP-trunk numbers can’t forward the call — use SMS or manual entry. India/Exotel numbers are voice-only, so manual entry is the reliable path there today.
Finishing
Enter the code and click Verify & finish. On success the number appears in your WhatsApp channels.
Don’t loop “Try again.” Meta rate-limits registration to 10 attempts per number per 72 hours. And to actually send, add a payment method to your WABA in Meta Business Manager (see Account health & billing).
The other connection styles
- WhatsApp Web (QR). Give it a label, Create & show QR, then on the phone that owns the number open WhatsApp → Linked devices → Link a device and scan. The QR refreshes until scanned. This is an unofficial link — use a dedicated number, it can be banned; for policy-safe volume, use the native path instead.
- Cloud provider (Meta BYO · Plivo · GupShup · AiSensy). Pick the tile (greyed out if not enabled), fill the connection form, and Telenow wraps it as a channel. Provider channels show an Inbound webhook card with a Callback URL and Verify token to paste into the provider; Plivo/GupShup have a Re-register button that configures inbound automatically.
The shared inbox
Every connection feeds one persisted, WhatsApp-Web-style inbox — a thread list, the conversation transcript, and a composer — refreshing every few seconds. Anyone on your team can read and reply; the inbox is shared org-wide.
- Send plain text, plus (native) image, audio, video and documents via the paperclip, with an optional caption. (Voice notes and stickers can’t carry a caption — a WhatsApp limitation.) Interactive buttons/lists, location, reactions and contact cards can be sent via the API.
- The 24-hour window (native): outside 24 hours from the customer’s last message you must send an approved template — the composer switches to a template picker automatically. First contact with a new number also requires a template.
- Read receipts & typing: opening a thread marks it read on WhatsApp; when the AI agent starts composing a reply, a typing indicator is shown.
- Media you receive renders inline (images, an audio player, video, document downloads); locations, reactions and contact cards render too.
Templates
Templates are pre-approved messages that let you start conversations and message outside the 24-hour window. Manage them per native channel under Message templates; approval status (Pending → Approved / Rejected / Paused) and the quality rating stay live via Meta.
- Categories: Marketing, Utility, Authentication.
- Structure: a header (none, text, or image / video / document), a body with
{{1}},{{2}}variables (plus example values), an optional footer, and up to 10 buttons. - Buttons: URL (static or dynamic), phone number, quick-reply, and copy-code (coupon).
- Authentication (OTP): a dedicated form — a security-recommendation toggle, code-expiration minutes, and a Copy-code button. This builds the correct Meta OTP structure (a plain body would be rejected). One-tap autofill needs Android app details that aren’t collected yet, so it’s disabled.
- Edit: approved, rejected or paused templates can be edited in place — the name and language are locked at Meta, and editing re-submits the template for review (back to Pending).
- Validation (body ≤1024, footer ≤60, button text ≤25, ≤10 buttons, contiguous
{{n}}) is enforced on the form and the server, so malformed templates fail early with a clear message instead of an opaque Meta rejection.
To create one, open Message templates → New template, choose the category, build the components, and Submit for approval. Media headers upload an example asset (image/video/PDF) during creation.
Broadcasts
Send an approved template to many contacts at once. Open WhatsApp → Broadcasts → New broadcast, pick a number and template, paste recipients (one per line, with optional per-recipient variables), set a throttle per minute (this protects your number’s quality rating) and an optional send window, and start it.
Each recipient is tracked queued → sent → delivered → read. A STOP reply (also unsubscribe / optout) automatically opts a contact out, and opt-outs are suppressed from every future broadcast. You can also add opt-outs manually. Up to 20,000 recipients per upload.
Opt-in is mandatory before broadcasting, and a weak, un-opted list tanks your quality rating fast. Honour STOP (handled automatically) and keep lists clean.
AI auto-reply & WhatsApp Calling
- Auto-reply: bind an agent to a channel and toggle AI on — inbound messages get an automatic AI reply. Use Pause AI on a thread for human takeover; resume when done.
- WhatsApp Calling (native): bind an answering agent in the calling bar. When a customer places a WhatsApp call to your number, your voice AI agent answers the call. Calls are logged (caller · status · duration). If no agent is bound (or calling media isn’t enabled), calls are cleanly rejected rather than left ringing.
Account health & billing
A health banner on the channel surfaces Meta’s live signals — quality rating (green/yellow/red), messaging tier, business-verification / review status, and token revocation (“reconnect WhatsApp”) — each with a plain-English next step.
Billing — Tech Provider. You add a payment method to your WABA in Meta Business Manager, and Meta bills you directly for message usage. Until a payment method is added, sends fail with Meta error 131042 — Telenow surfaces this as an actionable “add a payment method…” message rather than a generic error. The Usage card shows message counts by category × country for visibility (Telenow does not re-bill Meta usage).
Automating WhatsApp
Everything above is available programmatically:
- From your own dashboard/back-office — the org-scoped WhatsApp API (send, media, templates, threads, campaigns, health).
- From an installed app or automation — the app-key
/api/app-whatsappsurface. - Into your systems — subscribe to
whatsapp.message.received,whatsapp.message.status, andwhatsapp.account.healthevents over org REST-hooks (your own backend, or Zapier/Make/n8n). Building an installable app? It receives the same topics as app event webhooks. - From an AI agent mid-call — a WhatsApp send tool via the Integrations framework (text/template today).
Onboarding API (dashboard JWT)
The Connect WhatsApp button drives a small set of dashboard-JWT endpoints under https://api.telenow.ai/api/orgs/{orgId}/whatsapp-cloud — the same surface wa-auth advertises under /whatsapp-cloud/*. A white-label builder can call these directly to run Meta’s Embedded Signup and register a number. Authenticate with Authorization: Bearer <jwt> plus X-Org-Id: {orgId}. Onboard, submit-code and retry are owner/admin only; reads are open to any member. E.164 numbers must include the leading +.
GET /config returns the Embedded Signup launch config (appId, configId, graphVersion, configured) the frontend needs to start Meta’s FB.login. Then POST /onboard with the code Meta returns:
curl https://api.telenow.ai/api/orgs/{orgId}/whatsapp-cloud/onboard \
-H 'Authorization: Bearer <jwt>' \
-H 'X-Org-Id: {orgId}' \
-H 'Content-Type: application/json' \
-d '{
"code": "<es-exchange-code>",
"waba_id": "<waba-id>",
"voice_phone_number_id": "<phone-number-id>",
"otp_forward_e164": "+15551234567",
"display_name": "Acme Support",
"code_method": "SMS",
"meta_business_id": "<business-id>",
"name": "Acme"
}'
/onboard takes exactly one of voice_phone_number_id or external_e164. otp_forward_e164 is optional and applies to VOICE verification on a platform DID only (not SIP). code_method is 'SMS' (default) or 'VOICE'; display_name, meta_business_id and name are optional.
| Method + path | Purpose |
|---|---|
GET /accounts | List connected WABAs. |
GET /registrations | List registration statuses. |
GET /registrations/{id} | One registration’s status. |
POST /registrations/{id}/submit-code | Submit the 6-digit code (hyphens stripped). |
POST /registrations/{id}/retry | Retry a failed registration. |
What’s not built yet
Carousel and limited-time-offer template types; Flows, catalog and product-list (MPM) buttons and WhatsApp Pay (commerce — separate Meta products); one-tap OTP autofill; inbound voice-note transcription for the agent; and an org-key send/read REST surface (org keys can receive events today, but sending and reading go through the app-key API). Events, STOP capture, and inbound-media download are native-channel only.