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

# 必要なもの
・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ボタンを押す。

<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405994/b24b41fd-31e6-578f-70a5-02a29adcf5aa.png"/>

検索からWebhookを検索して、選択すると、Choose a triggerが出てくる。
Receive a web requestを選択する。特に何を選択するでもなく、設定を終えて良い。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405994/780ac300-6f3d-a740-0e18-0a9d11ee6f66.png"/>

Then Thatが選択できるようになっているので、同じくAddボタンからLINEを選択する。
ログインしていると、対象のアカウント(スマホでは出ない)と、LINE Notifyが通知を送る先が選択できる。
選択できるのは自分のアカウントとの1:1か、グループのみ。この時点ではLINE Notifyがグループに所属している必要はない。
Message欄のValue1がGASのURLのキーになるので、後で使うと思っておくべし。
あとはお好みで設定して、finishまで行ってOK。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405994/42b0093d-94b6-7e01-c2aa-c65f00313eeb.png"/>

フローが作れたら、作成したAppletを選択する。
Your webhook URLがGASで使うURLなので、後で使うと思っておくべし。
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405994/36681e6d-3670-9f8d-693f-2f8140fd8c80.png"/>


# GAS側
Scriptはウェブサイトとして公開する。

```js
//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を押す。
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405994/e4d28eda-7219-46e1-7f14-8c62cd702b9a.png"/>

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がメッセージを送信
という流れになる。 

# 参考

https://qiita.com/johnsakagami/items/0024a8c251b391848294

https://qiita.com/risto24/items/342256f6ed6cb504059a

# 感想
ほんとはSlackチャンネルから送った内容を自分発信として相手に送りたかった。
けど、それができたらいろいろヤバげな気もする。
結局使うかは微妙だけど、触ってみた感じ面白かったし便利そうな感じはする。
IFTTTのWebhookのためだけに有料アカウントにするのもなんかアレなので(貧乏性)、うまくできないかな～。