4

I'm using the Slack web API to post messages to a channel in Go. I'm trying to support multi-line messages in the text field. According to the documentation simply adding a \n should work but it's not working. When posting the \n appears in the text and there's no line break.

Here's the code I'm using:

func PostMessage(token, channelName, userName, text string) error {
    uv := url.Values{}
    uv.Add("token", token)
    uv.Add("channel", channelName)
    uv.Add("username", userName)
    uv.Add("text", text)

    resp, err := http.PostForm("https://slack.com/api/chat.postMessage", uv)
    if err != nil {
        return err
    }
    return nil
}

func main() {
    if err := PostMessage("xxxx", "#test-channel", "API", "This should be the first line\nThis should be the second line"); err != nil {
        panic(err)
    }
}
broseflip
  • 231
  • 2
  • 3
  • 6
  • 1
    What happens if you use a [raw string literal](https://stackoverflow.com/questions/7933460/how-do-you-write-multiline-strings-in-go)? – BlueSpaceCanary May 12 '16 at 19:17
  • You're not sending the two characters "\" and "n", you're sending a literal newline character. – JimB May 12 '16 at 19:17

3 Answers3

3

I figured out the issue. The sample I originally posted will actually work as intended. I simplified the original code which was a command line application where the text is a parameter passed as a CLI flag so it looked a little like this:

cliapp --text="one\ntwo"

The variable that held the value for this flag wasn't actually escaping the character so it was ACTUALLY:

"one\\ntwo"

I used a simple string replacement to fix the values:

text = strings.Replace(text, "\\n", "\n", -1)
broseflip
  • 231
  • 2
  • 3
  • 6
1

I was using Java and i did

message.replace("\\n","\n")

and it worked.

-1

Just escape the newline "\n" with "`n"

Reference: https://ss64.com/ps/syntax-esc.html

  • 1
    Welcome to SO. Link as answers are best for comments not answers. I suggest editing the above answer to add the main parts so its in one place. – Syfer Jun 09 '17 at 02:14