🐴

Slack × GAS/Zapier/Workato:新しいチャンネルができたらgeneral的なところに通知する

2022/12/23に公開

この記事はcorp-engr 情シスSlack(コーポレートエンジニア x 情シス)#1 Advent Calendar 2022 22日目の記事です
https://adventar.org/calendars/7756

間に合った...(間に合ってない)

はじめに

当初温めていた記事ネタがあったんですが、時間的に間に合わないので諦めました。
サクッと書けるネタがないかと困りつつ、Twitter巡回をしていたらこんなツイートを発見し...

🐴 「おっ!これええやんけ!」
ってなったので拝借します。

ということで今回は、こちらの要望をGAS、Zapier、Workatoのそれぞれで実現し、どのように差が出るのかなーとか作成画面はこうだよーとかをご紹介していきます。

基本的な構造(共通)

Slackで何かしらのイベントが発生したらHTTPリクエストをiPaaSなりGASなりに送信する作りです。

作り方:Zapierの場合

開始から完了まで、Zapier上の操作で完結します

  1. [Create Zap] をクリック
  2. [Search Apps...] の欄でSlackを検索またはSlackのアイコンをクリック
  3. Choose an eventの欄で[New Channel]を選択して[Continue]をクリック


  4. (Slackに未接続の場合)[Sign in]をクリックし、ポップアップウィンドウにて[許可する]をクリック


  5. [Continue]をクリックし、[Test trigger]をクリック


  6. 無事成功したら[Continue]をクリックしてTriggerの設定を閉じる
  7. Actionの設定でSlackアイコンをクリック
  8. Choose an eventの欄で[Send Channel Message]を選択して[Continue]をクリック
  9. Zapierに作成済のSlackアカウントを選択して[Continue]をクリック
  10. 各パラメータを設定して[Continue]をクリック
    • Channel
      • general
    • Message Text
      • チャンネルが作成されました!
        <#{{id}}>
    • Include a link to this Zap?
      • No
  11. (オプション)必要に応じてテストを実施


  12. [Publish Zap]をクリックして完了


結果


ちゃんと動いてるね

作り方:GASの場合

SlackBot作成→GAS作成→GASを公開→SlackBotにイベントURLやイベント監視設定、とSlackとGASを行ったり来たりします

手順概要

// GASはあっちこっちいくから目次必要だなって思って作った

  1. SlackBotを作成する
  2. 作成したBotに権限を付与する
  3. BotをWorkspaceにインストールする
  4. GASでリクエストを受ける側の処理を作る
  5. BotのEvent条件とリクエストURLを設定する
  6. 完了!!

1. SlackBotを作成する

1. https://api.slack.com/apps/ にアクセスして[Create New App]をクリック

2. [From Scratch] を選択

3. [App Name]を適当に名前つけてインストール先のWorkspaceを選択し[Create App]をクリック

2. 作成したBotに権限を付与する

  1. 画面左部分の[OAuth & Permissions]をクリックし画面下部:Scopesへスクロール



    必要な権限
    channels:read
    https://api.slack.com/scopes/channels:read
  2. [Bot Token Scopes]の欄に以下の権限をそれぞれ追加する

3. BotをWorkspaceにインストールする

  1. 画面左部[Install App]をクリックして[Install to Workspace]をクリック
  2. [許可する]をクリック
  3. Success!!って出たら完了

4. GASでリクエストを受ける側の処理を作る

1. GASのエディタを開いてコードを書く

function setSlackTokenToScriptProperty(){
    // スクリプトプロパティでキーに値を格納する
     PropertiesService.getScriptProperties().setProperty("SLACK_TOKEN", "your-token");
    }

function doPost(e) {
var json = JSON.parse(e.postData.getDataAsString());

  // Event API Verification 時のコード
  try {
    var json = JSON.parse(e.postData.getDataAsString());
    if (json.type == "url_verification") {
      return ContentService.createTextOutput(json.challenge);        
    }
  } catch (ex) {
  }    
  
  try {
  var text = "チャンネルが作成されました!\n<#" + JSON.parse(e.postData.getDataAsString()).event.channel.id + ">"
  const slack_app_token = PropertiesService.getScriptProperties().getProperty("SLACK_TOKEN");
  const options = {
    "method" : "post",
    "payload" : { 
      "token": slack_app_token,
      "channel" : "CC79A1XA6",
      "text" : text
    }}

  const url = "https://slack.com/api/chat.postMessage"
  let response = UrlFetchApp.fetch(url, options) 
  console.log(JSON.parse(response))
  }
  catch (ex) {
    console.log(ex)
  }   
  
  }

2. 保存して[デプロイ]をクリックし、[新しいデプロイ]を選択

3. [デプロイ]をクリックし、ウェブアプリ欄のURLをコピーする


5. BotのEvent条件とリクエストURLを設定する

  1. [Enable Events]をOnにし、[Request URL]欄にGASのウェブアプリURLをペースト

    2. [Subscribe to bot events]欄の[Add Bot User Event]をクリックして[channel_created]を選択しSaveする

結果

ちゃんと動いてるね ×2

作り方:Workatoの場合

基本的にWorkatoの画面だけで完結します

  1. レシピを作成し、[Trigger from an app]を選択
  2. [WorkBot for Slack]を選択
  3. [New Event]を選択
  4. (Connection未作成の場合)名前を適当に決めて[Connect]をクリックし、ポップアップ画面で[許可する]をクリック


  5. [Event name]で[channel_created]を選択
  6. Actions下の[+]をクリックし、[Action in an app]をクリック


  7. [WorkBot for Slack]を選択
  8. [Post message]を選択
  9. 各パラメータを設定
    • Reply channel*
      • general
    • Notification text
        • チャンネルが作成されました!
          <#{{id}}>
  10. [Save]→[Exit]の順にクリックして[Start recipe]をクリック


結果

ちゃんと動いてるね × 3

所感

Zapier/GAS/Workatoと複数の方法で単一の機能を実装してみました。
やはりGASとiPaaSとでは実装までの容易さに差異がありますね。

GASについて

作り慣れている人でもSlackBotを0から作るのはめんどくさいです。
今回はFrom Scratchで作成したからってのもあるのですが
テスト実行するにもテスト用のリクエストデータを準備しなきゃいけなかったりするので、そこそこの集中力と作業時間を要します。
ただ、コードはコピペが容易に出来て可搬性に優れている点は素晴らしいです。
WorkatoやZapierでも、作成したものをエクスポートする機能はありますが、ネット記事等で検索して見つけたコードをコピペしてちょちょっと直して実装、なんてムーブはまだまだコードに一日の長があると感じています。

ZapierとWorkato

一方でZapierやWorkatoなどのiPaaSはSlackBotを手動で追加する必要がなく、Event設定周りが不要なこともありお手軽に機能を追加できる点が魅力です。
ZapierとWorkatoの操作感については利用者の好み次第かと思いますが、認証の管理等含め、Workatoの方がUXにおいては優れていると言えます。
今回は非常にシンプルな構成であったためZapierとWorkatoの機能差が生じませんでしたが、更に複数のアクションを追加して、別のフローに連携させていくような構成が求められる際には如実に差が出るだろうと考えます。
ひとまずはiPaaSを使って単機能、少数機能をサクッと作りたいシーンにおいてはZapierを選んで小回り利かせていくのが良さそうですね。
でもやっぱり色々フロー作ったら統廃合が必要だし、そうなるとWorkatoが良いんだろうなーって思ったりします。

最後に宣伝

Workatoを試してみたい!って方向けに格安のプランをご用意しております。
まずは触ってみて、どんな効果が出せそうかなど勘所を掴んで頂くにはちょうど良いものになってますのでお気軽にお申し込みください。
https://cloudnative.co.jp/workato/community-plan

以上、ありがとうございました。

Discussion