前提・実現したいこと
Azure custom vision をLinebotを連携させ自動判定botを作成したい
が、 500 Internal Server Error と表示され応答が得られない。
発生している問題・エラーメッセージ
ngrokで一旦、実装中
linebot側にwebhookは接続できているように見える。
が、Line側から画像やテキストを送信するがリプライが得られない。
node server.js のエラー
エラーメッセージ [ { type: 'message', message: { type: 'image', id: '14714803144557', contentProvider: [Object] }, timestamp: 1631151476849, source: { type: 'user', userId: '隠します' }, replyToken: '6068ca2c7d4f4155ad01be337c5cf3ca', mode: 'active' } ] ReferenceError: handleEvent is not defined at /Users/私の名前/mylinebot/server.js:104:34 at Layer.handle [as handle_request] (/Users/私の名前/mylinebot/node_modules/express/lib/router/layer.js:95:5) at next (/Users/私の名前/mylinebot/node_modules/express/lib/router/route.js:137:13) at _middleware (/Users/私の名前/mylinebot/node_modules/@line/bot-sdk/dist/middleware.js:43:13) at processTicksAndRejections (internal/process/task_queues.js:95:5)
ngrokのエラー
POST /webhook 500 Internal Server Error
該当のソースコード
'use strict'; //必要なものは都度 npm i してください const express = require('express'); const line = require('@line/bot-sdk'); const PORT = process.env.PORT || 3000; const cv = require('customvision-api'); const fs = require('fs'); const bodyParser = require('body-parser'); const Request = require('request'); const line_config = { channelSecret: '隠します', channelAccessToken: '隠します' }; const app = express(); const client = new line.Client(line_config); app.get('/', (req, res) => res.send('Hello LINE BOT!(GET)')); //ブラウザ確認用(無くても問題ない) app.post('/webhook', line.middleware(line_config), (req, res) => { console.log(req.body.events); // botに送られる画像にアクセスするための設定 const options = { url: `https://api.line.me/v2/bot/message/${req.body.events[0].message.id}/content`, method: 'get', headers: { 'Authorization': 'Bearer ' + line_config.channelAccessToken, }, encoding: null }; Request(options, function(error, response, body) { if (!error && response.statusCode == 200) { //画像を保存します fs.writeFileSync(`/tmp/` + req.body.events[0].message.id + `.jpg`, new Buffer(body), 'binary'); console.log('file saved'); const filePath = `/tmp/` + req.body.events[0].message.id + `.jpg`; const cv_config = { "predictionEndpoint": "隠します", "predictionKey": "隠します" }; cv.sendImage( filePath, cv_config, (data) => { console.log(data); let tagName = data.predictions[0].tagName; let probability = data.predictions[0].probability; client.replyMessage(req.body.events[0].replyToken, { type: 'text', text: tagName + 'の確率、' + probability }); } ); } }) Promise .all(req.body.events.map(handleEvent)) .then((result) => res.json(result)); }) app.listen(PORT); console.log(`Server running at ${PORT}`); ソースコード
試したこと
ngrok側の連携確認
他のコードでのLinebotの連携確認
各種アクセストークンAPIキーなどが間違っていないか確認
補足情報(FW/ツールのバージョンなど)
node v14.17.6
ngrok v2.3.40
完全に初心者です。もし見当違いのことを書いていたら申し訳ございません。
御助言いただければ幸いです。
ここにより詳細な情報を記載してください
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。