- Home /
 
WWWForm: can't get it to work with Slack Webhooks
Dear Unity peers,
Inside one of my game scripts, I am having difficulty sending info to a slack feed with an HTTP POST request and JSON. I couldn't locate any discussion of this specific issue in the forums and am hopeful someone might be able to help. I am using the following C# code:
     WWWForm form = new WWWForm ();
     form.AddField ("text", "hello world");
     WWW link = new WWW ("https://hooks.slack.com/services/00000000000000000/XXXXXXXXXXXXXXXXXXXX", form);
     yield return link;
     if (!string.IsNullOrEmpty (link.error)) {
         Debug.Log ("Error sending POST request: " + link.error + " " + link.text);
     }
     Debug.Log ("post attempt is done");
 
               I can get something similar to work with curl, and this runs properly in my script, but I keep getting HTTP 500 errors with the text "invalid payload" when I attempt this in my unity C# script as above. I did notice that with curl I have to use "url-encode"... but my understanding of WWWForm takes care of this automatically. For reference, here is Slack's example of proper webhook usage:
 curl -X POST --data-urlencode 'payload={"text":"This is a line of text.\nAnd this is another one."}' https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX
 
               There's more discussion of Slack webhooks here, though it didn't seem to help: https://api.slack.com/incoming-webhooks 
Does anyone see what I might be doing wrong, or have any suggestions for further debugging the problem?
Answer by $$anonymous$$ · May 02, 2019 at 03:34 PM
I am experiencing the same issue - did you make any progress on this? :)
EDIT: I got it working.
 private static IEnumerator PostToSlackWebHook(string message)
 {
     WWWForm slackPost = new WWWForm();
     slackPost.headers["Content-Type"] = "application/x-www-form-urlencoded";
     slackPost.AddField("payload", JsonUtility.ToJson(new Payload
     {
         text = message
     }));
     UnityWebRequest www = UnityWebRequest.Post(_slackWebhookURL, slackPost);
 
     var operation = www.SendWebRequest(); 
     
     yield return operation.isDone;
     
     if (www.isNetworkError || www.isHttpError)
     {
         Debug.Log($"Slack Webhook | {www.error} ({www.downloadHandler.text})");
     }
 }
 
              Your answer
 
             Follow this Question
Related Questions
Multiple Cars not working 1 Answer
Distribute terrain in zones 3 Answers
Getting info using WWW & PHP 3 Answers
Upload files to a remote form using C# in Unity 2 Answers
Sending variables to HTML 1 Answer