【経緯】
これの派生のような感じです。
上記でせっかくSlack APIについて軽く触れてみたので、第二弾としてサーバーからcurlコマンドでSlackのチャンネルにメッセージを投げてみました。
※基本的に参考にさせていただいた方の記事で手順は確認出来るので、簡単にメモ&はまったところだけ記載します。
【Tokenの取得】
- Slack APIにアクセス
- 「Generate test tokens」をクリック
- 「Create token」をクリック
- 作成されたTokenをコピーする
【サーバーからのcurl実行(chat.postMessage)】
■特定のユーザに飛ばすとき
command
$ curl -XPOST -d "token={作成したToken}" -d "channel={メッセージを飛ばしたいチャンネル名}" -d 'text=<@user_id> メッセージだよ!!!' -d "username={メッセージ通知元}" -d "icon_url={アイコン画像のURL}" "https://slack.com/api/chat.postMessage"
■@channelに飛ばすとき
command
$ curl -XPOST -d "token={作成したToken}" -d "channel={メッセージを飛ばしたいチャンネル名}" -d 'text=<!channel> メッセージだよ!!!' -d "username={メッセージ通知元}" -d "icon_url={アイコン画像のURL}" "https://slack.com/api/chat.postMessage"
【はまったところ】
textだけシングルクォーテーションという記述からお察しの通り、もともとtextも全部ダブルクォーテーションで囲んでました。
NG
$ curl -XPOST -d "token={作成したToken}" -d "channel={メッセージを飛ばしたいチャンネル名}" -d "text=<!channel> メッセージだよ!!!" -d "username={メッセージ通知元}" -d "icon_url={アイコン画像のURL}" "https://slack.com/api/chat.postMessage"
そしてエラーでコマンドがこける。当然ですね(ヤケクソ)
エラー
-bash: !channel: event not found
【まとめ】
サーバーサイドのエンジニアという訳ではないですが、これくらいは知っとこうねっていう内容にはまったので精進します。
(実際過去にcurl経由ではないですが同じような現象には発生したことがある)
【参考】
・https://qiita.com/mizuki_takahashi/items/3f77c2e5b6142563ce66
・https://qiita.com/daigon/items/474064e484dcd7136bae
・https://nj-clucker.com/single-double-back-quote-on-shell-script/