電算倶楽部 富山県のコンピュータ社会人サークル

富山県、特に滑川市、富山市、魚津市周辺で活動している社会人サークルです。

SlackとLINEを連携する(1) 概要と準備

Slack中心でコミュニケーションをしていますが、LINEでしか見られない人のためにSlackとLINEを連携してみます。
Google Apps Script、SlackのWebhook系のアプリ、LINE Messaging APIあたりを使います。
長くなったので数回に分けます。

実現したいこと

以下2項目を実現します。

  • LINEにメッセージを投稿すると、Slackのgeneralチャンネルに通知される。
  • Slackのgeneralチャンネルにメッセージを投稿すると、LINEに通知される。

機能概要

LINEからSlackへの通知

LINE BOTをフォローしてもらい、LINE BOTへメッセージを送ることでSlackにメッセージを通知できるようにします。
メインの処理はGoogle Apps Scriptで実現します。
概要図を示します。

Google Drive<br>
LINE
LINE
Google Apps Script
line_to_slack.gs
Google Apps Script<br>line_to_slack.gs<br>
Slack

[Not supported by viewer]
(6)general
チャンネルに
投稿
(6)general<br>チャンネルに<br>投稿
Slack Outgoing Webhook
Slack Outgoing Webhook
LINE Bot
LINE Bot<br>
(5)Postリクエス
(5)Postリクエスト<br>
(2)Postリクエス
(2)Postリクエスト<br>
LINE IDリスト
LINE IDリスト<br>
(3)LINE IDリスト取得
(3)LINE IDリスト取得
doPost関数
doPost関数
(4)LINE IDリスト更新
(4)LINE IDリスト更新
(1)LINE BOTに対して
メッセージ投稿
(1)LINE BOTに対して<br>メッセージ投稿
LINE
ユーザ
[Not supported by viewer]
general Channel
general Channel

Google Apps ScriptのdoPost関数では、(2)PostリクエストはLINEで行ったアクション種別が含まれており、それにより場合分けをします。

  1. LINE BOTがフォローされたら、LINE IDリストにIDを追加する。(3)(4)
  2. LINE BOTにメッセージが投稿されたら、Slack Outgoing WebhookへPostリクエストを送る。(5)
  3. LINE BOTがブロックされたら、LINE IDリストからIDを削除する。(3)(4)

ここでLINEユーザIDリストファイルが登場しますが、このファイルはSlackからLINEに通知する際に必要になります。
LINEへの通知はユーザ単位に送る必要があるため、どこかにID一覧を保存しておかなければなりません。

SlackからLINEへの通知

Slackのgeneralチャンネルに投稿したメッセージをSlack Outgoing WebhookでGoogle Apps Scriptに連携し、LINE IDリストにあるユーザに向けてPostリクエストを送信します。
メッセージを受けるLINEユーザは、あらかじめLINE BOTをフォローしておく必要があります。
メインの処理は先程と同じくGoogle Apps Scriptで実現します。

概要図を示します。

LINE
LINE
Google Apps Script
slack_to_line
Google Apps Script<br>slack_to_line<br>
Slack

[Not supported by viewer]
Slack Outgoing Webhook
Slack Outgoing Webhook
LINE Bot
LINE Bot<br>
(3)Postリクエス
(3)Postリクエスト<br>
(5)Postリクエス
(5)Postリクエスト<br>
LINE IDリスト
LINE IDリスト<br>
(4)LINE IDリスト取得
(4)LINE IDリスト取得
doPost関数
doPost関数
(1)general
チャンネルに
投稿
(1)general<br>チャンネルに<br>投稿
Slack
ユーザ
[Not supported by viewer]
(2)Slack
Outgoing
Webhook
に連携
[Not supported by viewer]
general Channel
general Channel

準備

以下のアカウントを取得します。また、必要情報を控えます。
各種アカウントの作り方はマニュアルや解説サイトがありますので省略します。

Googleアカウント

通知処理するためにGoogle Apps Script、設定ファイルとログの保存のためにGoogle Driveを使います。
プログラム・設定ファイルを格納するために、Google Driveに1つフォルダを作成してフォルダIDを控えてください。
フォルダIDはGoogle Driveで対象フォルダを開くとURLに表示されます。

https://drive.google.com/drive/u/0/folders/(ここにフォルダID)?ths=true

LINEアカウント

当然必要になります。

LINE Developers

LINEへの通知のためにLINE DevelopersのMessaging API(LINE BOTを作るための機能)を使用します。
https://developers.line.biz/ja/ LINEアカウントでログインできます。
プロバイダ、およびチャネルを作成してください。チャネルを作る際は「Messaging API」を選択してください。

f:id:s-densan:20190630192509p:plain
チャンネル作成
「チャネル基本設定」タブで以下の設定をします。

  • メッセージ送受信設定/Webhook送信
    利用する」を設定します。
  • メッセージ送受信設定/Webhook URL
    Google Apps Scriptをウェブアプリケーションとして公開した際に発行されるURLを指定します。あとで設定します。
  • LINE@機能の利用/自動応答メッセージ
    利用しない」を設定します。
  • LINE@機能の利用/友だち追加時あいさつ
    利用しない」を設定します。

LINEのアクセストークンを控えてください。長いです。
「アクセストークン(ロングターム)」と表示されています。

また、「Bot情報/LINEアプリへのQRコード」に表示されているQRコードをどこかに保存しておいてください。 後ほどLINEアプリでスキャンし、LINE BOTを友達に追加します。(今はまだ追加しない)

Slackアカウント

当然必要になります。
generalチャンネルにアプリ(カスタムインテグレーション)「Slack Outgoing Webhook」と「Slack Incoming Webhook」をインストールします。

Slack Outgoing Webhook

以下の項目を設定します。

  • チャンネル
    LINEに通知するSlackのチャンネルを選びます。ここでは「#general」としておきます。
  • URL
    Google Apps Scriptをウェブアプリケーションとして公開した際に発行されるURLを指定します。 あとで設定します。

以下の項目を控えておきます。

  • トーク
    アプリのIDです。不正な投稿を区別するためにこのIDとメッセージ内のIDが一致するか検証します。

Slack Incoming Webhook

以下の項目を設定します。

  • チャンネルへの投稿
    LINEメッセージを通知するチャンネルを選びます。ここでは#generalとしておきます。

以下の項目を控えておきます。

  • Webhook URL 長いです。

続く