4

I am trying to cURL slack when nginx fails to reload. I am able to check that nginx failed and can cURL slack when it does. I am running into an invalid payload error when trying to include the error message from the failed reload within my cURL command. This is the script I have to do that:

#!/bin/bash

OUTPUT=$(nginx -s reload 2>&1 > /dev/null >/mnt/efs/out.txt)

ESCAPE=$(echo $OUTPUT | sed 's/"/\"/g' | sed "s/'/\'/g" )

nginx -t || curl -X POST --data-urlencode 'payload={"username": "reload-monitor-lizard", "text": "'"${ESCAPE}"'", "icon_emoji": ":ghost:"}' https://hooks.slack.com/services/xxxxxxx/xxxxx/xxxxxxxxxxxxxxxxxxxx

I've tried playing around with the quotes, but it either still gives me the invalid payload error or sends

${ESCAPE}

as the message. Any suggestions on what I am doing wrong?

Update:

Fixed this by replacing the double quotes in my variable with single quotes like this:

ESCAPE=$(echo $OUTPUT | sed "s/\"/'/g" )
user2303670
  • 93
  • 1
  • 1
  • 6

3 Answers3

3

Fixed by replacing double quotes in the variable with single quotes. Like so:

ESCAPE=$(echo $OUTPUT | sed "s/\"/'/g" )
user2303670
  • 93
  • 1
  • 1
  • 6
1

This works fine for me:

curl -X POST -H \"Content-type: application/json\" --data \"{\\\"text\\\":\\\"Here your text!!\\\"}\" <host_slack>
Petter Friberg
  • 21,252
  • 9
  • 60
  • 109
0

You are trying to post www-form-urlencoded data to an endpoint which is expecting JSON.

Apart from that your code works fine.

miknik
  • 5,748
  • 1
  • 10
  • 26
  • 1
    I was able to fix this by replacing the double quotes in my variable with single quotes like this: `ESCAPE=$(echo $OUTPUT | sed "s/\"/'/g" )` Is this related to what you're saying? It seems to me that double quotes were causing special characters to be sent outside a string. – user2303670 Jul 13 '18 at 22:31