Η αποστολή πολλαπλά μηνύματα απαντώντας στην ενιαία επιστροφής δεδομένων στο Facebook Messenger Bots

ψήφοι
1

Θέλω να στείλω πολλαπλές απαντήσεις για ένα postback χρήστη ενεργοποιείται στο Messenger. Έχω εξής Messenger της τεκμηρίωσης του έργου και δεν θα μπορούσε πραγματικά να βρούμε τον τρόπο να το κάνουμε αυτό.

Δομή κωδικός μου είναι πολύ παρόμοια με τα μαθήματα που έχουν δοθεί στο χώρο, έχω ένα « handlePostback λειτουργία», η οποία προσδιορίζει την έλαβε postback και τη συγκρίνει με ένα σύνολο προκαθορισμένων ωφέλιμα φορτία για να βρείτε την « απάντηση » αντικείμενο JSON. Αυτή η απάντηση δίνεται στο « callSendAPI » που θέτει αυτό το αντικείμενο JSON στη βασική μορφή της στέλνοντας το μήνυμα πίσω στο API του Messenger.

function handlePostback(sender_psid,receivedPostback)
{ if(payload== 'defined_payload') {
  response = {
  text: 'Some text'
  };
callSendAPI(sender_psid,response);
}

function callSendAPI(sender_psid,response) {
let body = {
recipient: {
id= sender_psid
},
message: response
};
// Followed by code for POST request to the webhook
}

Αυτή είναι η βασική δομή, τώρα θέλω να στείλει πολλαπλά μηνύματα ως απάντηση σε ένα postback . Έκανα κάποια σκάψιμο, και βρήκα ότι η λύση θα ήταν να δημιουργήσετε ένα μήνυμα [] array. Αλλά πώς μπορώ να το κάνω αυτό; Επειδή «απάντηση» μου που παράγεται μέσω αυτής της λειτουργίας, και η δομή των μηνυμάτων θα πρέπει να μοιάζει με αυτό (νομίζω):

let body = {
 recipient: {
 id=sender_psid
 },
 messages: [ {
  response1
  },
  {
  response2
  }
 ]
};

Ελπίζω ότι θα μπορούσα να εξηγήσω την ερώτησή μου, παρακαλώ επιτρέψτε μου να ξέρω αν μπορώ να παράσχει περισσότερες λεπτομέρειες!

Δημοσιεύθηκε 25/11/2017 στις 06:17
πηγή χρήστη
Σε άλλες γλώσσες...                            


4 απαντήσεις

ψήφοι
-1

Μην τροποποιείτε callSendAPIλειτουργία. Σε σας handlePostbackλειτουργία καλέσει callSendAPIπολλές φορές.

callsendAPI(sender_psid,response1);
callsendAPI(sender_psid,response2);
Απαντήθηκε 26/11/2017 στις 13:01
πηγή χρήστη

ψήφοι
1

Ωραία ερώτηση. Εάν δεν είστε εξοικειωμένοι με Node.js ο τρόπος για να το κάνουμε δεν είναι πολύ προφανές και αυτό δεν έχει αποδειχθεί και στην αποστολή API Τεκμηρίωση του Facebook.

Πρώτον, η προσέγγισή σας για την αποστολή πολλαπλών μηνυμάτων, χρησιμοποιώντας μια σειρά, όπως μπορείτε να έχετε παρατηρήσει δεν θα λειτουργήσει. Το Facebook έχει μια λύση για την αποστολή έως και 100 API κλήσεις με ένα αίτημα, αλλά κατά τη γνώμη μου, αυτό δεν είναι απαραίτητο στην περίπτωσή σας. Αν θέλετε να μάθετε περισσότερα γι 'αυτό δείτε το ζυγισμένες Αίτηση Τεκμηρίωση , θα ανακαλύψετε ότι η εφαρμογή είναι διαφορετική από τη δική σας.

Μια λύση που θα λειτουργήσει είναι να καλέσετε τον callSendAPIσυνάρτηση πολλές φορές. Αλλά η λύση αυτή έχει ένα σημαντικό μειονέκτημα : Δεν θα είναι σε θέση να ελέγξει την πραγματική ακολουθία των μηνυμάτων που αποστέλλονται. Για παράδειγμα, αν θέλετε να στείλετε δύο ξεχωριστά μηνύματα, δεν μπορεί να εγγυηθεί το οποίο θα σταλεί πρώτα στο χρήστη .

Για να λυθεί αυτό το ζήτημα θα πρέπει να την αλυσίδα σας callSendAPIλειτουργεί με τρόπο που να εγγυάται ότι η επόμενη callSendAPIκλήση θα συμβεί μόνο μετά το πρώτο μήνυμα έχει ήδη αποσταλεί. Μπορείτε να το κάνετε αυτό σε NodeJS με τη χρήση είτε callbacks ή υποσχέσεις . Εάν δεν είστε εξοικειωμένοι με οποιοδήποτε από αυτά, μπορείτε να διαβάσετε αυτό για callbacks και αυτό για υποσχέσεις.

Θα πρέπει να τροποποιήσετε σας callSendAPIλειτουργία και ιδιαίτερα το μέρος που στέλνει το αίτημα POST στο Facebook. Θα παρουσιάσει μια λύση για το πρόβλημά σας, χρησιμοποιώντας τις υποσχέσεις και τη μονάδα κόμβο-φέρω .

const fetch = require('node-fetch');

function handlePostback(sender_psid,receivedPostback){ 
  if (payload == 'defined_payload') {
    response = {
      text: 'Some text'
    };
    response2 = //... Another response
    response3 = //... Another response
  callSendAPI(sender_psid,response).then(() => {
    return callSendAPI(sender_psid, response2).then(() => {
      return callSendAPI(sender_psid, response3); // You can add as many calls as you want
      });
   });
  }
}

function callSendAPI(sender_psid,response) {
  let body = {
    recipient: {
      id= sender_psid
    },
    message: response
  };
  const qs = 'access_token=' + encodeURIComponent(FB_PAGE_TOKEN); // Here you'll need to add your PAGE TOKEN from Facebook
  return fetch('https://graph.facebook.com/me/messages?' + qs, {
    method: 'POST',
    headers: {'Content-Type': 'application/json'},
    body: JSON.stringify(body),
  });
}

Απαντήθηκε 26/11/2017 στις 14:19
πηγή χρήστη

ψήφοι
0

Βρήκα το παρακάτω σύνδεσμο χρήσιμο να λύσει το δρόμο για την υλοποίηση πολλαπλές απαντήσεις σε ενιαία θέση πίσω.

https://codingislove.com/build-facebook-chat-bot-javascript/

Όπως είπατε, σειρά θα πρέπει να εργαστεί. Δημιουργήστε μια μεταβλητή πίνακα με πολλαπλά μηνύματα απόκρισης

var multipleResponse = {
   messages: [{
      response1
   },
   {
      response2
   }]
};

Και σπρώξτε τη μεταβλητή πίνακα σε λειτουργία σας

function callSendAPI(sender_psid,response) {

    let body = {
         recipient: {
            id= sender_psid
         },
         message: []
    };
    // Followed by code for POST request to the webhook
}

Τέλος ωθήσει τον πίνακα με σειρά σας λειτουργία

body.message.push(multipleResponse.messages);
Απαντήθηκε 24/01/2018 στις 22:10
πηγή χρήστη

ψήφοι
0

@Christos Παναγιωτακόπουλος. Δεν είμαι πάρει mainMenuResponse μου, η οποία είναι συνδεδεμένη με τη χρήση στη συνέχεια. Αντίθετα, έχω αρχίσει ανταπόκριση τρεις φορές. λειτουργία handlePostback =>

// Handles messaging_postbacks events
function handlePostback(sender_psid, received_postback) {
  let response;

  // Get the payload for the postback
  let payload = received_postback.payload;

  // Set the response based on the postback payload
  if (payload === 'fashionTip') {
    response = { "text": getFashionTip() } // calls a function which gives a fashion-tip

  // Send the message to acknowledge the postback
  callSendAPI(sender_psid, response).then(() => {
    return callSendAPI(sender_psid, mainMenuResponse)
  });

λειτουργία callSendAPI =>

// Sends response messages via the Send API
function callSendAPI(sender_psid, response) {
  // construct the message body
  let request_body = {
    "recipient": {
      "id": sender_psid
    },
    "message": response
  }

  // Send the HTTP request to the messenger platform
  request({
    "uri": "https://graph.facebook.com/v2.6/me/messages",
    "qs": {"access_token": PAGE_ACCESS_TOKEN},
    "method": "POST",
    "json": request_body
  }, (err, res, body) => {
    if (!err) {
      console.log("Message sent!");
    } else {
      console.error("Unable to send mesage:" + err);
    }
  });
}
Απαντήθηκε 21/04/2019 στις 08:44
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more