グループLINEにて共有を行っている業務情報について、全くDB化がされておらず、情報の集計を行う際は「過去のトークを遡って目視で確認しExcelにまとめる」といったアナログ手法をとっていた。

しかし最近になって、LINEボットとGAS(Google Apps Script)を使ってトーク内容をGoogleスプレッドシートへ転記することができると分かったので、今回行った手順をまとめておく。

目標

今回目指すところは、LINEのトークのうち、あるフォーマット(今回は$で始まるメッセージ)で送信されたメッセージのみをGoogleスプレッドシートへ転記するボットを作る、というところまで行っていく。

事前登録

今回利用するサービスは以下の2つ。
それぞれアカウント登録を済ませておく。

LINE Developers

大半の日本人が既に持っているLINEアカウントがあれば利用できる。

https://developers.line.biz/ja/

Google

もはや説明不要だろう。

LINE Messaging API でボットを作成

LINE Developersにログインし、まずはチャンネルを作成する。

チャンネルタイプは「Messaging API」を選択する。

チャンネル名などは適当でOK。

チャンネル作成後に変更する箇所は以下のとおり。

まず、Messaging APIタブの「Use webhook」をONにする。

次に「LINE Official Account features」欄を次のとおり設定する。

Google Apps Script プログラム作成

次にLINEボットのプログラムを書いていく。

Googleドライブから「新規」をクリックし、以下のとおり「Google Apps Script」を選択しよう。

すると新規タブでエディタが立ち上がるので、以下のとおりコードを書いていく。

function doPost(e) {
  // 投稿されたメッセージを取得
  var userMessage = JSON.parse(e.postData.contents).events[0].message.text;
  
  if(userMessage.match(/^\$/)) {
    // $から始まるメッセージの場合、$を除いた文字列を再代入
    userMessage = userMessage.substr(1);
  } else {
    // $から始まらない場合は何もしない(処理終了)
    return;
  }
  
  // スプレッドシートへ保存=======================================
  var response = e.postData.getDataAsString();
  var spreadsheetId = "";
  var sheetName = "log";
  var spreadsheet = SpreadsheetApp.openById(spreadsheetId);
  var sheet = spreadsheet.getSheetByName(sheetName);

  // 空白・タブ・改行で区切り配列に変換  
  var arr = userMessage.split(/\s/);

  // 配列の先頭に日時を代入
  arr.unshift(new Date());

  // セルの最下部に配列を転記
  sheet.appendRow(arr);
  // =======================================

  return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON);

}

少しコードを解説すると、LINEでメッセージが投稿されるとWebhookによりdoPostメソッドが呼び出される。
そのため基本的にやりたい処理はdoPost内に書いていけば良い。

まずは投稿されたテキストメッセージを取得し、if文で「$」で始まらない場合は無視するよう分岐させる。

「$」で始まる場合は処理を行い、変数に設定されたスプレッドシート内に投稿された内容を記録するようにしている。

なお「spreadsheetId」は、シートのURL欄の「/d/」と「/edit」の間の乱数がIDに該当する。

今回はメッセージを区切り文字により分割・配列化し、その配列に投稿日時を追加してシートへ転記するようにしてみた。

Webhook URLの設定

GASの編集が終わったら、メニューバーの「公開」→「ウェブアプリケーションとして導入」を選択し、Webhook用のURL(Current web app URL)を取得する。

Project versionは「New」、Execute the app asは「Me」、Who has access to the appは「Anyone, even anonymous」を選択して公開する。

この時、認証を求められ、さらにSSLの警告メッセージが表示されたりするが、「詳細」から無理やりアクセスして認証を進めていく。

最後に再びLINE Developersに戻り、「Messaging API」タブの「Webhook URL」欄に先程GASで取得したURLをペーストする。

ここまで出来たら、QRコードをスマホで読み取り、ボットを友だち登録する。
そしてグループLINEに招待すればOK。

後はメッセージの先頭に「$」がついていれば、自動的にスプレッドシートに内容が転記されるはずだ。