Edited at

Google Apps Scriptでオウム返しLINE Botを作る。

More than 1 year has passed since last update.

Google App ScriptでLINEBotを作る機会があったので、メッセージに対して返信をするreplyメッセージについて書いていきます。


なぜGASを使う?

普通にLINEのボットを動かそうと思えば、サーバーなどが必要になりますが、GASは関数を使って、ウェブサーバとしても利用することができるので、自分でサーバーを用意しなくてもLINEBotを開発できます。

あとは、スプレッドシートやカレンダーなど、Googleのサービスとの連携も簡単に行うことができます。

ということで、今回はBotの基本であるオウム返しBotをGASで作ってみます。


必要なもの

LINEアカウント

Googleアカウント


アクセストークンの取得

LINE Developers

こちらで、「MessagingAPIをはじめる」を選択し、適当にBot用のアカウントを作成してください。

ボットのアカウントができたら、Channel基本設定の画面へ行き、最初はアクセストークンが発行されていないので、再発行ボタンを押し、発行して、メモっておいてください。そして、Webhook送信を利用するにして。

LINE@の機能は両方ともオフにします。

LINE_Developers.jpg


GASでの開発

GASの開発画面は、GoogleDriveからいけます。

マイドライブ_-_Google_ドライブ.jpg

適当にプロジェクト名などを入れてください。

ちなみに、GASには

Container Bound Script

Standalone Script

の2種類があります。

Container Bound Scriptはスプレッドシートなどのメニューから「スクリプトエディタ」を起動して作成するスクリプトです。

gomisute_bot_-_Google_スプレッドシート.jpg

Standalone ScriptはDrive上に直接作るスクリプトになります。

今回はStandalone Scriptを使っているということになります。

Container Bound ScriptでLINEBotの作成もしてみたのですが、うまく動かなかったです。

ということで、GASのエディタが開けたら、以下のコードを記入してください。

//LINE Developersで取得したアクセストークンを入れる

var CHANNEL_ACCESS_TOKEN = 'YOUR_CHANNEL_ACCESS_TOKEN';
var line_endpoint = 'https://api.line.me/v2/bot/message/reply';

//ポストで送られてくるので、送られてきたJSONをパース
function doPost(e) {
var json = JSON.parse(e.postData.contents);

//返信するためのトークン取得
var reply_token= json.events[0].replyToken;
if (typeof reply_token === 'undefined') {
return;
}

//送られたメッセージ内容を取得
var message = json.events[0].message.text;

// メッセージを返信
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': [{
'type': 'text',
'text': message,
}],
}),
});
return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON);
}

CHANNEL_ACCESS_TOKENには自分のアクセストークンを入れてください。


Webhook URLの設定

次に、LINEボットの設定画面にWebhookのURLを入れるためにGASアプリのURLを取得します。

test.png

GASの画面で[公開] -> [ウェブアプリケーションとして導入]を選択

test-4.jpg

アプリケーションにアクセスできるユーザーを[全員(匿名ユーザーを含む)]にして

test.jpg

そうするとURLが取得できるので、これをコピペして

LINE_Developers.jpg

LINE Developersのボットの設定画面のWebhookURLにペースとします。


完成

LINE.jpg

うまくいくとこんな感じで、自分の送ったメッセージをそのまま返してくれます。


少し解説

doPost関数はWebアプリにPOSTリクエストが送られたときに、実行される関数で、LINEBotにメッセージが送られた場合、LINEのサーバーがWebhookURLに設定したURLにPOST形式でメッセージを送るので、それをGASが受け取って、JSONをパースし、返信するためのリプライトークンとメッセージの中身を取得し、それを返信用のJSONフォーマットに入れて

https://api.line.me/v2/bot/message/reply

のエンドポイントに返信しています。

返信に入れるメッセージの内容はこのJSON部分で設定していて、

'messages': [{

'type': 'text',
'text': message,
}],

変数messageに返信するメッセージが入っているため、この中身を変えたら、オウム返し以外のBotを作ることもできます。


最後に

このような感じで、GASを使えば、簡単にサーバーレスで、LINEBotを作ることができます。

次回はGASでBotからメッセージを送る、PUSHメッセージの作り方を解説しようと思います。