2017-06-25 4 views
0

J'ai fait un tutoriel pour configurer un chatbot Facebook pour une fanpage. Cela fonctionne parfaitement et nous pouvons également changer le mot-clé et le message qui apparaît au cas où un utilisateur tape exactement le mot-clé.Facebook chatbot avec plusieurs mots-clés

Maintenant, la seule chose est, nous ne comprenons pas, comment ajouter plusieurs mots-clés avec des réponses.

var express = require('express') 
 
var bodyParser = require('body-parser') 
 
var request = require('request') 
 
var app = express() 
 

 
app.set('port', (process.env.PORT || 5000)) 
 

 
// Process application/x-www-form-urlencoded 
 
app.use(bodyParser.urlencoded({extended: false})) 
 

 
// Process application/json 
 
app.use(bodyParser.json()) 
 

 
// Index route 
 
app.get('/', function (req, res) { 
 
    res.send('Hello world, I am a chat bot') 
 
}) 
 

 
// for Facebook verification 
 
app.get('/webhook/', function (req, res) { 
 
    if (req.query['hub.verify_token'] === 'token') { 
 
     res.send(req.query['hub.challenge']) 
 
    } 
 
    res.send('Error, wrong token') 
 
}) 
 

 
// Spin up the server 
 
app.listen(app.get('port'), function() { 
 
    console.log('running on port', app.get('port')) 
 
}) 
 

 

 
// API End Point - 
 

 
app.post('/webhook/', function (req, res) { 
 
    messaging_events = req.body.entry[0].messaging 
 
    for (i = 0; i < messaging_events.length; i++) { 
 
     event = req.body.entry[0].messaging[i] 
 
     sender = event.sender.id 
 
     if (event.message && event.message.text) { 
 
      text = event.message.text 
 
      if (text === 'hi') { 
 
       sendGenericMessage(sender) 
 
       continue 
 
      } 
 
      sendTextMessage(sender, "parrot: " + text.substring(0, 200)) 
 
     } 
 
     if (event.postback) { 
 
      text = JSON.stringify(event.postback) 
 
      sendTextMessage(sender, "Postback received: "+text.substring(0, 200), token) 
 
      continue 
 
     } 
 
    } 
 
    res.sendStatus(200) 
 
}) 
 

 
var token = " enter token here" 
 

 
// function to echo back messages 
 

 
function sendTextMessage(sender, text) { 
 
    messageData = { 
 
     text:text 
 
    } 
 
    request({ 
 
     url: 'https://graph.facebook.com/v2.6/me/messages', 
 
     qs: {access_token:token}, 
 
     method: 'POST', 
 
     json: { 
 
      recipient: {id:sender}, 
 
      message: messageData, 
 
     } 
 
    }, function(error, response, body) { 
 
     if (error) { 
 
      console.log('Error sending messages: ', error) 
 
     } else if (response.body.error) { 
 
      console.log('Error: ', response.body.error) 
 
     } 
 
    }) 
 
} 
 

 

 
// Send an test message back as two cards. 
 

 
function sendGenericMessage(sender) { 
 
    messageData = { 
 
     "attachment": { 
 
      "type": "template", 
 
      "payload": { 
 
       "template_type": "generic", 
 
       "elements": [{ 
 
        "title": "title 1", 
 
        "subtitle": "subtitle", 
 
        "image_url": "url of image", 
 
        "buttons": [{ 
 
         "type": "web_url", 
 
         "url": "https://www.facebook.com/", 
 
         "title": "Facebook" 
 
        }, { 
 
         "type": "web_url", 
 
         "url": "https://www.reddit.com", 
 
         "title": "Reddit" 
 
        },{ 
 
         "type": "web_url", 
 
         "url": "https://twitter.com/", 
 
         "title": "Twitter" 
 
        }], 
 
       }, { 
 
        "title": "Title 2 ", 
 
        "subtitle": "Subtitle", 
 
        "image_url": "imgurl", 
 
        "buttons": [{ 
 
         "type": "postback", 
 
         "title": "title", 
 
         "payload": "payload", 
 
        },{ 
 
         "type": "postback", 
 
         "title": "title", 
 
         "payload": "payload", 
 
        }, { 
 
         "type": "postback", 
 
         "title": "title", 
 
         "payload": "payload", 
 
        }], 
 
       }, { 
 
        "title": "title", 
 
        "subtitle": "subtitle", 
 
        "image_url": "http://www.google.com", 
 
        "buttons": [{ 
 
         "type": "postback", 
 
         "title": "title", 
 
         "payload": "payload", 
 
        },{ 
 
         "type": "postback", 
 
         "title": "title", 
 
         "payload": "payload", 
 
        }, { 
 
         "type": "postback", 
 
         "title": "title", 
 
         "payload": "payload", 
 
        }], 
 
       }] 
 
      } 
 
     } 
 
    } 
 
    request({ 
 
     url: 'https://graph.facebook.com/v2.6/me/messages', 
 
     qs: {access_token:token}, 
 
     method: 'POST', 
 
     json: { 
 
      recipient: {id:sender}, 
 
      message: messageData, 
 
     } 
 
    }, function(error, response, body) { 
 
     if (error) { 
 
      console.log('Error sending messages: ', error) 
 
     } else if (response.body.error) { 
 
      console.log('Error: ', response.body.error) 
 
     } 
 
    }) 
 
}

Répondre

0

Est-ce que vous voulez dire - Vous devez gérer plusieurs mots-clés pour même réponse? Si tel est le cas, alors facebook envoie le message sous forme de texte sur webhook. Vous devez l'attraper et envoyer un message à facebook en conséquence.

Comme dans le code que vous avez envoyé, [if (text === 'hi')], vous avez besoin d'exemples de messages (salut dans ce cas) pour être stockés dans le système et mapper la réponse.