管理画面の「検証」ボタンの場所
https://developers.line.biz/console/channel/1654463371/messaging-api
この先のページの
これですね
今までは成功したり、しなかったり…
今までのコードではこんな感じに接続確認のときの通信を判断していました。
(一部抜粋)
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));});
ちょっと前(2020年9月くらい?)では、成功したりしなかったりであまりあてにしてなかったでした
すると最近(2020年11月現在)、まったく成功しなくなりました
ただ、その検証以外は普通に動くし、そのif文消したら消したで普通に検証成功するのでまぁいいやと思ったのですが、今回これを解消してみようとして、成功しましたので共有します
検証成功したソースコード
完成コードですが、チャンネルシークレットやアクセストークンはそれぞれ置き換えお願いします
'use strict';constexpress=require('express');constline=require('@line/bot-sdk');constPORT=process.env.PORT||3000;constconfig={channelSecret:'作成したBOTのチャンネルシークレット',channelAccessToken:'作成したBOTのチャンネルアクセストークン'};constapp=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(req.body.events.length==0){res.send('Hello LINE BOT! (HTTP POST)');// LINEサーバーに返答しますconsole.log('検証イベントを受信しました!');// ターミナルに表示しますreturn;// これより下は実行されません}Promise.all(req.body.events.map(handleEvent)).then((result)=>res.json(result));});constclient=newline.Client(config);asyncfunctionhandleEvent(event){if(event.type!=='message'||event.message.type!=='text'){returnPromise.resolve(null);}returnclient.replyMessage(event.replyToken,{type:'text',text:event.message.text//実際に返信の言葉を入れる箇所});}app.listen(PORT);console.log(`Server running at ${PORT}`);
受け取るデータの中のeventsは、検証時空っぽでした。
また、以前は成功したりしなかったりでしたが、ほぼほぼ検証が正確にできていそうでした!
こうすることで、検証ボタンからの通信か、普通にBOTに話しかけた通信かがわかるようになりました。