slackのチャンネルにメッセージが投稿されたことをトリガーにしてGASでchatworkに転送する実装で
slackのEvent apiを使っての連携にてこずったのでおさらい用記事。
色んな記事みてごちゃごちゃになったけど結構簡単にできた
slackのチャンネルとGASの連携
古い記事はWebHookを使って実装すると簡単にできる!みたいな記事が多かったのですがslackのapiでは非推奨・・でした
将来的には非推奨となり、削除される可能性もあります。使用することはお勧めしません。
みたいなことが書かれてますWebHookは使えないなぁ・・・
という事でSlackのEventAPIを使ってGASと連携することにしました!
Event api
Event APIのEvent Subscriptionsは、Slackへの投稿やリアクションなどのコマンドがあった場合、
用意したサーバにSlackからほぼリアルタイムにリクエストが飛んできて、それに対しての処理を行うことができる。
まずはGASでプログラムを書いていく
function doPost(e){
var params = JSON.parse(e.postData.getDataAsString());
return ContentService.createTextOutput(params.challenge);
}
↑これをウェブアプリケーションとして公開
デプロイの方法(https://auto-worker.com/blog/?p=3565)
URLをコピーしておく
Slackアプリを作る
ここから作成
アプリを作成(Create New App)してEvent Subscriptionsを選択、流れはこちらの記事が一番わかりやすかったです
つまずいたところ
連携したかったチャンネルはプライベートチャンネルだったためプライベートチャンネルのメッセージが取得できる
eventを選択していなかった。
message.groups は「プライベートチャンネルにメッセージが投稿されることがトリガー」


ここから自分のやりたい事に関するEventを探してください
メッセージを取得したいチャンネルに作ったSlackアプリを追加する
チャンネルのところで右クリック
↓
チャンネル詳細を開く
↓
インテグレーション
↓
アプリを追加
先ほどのつまずいたところの部分で、何がきっかけで気づけたかというと・・・
連携したかったチャンネルはプライベートチャンネルだったためプライベートチャンネルのメッセージが取得できる
eventを選択していなかった。
↓ ↓ ↓
作ったSlackAppのEventapiは何が設定されているか確認できる
連携できない場合何ができるか、設定されているか書かれているので自分がやりたい事がちゃんと設定されているか確認してみて下さい!
ChatWorkとGASの連携
記事は古いですがチャットワークは割と簡単に実装できました!
完成コード
function doPost(e){
var params = JSON.parse(e.postData.getDataAsString());
notifyToChatwork(params.event.text);
return ContentService.createTextOutput(params.challenge);
}
function notifyToChatwork(message) {
var client = ChatWorkClient.factory({token: "チャットワークAPI"});
client.sendMessage({
room_id:ルームID,
body: message});
}
出来てしまえばすごく簡単だと思いましたが、、、、なかなかてこずりました。