皆さんはSlackを使用していますか?
Slackを使用していると、たまにUI上では投稿が手間になってしまうことがあるかと思います。
「一斉に特定の文章を送りたい…!」
そんな人の参考のために実際に使用したスクリプトを残したいと思います。
コード
#!/bin/sh
# トークン
# https://api.slack.com/custom-integrations/legacy-tokens
# からtokenを発行して以下のTOKENにコピペしてください
TOKEN="xoxp-TOKEN-XXXXXXXXXXXXXXXXX"
# ターゲット
# 相手の SlackID を空白区切りで入力してください
# 複数指定の場合 TARGETS=("UABCDEFGH" "UABCDEFGI" "UXXXXXXX" …) と入力
TARGETS=("UABCDEFGH")
# テキスト
# ※1 :日本語: 形式の絵文字は使えません。:warning: などアルファベット表記の絵文字は使えます
# ※2 ` を使う場合は、\` の前にバックスラッシュを打つようにしてください
# ※3 ``` を使う場合は、\`\`\` のように ` の前にバックスラッシュを打つようにしてください
TEXT=":warning:サンプル:warning:
ここにテキストを入力します
\`\`\`
コードブロック
コードブロック
\`\`\`
\`マーカー\`
"
#POST処理
# -d "as_user=true" によって本人として投稿できるようになる
# -d "as_user=false" だとSlackBotとして投稿します
for TARGET in ${TARGETS[@]}
do
curl https://slack.com/api/chat.postMessage \
-X POST \
-H "Authorization: Bearer ${TOKEN}" \
-d "channel=${TARGET}" \
-d "text=${TEXT}" \
-d "as_user=true"
done
(2020/4/1追記)Syntax error “(” unexpected. が出た場合
chromebookで動作確認していたところ↑のコードでは動きませんでした。
Syntax error "(" unexpected.
一番最初に書いてある #!/bin/sh がうまく動いていないことが原因です。
対策としては
#!/bin/bash
に書き換えて実行してみてください。
使い方(Macの場合)
- ↑のコードをコピペ(post.shなどの名前にする)
- TOKEN, TARGETS, TEXT を編集する
- post.sh に実行権限を付ける(ターミナルで chmod 755 post.sh)
- ./post.sh で実行する
解説
トークン

からトークンを発行します。
トークンとはSlackで投稿や招待を行う上であなた自身を証明するものです。
トークンは絶対に公開しないようにしてください
ターゲット
投稿する場所を指定します。




または、




ダイレクトメッセージになります
テキスト
投稿の本文になります。
注意しなければならないことは、 ` (グレイヴ・アクセントという名前らしい) などの一部文字を使用する時にエスケープが必要です。
一度自分に投稿して、文章がおかしかった場合、調整してみると良いでしょう。
POST処理
ここで初めて本処理になります。
for TARGET in ${TARGETS[@]}
で先ほどスペース区切りで入力した TARGETS の中身を1つずつ TARGET に取り出して処理を行います。
基本的に投稿するには絶対に必要なパラメータになるため、このまま投稿してもらえば投稿できますが、
-d "as_user=true"
というパラメータによって意図的に自分が投稿したことにすることができます。








まとめ
如何でしたでしょうか。
検索すればSlackのPOST処理の解説はたくさん出てきますが、実際に使えるコードの形になっていないことが多かったため、シェルスクリプトに書き出してコードがあまり分からなくてもなんとなく使えるものを今回紹介しました。
スクリプトを介して投稿すると、attachmentsを付けることが出来たりと通常の投稿では出来ないことが出来るようになったりします。
またそれは別の回で紹介したいと思います。
ここまで読んで頂きありがとうございましたーー
コメント