前提・実現したいこと
ユーザーがラインボットに話しかけてきた後に、ラインボットがユーザーに質問をして、その回答を取得したいです。
その場合、どのように書けばいいのかわかりせん。
現状、ラインボットがユーザーに質問をする(push)ところまでは動作しています。
以下のような書き方が動作しないのは大枠として理解していますが、やりたいことはこのようなことだと思います。
javascript
1app.post('/hook', function (req, res) { 2//1回目のpost 3 app.post('/hook', function (req, res) { 4 //2回目のpost 5 }); 6});
該当のソースコード
javascript
1const express = require('express') 2const request = require('request') 3const bodyParser = require('body-parser'); 4const crypto = require("crypto"); 5const app = express() 6const port = process.env.PORT || 3000; 7 8app.use(bodyParser.urlencoded({ 9 extended: true 10})); 11app.use(bodyParser.json()); 12app.get('/', (req, res) => { 13 res.send('Hello world') 14}) 15app.post('/hook', function (req, res) { 16 17 if (!validateSignature(req.headers['x-line-signature'], req.body)) { 18 return; 19 } 20 21 const events = req.body.events; 22 const userId = events[0].source.userId; 23 const type = events[0].source.type; 24 const message = events[0].message; 25 26 if(type == 'user'){ 27 request.get( getProfileOption(userId), function (error, response, body) { 28 if (!error && response.statusCode == 200) { 29 30 const options = { 31 url: 'https://api.line.me/v2/bot/message/push', 32 headers: { 33 'Content-Type': 'application/json', 34 'Authorization': 'Bearer {' + process.env.LINE_CHANNEL_ACCESS_TOKEN + '}', 35 }, 36 json: true, 37 body: { 38 'to': userId, 39 'messages': [{ 40 "type": "text", 41 "text": '話しかけてくれてありがとう\nあなたのお名前を教えて' 42 }] 43 } 44 }; 45 request.post(options, function (error, response, body) { 46 if (!error && response.statusCode == 200) { 47 app.post('/hook', function (req, res) { 48 console.log('push後にユーザーが返事した場合'); 49 }) 50 } 51 52 }); 53 } 54 }) 55 } 56}) 57 58app.listen(port, () => { 59 console.log(`Example app listening on port ${port}`) 60}) 61 62function getProfileOption(userId) { 63 return { 64 url: 'https://api.line.me/v2/bot/profile/' + userId, 65 json: true, 66 headers: { 67 'Authorization': 'Bearer {' + process.env.LINE_CHANNEL_ACCESS_TOKEN + '}' 68 } 69 }; 70} 71function validateSignature(signature, body) { 72 const hmac = crypto.createHmac('sha256', process.env.LINE_CHANNEL_SECRET); 73 const data = new Buffer(JSON.stringify(body), 'utf8'); 74 const result = hmac.update(data).digest('base64'); 75 return signature == result; 76}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/29 09:05
2019/04/29 10:59
2019/04/29 11:51
2019/04/29 12:01
2019/04/29 13:19
2019/04/29 14:02