前提・モチベ
- 有料WS、無料WSの2つを使い分けている(WS=ワークスペース)
- 今まで無料WSでつぶやきチャンネルを持っていて、ブツブツつぶやいていた
- 90日制限が近づいたので有料WSでつぶやきを初めた
- 有料WSのつぶやきを無料WS側に転送したい
無料WS側のアプリ作成
- [create new app]
- App Name: yasubei_tsubuyaiter (適当なので名前は任意で付けてくだせぇ)
- Development Slack Workspace: 無料側のワークスペース
- アプリの管理画面から[Incoming Webhooks]を選択
- 右上のスイッチをONにする
- [Add New Webhook to Workspace]を押す
- 転送先のチャンネルを選択(#yasubeiつぶやき、など)
- Webhook URLが生成されるので、copyしておく
- 念の為curlコマンドで動作確認する(略してすみません。curlは入れてください)
GASアプリ作成
- GooleDriveへ移動
- 任意の場所で右クリック → その他 → Google App Script
- 以下のようにプログラムする(ほぼコピペで大丈夫なはずです。必要なところだけ書き換えてください)
function doPost(e){
// 疎通確認(verify時に通信が来ます)
var params = JSON.parse(e.postData.getDataAsString());
if('challenge' in params){
return ContentService.createTextOutput(params.challenge);
}
// Botの投稿に反応しないように修正
if('subtype' in params.event) {
return
}
userName = params.event.user;
if('text' in params.event) {
// 実際に表示されるメッセージ内容
var contents = `${params.event.text} (from 有料WS #yasubeiつぶやき)`
}
// リクエスト内容を整形
var options =
{
"method" : "post",
"contentType" : "application/json",
"payload" : JSON.stringify(
{
"text" : contents,
link_names: 1
}
)
};
// 投稿先 (無料WS側 #yasubeiつぶやき)
UrlFetchApp.fetch("無料WS側で作成したIncomming Webhook URLをこちらに貼り付けてください", options);
}
- 保存
- 編集したら必ず保存してください。プログラムが書き換わらないので注意。
- 初回のみ「承認が必要です」「アカウント選択」「〜がGoogleアカウントへのアクセスをリクエストしています」などと出てくるが∞にOKする
- デバッグ(任意)
- したい人だけ。そもそも動かないのでしなくても良い。
- 私はdoGet関数を作って投稿するプログラムを書いて動作確認した。
- デプロイ
- 初回はデプロイの種類を聞かれるので「ウェブアプリ」を選択する
- アクセスできるユーザーはとりあえず「全員」とする
- デプロイが完了したら発行されるウェブアプリのURLをコピーする
- デプロイはソースコードを少しでも書き換えたら必要
- 試しに「デプロイの管理」→「編集ボタン」→「保存」をしてみたが、動作は変わらなかった
- デプロイするたびにウェブアプリのURLが変わるのでその都度slackアプリ側の設定(Event Subscriptions)も書き換えてください。
- 初回はデプロイの種類を聞かれるので「ウェブアプリ」を選択する
有料WS側のアプリ作成
- [create new app]
- App Name: yasubei_tsubuyaki_subscriber (適当なので名前は任意で付けてくだせぇ)
- Development Slack Workspace: 有料側のワークスペース
- アプリの管理画面から[Event Subscriptions]を選択
- 右上のスイッチをONにする
- Request URLに先程コピーしたウェブアプリのURLをペーストする
- 5秒ほど待つとウェブアプリへ疎通確認の通信(ソースコードのchallengeのところです)が行われ、成功するとVerifiedと表示されます
- [Subscribe to bot events]を押す
- "message.channels"を選択(この設定は別途チャンネルにAppの登録が必要になります。忘れずに!)
- [Save Changes]を押してアプリ作成を完了する
- 右上のスイッチをONにする
- 有料WS側のつぶやきチャンネルへApp(yasubei_tsubuyaki_subscriber)を登録する
- チャンネルメニューから[Integrations]→[Add apps]で登録できます。
- この辺、昔はUI違かったと思うので、結構変わってるかもしれません。MacのDesktopアプリでは上記にありました。
- 動作確認
- 有料WSのチャンネルでつぶやいた内容が無料WS側へ転送されれば成功です
デバッグ
- スクリプトへの疎通確認
- Event SubscriptionsでVerifiedと表示されること
- doGet()を作ってしまい、直接ウェブアプリのURLを叩いてみて無料WS側につぶやきが反映されるかを確認する
- 私がしたのは上記くらいですね。
参考サイト
-
【雑学】SlackとGASで自由度の高いSlackのチャットBotを作る
- 私の記事よりこちらのサイトのほうがスクショも載っていてわかりやすいです。感謝です。
-
Slack Botのアプリをチャンネルに追加したい
- チャンネル投稿がウェブアプリへ通信されていなかったため、こちらを参考にデバッグしました。感謝です。
感想
アプリ作るの簡単でいいですね
slackでアプリ作成設定してGASでサーバレスで動作させて...。昔は自分でサーバ立ててましたけどねぇ(物理)
メンテナンスも考えなくていいし、今の時代はスゴイなぁ
おまけ
(利用者からFB)
両方入ってる人は両方表示されますねw
どっちで反応するかもちょっと迷う
ああ、たしww
その他出来ないこと
- 画像は転送されない
- 一度投稿したあとの編集は反映されない