Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save willdages/dcac226b8d482b9dc105e6044a677345 to your computer and use it in GitHub Desktop.

Select an option

Save willdages/dcac226b8d482b9dc105e6044a677345 to your computer and use it in GitHub Desktop.
Slack's Interactive Messages endpoint reports a Content-Type of `application/x-www-form-urlencoded` but responds with something like looks like `payload=%7B%22actions%22%3A%5B%7B%22...`, which is encoded JSON inside the payload parameter, which takes the API Gateway VTL templates for a loop.
## The `substring(8)` returns the input with everything after "payload=" which is the only parameter passed in,
## everything else is encoded JSON inside that parameter.
#set ($encodedJSON = $input.body.substring(8))
$util.urlDecode(${encodedJSON})
@willdages

Copy link
Copy Markdown
Author

This isn't the most elegant mapping template ever, but it's what I used to get this payload transformed into JSON for an AWS Lambda function. Add this as an Integration Request Body Mapping Template in API Gateway, for the Content Type application/x-www-form-urlencoded.

@cookstaar

Copy link
Copy Markdown

Holy crap. Wasted hours on this before I found this gist. Thank you.

ghost commented Nov 24, 2017

Copy link
Copy Markdown

Thanks, dude... really useful. Do you know why is that? I'm thinking about the reasons for this kind of decision from Slack's team.

@mjzuppe

mjzuppe commented Mar 10, 2018

Copy link
Copy Markdown

Thanks a million for posting this. I'd also add for anyone else struggling that I had to delete and rebuild the API with this template for it to work.

@cgjerow

cgjerow commented May 18, 2018

Copy link
Copy Markdown

EDIT: I was making a novice mistake and hadn't deployed the API changes.

I added this mapping template but am still receiving the same error. First time using API Gateway + Lambda, so if there are any gotchas I could be missing in the setup, like needing to publish changes to the API Gateway or something please let me know.

@StJohn3D

StJohn3D commented Jul 7, 2018

Copy link
Copy Markdown

Thanks a million. I had a body mapping I got from another site that was working for slash commands but wasn't working for interactions. Slack should really just send json

@YAMABASS80

Copy link
Copy Markdown

You are my savior! Thanks!

@DanielBlei

Copy link
Copy Markdown

Saved my day. Thanks.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment