I've been through this exact pain. Setting up WhatsApp Embedded Signup feels like they designed it to break your spirit, but once you see the pattern it's actually a fairly logical pipeline - just incredibly unforgiving about missing a piece.
A few things that kept tripping me up, your mileage may vary.
First, the permissions step is where most people get silently blocked. The dashboard lets you click around and think you've enabled business_management, but the embedded signup flow will fail without that permission being explicitly listed under the app's "Permissions and Features" section - and it must be reviewed if your app goes live. For testing, you can leave it in development mode, but double-check that it's actually toggled on.
Second, the configuration ID is easy to overlook. When you're inside Facebook Login for Business → Settings, you have to create a new config and specifically tick the WhatsApp Embedded Signup toggle. That generates the Config ID. I spent an hour wondering why the frontend returned a generic error before realising the config wasn't saved. The UI makes it look like a simple dropdown, but it's really a multi-step wizard.
Third, ngrok is mandatory but I'd suggest using the same URL every time you restart it - ngrok gives you a new random URL by default. You can get a static domain on the free plan if you sign up. Otherwise you'll be back in the Meta app settings updating the allowed domains every session. That alone saves a headache.
One thing the official docs don't emphasise enough: the OAuth redirect URL in your app settings has to be exactly the ngrok URL plus whatever callback path your React app uses. I had a trailing slash mismatch once and it failed silently.
When you finally get the authorisation code back, the token exchange is straightforward via Postman, but keep your app secret safe - if you're checking into a public repo, use env variables.
Ultimately this whole flow feels like Meta's way of making sure you really, really intend to use WhatsApp as a channel. Once it works, you've basically built a distribution pipeline that can plug into a CRM or custom dashboard. Worth the grit.
Hope that fills in the gaps the official guide leaves open.