7
5

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.

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

Last updated at Posted at 2020-12-06

##概要
【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デベロッパーズのガイド]
(https://developers.line.biz/ja/reference/messaging-api/#get-content)によれば、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はこれだけ。

###おしまい

7
5
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
7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?