GoogleAppsScript
Slack
slackbot

slack→google apps script→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からスプレッドシートに何かして業務効率化とかできそう!(できるとは言っていない)
値の受け渡しについてふれてないから難易度は知らんけど次の課題はそこ。