6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

LINEbot+GASでアンケートフォームを作成したりカレンダーの予定表を教えてくれる簡単なボットプログラムを試してみる

Last updated at Posted at 2021-05-23

はじめに

こんにちは。
少し前にGoogleの各種サービスと連携できるGAS(Google Apps Script)の存在を知り、
チャットボットと組み合わせたら何か面白そうだなと思い、ちょっと試してみました。
今回はLINEbotとつなげてみます。

GASとは

  • Googleが提供しているスクリプト言語で、JavaScriptをベースにつくられています
  • Googleドライブやスプレッドシートを操作したり、Googleの各種サービスをはじめ、外部サービスとも連携して便利なWebアプリケーションを作成することができます
  • Googleアカウントを持っていれば無料で利用できます
  • こちらに概要が記載されています

LINEbotとは

  • LINEが提供するボットサービスです
  • Messaging APIを使うことで、ユーザーのメッセージに自動で応答するボットを作成したりできます
  • LINEアカウントを持っていれば無料で利用できます(フリープランだと、毎月1,000通まで無料でメッセージ送信できるようです)

作成したプログラム

ものすごく簡単なものですが、こんなものを作成してみました。

①アンケートフォームの雛形作成

メッセージを送ると、
あとで削除7.png

アンケートフォームの雛形が作成される。

あとで削除8.png

URL開くと、こんな感じ。

②当日のカレンダーの予定を通知

メッセージを送ると、
あとで削除9.png

カレンダーに登録しているその日の予定を通知する。

作成手順

①LINEbotを作成する

  1. LINEbot作成のためのチャネルを作成する。手順はこちら
  2. LINEbotを作成する。手順はこちら
    ※「Webhook」の箇所は、後でGASを作成する際のURLと紐づけるため、この段階では飛ばしてかまいません
    ※ LINEbotを友達追加したら、続いてGASを作成していきます。

②GASを作成する

1. ブラウザからGoogleドライブにアクセス→左上の新規ボタン→その他→Google Apps Scriptをクリック。

すると、「無題のプロジェクト」画面が立ち上がると思います。
名称未設定.png

2. スクリプトを書いていく。以下をコード.gsのエディタに貼り付けます。

※1、チャネルアクセストークン。2、CalendarApp.getCalendarByIdに指定する自分のメアド、の箇所を自身のものに書き換えます。

// LINEbotのWebhookでコールされる
// ---①
function doPost(e) {
  var resultMsg = "";
  var events = JSON.parse(e.postData.contents).events;
  events.forEach(function(event) {
    if(event.type == "message") {
      if (event.message.text.includes("アンケート")) {
        resultMsg = createForm();
      } else if (event.message.text.includes("予定")) {
        resultMsg = getSchedule();
      } else {
        resultMsg = "応答できません。"
      }
      reply(event, resultMsg);
    }
 });
}

// アンケートフォームを作成
function createForm() {
  // ---②
  var form = FormApp.create("新規アンケートフォーム");
  form.setAllowResponseEdits(true);
  return "アンケートフォームを作成しました。\n" + form.getEditUrl();
}

// カレンダーの当日の予定を取得
function getSchedule() {
  // ---②
  var calendar = CalendarApp.getCalendarById("ご自身のメールアドレスを指定してください。");
  var events = calendar.getEventsForDay(new Date());
  var resMsg = "【今日の予定】\n";
  events.forEach(function(element) {
    resMsg = resMsg.concat("" + element.getStartTime().getHours().toString().padStart(2, "0") + ":" + element.getStartTime().getMinutes().toString().padStart(2, "0"));
    resMsg = resMsg.concat("-" + element.getEndTime().getHours().toString().padStart(2, "0") + ":" + element.getEndTime().getMinutes().toString().padStart(2, "0") + " ")
    resMsg = resMsg.concat(element.getTitle() + "\n");
  });

  return resMsg;
}

// LINEbotのチャネルアクセストークン
var channel_access_token = "LINEbot作成時に発行したチャネルアクセストークンを指定してください。"

// LINEbotにレスポンス送信
function reply(e, msg) {
  var message = {
    "replyToken" : e.replyToken,
    "messages" : [
      {
        "type" : "text",
        "text" : msg
      }
    ]
  };
  // ---③
  var replyData = {
    "method" : "post",
    "headers" : {
      "Content-Type" : "application/json",
      "Authorization" : "Bearer " + channel_access_token
    },
    "payload" : JSON.stringify(message)
  };
  UrlFetchApp.fetch("https://api.line.me/v2/bot/message/reply", replyData);
}

①:LINEbotに設定するWebhookでdoPostメソッドがコールされます。
  このメソッド内に処理を記述していきます。
②:Googleの各種サービスを操作するためのクラスです。
  FormAppはGoogleアンケートフォーム、CalendarAppならGoogleカレンダーといった具合に。
  ほかにもGmailやスプレッドシート用のクラスもあります。
  リファレンスはこちら
  左メニューの「Google Workspace services」から確認できます。
③:レスポンスを生成します。payloadに設定したメッセージが最終的にLINEbotから返答されます。

3. GASをWebアプリケーションとして公開

1. Webアプリケーションとして公開
  • 画面右上の「デプロイ」ボタンをクリック→「新しいデプロイ」をクリック
    あとで消す1.png
  • 「種類の選択」の隣の歯車アイコンをクリック→「ウェブアプリ」を選択
    あとで消す2.png
  • 以下設定して「デプロイ」ボタンをクリック
    説明:任意の説明文。未入力でも可。
    ウェブアプリ(次のユーザーとして実行):そのまま。(自分のメアドが表示されている。)
    ウェブアプリ(アクセスできるユーザー):全員
  • 初回デプロイ時はアクセス許可の設定が必要なため、「アクセスを承認」をクリック→立ち上がるポップアップ画面で自分のGoogleアカウントを選択
    あとで消す4.png
  • 警告が表示されますが気にせず、詳細→「無題のプロジェクト(安全ではないページ)に移動」をクリック→次のページで「許可」をクリック
    あとで消す5.png
  • 以下のようにデプロイ情報が表示されるので、ウェブアプリのURLをコピーしておく。(後からでも、デプロイボタン→デプロイを管理から確認可。)
    あとで消す6.png

※ちなみに、デプロイしたAPPをアンデプロイする場合は、同じくデプロイボタン→デプロイを管理→設定欄の一番右のアイコン(デプロイメントをアーカイブ)→アーカイブボタンクリック、でアンデプロイできます。
あとで削除13.png

③LINEbotのWebhookを設定

  • 先ほどコピーしたGASのWebアプリケーションURLを、LINEbotのWebhook欄に設定
    あとで消す3.png
  • 「検証」ボタンをクリックして、疎通確認をします。OKと表示されれば接続できています。

④LINEbotにメッセージを送ってみる

試しに、LINEbotに「アンケート」とメッセージを送ってみます。
あとで削除10.png

アンケートフォームのURLが返ってきますね!

あとで削除11.png

URLをクリックすると、アンケートフォームの編集画面が表示されます。
あとは必要な質問項目を追加していくだけです。
ちなみに、編集権限をリクエスト〜みたいなボタンが表示されていれば、そのボタンをクリックして自分のGoogleアカウントでログインすると、同じく編集画面になるかと思います。

続いて、LINEbotに「予定」とメッセージを送ってみます。
あとで削除12.png

当日の予定が返答されます!

終わりに

LINEbotとGASの組み合わせで、自前でサーバーを用意せずとも手軽に使い始められるのが良いなと思いました。
GASをもっと使って、面倒な作業はどんどん自動化していきたいと思います。
簡単なものでしたが、今回ので何か1つでもご参考になったことがありましたら、嬉しいです。

6
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?