【GAS】【LINE】GASでLINEBOTを作成する。(その2)

GASでLINEBotを作成

本記事は前回の続きです。 shiojojo.hatenablog.com 前回の約束通り、中身について解説したいと思います。

コード

前回説明したコードです。LINEにメッセージを送信すると、いついかなる時も「いつもよろしく」と返信してくれます。

// LINE Bot のアクセストークン
var CHANNEL_ACCESS_TOKEN = '<発行したアクセストークン>'

// HTTPリクエスト POST  
var linePost = 'https://api.line.me/v2/bot/message/reply';

function doPost(e) {
  //送信するメッセージを作成
  
  // Jsonにパース
  var json = JSON.parse(e.postData.contents);
  // 返信するためのトークンを取得
  var replyToken = json.events[0].replyToken;

  
  // メッセージをLINEに送信  
  UrlFetchApp.fetch(linePost, {
    'headers': {
      'Content-Type': 'application/json; charset=UTF-8',
      'Authorization': 'Bearer ' + CHANNEL_ACCESS_TOKEN,
    },
    'method': 'post',
    'payload': JSON.stringify({
      'replyToken': replyToken,
      'messages': [{'type': 'text', 'text': 'いつもよろしく。'}]
    }),
  });
  return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON);
}

細かく説明したいと思います。 ターゲットはGASを片手間でやってて、詳しい説明はいらない向けです。 もっと詳しく知りたい方は力が及ばなくて、すみません。

アクセストーク

// LINE Bot のアクセストークン
var CHANNEL_ACCESS_TOKEN = '<発行したアクセストークン>'

これはLINBBotで発行したアクセストークンを変数として格納します。
こういうもんだと理解してください。 ただ、Gitで管理する場合はアクセストークンは別ファイルにて管理しましょう。
隠すべき情報はきちんと隠しましょう。

replyのHTTPリクエス

// HTTPリクエスト POST  
var linePost = 'https://api.line.me/v2/bot/message/reply';

リプライのメッセージを作成するときは上記のHTTPSにPOSTします。 こういうものだと理解しましょう。 もっと詳しく知りたい方は以下のサイトにて公式ドキュメントがあります。 developers.line.biz
プッシュなど状況に応じて、変更しましょう。

メッセージの作成

LINEBotのメイン処理です。
Lineにメッセージが送信されると、doPost(e)の処理されメッセージが返信されます。
この中身をいじくりまわすと、メッセージを連投したり、画像を送ったりもできます。

function doPost(e) {
  //送信するメッセージを作成
  
  // Jsonにパース
  var json = JSON.parse(e.postData.contents);
  // 返信するためのトークンを取得
  var replyToken = json.events[0].replyToken;

  
  // メッセージをLINEに送信  
  UrlFetchApp.fetch(linePost, {
    'headers': {
      'Content-Type': 'application/json; charset=UTF-8',
      'Authorization': 'Bearer ' + CHANNEL_ACCESS_TOKEN,
    },
    'method': 'post',
    'payload': JSON.stringify({
      'replyToken': replyToken,
      'messages': [{'type': 'text', 'text': 'いつもよろしく。'}]
    }),
  });
  return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON);
}

この中身も一応説明します。

JSONにパース

var json = JSON.parse(e.postData.contents);

上記でJSONにパースします。
JSONにパースしないと送れないので、そういうもんだと思ってください。

リプライトークンの取得

var replyToken = json.events[0].replyToken;

リプライ用のトークンを取得します。 メッセージを受けた先がわからないと、どこにリプライを送ればわからないので取得します。 とういうことで、そういうものだと理解してください。

メッセージの送信

以下の処理でメッセージを送信します。 messagesの中身以外は基本的に変更の必要はありません。

  UrlFetchApp.fetch(linePost, {
    'headers': {
      'Content-Type': 'application/json; charset=UTF-8',
      'Authorization': 'Bearer ' + CHANNEL_ACCESS_TOKEN,
    },
    'method': 'post',
    'payload': JSON.stringify({
      'replyToken': replyToken,
      'messages': [{'type': 'text', 'text': 'いつもよろしく。'}]
    }),
  });

メッセージの中身

以下の中で送るメッセージを内容を送ります。

'messages': [{'type': 'text', 'text': 'いつもよろしく。'}]

配列で管理されており、配列の中身はJSONになっております。
個々の中身を変更することで、いろんなメッセージを送れます。

  • 連投する場合
'messages': [{'type': 'text', 'text': 'いつもよろしく。'} , {'type': 'text', 'text': 'いつもよろしく。'}]

連投する場合はJSONを続けて書きます。

  • 画像を送る場合
'messages': [{ "type": "image","originalContentUrl": <画像のURL> ,"previewImageUrl": <画像のURL>}]

上記のようにいろいろへんこうすることで、画像メッセージを送ることができます。

もっと詳しく知りたい方は、やはり公式ドキュメントです。 developers.line.biz
適宜変更しましょう。

送信情報の取得

以下をコードに書くと、LINEのメッセージを送信したユーザーの情報を取得できます。

  • ユーザーのラインメッセージ
var userMessage = json.events[0].message.text;  

ユーザーが送ってきたメッセージを取得できます。

  • ユーザーのユーザーID
var sourceUserId = json.events[0].source.userId;

メッセージを送ってきたユーザーのIDを取得できます。 LINEではユーザーを一意のIDで管理しており、ユーザーごとにメッセージを返信する内容を変更するときに使えますね。

  • ユーザーのグループID
var sourceGroupId = json.events[0].source.groupId;

LINEBOTがグループラインでメッセージを受けとったときのグループIDを取得できます。

まとめ

基本的なことは説明したつもりです。
あとは状況に応してメッセージを取得し、返信しましょう。
GASを利用して、スプレッドシートに記載したメッセージなども送ることができます。

後もっと詳しく知りたい方は、やはり公式ドキュメントをみることです。 developers.line.biz