I get why the docs feel surface-level — they show you what each action does but not how to actually stitch them together for a real webhook. Based on your screenshots, here's roughly how this kind of flow comes together, and it matches what you're already building.
Your trigger ("When a Teams webhook request is received") just gives you a raw JSON blob from whatever's calling in. The first thing you want to do right after that is add a Parse JSON action and generate its schema from a sample payload. This one step saves you a ton of headache later, because instead of writing awkward expressions to dig values out of the raw body, you get clean dynamic content fields you can just click and drop into later steps.
After that, your two "Initialize variable" steps for Body and Attachments make sense as staging areas - one holds whatever text/content you're going to post, the other handles cases where there might be a file or image attached. Setting these up early means you're not fighting messy nested logic further down the flow.
Then comes the important branch: check if Attachments is null.
- If there's nothing attached, you loop through your incoming events with a "For each" and post each one as a card.
- If there is an attachment, you handle that separately (looks like you've only got it down to 1 action right now, so you'll probably want to flesh that branch out a bit more, like uploading it or linking it into the card).
The "For each" part matters because webhooks often send back more than one event at a time in an array, so you want one card posted per event, not everything crammed into one message.
Now, the trickiest part for most people isn't Power Automate itself, it's the actual card formatting for "Post card in a chat or channel." That action expects Adaptive Card JSON, and trying to build that blind inside Power Automate is painful. Instead, build your card layout in the free Adaptive Cards Designer (adaptivecards.io/designer), preview it live, then paste the finished JSON into your action and just swap in your dynamic values where needed. Way faster than guessing.
And since you mentioned the error messages aren't helpful, turn on "Run after" configuration on your actions so a failure doesn't just die silently, then check the raw inputs/outputs on the failed run. Most of the time when these flows break, it's because the Parse JSON schema doesn't quite match what the webhook actually sent that day, so re-generating it from a fresh sample usually clears it up.
Want a hand actually writing the Adaptive Card JSON for your message format? Happy to put one together if you share what fields you want shown.
🏷️ Tag me if you're still stuck or have more questions.
✅ If this solves your issue, please Accept as Solution so it can also help others facing the same problem.
❤️ If you found this helpful, a Like is always appreciated!