Connect a WhatsApp number through Meta’s Cloud API
libredesk connects directly to Meta’s WhatsApp Cloud API. You create a Meta app, register a business phone number, then add its credentials to a WhatsApp inbox in libredesk.
A Facebook account with access to a Meta business portfolio, or permission to create one
A phone number that can receive an SMS or voice call
A public HTTPS URL for your libredesk instance
A public privacy policy URL for publishing the Meta app
For this setup, use a number that is not registered with the WhatsApp or WhatsApp Business mobile app. Removing an existing account from either app deletes its chat history.
In Step 2. Production setup, expand Register your WhatsApp phone number and select Add new number.Complete the four stages shown by Meta:
Enter the legal business name, website or social profile, and country.
Create the WhatsApp Business profile, including its customer-facing display name.
Enter the phone number and choose SMS or voice verification.
Enter the verification code sent by Meta.
Meta reviews eligible display names before showing them in chat headers. If yours is rejected, review Meta’s naming guidelines and update it in WhatsApp Manager.
If your app dashboard has an API Setup panel, select your business number and copy its Phone number ID and WhatsApp Business Account ID. Make sure you select your own number, not Meta’s test number.Alternatively, open WhatsApp Manager and select the WhatsApp Business Account you created.
The account selector at the top shows the WhatsApp Business Account ID.
Under Account tools → Phone numbers, select your number to show its Phone number ID.
These are numeric IDs. Do not enter the phone number, app ID, or business portfolio ID in their place.
The WhatsApp Business Account ID in the account selector
The Phone number ID after selecting a registered number
Open Meta Business Settings and select the business portfolio that owns your app and WhatsApp Business Account.
Go to Users → System Users, select Add, and create a system user with the Admin role.
Select Assign assets, choose your app, and grant Full control → Manage app. Ensure the system user also has access to your WhatsApp Business Account under Accounts → WhatsApp Accounts → WhatsApp Account Access.
Return to the system user and select Generate token. Choose your app and Never for expiration if available.
Select both whatsapp_business_messaging and whatsapp_business_management, then generate the token and store it securely.
These permissions cover messaging, account management, templates, and webhooks. The broader business_management permission in Meta’s general setup guide is for business portfolio operations; libredesk does not require it.
App-dashboard user tokens expire and will stop the connection from working. Use a System User token; if it has an expiry date, replace it in libredesk before it expires.
Adding a number and verifying its SMS or voice code does not complete Cloud API registration. If your number is not already registered, register it through Meta’s API after generating the access token above. libredesk does not register the phone number for you.Replace the placeholders below with the Graph API version shown in libredesk’s WhatsApp inbox form, your Phone number ID, your System User token, and a six-digit PIN:
For a number with two-step verification already enabled, use its existing PIN. Otherwise, choose a new six-digit PIN and store it securely. This PIN is separate from the SMS or voice verification code and is not entered in libredesk. If you have forgotten it, follow Meta’s PIN reset instructions before retrying registration.
Open App settings → Basic and add the privacy policy URL. Then open Publish, complete any requirements Meta lists, and publish the app.
Meta requires a privacy policy URL before publishing
Some webhooks are not delivered while the Meta app is in Development mode. Publish the app and confirm it is in Live mode before testing incoming messages. See Meta’s webhook troubleshooting.
Business verification is optional for the initial connection. New business portfolios start with:
A messaging limit of 250 unique customers outside the 24-hour customer-service window per rolling 24 hours, shared across all phone numbers in the portfolio.
A registration limit of two business phone numbers across the portfolio.
Business verification is one path to higher limits, subject to Meta’s eligibility checks. Start it under Step 3. Business verification and check your current messaging limit in WhatsApp Manager → Account tools → Messaging limits.
First, go to Admin → General and set Root URL to the public HTTPS address of your libredesk instance.Then go to Admin → Inboxes → New inbox → WhatsApp and enter:
libredesk field
Value
Name
A name that identifies the inbox in libredesk
Reopen window (hours)
A reply within this many hours of resolving reopens the conversation. 0 always starts a new one. Default 48
Phone number ID
The number’s ID from API Setup or WhatsApp Manager
WhatsApp Business Account ID
The account’s ID from API Setup or WhatsApp Manager
Access token
The System User token generated above
App secret
The secret from App settings → Basic
API version
Leave the default unless Meta requires another version
Webhook verify token
A random secret that you create
Generate a webhook verify token with:
openssl rand -hex 32
Click Create. libredesk checks that the token can access the phone number and that the number belongs to the WhatsApp Business Account. libredesk then attempts to register a callback for that account in the background.When CSAT Surveys is on, libredesk submits the CSAT survey template to Meta when you save the inbox. Surveys are sent with it once Meta approves it.
libredesk automatically attempts to subscribe your app to the WhatsApp Business Account and set an account-level callback override for messages. This does not change the app-level callback shown in Meta’s dashboard.Meta’s callback overrides do not apply to template status updates. Configure the app-level callback as well to receive those updates:
Open the WhatsApp inbox in libredesk and copy its Callback URL and Webhook verify token.
In Meta, open Use cases → Customize → Step 2. Production setup → Configure Webhooks.
Set the app-level Callback URL and Verify token to the copied values, then select Verify and save.
Under Webhook fields, subscribe to messages and message_template_status_update.
Save the inbox again in libredesk to retry account-level webhook registration with Meta’s configuration in place.
Enter the libredesk callback URL and verify token
The two webhook fields required by libredesk
The messages field delivers incoming messages and delivery statuses. The message_template_status_update field keeps template approval statuses current in libredesk.Automatic registration failures are recorded in libredesk’s server logs; saving the inbox can still succeed. If registration fails, check that the Root URL is public HTTPS, Meta can reach the callback, and the System User token has access to the account, then save the inbox again to retry.
Send a WhatsApp message from another phone to the registered business number. A new conversation should appear in libredesk. Reply from libredesk to confirm that outgoing messages work.If the conversation does not appear, confirm that:
The Meta app is published and in Live mode
The libredesk Root URL is a public HTTPS address that Meta can reach
libredesk’s server logs show successful automatic webhook registration; after correcting a registration failure, save the inbox again
Both webhook fields above show Subscribed
The App secret matches the same Meta app used to generate the token. A wrong secret rejects incoming webhooks even when saving the inbox succeeds; the server logs report whatsapp webhook signature verification failed
If replies fail, check that the number has completed Cloud API registration and the token has whatsapp_business_messaging permission. If template statuses do not update, check the app-level callback and the message_template_status_update subscription.
Agents can send free-form replies and attachments for 24 hours after the contact’s latest message. After that, only approved templates can be sent, and the reply box shows a Send template button. Private notes work at any time. The window opens again when the contact replies.
Send an approved template to start a new conversation or to message a contact whose reply window is closed.To send business-initiated template messages, return to Step 2. Production setup and expand Add payment to send business-initiated messages. Add a payment method in Meta’s Billing Hub.
Manage templates under Admin → WhatsApp templates. Each WhatsApp inbox has its own template list.Click New template, fill in the form, then click Submit to Meta. The template stays PENDING until Meta reviews it, and only APPROVED templates can be sent. If Meta rejects it, hover over the status to see the reason, then edit and resubmit.Sync from Meta imports templates you created in WhatsApp Manager. libredesk also syncs every 6 hours.libredesk can send templates with a text header or no header. Templates with image, video, or document headers can be synced but not sent.To send a template in a conversation, click Send template in the reply box, pick a template, fill in its values, and click Send.
Open New conversation, select the WhatsApp tab, choose the inbox, and enter the contact’s phone number. A new WhatsApp conversation always starts with an approved template.A contact can have one open WhatsApp conversation per inbox. If one exists, the form links to it.
Incoming text, images, video, audio, voice notes, documents, stickers, locations, contact cards, and button replies appear in the conversation. Reactions are ignored.Agents can send text and attachments. WhatsApp allows one file per message, so libredesk sends each attachment as its own message. WebP images are not supported.
Outgoing messages show sent, delivered, read, or failed. Hover over a failed message to see the reason. When an agent opens a conversation, the contact sees a read receipt.
Replies go to the contact’s WhatsApp number. Editing the contact’s phone number does not change where replies go.To message an existing contact who has no WhatsApp number, such as an email contact, libredesk uses the phone number and country code saved on the contact.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"libredesk Documentation","colors":{"primary":"#2563EB","light":"#3B82F6","dark":"#1D4ED8"},"logo":{"light":"https://s3.ap-south-1.amazonaws.com/libredesk.io/libredesk_black.png","dark":"https://s3.ap-south-1.amazonaws.com/libredesk.io/libredesk_white.png","href":"https://docs.libredesk.io"},"favicon":"https://mintcdn.com/libredesk/ksNuplvdt5gGCOiH/favicon.ico?fit=max\u0026auto=format\u0026n=ksNuplvdt5gGCOiH\u0026q=85\u0026s=93a8679525456b7d819f4f376ed2b845","navbar":{"links":[{"href":"https://github.com/abhinavxd/libredesk","label":"GitHub"}]},"footer":{"socials":{"github":"https://github.com/abhinavxd/libredesk"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":false},"navigation":{"global":{"anchors":[{"anchor":"GitHub","icon":"github","href":"https://github.com/abhinavxd/libredesk"},{"anchor":"OpenAPI Spec","icon":"code","href":"https://docs.libredesk.io/api-reference/openapi.json"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"libredesk","hasAudioNarration":false,"actualSubdomain":"libredesk","customDomains":["docs.libredesk.io"],"gitSource":{"type":"github","owner":"abhinavxd","repo":"docs.libredesk.io","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ad9ff2404241759b37fb353","collectionId":"37033b9c-96db-4124-88c2-9522434e6748","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ad9ff2404241759b37fb353"},"feedback":{"thumbs":true,"edits":true,"issues":true},"entitlements":{},"buildId":"6ad9ff2404241759b37fb353","clientVersion":"0.0.4044","searchFilterCounts":[{"language":"default","tag":"API Reference","count":83},{"language":"default","tag":"Conversations","count":27},{"language":"default","tag":"Documentation","count":18},{"language":"default","tag":"Agents \u0026 Teams","count":14},{"language":"default","tag":"Contacts","count":10},{"language":"default","tag":"Configuration","count":10},{"language":"default","tag":"Reports","count":6},{"language":"default","tag":"Getting Started","count":6},{"language":"default","tag":"Search","count":5},{"language":"default","tag":"Conversation Status \u0026 Priority","count":5}]},"assistantConfig":{},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"custom.css","content":"[class*=nav-logo] img,[class*=navbar] img,header img[src*=\"/logo/\"],nav img[alt*=logo],nav img[src*=\"/logo/\"]{max-height:24px!important;height:24px!important;width:auto!important}[class*=logo-container],[class*=navbar] a[href=\"/\"],nav a[href=\"/\"]{display:flex;align-items:center;height:auto!important}"}],"page":{"pagePath":"configuration/whatsapp","slug":"/configuration/whatsapp","pageMetadata":{"title":"WhatsApp","description":"Connect a WhatsApp number through Meta's Cloud API","href":"/configuration/whatsapp"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Connect a WhatsApp number through Meta’s Cloud API\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Frame,Heading,OptimizedImage,Step,Steps,Table,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`libredesk connects directly to Meta’s WhatsApp Cloud API. You create a Meta app, register a business phone number, then add its credentials to a WhatsApp inbox in libredesk.`}),`\n`,_jsx(Heading,{level:`2`,id:`before-you-start`,children:`Before you start`}),`\n`,_jsx(_components.p,{children:`You need:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`A Facebook account with access to a Meta business portfolio, or permission to create one`}),`\n`,_jsx(_components.li,{children:`A phone number that can receive an SMS or voice call`}),`\n`,_jsx(_components.li,{children:`A public HTTPS URL for your libredesk instance`}),`\n`,_jsx(_components.li,{children:`A public privacy policy URL for publishing the Meta app`}),`\n`]}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`For this setup, use a number that is not registered with the WhatsApp or WhatsApp Business mobile app. Removing an existing account from either app deletes its chat history.`})}),`\n`,_jsx(Heading,{level:`2`,id:`create-the-meta-app`,children:`Create the Meta app`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Enter the app details`,children:_jsxs(_components.p,{children:[`Open `,_jsx(_components.a,{href:`https://developers.facebook.com/apps/`,children:`Meta for Developers`}),`, select `,_jsx(_components.strong,{children:`My Apps → Create App`}),`, then enter an app name and contact email.`]})}),_jsxs(Step,{title:`Choose the WhatsApp use case`,children:[_jsxs(_components.p,{children:[`Select `,_jsx(_components.strong,{children:`Connect with customers through WhatsApp`}),`, then select `,_jsx(_components.strong,{children:`Next`}),`.`]}),_jsx(Frame,{caption:`Choose the WhatsApp use case when creating the app`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/libredesk/qUYBMXaNw8eWG-oe/images/whatsapp-use-case.png?fit=max\u0026auto=format\u0026n=qUYBMXaNw8eWG-oe\u0026q=85\u0026s=c53de9edabd9da23450d08667384325a`,alt:`Meta app creation option named Connect with customers through WhatsApp`,\"data-og-width\":`1160`,width:`1160`,\"data-og-height\":`121`,height:`121`,\"data-path\":`images/whatsapp-use-case.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/libredesk/qUYBMXaNw8eWG-oe/images/whatsapp-use-case.png?w=280\u0026fit=max\u0026auto=format\u0026n=qUYBMXaNw8eWG-oe\u0026q=85\u0026s=bb3df988862c9b88f8e108931b4a4309 280w, https://mintcdn.com/libredesk/qUYBMXaNw8eWG-oe/images/whatsapp-use-case.png?w=560\u0026fit=max\u0026auto=format\u0026n=qUYBMXaNw8eWG-oe\u0026q=85\u0026s=45498d634f37d035b99a3c41afd69ba9 560w, https://mintcdn.com/libredesk/qUYBMXaNw8eWG-oe/images/whatsapp-use-case.png?w=840\u0026fit=max\u0026auto=format\u0026n=qUYBMXaNw8eWG-oe\u0026q=85\u0026s=e5dda37d09e4c76c26b6b5e2ff4f3d3d 840w, https://mintcdn.com/libredesk/qUYBMXaNw8eWG-oe/images/whatsapp-use-case.png?w=1100\u0026fit=max\u0026auto=format\u0026n=qUYBMXaNw8eWG-oe\u0026q=85\u0026s=6dad59047ea5b5051daa5160a35f3c3d 1100w, https://mintcdn.com/libredesk/qUYBMXaNw8eWG-oe/images/whatsapp-use-case.png?w=1650\u0026fit=max\u0026auto=format\u0026n=qUYBMXaNw8eWG-oe\u0026q=85\u0026s=729c47561ef9e23aa4338d2a8eaa5c83 1650w, https://mintcdn.com/libredesk/qUYBMXaNw8eWG-oe/images/whatsapp-use-case.png?w=2500\u0026fit=max\u0026auto=format\u0026n=qUYBMXaNw8eWG-oe\u0026q=85\u0026s=f614555adaca90ffa7550b5c35ba2579 2500w`})})]}),_jsx(Step,{title:`Connect the business portfolio`,children:_jsxs(_components.p,{children:[`Select the business portfolio that will own the WhatsApp Business Account. Review the requirements, confirm the app details, then select `,_jsx(_components.strong,{children:`Create app`}),`.`]})}),_jsxs(Step,{title:`Open production setup`,children:[_jsxs(_components.p,{children:[`In the app dashboard, go to `,_jsx(_components.strong,{children:`Use cases → Customize`}),` next to `,_jsx(_components.strong,{children:`Connect with customers through WhatsApp`}),`. Under `,_jsx(_components.strong,{children:`Basic setup`}),`, open `,_jsx(_components.strong,{children:`Step 2. Production setup`}),`.`]}),_jsx(Frame,{caption:`The production setup tasks in Meta`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/libredesk/qUYBMXaNw8eWG-oe/images/whatsapp-production-setup.png?fit=max\u0026auto=format\u0026n=qUYBMXaNw8eWG-oe\u0026q=85\u0026s=6925fbae8a0714ab284a42331d4f52f0`,alt:`Meta production setup with Webhooks, phone number, payment, and messaging tasks`,\"data-og-width\":`2053`,width:`2053`,\"data-og-height\":`736`,height:`736`,\"data-path\":`images/whatsapp-production-setup.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/libredesk/qUYBMXaNw8eWG-oe/images/whatsapp-production-setup.png?w=280\u0026fit=max\u0026auto=format\u0026n=qUYBMXaNw8eWG-oe\u0026q=85\u0026s=471e8edefba5a3b090c1b915f8a8c9e6 280w, https://mintcdn.com/libredesk/qUYBMXaNw8eWG-oe/images/whatsapp-production-setup.png?w=560\u0026fit=max\u0026auto=format\u0026n=qUYBMXaNw8eWG-oe\u0026q=85\u0026s=9bda1370abafb323083c4ca481dfb6e5 560w, https://mintcdn.com/libredesk/qUYBMXaNw8eWG-oe/images/whatsapp-production-setup.png?w=840\u0026fit=max\u0026auto=format\u0026n=qUYBMXaNw8eWG-oe\u0026q=85\u0026s=d602fd58b0ffc8a63eb6c08cafee27f3 840w, https://mintcdn.com/libredesk/qUYBMXaNw8eWG-oe/images/whatsapp-production-setup.png?w=1100\u0026fit=max\u0026auto=format\u0026n=qUYBMXaNw8eWG-oe\u0026q=85\u0026s=bc63152cec6ba31705b9afe254513240 1100w, https://mintcdn.com/libredesk/qUYBMXaNw8eWG-oe/images/whatsapp-production-setup.png?w=1650\u0026fit=max\u0026auto=format\u0026n=qUYBMXaNw8eWG-oe\u0026q=85\u0026s=088f82ad1540f7fe87a57c5d2f03b2d3 1650w, https://mintcdn.com/libredesk/qUYBMXaNw8eWG-oe/images/whatsapp-production-setup.png?w=2500\u0026fit=max\u0026auto=format\u0026n=qUYBMXaNw8eWG-oe\u0026q=85\u0026s=877d8d460bbcd3e651ba000d5a9c447b 2500w`})})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`add-and-verify-the-phone-number`,children:`Add and verify the phone number`}),`\n`,_jsxs(_components.p,{children:[`In `,_jsx(_components.strong,{children:`Step 2. Production setup`}),`, expand `,_jsx(_components.strong,{children:`Register your WhatsApp phone number`}),` and select `,_jsx(_components.strong,{children:`Add new number`}),`.`]}),`\n`,_jsx(_components.p,{children:`Complete the four stages shown by Meta:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`Enter the legal business name, website or social profile, and country.`}),`\n`,_jsx(_components.li,{children:`Create the WhatsApp Business profile, including its customer-facing display name.`}),`\n`,_jsx(_components.li,{children:`Enter the phone number and choose SMS or voice verification.`}),`\n`,_jsx(_components.li,{children:`Enter the verification code sent by Meta.`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`Meta reviews eligible `,_jsx(_components.a,{href:`https://developers.facebook.com/documentation/business-messaging/whatsapp/display-names`,children:`display names`}),` before showing them in chat headers. If yours is rejected, review Meta’s naming guidelines and update it in WhatsApp Manager.`]}),`\n`,_jsx(Frame,{caption:`Meta's phone number registration wizard`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/libredesk/qUYBMXaNw8eWG-oe/images/whatsapp-add-phone-number.png?fit=max\u0026auto=format\u0026n=qUYBMXaNw8eWG-oe\u0026q=85\u0026s=b014e6ddb2b8835ba519c9461eb98188`,alt:`Meta phone number wizard with Business information, WhatsApp Business Profile, Add number, and Verify number stages`,\"data-og-width\":`1275`,width:`1275`,\"data-og-height\":`1079`,height:`1079`,\"data-path\":`images/whatsapp-add-phone-number.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/libredesk/qUYBMXaNw8eWG-oe/images/whatsapp-add-phone-number.png?w=280\u0026fit=max\u0026auto=format\u0026n=qUYBMXaNw8eWG-oe\u0026q=85\u0026s=d012f7049e98a76635f1a649a3609007 280w, https://mintcdn.com/libredesk/qUYBMXaNw8eWG-oe/images/whatsapp-add-phone-number.png?w=560\u0026fit=max\u0026auto=format\u0026n=qUYBMXaNw8eWG-oe\u0026q=85\u0026s=09389e249f3815d3ac8c247c8024467d 560w, https://mintcdn.com/libredesk/qUYBMXaNw8eWG-oe/images/whatsapp-add-phone-number.png?w=840\u0026fit=max\u0026auto=format\u0026n=qUYBMXaNw8eWG-oe\u0026q=85\u0026s=6fd68ae6a36c7fc4a291894ab99f2a00 840w, https://mintcdn.com/libredesk/qUYBMXaNw8eWG-oe/images/whatsapp-add-phone-number.png?w=1100\u0026fit=max\u0026auto=format\u0026n=qUYBMXaNw8eWG-oe\u0026q=85\u0026s=ac63f59e368838cfbc40ef0a7f8bd6c4 1100w, https://mintcdn.com/libredesk/qUYBMXaNw8eWG-oe/images/whatsapp-add-phone-number.png?w=1650\u0026fit=max\u0026auto=format\u0026n=qUYBMXaNw8eWG-oe\u0026q=85\u0026s=33b6053db714be17bc8737d4f634613a 1650w, https://mintcdn.com/libredesk/qUYBMXaNw8eWG-oe/images/whatsapp-add-phone-number.png?w=2500\u0026fit=max\u0026auto=format\u0026n=qUYBMXaNw8eWG-oe\u0026q=85\u0026s=795ddbe8da88b0dc876f8b70e45d84a2 2500w`})}),`\n`,_jsx(Heading,{level:`3`,id:`copy-the-account-ids`,children:`Copy the account IDs`}),`\n`,_jsxs(_components.p,{children:[`If your app dashboard has an `,_jsx(_components.strong,{children:`API Setup`}),` panel, select your business number and copy its `,_jsx(_components.strong,{children:`Phone number ID`}),` and `,_jsx(_components.strong,{children:`WhatsApp Business Account ID`}),`. Make sure you select your own number, not Meta’s test number.`]}),`\n`,_jsxs(_components.p,{children:[`Alternatively, open `,_jsx(_components.a,{href:`https://business.facebook.com/latest/whatsapp_manager/`,children:`WhatsApp Manager`}),` and select the WhatsApp Business Account you created.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`The account selector at the top shows the `,_jsx(_components.strong,{children:`WhatsApp Business Account ID`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Under `,_jsx(_components.strong,{children:`Account tools → Phone numbers`}),`, select your number to show its `,_jsx(_components.strong,{children:`Phone number ID`}),`.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`These are numeric IDs. Do not enter the phone number, app ID, or business portfolio ID in their place.`}),`\n`,_jsx(Frame,{caption:`The WhatsApp Business Account ID in the account selector`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/libredesk/qUYBMXaNw8eWG-oe/images/whatsapp-business-account-id.png?fit=max\u0026auto=format\u0026n=qUYBMXaNw8eWG-oe\u0026q=85\u0026s=aa139b2e985d6c6adfa4ae90145f9ab6`,alt:`Example WhatsApp Business Account with its numeric ID`,\"data-og-width\":`542`,width:`542`,\"data-og-height\":`96`,height:`96`,\"data-path\":`images/whatsapp-business-account-id.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/libredesk/qUYBMXaNw8eWG-oe/images/whatsapp-business-account-id.png?w=280\u0026fit=max\u0026auto=format\u0026n=qUYBMXaNw8eWG-oe\u0026q=85\u0026s=58c55fc28ec64d5367e04306ff8e003c 280w, https://mintcdn.com/libredesk/qUYBMXaNw8eWG-oe/images/whatsapp-business-account-id.png?w=560\u0026fit=max\u0026auto=format\u0026n=qUYBMXaNw8eWG-oe\u0026q=85\u0026s=9a1c47091798ebdcfc9fdb2e586e2e11 560w, https://mintcdn.com/libredesk/qUYBMXaNw8eWG-oe/images/whatsapp-business-account-id.png?w=840\u0026fit=max\u0026auto=format\u0026n=qUYBMXaNw8eWG-oe\u0026q=85\u0026s=af8f6d70276823a0e123897df04db8c1 840w, https://mintcdn.com/libredesk/qUYBMXaNw8eWG-oe/images/whatsapp-business-account-id.png?w=1100\u0026fit=max\u0026auto=format\u0026n=qUYBMXaNw8eWG-oe\u0026q=85\u0026s=6c51bdd66ab5e1e68cb3c9098936e04a 1100w, https://mintcdn.com/libredesk/qUYBMXaNw8eWG-oe/images/whatsapp-business-account-id.png?w=1650\u0026fit=max\u0026auto=format\u0026n=qUYBMXaNw8eWG-oe\u0026q=85\u0026s=4be12c864ba440b18b87f943d63e69a5 1650w, https://mintcdn.com/libredesk/qUYBMXaNw8eWG-oe/images/whatsapp-business-account-id.png?w=2500\u0026fit=max\u0026auto=format\u0026n=qUYBMXaNw8eWG-oe\u0026q=85\u0026s=bf264c507cf226f2d8cd802a93f4a675 2500w`})}),`\n`,_jsx(Frame,{caption:`The Phone number ID after selecting a registered number`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/libredesk/qUYBMXaNw8eWG-oe/images/whatsapp-phone-number-id.png?fit=max\u0026auto=format\u0026n=qUYBMXaNw8eWG-oe\u0026q=85\u0026s=dae6d5b4e9158798854ce2b85959f72a`,alt:`Example registered WhatsApp number with its Phone number ID`,\"data-og-width\":`1846`,width:`1846`,\"data-og-height\":`147`,height:`147`,\"data-path\":`images/whatsapp-phone-number-id.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/libredesk/qUYBMXaNw8eWG-oe/images/whatsapp-phone-number-id.png?w=280\u0026fit=max\u0026auto=format\u0026n=qUYBMXaNw8eWG-oe\u0026q=85\u0026s=b9d4571e95db8a67a44ecd5a60ba5e5a 280w, https://mintcdn.com/libredesk/qUYBMXaNw8eWG-oe/images/whatsapp-phone-number-id.png?w=560\u0026fit=max\u0026auto=format\u0026n=qUYBMXaNw8eWG-oe\u0026q=85\u0026s=26843b284c99a145eb8cfcb09672d8bf 560w, https://mintcdn.com/libredesk/qUYBMXaNw8eWG-oe/images/whatsapp-phone-number-id.png?w=840\u0026fit=max\u0026auto=format\u0026n=qUYBMXaNw8eWG-oe\u0026q=85\u0026s=ba5beb749c60163f753805caa6ac2e83 840w, https://mintcdn.com/libredesk/qUYBMXaNw8eWG-oe/images/whatsapp-phone-number-id.png?w=1100\u0026fit=max\u0026auto=format\u0026n=qUYBMXaNw8eWG-oe\u0026q=85\u0026s=c981f905ae11a7c7935bce4fe2f1b803 1100w, https://mintcdn.com/libredesk/qUYBMXaNw8eWG-oe/images/whatsapp-phone-number-id.png?w=1650\u0026fit=max\u0026auto=format\u0026n=qUYBMXaNw8eWG-oe\u0026q=85\u0026s=e9e4bf62647557abfee570ebdc40036b 1650w, https://mintcdn.com/libredesk/qUYBMXaNw8eWG-oe/images/whatsapp-phone-number-id.png?w=2500\u0026fit=max\u0026auto=format\u0026n=qUYBMXaNw8eWG-oe\u0026q=85\u0026s=e1479866738644377448195255566662 2500w`})}),`\n`,_jsx(Heading,{level:`2`,id:`copy-the-meta-credentials`,children:`Copy the Meta credentials`}),`\n`,_jsx(Heading,{level:`3`,id:`system-user-access-token`,children:`System User access token`}),`\n`,_jsxs(_components.p,{children:[`Use a `,_jsx(_components.a,{href:`https://developers.facebook.com/documentation/business-messaging/whatsapp/access-tokens#system-user-access-tokens`,children:`System User access token`}),` for this connection.`]}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Open `,_jsx(_components.a,{href:`https://business.facebook.com/settings/`,children:`Meta Business Settings`}),` and select the business portfolio that owns your app and WhatsApp Business Account.`]}),`\n`,_jsxs(_components.li,{children:[`Go to `,_jsx(_components.strong,{children:`Users → System Users`}),`, select `,_jsx(_components.strong,{children:`Add`}),`, and create a system user with the `,_jsx(_components.strong,{children:`Admin`}),` role.`]}),`\n`,_jsxs(_components.li,{children:[`Select `,_jsx(_components.strong,{children:`Assign assets`}),`, choose your app, and grant `,_jsx(_components.strong,{children:`Full control → Manage app`}),`. Ensure the system user also has access to your WhatsApp Business Account under `,_jsx(_components.strong,{children:`Accounts → WhatsApp Accounts → WhatsApp Account Access`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Return to the system user and select `,_jsx(_components.strong,{children:`Generate token`}),`. Choose your app and `,_jsx(_components.strong,{children:`Never`}),` for expiration if available.`]}),`\n`,_jsxs(_components.li,{children:[`Select both `,_jsx(_components.code,{children:`whatsapp_business_messaging`}),` and `,_jsx(_components.code,{children:`whatsapp_business_management`}),`, then generate the token and store it securely.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`These `,_jsx(_components.a,{href:`https://www.postman.com/meta/whatsapp-business-platform/documentation/wlk6lh4/whatsapp-cloud-api`,children:`permissions`}),` cover messaging, account management, templates, and webhooks. The broader `,_jsx(_components.code,{children:`business_management`}),` permission in Meta’s general setup guide is for business portfolio operations; libredesk does not require it.`]}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`App-dashboard user tokens expire and will stop the connection from working. Use a System User token; if it has an expiry date, replace it in libredesk before it expires.`})}),`\n`,_jsx(Heading,{level:`3`,id:`app-secret`,children:`App secret`}),`\n`,_jsxs(_components.p,{children:[`Open `,_jsx(_components.strong,{children:`App settings → Basic`}),`, select `,_jsx(_components.strong,{children:`Show`}),` next to `,_jsx(_components.strong,{children:`App secret`}),`, then copy it.`]}),`\n`,_jsx(Heading,{level:`2`,id:`complete-cloud-api-registration`,children:`Complete Cloud API registration`}),`\n`,_jsxs(_components.p,{children:[`Adding a number and verifying its SMS or voice code does not complete `,_jsx(_components.a,{href:`https://developers.facebook.com/documentation/business-messaging/whatsapp/business-phone-numbers/registration`,children:`Cloud API registration`}),`. If your number is not already registered, register it through Meta’s API after generating the access token above. libredesk does not register the phone number for you.`]}),`\n`,_jsx(_components.p,{children:`Replace the placeholders below with the Graph API version shown in libredesk’s WhatsApp inbox form, your Phone number ID, your System User token, and a six-digit PIN:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`4`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -X`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` POST`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'https://graph.facebook.com/GRAPH_API_VERSION/PHONE_NUMBER_ID/register'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'Authorization: Bearer SYSTEM_USER_ACCESS_TOKEN'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'Content-Type: application/json'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -d`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` '{\"messaging_product\":\"whatsapp\",\"pin\":\"SIX_DIGIT_PIN\"}'`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`For a number with two-step verification already enabled, use its existing PIN. Otherwise, choose a new six-digit PIN and store it securely. This PIN is separate from the SMS or voice verification code and is not entered in libredesk. If you have forgotten it, follow Meta’s `,_jsx(_components.a,{href:`https://developers.facebook.com/documentation/business-messaging/whatsapp/business-phone-numbers/phone-numbers#two-step-verification`,children:`PIN reset instructions`}),` before retrying registration.`]}),`\n`,_jsx(Heading,{level:`2`,id:`publish-the-meta-app`,children:`Publish the Meta app`}),`\n`,_jsxs(_components.p,{children:[`Open `,_jsx(_components.strong,{children:`App settings → Basic`}),` and add the privacy policy URL. Then open `,_jsx(_components.strong,{children:`Publish`}),`, complete any requirements Meta lists, and publish the app.`]}),`\n`,_jsx(Frame,{caption:`Meta requires a privacy policy URL before publishing`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/libredesk/qUYBMXaNw8eWG-oe/images/whatsapp-publish-app.png?fit=max\u0026auto=format\u0026n=qUYBMXaNw8eWG-oe\u0026q=85\u0026s=be43979a724b243b75b183d5c2dbd0a7`,alt:`Meta Publish page showing the privacy policy requirement and WhatsApp use case`,\"data-og-width\":`1280`,width:`1280`,\"data-og-height\":`416`,height:`416`,\"data-path\":`images/whatsapp-publish-app.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/libredesk/qUYBMXaNw8eWG-oe/images/whatsapp-publish-app.png?w=280\u0026fit=max\u0026auto=format\u0026n=qUYBMXaNw8eWG-oe\u0026q=85\u0026s=1b668996fd6defc0240f4d00ce63e341 280w, https://mintcdn.com/libredesk/qUYBMXaNw8eWG-oe/images/whatsapp-publish-app.png?w=560\u0026fit=max\u0026auto=format\u0026n=qUYBMXaNw8eWG-oe\u0026q=85\u0026s=797c489392d3c662f4b36bee011c8f91 560w, https://mintcdn.com/libredesk/qUYBMXaNw8eWG-oe/images/whatsapp-publish-app.png?w=840\u0026fit=max\u0026auto=format\u0026n=qUYBMXaNw8eWG-oe\u0026q=85\u0026s=7869f5e57e326c1e438f98234f217f5a 840w, https://mintcdn.com/libredesk/qUYBMXaNw8eWG-oe/images/whatsapp-publish-app.png?w=1100\u0026fit=max\u0026auto=format\u0026n=qUYBMXaNw8eWG-oe\u0026q=85\u0026s=1a755d17afe5176d5948064a302df25d 1100w, https://mintcdn.com/libredesk/qUYBMXaNw8eWG-oe/images/whatsapp-publish-app.png?w=1650\u0026fit=max\u0026auto=format\u0026n=qUYBMXaNw8eWG-oe\u0026q=85\u0026s=4e336c5fe93955b4863685c47918480b 1650w, https://mintcdn.com/libredesk/qUYBMXaNw8eWG-oe/images/whatsapp-publish-app.png?w=2500\u0026fit=max\u0026auto=format\u0026n=qUYBMXaNw8eWG-oe\u0026q=85\u0026s=7b761ebb3ef6a942f25d6e04eef507f4 2500w`})}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`Some webhooks are not delivered while the Meta app is in Development mode. Publish the app and confirm it is in `,_jsx(_components.strong,{children:`Live`}),` mode before testing incoming messages. See Meta’s `,_jsx(_components.a,{href:`https://developers.facebook.com/documentation/business-messaging/whatsapp/webhooks/overview#troubleshooting`,children:`webhook troubleshooting`}),`.`]})}),`\n`,_jsx(_components.p,{children:`Business verification is optional for the initial connection. New business portfolios start with:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`A `,_jsx(_components.a,{href:`https://developers.facebook.com/documentation/business-messaging/whatsapp/messaging-limits`,children:`messaging limit`}),` of 250 unique customers outside the 24-hour customer-service window per rolling 24 hours, shared across all phone numbers in the portfolio.`]}),`\n`,_jsxs(_components.li,{children:[`A `,_jsx(_components.a,{href:`https://developers.facebook.com/documentation/business-messaging/whatsapp/business-phone-numbers/phone-numbers#registered-number-cap`,children:`registration limit`}),` of two business phone numbers across the portfolio.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`Business verification is one path to higher limits, subject to Meta’s eligibility checks. Start it under `,_jsx(_components.strong,{children:`Step 3. Business verification`}),` and check your current messaging limit in `,_jsx(_components.strong,{children:`WhatsApp Manager → Account tools → Messaging limits`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`connect-the-number-to-libredesk`,children:`Connect the number to libredesk`}),`\n`,_jsxs(_components.p,{children:[`First, go to `,_jsx(_components.strong,{children:`Admin → General`}),` and set `,_jsx(_components.strong,{children:`Root URL`}),` to the public HTTPS address of your libredesk instance.`]}),`\n`,_jsxs(_components.p,{children:[`Then go to `,_jsx(_components.strong,{children:`Admin → Inboxes → New inbox → WhatsApp`}),` and enter:`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`libredesk field`}),_jsx(_components.th,{children:`Value`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Name`}),_jsx(_components.td,{children:`A name that identifies the inbox in libredesk`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Reopen window (hours)`}),_jsxs(_components.td,{children:[`A reply within this many hours of resolving reopens the conversation. `,_jsx(_components.code,{children:`0`}),` always starts a new one. Default `,_jsx(_components.code,{children:`48`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Phone number ID`}),_jsx(_components.td,{children:`The number’s ID from API Setup or WhatsApp Manager`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`WhatsApp Business Account ID`}),_jsx(_components.td,{children:`The account’s ID from API Setup or WhatsApp Manager`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Access token`}),_jsx(_components.td,{children:`The System User token generated above`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`App secret`}),_jsxs(_components.td,{children:[`The secret from `,_jsx(_components.strong,{children:`App settings → Basic`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`API version`}),_jsx(_components.td,{children:`Leave the default unless Meta requires another version`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Webhook verify token`}),_jsx(_components.td,{children:`A random secret that you create`})]})]})]}),`\n`,_jsx(_components.p,{children:`Generate a webhook verify token with:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`openssl`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` rand`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -hex`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 32`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`Create`}),`. libredesk checks that the token can access the phone number and that the number belongs to the WhatsApp Business Account. libredesk then attempts to register a callback for that account in the background.`]}),`\n`,_jsxs(_components.p,{children:[`When `,_jsx(_components.strong,{children:`CSAT Surveys`}),` is on, libredesk submits the `,_jsx(_components.strong,{children:`CSAT survey template`}),` to Meta when you save the inbox. Surveys are sent with it once Meta approves it.`]}),`\n`,_jsx(Heading,{level:`2`,id:`configure-webhooks`,children:`Configure webhooks`}),`\n`,_jsx(_components.p,{children:`libredesk automatically attempts to subscribe your app to the WhatsApp Business Account and set an account-level callback override for messages. This does not change the app-level callback shown in Meta’s dashboard.`}),`\n`,_jsxs(_components.p,{children:[`Meta’s `,_jsx(_components.a,{href:`https://developers.facebook.com/documentation/business-messaging/whatsapp/webhooks/override#supported-webhook-fields`,children:`callback overrides`}),` do not apply to template status updates. Configure the app-level callback as well to receive those updates:`]}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Open the WhatsApp inbox in libredesk and copy its `,_jsx(_components.strong,{children:`Callback URL`}),` and `,_jsx(_components.strong,{children:`Webhook verify token`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`In Meta, open `,_jsx(_components.strong,{children:`Use cases → Customize → Step 2. Production setup → Configure Webhooks`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Set the app-level `,_jsx(_components.strong,{children:`Callback URL`}),` and `,_jsx(_components.strong,{children:`Verify token`}),` to the copied values, then select `,_jsx(_components.strong,{children:`Verify and save`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Under `,_jsx(_components.strong,{children:`Webhook fields`}),`, subscribe to `,_jsx(_components.code,{children:`messages`}),` and `,_jsx(_components.code,{children:`message_template_status_update`}),`.`]}),`\n`,_jsx(_components.li,{children:`Save the inbox again in libredesk to retry account-level webhook registration with Meta’s configuration in place.`}),`\n`]}),`\n`,_jsx(Frame,{caption:`Enter the libredesk callback URL and verify token`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/libredesk/qUYBMXaNw8eWG-oe/images/whatsapp-webhook-endpoint.png?fit=max\u0026auto=format\u0026n=qUYBMXaNw8eWG-oe\u0026q=85\u0026s=41cca3448f9d61dbbf02e9af467fee29`,alt:`Meta webhook configuration fields for Callback URL and Verify token`,\"data-og-width\":`1877`,width:`1877`,\"data-og-height\":`317`,height:`317`,\"data-path\":`images/whatsapp-webhook-endpoint.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/libredesk/qUYBMXaNw8eWG-oe/images/whatsapp-webhook-endpoint.png?w=280\u0026fit=max\u0026auto=format\u0026n=qUYBMXaNw8eWG-oe\u0026q=85\u0026s=fe6f463bd6b64bfdacf5a5de1e61a7cf 280w, https://mintcdn.com/libredesk/qUYBMXaNw8eWG-oe/images/whatsapp-webhook-endpoint.png?w=560\u0026fit=max\u0026auto=format\u0026n=qUYBMXaNw8eWG-oe\u0026q=85\u0026s=1d3d4b800fc85d16da579aa39e6a95c5 560w, https://mintcdn.com/libredesk/qUYBMXaNw8eWG-oe/images/whatsapp-webhook-endpoint.png?w=840\u0026fit=max\u0026auto=format\u0026n=qUYBMXaNw8eWG-oe\u0026q=85\u0026s=8c1ca0065d6a045101a0b7910e1e41cb 840w, https://mintcdn.com/libredesk/qUYBMXaNw8eWG-oe/images/whatsapp-webhook-endpoint.png?w=1100\u0026fit=max\u0026auto=format\u0026n=qUYBMXaNw8eWG-oe\u0026q=85\u0026s=c06f7677737b4433f98ec042f6f1d933 1100w, https://mintcdn.com/libredesk/qUYBMXaNw8eWG-oe/images/whatsapp-webhook-endpoint.png?w=1650\u0026fit=max\u0026auto=format\u0026n=qUYBMXaNw8eWG-oe\u0026q=85\u0026s=07de7235a5103cc9dee0b7fb0e921ca2 1650w, https://mintcdn.com/libredesk/qUYBMXaNw8eWG-oe/images/whatsapp-webhook-endpoint.png?w=2500\u0026fit=max\u0026auto=format\u0026n=qUYBMXaNw8eWG-oe\u0026q=85\u0026s=b2ffd9f1e0c0af55f44b5462865fb87c 2500w`})}),`\n`,_jsx(Frame,{caption:`The two webhook fields required by libredesk`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/libredesk/qUYBMXaNw8eWG-oe/images/whatsapp-webhook-fields.png?fit=max\u0026auto=format\u0026n=qUYBMXaNw8eWG-oe\u0026q=85\u0026s=93fc28496bce30a8d1a8122b5b6598d8`,alt:`Meta webhook fields for messages and message template status updates`,\"data-og-width\":`1600`,width:`1600`,\"data-og-height\":`174`,height:`174`,\"data-path\":`images/whatsapp-webhook-fields.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/libredesk/qUYBMXaNw8eWG-oe/images/whatsapp-webhook-fields.png?w=280\u0026fit=max\u0026auto=format\u0026n=qUYBMXaNw8eWG-oe\u0026q=85\u0026s=982b8b748d00b0544a1911731a79ac22 280w, https://mintcdn.com/libredesk/qUYBMXaNw8eWG-oe/images/whatsapp-webhook-fields.png?w=560\u0026fit=max\u0026auto=format\u0026n=qUYBMXaNw8eWG-oe\u0026q=85\u0026s=b83f0b6f1e20e429b787135b2bde5e13 560w, https://mintcdn.com/libredesk/qUYBMXaNw8eWG-oe/images/whatsapp-webhook-fields.png?w=840\u0026fit=max\u0026auto=format\u0026n=qUYBMXaNw8eWG-oe\u0026q=85\u0026s=6fd2d6449357c3b64eeeca909aa0a3e3 840w, https://mintcdn.com/libredesk/qUYBMXaNw8eWG-oe/images/whatsapp-webhook-fields.png?w=1100\u0026fit=max\u0026auto=format\u0026n=qUYBMXaNw8eWG-oe\u0026q=85\u0026s=334e93261f8ecc9c7a72b7692f5073f6 1100w, https://mintcdn.com/libredesk/qUYBMXaNw8eWG-oe/images/whatsapp-webhook-fields.png?w=1650\u0026fit=max\u0026auto=format\u0026n=qUYBMXaNw8eWG-oe\u0026q=85\u0026s=19601e26883e4eea50b2fec76a8c0fe8 1650w, https://mintcdn.com/libredesk/qUYBMXaNw8eWG-oe/images/whatsapp-webhook-fields.png?w=2500\u0026fit=max\u0026auto=format\u0026n=qUYBMXaNw8eWG-oe\u0026q=85\u0026s=ba2be8c36e431899e20ee5e92f0d74a3 2500w`})}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.code,{children:`messages`}),` field delivers incoming messages and delivery statuses. The `,_jsx(_components.code,{children:`message_template_status_update`}),` field keeps template approval statuses current in libredesk.`]}),`\n`,_jsx(_components.p,{children:`Automatic registration failures are recorded in libredesk’s server logs; saving the inbox can still succeed. If registration fails, check that the Root URL is public HTTPS, Meta can reach the callback, and the System User token has access to the account, then save the inbox again to retry.`}),`\n`,_jsx(Heading,{level:`2`,id:`test-the-connection`,children:`Test the connection`}),`\n`,_jsx(_components.p,{children:`Send a WhatsApp message from another phone to the registered business number. A new conversation should appear in libredesk. Reply from libredesk to confirm that outgoing messages work.`}),`\n`,_jsx(_components.p,{children:`If the conversation does not appear, confirm that:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`The Meta app is published and in `,_jsx(_components.strong,{children:`Live`}),` mode`]}),`\n`,_jsx(_components.li,{children:`The libredesk Root URL is a public HTTPS address that Meta can reach`}),`\n`,_jsx(_components.li,{children:`libredesk’s server logs show successful automatic webhook registration; after correcting a registration failure, save the inbox again`}),`\n`,_jsxs(_components.li,{children:[`Both webhook fields above show `,_jsx(_components.strong,{children:`Subscribed`})]}),`\n`,_jsxs(_components.li,{children:[`The `,_jsx(_components.strong,{children:`App secret`}),` matches the same Meta app used to generate the token. A wrong secret rejects incoming webhooks even when saving the inbox succeeds; the server logs report `,_jsx(_components.code,{children:`whatsapp webhook signature verification failed`})]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`If replies fail, check that the number has completed Cloud API registration and the token has `,_jsx(_components.code,{children:`whatsapp_business_messaging`}),` permission. If template statuses do not update, check the app-level callback and the `,_jsx(_components.code,{children:`message_template_status_update`}),` subscription.`]}),`\n`,_jsx(Heading,{level:`2`,id:`the-24-hour-reply-window`,children:`The 24-hour reply window`}),`\n`,_jsxs(_components.p,{children:[`Agents can send free-form replies and attachments for 24 hours after the contact’s latest message. After that, only approved templates can be sent, and the reply box shows a `,_jsx(_components.strong,{children:`Send template`}),` button. Private notes work at any time. The window opens again when the contact replies.`]}),`\n`,_jsx(Heading,{level:`2`,id:`business-initiated-messages`,children:`Business-initiated messages`}),`\n`,_jsx(_components.p,{children:`Send an approved template to start a new conversation or to message a contact whose reply window is closed.`}),`\n`,_jsxs(_components.p,{children:[`To send business-initiated template messages, return to `,_jsx(_components.strong,{children:`Step 2. Production setup`}),` and expand `,_jsx(_components.strong,{children:`Add payment to send business-initiated messages`}),`. Add a payment method in Meta’s Billing Hub.`]}),`\n`,_jsx(Heading,{level:`2`,id:`templates`,children:`Templates`}),`\n`,_jsxs(_components.p,{children:[`Manage templates under `,_jsx(_components.strong,{children:`Admin → WhatsApp templates`}),`. Each WhatsApp inbox has its own template list.`]}),`\n`,_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`New template`}),`, fill in the form, then click `,_jsx(_components.strong,{children:`Submit to Meta`}),`. The template stays `,_jsx(_components.code,{children:`PENDING`}),` until Meta reviews it, and only `,_jsx(_components.code,{children:`APPROVED`}),` templates can be sent. If Meta rejects it, hover over the status to see the reason, then edit and resubmit.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Sync from Meta`}),` imports templates you created in WhatsApp Manager. libredesk also syncs every 6 hours.`]}),`\n`,_jsx(_components.p,{children:`libredesk can send templates with a text header or no header. Templates with image, video, or document headers can be synced but not sent.`}),`\n`,_jsxs(_components.p,{children:[`To send a template in a conversation, click `,_jsx(_components.strong,{children:`Send template`}),` in the reply box, pick a template, fill in its values, and click `,_jsx(_components.strong,{children:`Send`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`start-a-whatsapp-conversation`,children:`Start a WhatsApp conversation`}),`\n`,_jsxs(_components.p,{children:[`Open `,_jsx(_components.strong,{children:`New conversation`}),`, select the `,_jsx(_components.strong,{children:`WhatsApp`}),` tab, choose the inbox, and enter the contact’s phone number. A new WhatsApp conversation always starts with an approved template.`]}),`\n`,_jsx(_components.p,{children:`A contact can have one open WhatsApp conversation per inbox. If one exists, the form links to it.`}),`\n`,_jsx(Heading,{level:`2`,id:`message-types`,children:`Message types`}),`\n`,_jsx(_components.p,{children:`Incoming text, images, video, audio, voice notes, documents, stickers, locations, contact cards, and button replies appear in the conversation. Reactions are ignored.`}),`\n`,_jsx(_components.p,{children:`Agents can send text and attachments. WhatsApp allows one file per message, so libredesk sends each attachment as its own message. WebP images are not supported.`}),`\n`,_jsx(Heading,{level:`2`,id:`delivery-and-read-status`,children:`Delivery and read status`}),`\n`,_jsx(_components.p,{children:`Outgoing messages show sent, delivered, read, or failed. Hover over a failed message to see the reason. When an agent opens a conversation, the contact sees a read receipt.`}),`\n`,_jsx(Heading,{level:`2`,id:`contacts`,children:`Contacts`}),`\n`,_jsx(_components.p,{children:`Replies go to the contact’s WhatsApp number. Editing the contact’s phone number does not change where replies go.`}),`\n`,_jsx(_components.p,{children:`To message an existing contact who has no WhatsApp number, such as an email contact, libredesk uses the phone number and country code saved on the contact.`}),`\n`,_jsx(Heading,{level:`2`,id:`multiple-phone-numbers`,children:`Multiple phone numbers`}),`\n`,_jsx(_components.p,{children:`Create one WhatsApp inbox per phone number. Inboxes can share a WhatsApp Business Account.`}),`\n`,_jsx(Heading,{level:`2`,id:`permissions`,children:`Permissions`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Action`}),_jsx(_components.th,{children:`Permission`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Create, edit, delete, and sync templates`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`inboxes:manage`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Send replies and templates in a conversation`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`messages:write`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Start a WhatsApp conversation`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`conversations:write`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Start a WhatsApp conversation with a number that has no contact`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`conversations:write`}),` and `,_jsx(_components.code,{children:`contacts:write`})]})]})]})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"WhatsApp","description":"Connect a WhatsApp number through Meta's Cloud API","href":"/configuration/whatsapp"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Before you start","slug":"before-you-start","depth":2,"children":[]},{"title":"Create the Meta app","slug":"create-the-meta-app","depth":2,"children":[]},{"title":"Add and verify the phone number","slug":"add-and-verify-the-phone-number","depth":2,"children":[{"title":"Copy the account IDs","slug":"copy-the-account-ids","depth":3,"children":[]}]},{"title":"Copy the Meta credentials","slug":"copy-the-meta-credentials","depth":2,"children":[{"title":"System User access token","slug":"system-user-access-token","depth":3,"children":[]},{"title":"App secret","slug":"app-secret","depth":3,"children":[]}]},{"title":"Complete Cloud API registration","slug":"complete-cloud-api-registration","depth":2,"children":[]},{"title":"Publish the Meta app","slug":"publish-the-meta-app","depth":2,"children":[]},{"title":"Connect the number to libredesk","slug":"connect-the-number-to-libredesk","depth":2,"children":[]},{"title":"Configure webhooks","slug":"configure-webhooks","depth":2,"children":[]},{"title":"Test the connection","slug":"test-the-connection","depth":2,"children":[]},{"title":"The 24-hour reply window","slug":"the-24-hour-reply-window","depth":2,"children":[]},{"title":"Business-initiated messages","slug":"business-initiated-messages","depth":2,"children":[]},{"title":"Templates","slug":"templates","depth":2,"children":[]},{"title":"Start a WhatsApp conversation","slug":"start-a-whatsapp-conversation","depth":2,"children":[]},{"title":"Message types","slug":"message-types","depth":2,"children":[]},{"title":"Delivery and read status","slug":"delivery-and-read-status","depth":2,"children":[]},{"title":"Contacts","slug":"contacts","depth":2,"children":[]},{"title":"Multiple phone numbers","slug":"multiple-phone-numbers","depth":2,"children":[]},{"title":"Permissions","slug":"permissions","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/libredesk/e67c9dce170f6259/widget.js"],"subdomain":"libredesk","siteName":"libredesk Documentation","title":"WhatsApp - libredesk Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-22T12:19:41.186Z","originalFileLocation":"configuration/whatsapp.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Connect a WhatsApp number through Meta\u0026#x27;s Cloud API\">\u003cmeta data-mint-head name=\"application-name\" content=\"libredesk Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/libredesk/JiEZMYNDHwQfL7ME/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/libredesk/JiEZMYNDHwQfL7ME/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/libredesk/JiEZMYNDHwQfL7ME/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/libredesk/JiEZMYNDHwQfL7ME/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/libredesk/JiEZMYNDHwQfL7ME/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/libredesk/JiEZMYNDHwQfL7ME/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/libredesk/JiEZMYNDHwQfL7ME/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/libredesk/JiEZMYNDHwQfL7ME/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/libredesk/JiEZMYNDHwQfL7ME/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"WhatsApp - libredesk Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Connect a WhatsApp number through Meta\u0026#x27;s Cloud API\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"libredesk Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.libredesk.io/configuration/whatsapp\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://libredesk.mintlify.app/_mintlify/api/og/v2?division=Configuration\u0026amp;title=WhatsApp\u0026amp;description=Connect+a+WhatsApp+number+through+Meta%27s+Cloud+API\u0026amp;theme=df0a23c6404380a64767364d\u0026amp;signature=8d2479cbdb8b1453ccd9e12d8fb154ab09f5b1ce9c49306bed1811c7a3b231b7\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"WhatsApp - libredesk Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Connect a WhatsApp number through Meta\u0026#x27;s Cloud API\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://libredesk.mintlify.app/_mintlify/api/og/v2?division=Configuration\u0026amp;title=WhatsApp\u0026amp;description=Connect+a+WhatsApp+number+through+Meta%27s+Cloud+API\u0026amp;theme=df0a23c6404380a64767364d\u0026amp;signature=8d2479cbdb8b1453ccd9e12d8fb154ab09f5b1ce9c49306bed1811c7a3b231b7\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/libredesk/JiEZMYNDHwQfL7ME/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"libredesk Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#2563EB\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.libredesk.io/configuration/whatsapp\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/configuration/whatsapp.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.libredesk.io/#organization\",\"name\":\"libredesk Documentation\",\"url\":\"https://docs.libredesk.io\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://s3.ap-south-1.amazonaws.com/libredesk.io/libredesk_black.png\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.libredesk.io#website\",\"name\":\"libredesk Documentation\",\"url\":\"https://docs.libredesk.io\",\"publisher\":{\"@id\":\"https://docs.libredesk.io/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.libredesk.io/configuration/whatsapp#webpage\",\"url\":\"https://docs.libredesk.io/configuration/whatsapp\",\"name\":\"WhatsApp\",\"description\":\"Connect a WhatsApp number through Meta's Cloud API\",\"dateModified\":\"2026-10-22T12:19:41.186Z\",\"isPartOf\":{\"@id\":\"https://docs.libredesk.io#website\"},\"breadcrumb\":{\"@id\":\"https://docs.libredesk.io/configuration/whatsapp#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.libredesk.io/configuration/whatsapp#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Configuration\",\"item\":\"https://docs.libredesk.io/configuration/connecting-inboxes\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"WhatsApp\",\"item\":\"https://docs.libredesk.io/configuration/whatsapp\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.libredesk.io/configuration/whatsapp#article\",\"headline\":\"WhatsApp\",\"name\":\"WhatsApp\",\"description\":\"Connect a WhatsApp number through Meta's Cloud API\",\"url\":\"https://docs.libredesk.io/configuration/whatsapp\",\"mainEntityOfPage\":{\"@id\":\"https://docs.libredesk.io/configuration/whatsapp#webpage\"},\"dateModified\":\"2026-10-22T12:19:41.186Z\",\"publisher\":{\"@id\":\"https://docs.libredesk.io/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.libredesk.io#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"libredesk Documentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"libredesk Documentation","nav":{"global":{"anchors":[{"anchor":"GitHub","icon":"github","href":"https://github.com/abhinavxd/libredesk"},{"anchor":"OpenAPI Spec","icon":"code","href":"https://docs.libredesk.io/api-reference/openapi.json"}]},"tabs":[{"tab":"Documentation","groups":[{"group":"Introduction","pages":[{"title":"Introduction","href":"/introduction"}]},{"group":"Getting Started","pages":[{"title":"Installation","href":"/getting-started/installation"},{"group":"Hosting Providers","pages":[{"title":"Deploy on Railway","href":"/hosting-providers/railway"}]},{"title":"Upgrade Guide","href":"/getting-started/upgrade"},{"title":"API Getting Started","href":"/getting-started/api-getting-started"}]},{"group":"Configuration","pages":[{"title":"Connecting Inboxes","href":"/configuration/connecting-inboxes"},{"title":"Live Chat","description":"Embed the libredesk chat widget on your website and verify user identity with JWTs","href":"/configuration/livechat"},{"title":"WhatsApp","href":"/configuration/whatsapp"},{"title":"Help Center","description":"Publish a searchable knowledge base with collections, articles in multiple languages, and customize it however you want","href":"/configuration/help-center"},{"title":"Email Templates","href":"/configuration/email-templates"},{"title":"AI","href":"/configuration/ai"},{"title":"SSO Setup","href":"/configuration/sso"},{"title":"Webhooks","href":"/configuration/webhooks"},{"title":"Context Links","href":"/configuration/context-links"},{"title":"SSRF protection","href":"/configuration/ssrf-protection"}]},{"group":"Roles","pages":[{"title":"Roles \u0026 Permissions","href":"/roles/overview"}]},{"group":"Contributing","pages":[{"title":"Developer Setup","href":"/contributing/developer-setup"},{"title":"Translations","href":"/contributing/translations"}]}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/api-reference/introduction"}]}]},"basePath":"","title":"WhatsApp - libredesk Documentation","buildId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","deploymentId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-DXXFP6nH.js","DynamicMarkdown-B54_zNBF.js","zoom-image-lightbox-BG6oD64b.js","lightbox-handle-r17bVUz3.js"]}