GoogleAppsScript
linebot

Line BotをGoogle App Scriptで無料で手軽に試してみる。

More than 3 years have passed since last update.

今さらですが、Line BotをGoogle App Scriptで、何のインフラももたずに試してみました。

※すでに先着10,000名のトライアルは上限に達したそうです。

申し込みして、まだ試せてない人は、ぜひGoogle App Scriptで試してみてください。

https://developers.line.me/bot-api/overview

Google App Script(GAS)の基本的なところ他の記事にお任せするとして、サンプルコードとおおまかな流れだけを説明します。


仕様

Line Botから投稿されたメッセージを、オウム返しするbotです。Line Botはただ送信されたメッセージを自分の持つシステムに届ける(Postされる)だけのシンプルな機構で、それを受け取った後、送信元に同じtextを返すというものです。


1. GASのコード

まずはGASのコードを準備していきます。

var channel_id = "<your channel id>"; //LineBotの管理画面から取得

var channel_secret = "<your channel secret>"; //LineBotの管理画面から取得
var mid = "<your mid>"; //LineBotの管理画面から取得

function doGet(e) {
return ContentService.createTextOutput(UrlFetchApp.fetch("http://ip-api.com/json"));
}

function doPost(e) {
var json = JSON.parse(e.postData.contents)
return reply(json.result[0]);
}

function reply(resultJson){
Logger.log(resultJson);

var url = "https://trialbot-api.line.me/v1/events";
var headers = {
"Content-Type" : "application/json; charset=UTF-8",
"X-Line-ChannelID" : channel_id,
"X-Line-ChannelSecret" : channel_secret,
"X-Line-Trusted-User-With-ACL" : mid
};

var postData = {
"to" : [resultJson.content.from],
"toChannel" : 1383378250, //これは固定値
"eventType" : "138311608800106203", //これは固定値
"content" : {
"contentType" : 1,
"toType" : 1,
"text" : resultJson.content.text + "!"
}
};

var options = {
"method" : "post",
"headers" : headers,
"payload" : JSON.stringify(postData)
};

return UrlFetchApp.fetch(url, options);
}


2. アプリケーションを公開する

GASのメニューの「公開」→「WEBアプリケーションとして導入」を開きます。

・プロジェクトバージョン:新規作成

・次のユーザーとしてアプリケーションを実行:自分

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


3. LinebotのCallback URLを設定する。

GASの公開されたアプリケーションURLをLine developersの管理画面からCallback URLを設定します。その際、ポート番号を必ず指定する必要があるので、以下の様なURLにします。

https://script.google.com:443/macros/s/<xxxxx>/exec

※注意:このCallback URLは設定してから有効になるまで、6時間以上かかるようです。急いでも反応しないので気をつけましょう。


4. 待ちます。

Callback URLの設定が有効になるのにとにかく時間がかかるので、とにかく待ちます。


5. GASからアクセスするIPを調べ、Whitelistに追加します。

上記まで設定で、受信出来るようになりますが、Linebotでメッセージを送信するには、IPをWhitelistに追加する必要があります。

function doGet(e) {

return ContentService.createTextOutput(UrlFetchApp.fetch("http://ip-api.com/json"));
}

この記述によって、GASの公開URLをgetRequestすると、アクセス元のIPを知ることが出来ます。公開URLをブラウザで叩いてみましょう。

IPが分かったらLine developersの管理画面からServer IP Whitelistを追加します。CIDRでの指定です。

例えば、IPが66.249.84.164であれば、66.249.84.1/24としておけばよいでしょう。


6. Linebot管理画面のQRコードをLINEに読み込みます。

QRコードから追加し、トークから何か送信してみます。オウム返しでメッセージが帰ってくるはずです。


以上です。

今回はGoogle App Scriptで紹介しましたが、シンプルな機構なので他の環境、言語でも可能かと思います。ただ、無料系のSSLではうまくいかない事があるらしいです。

bot元年、これからどういう展開になるか楽しみですね。また今後もGASで色々遊べそうです。