やりたいこと
slackで特定の文字を入力したら、何か返却してくれる仕組みを試してみたかった
ここから手順
slackでチャンネル作成
#test_gas_hello_world
という名前で作成
Incomming Webhooks作成
最終的な出力からやっていくのが結果も見えやすくて良い。
まずはここの部分の実現をする
appsにアクセス
アプリの作成
Bot Userを設定
左ナビからBot Userを選択し、[Add a Bot User]
名前をつけて、Always Show My Bot as OnlineをONにしてセーブ
Incomming Webhook設定(本題)
左ナビからIncomming Webhookを探してONにする
投稿先を選ぶ
許可するとテスト用のcurlを教えてくれる
こんなん。
curl -X POST -H 'Content-type: application/json' --data '{"text":"Hello, World!"}' https://hooks.slack.com/services/XXXXXXXXXX/XXXXXXXXXX/XXXXXXXXXXXXXXXXXXXX
チャンネルに通知が出てくるので確認
added an integration to this channel: gas_hello_world
と表示される
curlでテスト実行
さっきのテスト用のcurlを叩いてみるとチャンネルに通知が来る。
Incomming Webhooksの設定終わり!
google apps scriptの設定
google apps script新規作成
スプレッドシート作ってツールからスクリプトエディタ開いて名前をつける
どっちもgas hello world
にした。
コード
function doPost(e) {
var text = "hello slack";
postSlack(text);
// slackにpostするメソッド
function postSlack(text){
// Incoming WebHookのURL設定
var url = "https://hooks.slack.com/services/XXXXXXXXXX/XXXXXXXXXX/XXXXXXXXXX";
// APIを叩く
var options = {
"method" : "POST",
"headers": {"Content-type": "application/json"},
"payload" : '{"text":"' + text + '"}'
};
UrlFetchApp.fetch(url, options);
}
}
公開する
上ナビの[公開]→[ウェブアプリケーションとして導入]から公開をする
アプリケーションにアクセスできるユーザーは全員(匿名ユーザーを含む)にしておく(slackから実行させるから)
アクセス許可とかめっちゃ求められるからOKOKしていく。
※gasを更新したらもう一度同じ手順で更新すること。このとき「プロジェクトバージョン」を「新規作成」にして公開しないと変化しないから注意!
テスト実行
上ナビの[実行]→[関数を実行]→[doPost]をすると実行される
実行されたらslackに通知が来ることを確認
google apps scriptの設定終わり!
Outgoing WebHookの設定
アクセス
https://[自分のslackチーム].slack.com/apps
にアクセスして、Outgoing
で検索して探す。
最初https://api.slack.com/apps
でOutgoing Webhookも作れると思ってたけど違った(ツイート)
インテグレーションの設定
発信webフックを選択していっぱいOKして下にスクロールすると、チャンネルとか設定できるところに出る
チャンネルはAnyにすると全チャンネルで適用される。今回はテストチャンネルに設定。
引き金となる言葉はhello gas
に設定
URLはさっき作ったgasのURLを設定
そしたら一番下にある「設定を保存」で保存
テスト実行
hello gas
と入力するとhello slack
と返してくれる!
これで全部終わり!
ハマってはないけど一瞬焦ったポイント
引き金となる言葉にhello
を設定してみたらpostが止まらなくなった
gas_hello_worldが発したhello slack
のhello
に反応してしまって無限hello slack
に...。
Outgoing WebHookのURLを空で更新して無理やり止めた。
まず陥りにくいケースだから考慮しなくていいと思うけど、これはどこで止めるのがいいんだろうなぁ。
所感
slackとgasを繋げられたから、slackからスプレッドシートに何かして業務効率化とかできそう!(できるとは言っていない)
値の受け渡しについてふれてないから難易度は知らんけど次の課題はそこ。