Help us understand the problem. What is going on with this article?

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

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away