9
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【LINE BOT】Messaging APIとGASでLINE BOTを作ってみた

Posted at

LINE BOTがどんな感じで作るものなのか、調べて動かしてみました。

以下の公式ページを見ると、様々な言語に対応しているみたいなのですが、
WEBサーバが必要らしく、わざわざWEBサーバを立てる必要のないGASでやってみました。
公式
公式のチュートリアル

#参考
LINE BOTの作り方

#完成イメージ
ぶっきらぼうに挨拶を返すBOT
image.png

#事前準備
LINE for Businessにアカウント登録してください。
※登録してから以下の手順を実施してたので、、もしかしたら不要かもしれない?

#1.LINE Developersにアカウント登録
LINE Developersにアクセスしてアカウントを登録
LINE個人アカウントが必要のようです。自分は、個人携帯のLINEアカウントで登録しました。

#2.プロバイダーの登録
アカウントを作ったら、トップページから(Messaging API)を選択
1.png


「今すぐはじめよう」を選択
2.png

#####英語から日本語表記にしたい場合は、画面右下の言語を「日本語」にする。
image.png

#####画面が切り替わったら、それぞれ入力していく。
#####「チャネルの種類」=「Message API」を選ぶのと、「新規プロバイダー作成」を選択すれば、後はてきとうに必須項目を入力していく。
3.png

#####「チャネル名」がBOTの名前になると思ってもらえればよい。
4.png
image.png
#####最後に「作成」押下。

#3.チャネルの設定
以下のように作成したプロバイダが表示される。
image.png

作成したプロバイダを選択すると、以下のチャネルを選択する画面が表示される。
image.png

作成した「チャネル」を選択して「Messaging API設定」タブを選択する。
image.png
image.png

#####「チャネルアクセストークン(長期)」を発行して、キーをメモっておく。(赤枠の所)

#4.GAS
「Googleドライブ」→「Google Apps Script」
image.png

#####「channelToken」の変数には、先ほどメモった「チャネルアクセストークン(長期)」を設定する。

コード.gs
function doPost(e) {
  //トークンがきたか判定
  var replyToken= JSON.parse(e.postData.contents).events[0].replyToken;
  if (typeof replyToken === 'undefined') {
    return;
  }
  
  //お約束のURL
  var url = 'https://api.line.me/v2/bot/message/reply';
  
  //Messaging APIのチャネルアクセストークン(長期)
  var channelToken = 'T8GIL/pUZbVN4jZkzfvRl8A1qVdx0pVXZekJy2EKaAUwuqQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa5FoE1musPhTcayWCCBvrp4QJ2TnjvYwVSNB4wiNB3KX7yRw/09c572mbZEnNIg9TLjXPuc8jZeBMP20XkX/YqAdB04t89/1O/w1cDnyilFU=';


  //受信オブジェクトを取得
  var input = JSON.parse(e.postData.contents).events[0].message;

  var receive = '';
  var hensin = '何言ってるかわらかない。'; //挨拶じゃない場合
  //メッセージ取得
  if(input.type == 'text') {
      receive = input.text;
  }
  
  if(input.text.match('おはよう')) {
    hensin = "おは";
  } else if(input.text.match('こんにちわ')) {
    hensin = "ちわ";
  } else if(input.text.match('こんばんわ')) {
    hensin = "ばんわ";
  }



  var messages = [{
    'type': 'text',
    'text': hensin,
  }];
  
  
  UrlFetchApp.fetch(url, {
    'headers': {
      'Content-Type': 'application/json; charset=UTF-8',
      'Authorization': 'Bearer ' + channelToken,
    },
    'method': 'post',
    'payload': JSON.stringify({
      'replyToken': replyToken,
      'messages': messages,
    }),
  });
  return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON);
}

#####「公開」→「WEBアプリケーションとして導入」
image.png
#####「Who has access to the app」を「Anyone, exen anonymous(全員(匿名ユーザーを含む))」にすることを忘れずに。
※更新時の画面のなので、「Project version」表示されてますが、新規の時は、ありません。
 更新の時は、「Project version」を「New」にすることを忘れずに。


#####ここで、生成されたURL(Current web app URL)をメモります。
image.png

#5.チャネルの設定
#####再度、「Messaging API設定」の画面を開きます。
image.png

変更箇所は以下の通り。

##### 「Webhook URL」に先ほど、メモったGASのURLを設定。
##### 「Webhookの利用」をONに設定。
##### 「応答メッセージ」をOFFに設定。

####あとは、作ったチャネル名のユーザに挨拶を送ると、上記の「完成イメージ」の通り動くはず。

##補足
GAS内の「e.postData.contents」の構造は、以下を参照。
Webhookイベントオブジェクト

メッセージのやり取りは、メモリやDBを使って「ユーザID」単位に管理する感じが一般的・・?

9
10
0

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
  3. You can use dark theme
What you can do with signing up
9
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?