【GAS】LINEbotで画像やテキストを受け取ったりメッセージを送信したりする


概要

【GAS】画像を送ると文字に起こすLINEbot【OCR】の補足記事。

LINEの投稿から画像を受け取り、ドキュメントのOCR機能で文字に起こし、LINEへ返信する。そんなLINEBotを作成した記事の補足で、その際使用したAPIについて記載。

JSON形式で受け取るLINEの投稿

WebhookでGASが受け取るLINEの投稿はJSON形式になっている。

「Hello, world!」ってテキストならこんな感じ。

{
  "replyToken": "××××××××××××××××××××××",
  "type": "message",
  "timestamp": 1234567890,
  "source": {
    "type": "user",
    "userId": "××××××××××..."
  },
  "message": {
    "id": "3456789",
    "type": "text",
    "text": "Hello, world!"
  }
}

ここからメッセージのタイプが欲しければ

var type = JSON.parse(event.postData.contents).events[0].message.type;

で取得でき、この場合のタイプは「text」となる。

メッセージそのものが欲しければ

var message = JSON.parse(event.postData.contents).events[0].message.text;

で、「Hello, world!」が抽出される。

画像を取得する

LINEの投稿から画像などのコンテンツを取得する場合、LINEデベロッパーズのガイドによれば、HTTPリクエストはGET https://api-data.line.me/v2/bot/message/{messageId}/content。ヘッダーなどもガイドに従う。

var messageId = JSON.parse(event.postData.contents).events[0].message.id;
var URL = "https://api-data.line.me/v2/bot/message/" + messageId + "/content/";
var image = UrlFetchApp.fetch(URL, {
              "headers": {
                "Content-Type": "application/json; charset=UTF-8",
                "Authorization": "Bearer " + ACCESS_TOKEN,
              },
              "method": "get"
            });

メッセージIDから画像のURLを生成し、アクセストークンを使って"method": "get"で画像を取得している。

ちなみに、このままドライブに保存すればjpg形式で保存されるし、最後の)の後ろに.getBlob()を付け加えれば、そのままimageを使いまわせる。

メッセージを送信する

LINEへメッセージを送信する場合、LINEデベロッパーズのガイドによれば、応答メッセージを送る際のHTTPリクエストはPOST https://api.line.me/v2/bot/message/reply。ヘッダーは画像取得の時と同じ。

var replyURL = "https://api.line.me/v2/bot/message/reply";

//メッセージ作成
var botMessage = "メッセージ";
var payload = JSON.stringify({
  "replyToken": replyToken,
  "messages": [{
    "type": "text",
    "text": botMessage
  }]
});

//メッセージ送信
UrlFetchApp.fetch(replyURL, {
  "headers": {
    "Content-Type": "application/json; charset=UTF-8",
    "Authorization": "Bearer " + ACCESS_TOKEN,
  },
  "method": "post",
  "payload": payload
});

payloadにメッセージを定義して、アクセストークンを使って"method": "post"でメッセージを送信している。

たったこれだけ

LINEに画像を投稿したら、それを文字に起こして返信するBotを作る上で必要なLINEデベロッパーズAPIはこれだけ。

おしまい