LINE BOT로 보낸 이미지를 Node.js에서 수신하여 저장하는 샘플

LINE BOT에서 Node.js로 이미지 수신 및 저장 그렇다면 Request 모듈을 사용했지만 공식 SDK를 사용해 보는 샘플입니다.

Node.js에서 QR 코드 로드 에 이어, 해커슨 센다이 에서의 재료입니다.

코드



1시간에 LINE BOT을 만드는 핸즈온 의 코드를 기반으로 handleEvent 의 함수를 바꾸어 downloadContent 의 함수를 새로 추가합니다.

server.js
//・
//・
//・
//省略

async function handleEvent(event) {
    if (event.type !== 'message' || event.message.type !== 'image') {
        return Promise.resolve(null);
    }

    const downloadPath = './qr.png';
    let getContent = await downloadContent(event.message.id, downloadPath);
    console.log(getContent);

    return client.replyMessage(event.replyToken, [
        {
        type: 'text',
        text: `${getContent}として保存しました。`
        }
    ]);

}

//ダウンロード関数
function downloadContent(messageId, downloadPath) {
    return client.getMessageContent(messageId)
      .then((stream) => new Promise((resolve, reject) => {
        const writable = fs.createWriteStream(downloadPath);
        stream.pipe(writable);
        stream.on('end', () => resolve(downloadPath));
        stream.on('error', reject);
    }));
}

//省略
//・
//・
//・

시도해보기


$ node server.js



LINE BOT에 이미지를 보내면 image.png로 저장됩니다.

코피페용



server.js
'use strict';

const express = require('express');
const line = require('@line/bot-sdk');
const PORT = process.env.PORT || 3000;
const fs = require('fs');

const config = {
    channelSecret: 'チャンネルシークレット',
    channelAccessToken: 'チャンネルアクセストークン'
};

const app = express();

app.get('/', (req, res) => res.send('Hello LINE BOT!(GET)')); //ブラウザ確認用(無くても問題ない)
app.post('/webhook', line.middleware(config), (req, res) => {
    console.log(req.body.events);

    //ここのif分はdeveloper consoleの"接続確認"用なので削除して問題ないです。
    if(req.body.events[0].replyToken === '00000000000000000000000000000000' && req.body.events[1].replyToken === 'ffffffffffffffffffffffffffffffff'){
        res.send('Hello LINE BOT!(POST)');
        console.log('疎通確認用');
        return; 
    }

    Promise
      .all(req.body.events.map(handleEvent))
      .then((result) => res.json(result));
});

const client = new line.Client(config);

async function handleEvent(event) {
    if (event.type !== 'message' || event.message.type !== 'image') {
        return Promise.resolve(null);
    }

    const downloadPath = './image.png';
    let getContent = await downloadContent(event.message.id, downloadPath);
    console.log(getContent);

    return client.replyMessage(event.replyToken, [
        {
        type: 'text',
        text: `${getContent}として保存しました。`
        }
    ]);

}

//ダウンロード関数
function downloadContent(messageId, downloadPath) {
    return client.getMessageContent(messageId)
      .then((stream) => new Promise((resolve, reject) => {
        const writable = fs.createWriteStream(downloadPath);
        stream.pipe(writable);
        stream.on('end', () => resolve(downloadPath));
        stream.on('error', reject);
      }));
  }

app.listen(PORT);
console.log(`Server running at ${PORT}`);

좋은 웹페이지 즐겨찾기