Embedded Signup è additivo. Il wizard originale “porta il tuo token” su
/welcome è rimasto invariato ed è sempre disponibile — Embedded Signup è un secondo percorso opzionale per i workspace che preferiscono un onboarding ospitato da Meta invece di incollare un token System User.Tre percorsi di onboarding
Quando Embedded Signup è abilitato,/welcome presenta un selettore (OnboardingPathChooser) con tre card invece di passare direttamente al wizard manuale:
Scegliere “Fai l’onboarding con noi” o “Migra un account WhatsApp esistente” renderizza entrambi lo stesso
EmbeddedSignupCard — l’unica differenza è il valore path (onboard vs migrate) inviato all’endpoint di scambio, e la UI di signup di Meta adatta il proprio testo di conseguenza. Una casella di controllo Abilita Messaggi di Marketing appare quando è configurato un config ID Meta con ambito marketing, e determina quale config_id di login Facebook viene utilizzato.
Feature flag e prerequisiti
Embedded Signup è disattivato per impostazione predefinita ed è vincolato sia a un flag client pubblico sia a credenziali dell’app lato server:
Il controllo lato server è deliberatamente una difesa a più livelli: attivare da solo il flag client non può mai esporre un flusso Embedded Signup funzionante senza che anche le credenziali dell’app siano configurate.
Come funziona lo scambio
- Il browser carica una volta il Facebook JS SDK (
connect.facebook.net/en_US/sdk.js) e chiamaFB.login()con ilconfig_idrisolto, richiedendo uncodedi autorizzazione. - Il popup di Meta invia anche un evento
postMessageWA_EMBEDDED_SIGNUP(validato rispetto a un’originefacebook.com/*.facebook.com) che trasporta ilwaba_ide ilphone_number_idselezionati dall’operatore all’interno della UI di Meta. - Una volta arrivati entrambi il
codee la coppia WABA/telefono, la card invia (POST) una sola volta a/api/onboarding/meta/exchangecon{ code, wabaId, phoneNumberId, path, includeMarketingMessages }. - La route (
apps/app/app/api/onboarding/meta/exchange/route.ts) esegue una sequenza rigorosa lato server:- scambia il code con un access token business (
exchangeEmbeddedSignupCode); - ispeziona il token con
debugTokene richiede sia lo scopewhatsapp_business_managementchewhatsapp_business_messaging; - se gli scope granulari di Meta enumerano gli ID WABA concessi, il
wabaIdfornito deve trovarsi in quella lista — un WABA id fornito dal client non è mai considerato attendibile alla cieca; - conferma che il numero di telefono appartenga effettivamente a quel WABA tramite
listWabaPhoneNumbersprima di fare qualsiasi altra cosa; - genera e memorizza un PIN di registrazione a 6 cifre usa e getta (segreto
meta-phone-pin) e chiamaregisterPhoneNumberForCloudApi— un fallimento di registrazione Meta (già registrato, mismatch 2FA in migrazione) viene tollerato e riportato comephoneRegistered: falseinvece di far fallire l’intera richiesta; - genera un token di verifica per workspace e sottoscrive l’app Switchbord al WABA con un
override_callback_uriambitato per workspace (.../webhooks/meta?w=<workspaceId>); - risolve in quale slot di credenziali rientra il token di questo WABA (vedi sotto), memorizza il token e importa il numero di telefono in un canale.
- scambia il code con un access token business (
- La risposta non contiene mai l’access token, il PIN, il verify token,
META_APP_SECRET, né alcunappsecret_proof— solochannelId,wabaId,phoneNumberId,displayName,phoneRegisteredemarketingMessagesEnabled.
Isolamento del token Multi-WABA
Prima di questo lavoro, il token Meta di ogni workspace viveva sotto un unico tipo di segreto Vault (meta-access-token) — un secondo WABA collegato tramite Embedded Signup sovrascriveva silenziosamente il token del primo WABA e interrompeva i suoi invii. Switchbord ora risolve il token di ogni WABA in modo indipendente:
- L’account provider predefinito (il primo WABA in un workspace, o uno già contrassegnato come predefinito) continua a usare il tipo di segreto
meta-access-token— i workspace con un solo WABA non sono affatto interessati. - Ogni WABA aggiuntivo occupa il primo slot libero da
meta-access-token-2ameta-access-token-8(allocateWabaTokenSlotKind), registrato suwhatsapp_provider_accounts.credential_secret_kind. Otto slot superano comodamente qualsiasi conteggio realistico di WABA per workspace. resolveChannelAccessToken(admin, { workspaceId, channelId | channel })è il risolutore unico usato da ogni percorso critico di invio (dispatch dei messaggi — che copre anche gli invii di campagna — invii di media, invii interattivi e sincronizzazione dei template). Risolve canale → account provider →credentialSecretKind, legge quello slot Vault, e ricade sulmeta-access-tokenpredefinito del workspace e poi sulla variabile d’ambienteWHATSAPP_META_ACCESS_TOKENse lo slot è vuoto. Non lancia mai un’eccezione per un token mancante — i chiamanti fanno fallire il dispatch in modo esplicito esattamente come prima.
Questo è trasparente per gli operatori — non esiste un campo token per WABA da gestire nelle Impostazioni. Il tipo di slot viene scelto automaticamente al momento dell’onboarding e letto automaticamente al momento dell’invio. Settings → Provider continua a mostrare solo i tipi di credenziali rivolti all’operatore; i tipi di slot WABA sono interni.
Verificare un workspace Multi-WABA
- Controlla
whatsapp_provider_accountsper il workspace: la riga predefinita hais_default = trueecredential_secret_kind = 'meta-access-token'; ogni WABA aggiuntivo ha il proprio slotcredential_secret_kindeis_default = false. - Un invio per un WABA non predefinito che segnala il numero mittente sbagliato significa quasi sempre che il
credential_secret_kinddel suo account provider è mancante o punta allo slot sbagliato — verifica chesetProviderAccountCredentialKindsia stato chiamato durante l’onboarding di quel WABA. - Se Embedded Signup è stato completato ma
phoneRegisteredè tornatofalse, il numero di telefono è collegato al canale ma non è ancora registrato per gli invii Cloud API — completa la registrazione dalle Impostazioni prima di aspettarti che gli invii vengano effettuati.
Vedi anche
- Onboarding dell’Operatore — il flusso
/setupal primo avvio e la checklist di prontezza - Credenziali Meta — configurazione passo-passo — il percorso manuale porta-il-tuo-token
- Collega WhatsApp — walkthrough completo di Meta Business Suite
- Architettura Vault — come vengono memorizzati e letti i segreti del workspace (inclusi gli slot dei token WABA)