[Raspberry Pi] シェルスクリプトで Slack に投稿する
VPS 上の CentOS で hubot による Slack bot を作ったことを書いた。
CentOS + hubot で Slack に指定時刻に自動発言する – with a Christian Wife
https://wacw.cf/2018/02/11/auto-posting-on-slack-with-hubot-and-centos/
その後 hubot の調子が悪くなり、bot が動かなくなった。原因がよく分からないので、CentOS のインストールからやり直してもいいけど、VPS にお金を払うぐらいなら Raspberry Pi で Slack bot を作ることにした。やっているのは、指定時刻に投稿するだけの単純な bot だからね。
簡単に導入できて cron で実行できるものがいいと考えて、探してみたところ、シェルスクリプトで Slack へ投稿することにした。
参考にしたのは以下のページだが、紹介されているコードそのままでは動かないので変更した。
Lumue.github.io by lumue
http://lumue.github.io/2015/06/01/posting-to-slack-from-shell.html
(1)以下のページで Slack の Incoming Webhook 用 Webhook URL を取得する。
https://slack.com/services/new/incoming-webhook
後で分かることだが、ここで指定するチャンネル以外にも投稿できるので、適当なチャンネルを指定しておけばいい(いちいちチャンネルごとの Webhook URL を作成しなくていい)。
(2)たとえば、PostToSlack.sh とでも名前を付けた以下のようなシェルスクリプトを作成する。
1#!/bin/bash
2url="https://hooks.slack.com/[1の Webhook URL]"
3
4#コマンドライン用パラメーター
5channel=$1
6message=$2
7username=MyBot
8
9#assemble json payload
10jsonstring="payload={\"channel\":\"$channel\",\"username\":\"$username\",\"text\":\"$message\",\"icon_emoji\":\":smile:\"}"
11
12#call curl
13curl -X POST --data-urlencode $jsonstring $url
(3)2のシェルスクリプトに実行権限を与える。
$ sudo chmod 735 PostToSlack.sh
(4)試しに投稿してみよう。第1パラメーターがチャンネル名、第2パラメーターが投稿の文章だ。
$ ./PostToSlack.sh general test
これで Slack に送信されるはずだ。
なお、Mac の Terminal で日本語を使うには、「Terminal > Preferences > Profiles >Advanced > Input > Escape non-ASCII input with Control-V」にチェックを入れる必要がある。これでチャンネル名や投稿文章に日本語を使える。
既知の問題:
・スクリプト内の username(bot の名前)は日本語にもできる。ただし、空白を入れることはできない(My bot のようにできない)。回避策は見つけれていない。
・アイコンが指定したものが反映されないことがある(Slack API デフォルトのものになってしまう)。
・投稿文章に空白を入れられない(go out のように)。引用符でくくったりしてみたが変化なし。
(5)cron に登録するには以下のようにする。毎日 10 時に投稿する場合__
0 10 * * * ./PostToSlack.sh general 10時だよ。
cron に日本語を使う方法については前回書いた。
Raspberry Pi で cron に外部ファイルを読み込ませる – with a Christian Wife
https://wacw.cf/2018/03/03/importing-external-file-to-cron-on-pi/