Help us understand the problem. What is going on with this article?

【入門】Google Apps ScriptでLINE botを作成する

前置き

  • サーバレスでLINE botを作りたい
  • 費用をかけずに作りたい

ということで、Google Apps ScriptでLINE BOTを作ってみました。
今回はその作成手順をまとめます。

使用するサービス

  • GoogleAppsScript
  • LINE Messaging API

導入

こちらの記事を参考にしました。
LINEのBot開発 超入門(前編) ゼロから応答ができるまで

ソースコード

// LINE Message API アクセストークン
var ACCESS_TOKEN = "<Messaging API管理画面で発行したアクセストークン>";
// 通知URL
var PUSH = "https://api.line.me/v2/bot/message/push";
// リプライ時URL
var REPLY = "https://api.line.me/v2/bot/message/reply";

/** 
 * doPost
 * POSTリクエストのハンドリング
 */
function doPost(e) {
    var json = JSON.parse(e.postData.contents);
    reply(json);
}

/** 
 * doGet
 * GETリクエストのハンドリング
 */
function doGet(e) {
    return ContentService.createTextOutput("SUCCESS");
}

/** 
 * push
 * botからメッセージを送る
 */
function push() {
    // リクエストヘッダ
    var headers = {
        "Content-Type" : "application/json; charset=UTF-8",
        "Authorization" : "Bearer " + ACCESS_TOKEN
    };
    // メッセージ
    var postData = {
        "to" : "<UserID>",
        "messages" : [
            {
                "type" : "text",
                "text" : "Hello from GoogleAppsScript"
            }
        ]
    };
    // POSTオプション作成
    var options = {
        "method" : "POST",
        "headers" : headers,
        "payload" : JSON.stringify(postData)
    };
    return UrlFetchApp.fetch(PUSH, options);
}

/** 
 * reply
 * ユーザからのアクションに返信する
 */
function reply(data) {
    var postMsg = data.events[0].message.text;
    var replyToken = data.events[0].replyToken;
    var replyText = "";

    if(postMsg == "おはよう") {
    replyText = "今日も一日がんばろう!!";
    } else if(postMsg == "おやすみ") {
    replyText = "お疲れ様、ゆっくり休んでね";
    }


    if(replyText == ""){
        return;
    } else {
        // replyするメッセージの定義
        var postData = {
          "replyToken" : replyToken,
          "messages" : [
              {
                  "type" : "text",
                  "text" : replyText
              }
          ]
        };

        // リクエストヘッダ
        var headers = {
            "Content-Type" : "application/json; charset=UTF-8",
            "Authorization" : "Bearer " + ACCESS_TOKEN
        };

        // POSTオプション作成
        var options = {
            "method" : "POST",
            "headers" : headers,
            "payload" : JSON.stringify(postData)
        };

        return UrlFetchApp.fetch(REPLY, options);      
    }
}

ポイント

pushメソッド

  • postDataのjsonの中の"to" :で指定したユーザに対して、botからメッセージを送る
  • GoogleAppsScriptでトリガーを設定すれば定期的に通知を送ってくれる

replyメソッド

  • ユーザからのメッセージに返信する
    • サンプルコードの例だと、「おはよう」と「おやすみ」に反応
  • POSTリクエストの受け取り自体はdoPostで行う

設定周りの注意点

GoogleAppsScriptの公開設定

  • 「ウェブアプリケーションとして導入」を選択
  • プロジェクトバージョンを「New」にする
  • 「アプリケーションにアクセスできるユーザ」を「全員(匿名ユーザを含む)」に設定
    ※Googleにログインしていない状態で「現在のウェブアプリケーションのURL」にアクセスすることで、doGetメソッドによる動作確認が可能です

Messaging APIのメッセージ送受信設定

  • 「Webhook送信」を「利用する」に設定
  • 「Webhook URL」にGoogleAppsScrioptの「現在のウェブアプリケーションのURL」を設定

その他補足

  • botからのメッセージは、テキストのほかリッチUIのFlex Messageも利用可能

まとめ・感想

初めてQiitaに投稿してみました。
本当にお手軽にbotが作れました。
GASで作ることでgoogleのサービスとの連携も簡単にできそうなので、より実用的なbotに作り変えていきたいと思います。
何か変なところや気になる点があればコメントなどいただけると嬉しいです。

mick_k1218
コンピューターおばあちゃんになるのが夢です。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした