グループLINEにて共有を行っている業務情報について、全くDB化がされておらず、情報の集計を行う際は「過去のトークを遡って目視で確認しExcelにまとめる」といったアナログ手法をとっていた。
しかし最近になって、LINEボットとGAS(Google Apps Script)を使ってトーク内容をGoogleスプレッドシートへ転記することができると分かったので、今回行った手順をまとめておく。
コンテンツ
目標
今回目指すところは、LINEのトークのうち、あるフォーマット(今回は$で始まるメッセージ)で送信されたメッセージのみをGoogleスプレッドシートへ転記するボットを作る、というところまで行っていく。
事前登録
今回利用するサービスは以下の2つ。
それぞれアカウント登録を済ませておく。
LINE Developers
大半の日本人が既に持っているLINEアカウントがあれば利用できる。
https://developers.line.biz/ja/
もはや説明不要だろう。
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。
後はメッセージの先頭に「$」がついていれば、自動的にスプレッドシートに内容が転記されるはずだ。