0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SlackからGASでLINEに通知を送る

Last updated at Posted at 2024-04-29

必要なもの

・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のためだけに有料アカウントにするのもなんかアレなので(貧乏性)、うまくできないかな~。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?