初めに
node.jsを使ってLinebotにじゃんけん機能をつけたい。MessagingAPIを使って、Linebotは作ることができたのですがクイックリプライ機能ができません。どこがいけないのでしょうか?
コード
js
1'use strict'; 2 3const express = require('express'); 4const line = require('@line/bot-sdk'); 5const PORT = process.env.PORT || 8000; 6const configs = require('./configs'); 7 8const config = { 9 channelSecret: configs.lineapi.channelSecret, 10 channelAccessToken: configs.lineapi.channelAccessToken 11}; 12const app = express(); 13const client = new line.Client(config); 14 15app.get('/', (req, res) => res.send('Hello LINE BOT!(GET)')); //ブラウザ確認用(無くても問題ない) 16app.post('/webhook', line.middleware(config), (req, res) => { 17 console.log(req.body.events); 18 19 20 Promise 21 .all(req.body.events.map(handleEvent)) 22 .then((result) => res.json(result)); 23}); 24 25 26function handleEvent(event) { 27 console.log(event) 28 if (event.type === 'message' && event.message.type === 'text') { 29 handleMessageEvent(event) 30 } else { 31 return Promise.resolve(null) 32 } 33} 34 35function handleMessageEvent(event) { 36 let msg = { 37 type: event.message.type, 38 text: event.message.text 39 } 40 41 const eventMessageText = event.message.text.toLowerCase(); 42 if (eventMessageText === "じゃんけん") { 43 msg = { 44 "type": "text", 45 "text": "じゃんけんポン!", 46 "quickReply": { 47 "items": [{ 48 "type": "action", 49 "action": { 50 "type": "message", 51 "label": "パー", 52 "text": "パー" 53 } 54 }, 55 { 56 "type": "action", 57 "action": { 58 "type": "message", 59 "label": "グー", 60 "text": "グー" 61 } 62 }, 63 { 64 "type": "action", 65 "action": { 66 "type": "message", 67 "label": "チョキ", 68 "text": "チョキ" 69 } 70 } 71 ] 72 } 73 } 74 // msg = { 75 // "type": "message", 76 // "text": text, 77 // "quickReply": quickReply 78 // } 79 } else { 80 let hands = ['グー', 'パー', 'チョキ']; 81 let num = Math.floor(Math.random() * hands.length); 82 let hand = hands[num]; 83 let win; 84 switch (hand) { 85 case 'グー': 86 win = 'パー'; 87 break; 88 case 'パー': 89 win = 'チョキ'; 90 break; 91 case 'チョキ': 92 win = 'グー'; 93 break; 94 } 95 let text; 96 if (eventMessageText === win) { 97 text = format("{hand}!あなたの勝ち!", { 98 hand: hand 99 }); 100 } else if (eventMessageText === hand) { 101 text = 'あいこ!'; 102 } else { 103 text = format("{hand}!残念。あなたの負け!", { 104 hand: hand 105 }); 106 } 107 msg = { 108 "type": "text", 109 "text": text 110 } 111 } 112 return client.replyMessage(event.replyToken, msg); 113} 114 115 116// app.listen(PORT); 117(process.env.NOW_REGION) ? module.exports = app: app.listen(PORT); 118console.log(`Server running at ${PORT}`);
エラーコード
$ node server.js Server running at 8000 [ { replyToken: '00000000000000000000000000000000', type: 'message', timestamp: 1561354197556, source: { type: 'user', userId: 'Udeadbeefdeadbee' }, message: { id: '100001', type: 'text', text: 'Hello, world' } }, { replyToken: 'ffffffffffffffffffffffffffffffff', type: 'message', timestamp: 1561354197556, source: { type: 'user', userId: 'Udeadbeefddbee' }, message: { id: '100002', type: 'sticker', packageId: '1', stickerId: '1' } } ] { replyToken: '00000000000000000000000000000000', type: 'message', timestamp: 1561354197556, source: { type: 'user', userId: '' }, message: { id: '100001', type: 'text', text: 'Hello, world' } } ReferenceError: format is not defined at handleMessageEvent (/home/・・・/server.js:103:7) at handleEvent (/home/・・・/server.js:29:5) at Array.map (<anonymous>) at app.post (/home/・・・/server.js:21:26) at Layer.handle [as handle_request] (/home/・・・/node_modules/express/lib/router/layer.js:95:5) at next (/home/・・・/node_modules/express/lib/router/route.js:137:13) at /home/・・・/node_modules/@line/bot-sdk/dist/middleware.js:42:13 at process._tickCallback (internal/process/next_tick.js:68:7)
参考記事
- igeargeek/chatbot-cpe-cmu2019
- [LINE Messaging API にクイックリプライ機能が追加されました
](https://dev.classmethod.jp/etc/line-messaging-api-quick-reply-demo/)
開発環境
- Messaging API
- Node.js(v10.14.2)
- now
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。