My app (Ionic 4) receive notification through onesignal native plugin. I used onesignal online desk to test the app, and the onesignal API with postman to send notification via api. All ok.
Then I made a simple utility to send the notifications, using HTTP (cordova-plugin-advanced-http 2.0.9 "Advanced HTTP plugin").

Try inspecting what’s really being sent to the OneSignal API from your app. You can do that by running in a local browser like Chrome with ˋionic serveˋ, open the developer tools (usually with F12) and choose the “Network” tab. There you can see request headers, payload and reply for every request sent from the browser app.

I assume there is some kind of translation happening when Angular serializes your “body” object into raw post data, e.g. escaping the double quotes.

Thanks for help, Alex.
Unfortunately I’m not able to catch the real message with Chrome, I’m lacking of some knowledge, I’m afraid. I can see only messages regarding the load of the app into the test device; if I try with ionic serve, not on device, I can’t run this application because of the cordova need:

Native: tried calling HTTP.post, but Cordova is not available. Make sure to include cordova.js or run in a device/simulatorcacth only

I’m pretty sure that the problem is into the {"en": "Message"} that actually is {en: "Message"} instead, but I cant understand why! As you can see above, body is correct.