はじめに
こんにちは。
少し前にGoogleの各種サービスと連携できるGAS(Google Apps Script)の存在を知り、
チャットボットと組み合わせたら何か面白そうだなと思い、ちょっと試してみました。
今回はLINEbotとつなげてみます。
GASとは
- Googleが提供しているスクリプト言語で、JavaScriptをベースにつくられています
- Googleドライブやスプレッドシートを操作したり、Googleの各種サービスをはじめ、外部サービスとも連携して便利なWebアプリケーションを作成することができます
- Googleアカウントを持っていれば無料で利用できます
- こちらに概要が記載されています
LINEbotとは
- LINEが提供するボットサービスです
- Messaging APIを使うことで、ユーザーのメッセージに自動で応答するボットを作成したりできます
- LINEアカウントを持っていれば無料で利用できます(フリープランだと、毎月1,000通まで無料でメッセージ送信できるようです)
作成したプログラム
ものすごく簡単なものですが、こんなものを作成してみました。
①アンケートフォームの雛形作成
アンケートフォームの雛形が作成される。
URL開くと、こんな感じ。
②当日のカレンダーの予定を通知
カレンダーに登録しているその日の予定を通知する。
作成手順
①LINEbotを作成する
- LINEbot作成のためのチャネルを作成する。手順はこちら
- LINEbotを作成する。手順はこちら
※「Webhook」の箇所は、後でGASを作成する際のURLと紐づけるため、この段階では飛ばしてかまいません
※ LINEbotを友達追加したら、続いてGASを作成していきます。
②GASを作成する
1. ブラウザからGoogleドライブにアクセス→左上の新規ボタン→その他→Google Apps Scriptをクリック。
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アプリケーションとして公開
- 画面右上の「デプロイ」ボタンをクリック→「新しいデプロイ」をクリック
- 「種類の選択」の隣の歯車アイコンをクリック→「ウェブアプリ」を選択
- 以下設定して「デプロイ」ボタンをクリック
説明:任意の説明文。未入力でも可。
ウェブアプリ(次のユーザーとして実行):そのまま。(自分のメアドが表示されている。)
ウェブアプリ(アクセスできるユーザー):全員 - 初回デプロイ時はアクセス許可の設定が必要なため、「アクセスを承認」をクリック→立ち上がるポップアップ画面で自分のGoogleアカウントを選択
- 警告が表示されますが気にせず、詳細→「無題のプロジェクト(安全ではないページ)に移動」をクリック→次のページで「許可」をクリック
- 以下のようにデプロイ情報が表示されるので、ウェブアプリのURLをコピーしておく。(後からでも、デプロイボタン→デプロイを管理から確認可。)
※ちなみに、デプロイしたAPPをアンデプロイする場合は、同じくデプロイボタン→デプロイを管理→設定欄の一番右のアイコン(デプロイメントをアーカイブ)→アーカイブボタンクリック、でアンデプロイできます。
③LINEbotのWebhookを設定
④LINEbotにメッセージを送ってみる
試しに、LINEbotに「アンケート」とメッセージを送ってみます。
アンケートフォームのURLが返ってきますね!
URLをクリックすると、アンケートフォームの編集画面が表示されます。
あとは必要な質問項目を追加していくだけです。
ちなみに、編集権限をリクエスト〜みたいなボタンが表示されていれば、そのボタンをクリックして自分のGoogleアカウントでログインすると、同じく編集画面になるかと思います。
続いて、LINEbotに「予定」とメッセージを送ってみます。
当日の予定が返答されます!
終わりに
LINEbotとGASの組み合わせで、自前でサーバーを用意せずとも手軽に使い始められるのが良いなと思いました。
GASをもっと使って、面倒な作業はどんどん自動化していきたいと思います。
簡単なものでしたが、今回ので何か1つでもご参考になったことがありましたら、嬉しいです。