Slackに定期的に投稿をするボットを作ります。
今回はSlackのWebAPIを設定して、Google Apps Script(GAS)からslackへ投稿する方法を紹介します。
GASはGoogleのサーバー上で動くサービスで、無料で使うことができます。 (制限があるので注意。すごく頻繁にやったりしなければslackのbotくらいなら引っかからないと思います。
【GAS】Google Apps Scriptで注意すべき制限まとめ【実行回数・時間・容量】 | monoblog )
slackアプリの作成
まずSlackアプリの作成から始めます。
このページのCreate New Appというボタンを押します。
するとこのような画面が出てくるので、作りたいアプリの名前と、そのアプリをどのワークスペースに紐づけるかを設定します。ブラウザでログインしていないワークスペースは選択できるワークスペースに出てこないので、Sign in to another workspace
というところから目的のワークスペースにログインしてください。これでアプリの作成は終わりです。
アプリの権限の設定
次に作成したアプリで、投稿に必要な設定をします。左側のメニューから、OAuth&Permissionを開いてください。その中のScopeの設定で、Bot Token Scopesの設定を行います。この設定は、このアプリに与える権限を設定します。
いま、channels:read、chat:write、chat:write.publicという3個のスコープを設定しました。chat:write.publicに関しては、このbotがメンバーでないチャンネルであっても投稿することを許可します。このアプリが投稿できるチャンネルが絞られているのであれば、chat:write.publicのスコープは必要ありません。
では、OAuth&Permissionsの一番上のほうにある、Install App to WorkSpaceを押してください。今設定したスコープに応じて、権限が要求されるので、問題がなければ許可して進んでください。
インストールが終わると、Bot User OAuth Access Tokenが表示されます。このトークンが投稿するのに必要なので、どこかにメモしておいてください。他の画面に映ってしまっても、この画面にくればいつでも確認することができるので安心してください。
インストールできたら、投稿したいチャンネルにアプリを追加してください。chat:write.publicのスコープを追加していなかった場合、アプリは自分が追加されていないチャンネルには投稿ができないので、投稿ができません。
curlで投稿するテスト
とりあえずcurlコマンドで投稿できるかやってみましょう。ターミナルから、下のコードを実行してください。
url -X POST -d "Content-Type: application/json" -d "token=TOKEN" -d "channel=CHANNELNAME" -d "text=hello" https://slack.com/api/chat.postMessage
TOKENをさきほど取得したBot User OAuth Access Tokenに置き換えてください。CHANNELNAMEは投稿したいチャンネルの名前です。チャンネル名の前の#はあってもなくても大丈夫です。 うまくいっていれば次のように投稿ができます。
なお、Windowsの場合はcurlコマンドがデフォルトで入っていないそうなので、試すにはインストールが必要になります。面倒だったらここは飛ばして、次パートでGASからの投稿をしてしまうのでいいでしょう。
GASを使って定期的に実行する
Google Apps Scriptを使って、定期的に実行することができるようにしましょう。GASはGoogleのサーバーで実行され、サーバーを自分で準備したりすることなく、手軽に実行環境を用意することができます。 まずGoogleDriveにアクセスして、適当なところで右クリックしてその他からGoogle Apps Scriptを選択してください。
まずトークンを設定します。ファイル->プロジェクトのプロパティ->スクリプトのプロパティにアクセスして、token
という名前でアプリのトークンを入力してください。
エディタを次のように編集します。MESSAGEを自分が投稿したい文章に、CHANNEL NAMEを投稿したいチャンネル名に変更してください。
var token = PropertiesService.getScriptProperties().getProperty("token") var text = "MESSAGE" var channel = "CHANNEL NAME" function post_to_slack() { post(text, channel) } function post(text, channel){ var data = { "text":text, "channel":channel } var options = { "method":"post", "contentType":"application/json", "headers":{"Authorization":"Bearer "+token}, "payload":JSON.stringify(data) } var ret = UrlFetchApp.fetch("https://slack.com/api/chat.postMessage",options) Logger.log(ret) }
できたら、上のタブから実行→関数を実行→post_to_slackを選択して、このスクリプトを実行してください。slackに投稿できたら大丈夫です。 次に、定期的に実行させるために、トリガーの設定を行います。上のタブから編集→現在のプロジェクトのトリガーを選択してください。 このように設定すると、毎日午後7~8時の間にコードが実行されるようになります。
おまけ: Pythonからの投稿例
Pythonから投稿する場合のコード例です。
import requests import json d = {} d["text"] = "Hello" d["channel"] = "CHANNEL NAME" token = "your token" h={} h["Authorization"] = "Bearer "+token h["contentType"] = "application/json" r = requests.post("https://slack.com/api/chat.postMessage", data=d, headers=h)