[Google Apps Script] LINE Bot を作ってみよう

[Google Apps Script] LINE Bot を作ってみよう

Clock Icon2019.04.18

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

優柔不断すぎて、「今日、何をしよう…」と考えているうちに日が暮れてしまうかめです。
もちろんプライベートの話ですよ?
かめたー、やるぞー、仕事きっちり!

はじめに

今回は、前回の記事で予告した通り、コンテナバインドちゃんを使ったサンプルスクリプトとして、優柔不断な私に代わって今日やるべきことを決めてくれる LINE Bot の作り方をご紹介します。

手順の一部にGoogle スプレッドシートの操作が含まれますが、スプレッドシートやシート名の名称変更、セルへの値入力などはできる前提で説明をしています。

 

正直、私専用なので、 LINE Bot である必要性はこれっぽっちもないんですが、 GAS で LINE Bot を動かしてみたかったんじゃーい。

どうやってやるべきことを決めてくれるの?

スプレッドシートにやりたいことのリストを作っておくことで、 Bot くんがリストの中からランダムに1つを選び、今日はこれをやれ!と LINE で通知してくれます。

 

早速作ってみよう!

用意するもの

  • Google アカウント
  • LINE アカウント
    • チャネルのChannelSecret、アクセストークン
  • BGM:骨を切らせて闇を断つアレ \ SAGA /

下ごしらえ

LINE について、以下を設定します。
  • LINE デベロッパー登録
  • プロバイダー/チャネル作成
  • ChannelSecret、アクセストークンの取得 

 

設定方法については、LambdaではじめてのLINE Botを作る | DevelopersIO の「 LINE デベロッパー登録」をご参照ください。

作り方

  1. Web ブラウザから Google アカウントへログインし、Google ドライブを開きます
  2. [新規] - [ Google スプレッドシート ]を押下します

  1. スプレッドシートが表示されたら、適当なスプレッドシート名を入力します
  2. スプレッドシートのシート名を [リスト] に変更します
  3. スプレッドシートの A 列にやりたいことを羅列します(1セル1つ)
  4. スプレッドシートの B1 セルに以下の数式を入力します
= TEXTJOIN("、",TRUE,A:A)
  1. スプレッドシートの [ツール] - [スクリプトエディタ] を押下します

 

  1. 表示された画面で画面左上の「無題のプロジェクト」を押下します

  1. 表示されたダイアログで適当なプロジェクト名を設定し、[OK]ボタンを押下します
  1. [コード.gs ]に以下を貼り付けます
    //CHANNEL_ACCESS_TOKENを設定
    //LINE developerで登録をした、CHANNEL_ACCESS_TOKENを入力する
    var CHANNEL_ACCESS_TOKEN = "channel_access_token";
    var line_endpoint = "https://api.line.me/v2/bot/message/reply";
    //SpreadSheetの取得
    var SS = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/hogehoge"); //SpreadsheetのURL
    var sheet = SS.getSheetByName("リスト"); //Spreadsheetのシート名(タブ名)
    var lastrow = sheet.getLastRow();
    var lastcol = sheet.getLastColumn();
    var sheetdata = sheet.getSheetValues(1, 1, lastrow, lastcol);
    //POSTデータ取得、JSONをパースする
    function doPost(e) {
    var json = JSON.parse(e.postData.contents);
    //返信するためのトークン取得
    var reply_token= json.events[0].replyToken;
    if (typeof reply_token === 'undefined') {
    return;
    }
    //送られたLINEメッセージを取得
    var user_message = json.events[0].message.text;
    //登録内容のリストを取得
    var list = sheet.getRange("B1").getValue();
    //今日すべきことを取得
    //リストの対象が増えたら数字を修正
    var row = Math.floor(Math.random() * 9);
    Logger.log(row);
    var todo = sheetdata[row][0];
    //返信する内容を作成
    var reply_messages;
    if ('リスト' == user_message) {
    //リストと入力された際
    reply_messages = ["現在の登録内容は、こちら!\n" + list,];
    } else {
    //リスト以外が入力されたときの処理
    reply_messages = [ todo + "すべし!"];
    }
    // メッセージを返信
    var messages = reply_messages.map(function (v) {
    return {'type': 'text', 'text': v};
    });
    UrlFetchApp.fetch(line_endpoint, {
    'headers': {
    'Content-Type': 'application/json; charset=UTF-8',
    'Authorization': 'Bearer ' + CHANNEL_ACCESS_TOKEN,
    },
    'method': 'post',
    'payload': JSON.stringify({
    'replyToken': reply_token,
    'messages': messages,
    }),
    });
    return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON);
    }
  2. 「channel_access_token」をという部分を「下ごしらえで取得したアクセストークン」に、「https://docs.google.com/spreadsheets/d/hogehoge」という部分を「スプレッドシートのURL」に置き換えます
  3. [保存save]アイコンを押下します
  4.  [公開] - [ウェブアプリケーションとして導入... ]を押下します

  1. 以下のように設定し、[導入] を押下します
設定項目 設定値
プロジェクトバージョン New
次のユーザとしてアプリケーションを実行 自分
アプリケーションにアクセスできるユーザー 全員(匿名ユーザーを含む)

 

コード.gs の内容を更新した時は、毎回、必ず [ウェブアプリケーションとして導入] から プロジェクトバージョンに「New」を設定してください。 バージョンアップしないと変更が反映されません。 LINE Bot が動作しない場合もこの設定を行ってみてください。

 

LINEやGoogleの認証画面が表示される場合は、承認します。 approve

  1. 導入が完了したら以下のポップアップが表示されるので、ウェブアプリケーションの URL をコピーします
  2. LINE Developer にログインし、[チャネル基本設定] の [Webhook URL] にコピーした URL を設定します

これで、できあがりのはずです!

 

できたら試してみよう!

それでは、Bot くんが動作するか試してみたいと思います。

LINE Developers にログインし、該当の Bot の詳細ページを開くと [ LINE アプリへの QRコード]があるので、ここから Bot くんを友達追加します。

 

Bot くんに「今日、何したらいい?」と相談すると…

 
おまけで、「リスト」と言われたら現在、登録されているやりたいことのリストを教えてくれるようにもしてみました。

まとめ

初回のスタンドアローンくん、今回のコンテナバインドちゃん、2種類のプロジェクトにさわることができましたね。(※1)

 

「サンプルコードをつぎはぎして貼り付ければ、とりあえず動く」という体験ができたので、次回以降は、「なぜ動くの?なんて書いてあるの?」というところを改めて確認して、プログラミングの勉強を始めてみたいと思います。

あ、でも LINE 触ったなら Twitter も触ってみたいかな。むーん。

目指せ、なんちゃってエンジニア!w

注記

※1 私が育休している間に、2つの世界の隔たりがなくなって、今となっては特にプロジェクトの種類によって変わることもなさそうですが^^;

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.