質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
LINE Messaging API

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Q&A

解決済

1回答

1432閲覧

【linebot】Node.js+HerokuでLINE Messageing APIがエラーになる

true_colors_20

総合スコア25

LINE Messaging API

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

0グッド

0クリップ

投稿2020/08/18 10:31

前提・実現したいこと

こちらの記事を参考にHerokuにデプロイまでしたのですが、エラーが出てしまいます。
http://puyobyee18.hatenablog.com/entry/2018/10/28/171941

LINEの管理画面のwebhookの検証をすると、以下のメッセージが返ってきます。
ボットサーバーから200以外のHTTPステータスコードが返されました

実際のサイト
https://line-recipe.herokuapp.com/

LINE管理画面に登録しているwebhookのURL
https://line-recipe.herokuapp.com/callback

バージョンなど
node v12.18.3

"@line/bot-sdk": "^7.0.0", "express": "^4.17.1"

どこをデバッグすればいいでしょうか?
なにが原因なのかがまったく分からずの状態です。

server.js

'use strict'; const line = require('@line/bot-sdk'); const express = require('express'); // create LINE SDK config from env variables const config = { channelAccessToken: process.env.CHANNEL_ACCESS_TOKEN, channelSecret: process.env.CHANNEL_SECRET, }; // create LINE SDK client const client = new line.Client(config); // create Express app // about Express itself: https://expressjs.com/ const app = express(); // register a webhook handler with middleware // about the middleware, please refer to doc app.post('/callback', line.middleware(config), (req, res) => { Promise .all(req.body.events.map(handleEvent)) .then((result) => res.json(result)) .catch((err) => { console.error(err); res.status(500).end(); }); }); // event handler function handleEvent(event) { if (event.type !== 'message' || event.message.type !== 'text') { // ignore non-text-message event return Promise.resolve(null); } // create a echoing text message const echo = { type: 'text', text: event.message.text }; // use reply API return client.replyMessage(event.replyToken, echo); } // listen on port const port = process.env.PORT || 3000; app.listen(port, () => { console.log(`listening on ${port}`); });

Procfile

web: node server.js

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

webhookの検証時には特別にreplyTokenが00000000000000000000000000000000のイベントが飛んできます。

そのため、handleEvent関数の直後にそれをキャッチする処理を書けばエラーにならないはずです。

function handleEvent(event) { if (event.replyToken === '00000000000000000000000000000000') { return {} } ...以下略

投稿2020/08/18 16:01

Arahabica

総合スコア209

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

true_colors_20

2020/08/19 02:53

そのような仕様があったのですね...! ご教授頂いたコードを追加したらエラーが消えました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問