LoginSignup
83

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-04-21

今さらですが、Line BotをGoogle App Scriptで、何のインフラももたずに試してみました。
※すでに先着10,000名のトライアルは上限に達したそうです。
申し込みして、まだ試せてない人は、ぜひGoogle App Scriptで試してみてください。

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で色々遊べそうです。

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
What you can do with signing up
83