Slackに改行を含むメッセージをcurlで送信

表題の通り。Slackの”Incoming Webhook“ではなく、”Web API“の “chat.postMessage“で改行を含むメッセージを`curl`で送りたい。node等で書いたアプリでは”chat.postMessage“相手でもあまり気にせず改行を含むメッセージを送れたのだが、スクリプトの中で`curl`コマンドを使用して送ろうとするとダメだったので自身の解決策を。

■ 環境

  • Slack
  • Linux

■ 結論

メッセージ(text)の中に改行を含むものは`curl`では送れなかった。しかし、自身の用途では改行以降は単なる一覧を追加したいだけだったので、”attachments“で実現が可能であった。”attachments“の”text“であれば、改行を含むメッセージもイメージ通りに改行されてSlackで表示されるようになった。

■ NG

$ curl -XGET "https://slack.com/api/chat.postMessage?token=${TOKEN}&channel=${CHANNEL}&text=${MESSAGE}&username=${USER}&iconemoji=${ICON}&link_names=1"

上記の”${MESSAGE}“に改行(¥n)を含んでいても、Slackで見ると改行はされずに文字列として”¥n“と表記されてしまう。

■ OK

もともとメッセージの改行以降は下記のように付加情報を一覧で出しているだけであった。

Hello World!!!
- 111
- 222

これを”NG“の時には下記のように表示されてしまう。

Hello World!!!¥n- 111¥n- 222

よって、この改行以降を”attachments“に分けてみた。

$ curl -XGET "https://slack.com/api/chat.postMessage?token=${TOKEN}&channel=${CHANNEL}&text=${MESSAGE}&attachments=${ATTACHMENTS}&username=${USER}&iconemoji=${ICON}&link_names=1"

attachments“に渡すのは下記のような文字列である。

[{"text":"- 111¥n- 222"}]

実際に`curl`に渡す時にはurlencodeをして渡している。

とすると、改行もされ思い通りのレイアウトで表示された。満足である。

以上。

■ 関連