必要なもの
・LINEアカウント
・Slackのワークスペース(とポスト元のチャンネル)
・GoogleAppsScript
・IFTTT(※)
※IFTTTは要有料アカウント(Pro)。
通知元になるアカウント
・LINE Notify
あくまで通知だけなので、自分のアカウントから発信、みたいなことはできない。
通知先にできる対象
・自分のLINE Notify
・LINE Notifyが所属するグループ
1つめは、LINE Notifyは、LINE公式アカウントみたいに自分と1:1のチャットルームがあるのでそこに送るイメージ。
2つめはそのまま。グループを対象に通知を送れるが、LINE Notify経由でしか送れないので、対象のグループにLINE Notifyを追加しておく必要がある。
特定の個人相手に送るのはできない。
LINE側
特にすることなし。
操作してる途中で、LINE Notifyが追加されました、みたいなことは発生する。
IFTTT側
LINEへのログインがあったりするので、スマホからアプリを落として設定するのがおすすめ。
一度アカウントを作ってしまえば、Webからも確認できる。
Createボタンから、とりあえずフローを作ってしまう。
Createボタンを押すと、IfThisが出てくるので、Addボタンを押す。
検索からWebhookを検索して、選択すると、Choose a triggerが出てくる。
Receive a web requestを選択する。特に何を選択するでもなく、設定を終えて良い。
Then Thatが選択できるようになっているので、同じくAddボタンからLINEを選択する。
ログインしていると、対象のアカウント(スマホでは出ない)と、LINE Notifyが通知を送る先が選択できる。
選択できるのは自分のアカウントとの1:1か、グループのみ。この時点ではLINE Notifyがグループに所属している必要はない。
Message欄のValue1がGASのURLのキーになるので、後で使うと思っておくべし。
あとはお好みで設定して、finishまで行ってOK。
フローが作れたら、作成したAppletを選択する。
Your webhook URLがGASで使うURLなので、後で使うと思っておくべし。
GAS側
Scriptはウェブサイトとして公開する。
//POSTリクエストを処理する
function doPost(e){
//Slackの認証を通すためのreturn
if('challenge' in postParam){
return ContentService.createTextOutput(postParam.challenge);
}
const HOOK_URL = 'IFTTTのWebhookで作成されたURL';
//↓Your webhook URLの欄のURLそのまま使う
//https://maker.ifttt.com/trigger/XXXXXX/with/key/XXXXXX
//Slackからevent.type='message'でPostされてくるので、それを拾う。
if( 'event' in postParam && postParam.event.type == 'message'){
var ev = postParam.event;
var text = ev.text;
if(text == undefined || text == ""){
return;
}
//IFTTTのWebhookに指定のキー=IFTTTでLINEの設定をした時の、Message欄のグレーアウト部分
//(URLのキーなので大文字小文字は問わない。)
var getParams = "?value1=" + text;
var sendUrl = HOOK_URL + getParams;
UrlFetchApp.fetch(sendUrl);
}
}
スクリプトを書いた後、デプロイ⇒新しいデプロイ⇒(種類の選択:ウェブアプリ/アクセスできるユーザー:全員)⇒デプロイでOK。
デプロイすると、ウェブアプリURLで、公開されたURLが表示される。これをSlack側に設定する。
あとで「デプロイを管理」からも見られる。(バージョン間違いに注意。)
Slack側
Slack APIから、メッセージポストを契機にGASが動くようにする。
https://api.slack.com/apps/
CreateNewApp→From scratchと進む。
App Nameとワークスペースを選択して、Create Appを押す。
Event Subscriptionsを選択して、Enable EventsをONにする。
Request URLにGASのウェブアプリURLを貼り付ける。
チェックでGASにchallengeパラメータが送られるので、VerifiedになればOK。
ならない場合は、GASのコードを見直す。
OAuth&Permissions→Scopes→Add an OAuth Scopeで
channels:history
を付ける。
Slackを開いて、「アプリを追加する」から、ワークスペースにアプリをインストールする。作成時のAppNameで出てくるはず。
LINEに送りたいチャンネルを選択して、「アプリを追加する」で追加。
これで
・Slackでメッセージ送信
→APIでGASにPOST
→GASでIFTTTのWebhookに内容を送信
→IFTTTのフロー通りに指定のグループにLINE Notifyがメッセージを送信
という流れになる。
参考
感想
ほんとはSlackチャンネルから送った内容を自分発信として相手に送りたかった。
けど、それができたらいろいろヤバげな気もする。
結局使うかは微妙だけど、触ってみた感じ面白かったし便利そうな感じはする。
IFTTTのWebhookのためだけに有料アカウントにするのもなんかアレなので(貧乏性)、うまくできないかな~。