El envío de múltiples mensajes de respuesta en una sola devolución de datos de Facebook Messenger Motores de búsqueda

votos
1

Quiero enviar múltiples respuestas para una sola devolución de datos activada por el usuario en el Messenger. He estado siguiendo de mensajero documentación para desarrolladores y realmente no podía encontrar la manera de hacer esto.

Mi estructura del código es muy similar al de los tutoriales que he dado en el sitio, tengo una ' handlePostback función' que identifica la devolución de datos recibido y lo compara con un conjunto de cargas útiles predefinidos para encontrar la ' respuesta objeto JSON'. Esto se da respuesta a ' callSendAPI ' que pone a este objeto JSON en el formato básico de enviar el mensaje de nuevo a la API de 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
}

Esta es la estructura básica, ahora quiero enviar varios mensajes como respuesta a una devolución de datos . Hice algo de investigación, y me encontré con que la solución podría ser la creación de un mensaje [] matriz. Pero, ¿cómo lo hago? Debido a que se está generando mi 'respuesta' a través de esa función y la estructura de los mensajes debe tener este aspecto (creo):

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

Espero que pueda explicar mi pregunta, por favor, hágamelo saber si puedo proporcionar más detalles!

Publicado el 25/11/2017 a las 03:17
fuente por usuario
En otros idiomas...                            


4 respuestas

votos
-1

No modifique callSendAPIla función. En su handlePostbackfunción de llamar callSendAPIvarias veces.

callsendAPI(sender_psid,response1);
callsendAPI(sender_psid,response2);
Respondida el 26/11/2017 a las 10:01
fuente por usuario

votos
1

Buena pregunta. Si no está familiarizado con Node.js la forma de hacerlo no es demasiado evidente y esto no se documenta bien en Documentación Enviar API de Facebook.

En primer lugar, el enfoque de enviar varios mensajes, utilizando una matriz, ya que puede haber observado, no funcionará. Facebook tiene una solución para el envío de hasta 100 llamadas de API con una petición, pero en mi opinión esto no es necesario en su situación. Si desea obtener más información al respecto visita nuestra Solicitud de documentación por lotes , se dará cuenta de que la aplicación es diferente a la suya.

Una solución que funcione es llamar a la callSendAPIfunción varias veces. Sin embargo, esta solución tiene un inconveniente importante : Usted no será capaz de controlar la secuencia real de los mensajes enviados. Por ejemplo, si desea enviar dos mensajes separados, no se puede garantizar que será enviado primero al usuario .

Para resolver este problema que necesita para cadena de sus callSendAPIfunciones de una manera que garantice que la próxima callSendAPIllamada ocurrirá sólo después del primer mensaje ya se envía. Puede hacer esto en NodeJS mediante el uso de cualquiera de las devoluciones de llamada o promesas . Si usted no está familiarizado con cualquiera de ellos, se puede leer esto para devoluciones de llamada y este de promesas.

Tendrá que modificar su callSendAPIfunción y sobre todo la parte que envía la solicitud POST a Facebook. Voy a presentar una solución a su problema utilizando promesas y el módulo de nodo-fetch .

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),
  });
}

Respondida el 26/11/2017 a las 11:19
fuente por usuario

votos
0

He encontrado el siguiente enlace útil para resolver la forma de implementar múltiples respuestas en un solo segundo palo.

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

Como has dicho, matriz debe trabajar. Crear una variable de matriz con múltiples mensajes de respuesta

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

Y empujar la variable de matriz a su función

function callSendAPI(sender_psid,response) {

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

Finalmente empujar la matriz a la matriz de la función

body.message.push(multipleResponse.messages);
Respondida el 24/01/2018 a las 19:10
fuente por usuario

votos
0

@Christos Panagiotakopoulos. No estoy recibiendo mi mainMenuResponse el que está encadenado utilizando a continuación. Más bien, que estoy recibiendo respuesta tres veces. función 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)
  });

función 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);
    }
  });
}
Respondida el 21/04/2019 a las 08:44
fuente por usuario

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