Edited at

Slack→GoogleAppsScript→Slackでhello worldを表示させてみる


やりたいこと

slackで特定の文字を入力したら、何か返却してくれる仕組みを試してみたかった

Group (9).png


ここから手順


slackでチャンネル作成

#test_gas_hello_worldという名前で作成


Incomming Webhooks作成

最終的な出力からやっていくのが結果も見えやすくて良い。

まずはここの部分の実現をする

Group (7).png


appsにアクセス

https://api.slack.com/apps


アプリの作成

[Create an App]

SnapCrab_NoName_2018-11-26_2-20-7_No-00.png

アプリ名を付けて、チームを選択

SnapCrab_NoName_2018-11-26_2-22-15_No-00.png


Bot Userを設定

左ナビからBot Userを選択し、[Add a Bot User]

SnapCrab_NoName_2018-11-26_2-23-25_No-00.png

名前をつけて、Always Show My Bot as OnlineをONにしてセーブ

SnapCrab_NoName_2018-11-26_2-24-54_No-00.png


Incomming Webhook設定(本題)

左ナビからIncomming Webhookを探してONにする

SnapCrab_NoName_2018-11-26_2-25-17_No-00.png

投稿先を選ぶ

SnapCrab_NoName_2018-11-26_2-26-16_No-00.png

許可するとテスト用の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と表示される

SnapCrab_NoName_2018-11-26_2-27-9_No-00.png


curlでテスト実行

さっきのテスト用のcurlを叩いてみるとチャンネルに通知が来る。

SnapCrab_NoName_2018-11-26_2-27-50_No-00.png

Incomming Webhooksの設定終わり!


google apps scriptの設定

次はここ

Group (8).png


google apps script新規作成

スプレッドシート作ってツールからスクリプトエディタ開いて名前をつける

どっちもgas hello worldにした。


コード


doPost

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していく。

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f3232343335372f66303562326635362d616266342d643933372d356134362d3736333230663037323562332e706e67.png

※gasを更新したらもう一度同じ手順で更新すること。このとき「プロジェクトバージョン」を「新規作成」にして公開しないと変化しないから注意!


テスト実行

上ナビの[実行]→[関数を実行]→[doPost]をすると実行される

実行されたらslackに通知が来ることを確認

SnapCrab_NoName_2018-11-26_3-37-14_No-00.png

google apps scriptの設定終わり!


Outgoing WebHookの設定

これで最後

Group (6).png


アクセス

https://[自分のslackチーム].slack.com/apps にアクセスして、Outgoingで検索して探す。

SnapCrab_NoName_2018-11-26_3-50-24_No-00.png

最初https://api.slack.com/appsでOutgoing Webhookも作れると思ってたけど違った(ツイート)


インテグレーションの設定

発信webフックを選択していっぱいOKして下にスクロールすると、チャンネルとか設定できるところに出る

SnapCrab_NoName_2018-11-26_4-0-18_No-00.png

チャンネルはAnyにすると全チャンネルで適用される。今回はテストチャンネルに設定。

引き金となる言葉はhello gasに設定

URLはさっき作ったgasのURLを設定

そしたら一番下にある「設定を保存」で保存

SnapCrab_NoName_2018-11-26_4-9-35_No-00.png


テスト実行

hello gasと入力するとhello slackと返してくれる!

SnapCrab_NoName_2018-11-26_4-8-54_No-00.png

これで全部終わり!


ハマってはないけど一瞬焦ったポイント

引き金となる言葉にhelloを設定してみたらpostが止まらなくなった

SnapCrab_NoName_2018-11-26_4-33-41_No-00.png

SnapCrab_NoName_2018-11-26_4-14-47_No-00.png

gas_hello_worldが発したhello slackhelloに反応してしまって無限hello slackに...。

Outgoing WebHookのURLを空で更新して無理やり止めた。

まず陥りにくいケースだから考慮しなくていいと思うけど、これはどこで止めるのがいいんだろうなぁ。


所感

slackとgasを繋げられたから、slackからスプレッドシートに何かして業務効率化とかできそう!(できるとは言っていない)

値の受け渡しについてふれてないから難易度は知らんけど次の課題はそこ。