##概要
【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はこれだけ。
###おしまい