Si mi bot hace preguntas diferentes y si el usuario responde a cada uno de ellos, ¿cómo puedo saber qué respuesta se relaciona con la que se trate. Hay un campo llamado metadatos que puede adjuntar a la API sendTextMessage pero cuando el usuario responde, estos metadatos viene como indefinido. ¿Ustedes utilizar cualquier nodo-cache para el seguimiento de estado o una MEF como machina.js? Cuál es la mejor cifra a cabo a lo de la conversación que estamos atrapados en la actualidad?
¿Cuál es la manera correcta de guardar / estado de la pista dentro de un bot Facebook Messenger?
Usted puede tener un código de estado en su código, para no perder de vista donde la conversación del usuario con el bot es.
Para, por ejemplo. si usted tiene 10 preguntas, mantener statuscode = 0 inicialmente, y la primera pregunta. Cuando se recibe un mensaje a su web hook, comprobar si statuscode == 0, y almacenar ese mensaje de usuario como respuesta a la primera pregunta. Entonces incrementar statusCode = 1 y hacer la siguiente pregunta.
Puede tener varias banderas y StatusCodes para hacer frente a diferentes flujos de conversación.
Estoy corriendo en este tema yo mismo. A pesar de que no se ha mencionado en absoluto en su documentación, no creo adjuntando una base de datos en memoria está fuera de la cuestión. Parece que el user_ides el mismo, independientemente de cuando se inicia la conversación.
Cómo hacer una llamada a la API cada vez que el usuario vuelve a unir la sesión, probablemente ralentizar el rendimiento del robot. Además, me di cuenta de que realmente no se puede construir una "base de datos pseudo-distribuido" mediante el uso de la clave de metadatos en la API si eso es lo que estaba sugiriendo. La etiqueta de metadatos puede ser enviado desde el servidor -> Cliente (mensajero), pero no de Cliente -> Servidor de lo que dice la documentación.
Según mi conocimiento , en Facebook conversacional puede enviar datos de usuario conversacional, basta con situar la carga útil de los botones de devolución ya que se han dado en la referencia de la API .
Y conversacional no almacenará tu sesión o cualesquiera estados / banderas .you puede ajustar el estado o banderas o matrices, pero todo estará perdido cuando actualiza su aplicación o reiniciar el servidor.
Por lo tanto, si realmente desea establecer el estado que debe utilizar la base de datos para that.and SenderId permanecerá misma cada vez que lo que puede manejar los datos de la base de datos por ese id particular para el usuario particular.
Para más detalles comprobación referance técnica aquí .
Espero que esto ayudará you.if modo, la amabilidad de marca como una respuesta.
Cuando su aplicación recibe un mensaje, no hay carga útil o metadatos asociados a él. Esto es lo más opuesto a una rápida respuesta o posterior a la espalda que puede tener una carga útil. La única manera de asociar una respuesta con una pregunta a este es rastrear manualmente el estado de conversación en su aplicación según lo sugerido por @ Anshuman-dhamoon
Para ello, lo mejor es mantener un estado para cada usuario, así como el siguiente estado para cada estado.
// optionally store this in a database
const users = {}
// an object of state constants
const states = {
question1: 'question1',
question2: 'question2',
closing: 'closing',
}
// mapping of each to state to the message associated with each state
const messages = {
[states.question1]: 'How are you today?',
[states.question2]: 'Where are you from?',
[states.closing]: 'That\'s cool. It\'s nice to meet you!',
}
// mapping of each state to the next state
const nextStates = {
[states.question1]: states.question2,
[states.question2]: states.closing,
}
const receivedMessage = (event) => {
// keep track of each user by their senderId
const senderId = event.sender.id
if (!users[senderId].currentState){
// set the initial state
users[senderId].currentState = states.question1
} else {
// store the answer and update the state
users[senderId][users[senderId].currentState] = event.message.text
users[senderId].currentState = nextStates[users[senderId.currentState]]
}
// send a message to the user via the Messenger API
sendTextMessage(senderId, messages[users[senderId].currentState])
}
Nota Si lo desea, puede incluso hacer que los valores de nextStatesen funciones desembolsadas que toman la respuesta del estado actual y ramifican en diferentes conversación fluye pasando el usuario a un estado diferente dependiendo de su / su respuesta.
He pasado algún tiempo trabajando con esto. La mejor solución es utilizar una base de datos para rastrear el flujo de la conversación del usuario. El objeto de POST contiene el ID de remitentes. Puede utilizar este ID para hacer una fila en la base de datos en la que sin duda lo necesita almacenar este identificador, las respuestas a las preguntas, y un campo para realizar un seguimiento de las cuales paso en la conversación.
A continuación, puede utilizar si las declaraciones en su código para devolver las respuestas adecuadas. Un código de ejemplo a continuación:
if( $currentStep == '1' ){
// Ask Next Question
$message_to_reply = "Thank you! What's your name?";
$message_to_reply = '"text":"'.$message_to_reply.'"';
} elseif( $currentStep == '2' ){
// Ask Next Question
$message_to_reply = "Thank you! What's your email address?";
$message_to_reply = '"text":"'.$message_to_reply.'"';
} elseif( $currentStep == '3' ){
// Ask Next Question
$message_to_reply = "Thank you! What's your address?";
$message_to_reply = '"text":"'.$message_to_reply.'"';
}













