Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Responder mensajes con Messenger

10/25
Recursos

Ahora vamos a responder el mensaje. Debemos crear dos funciones: Con la primera, vamos a leer el mensaje, extraer la información y decidir cómo actuar o responder frente a este, mientras que en la segunda vamos a crear el objeto (respuesta) que enviaremos a nuestros usuarios.

Aportes 36

Preguntas 4

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Creo que a todos nos esta pasando que “Mi Bot no responde”.

Mi codigo lo he puesto con cualquiera de las dos lineas, en cualquiera de los dos casos si me responde.

		"uri": "https://graph.facebook.com/me/messages",
		"uri": "https://graph.facebook.com/v2.6/me/messages",

Creo debemos revisar que el codigo este bien, aqui les dejo el mio, pero si esta bien el problema puede ser que tenemos que actualizar la configuracion del Webhook con la nueva ruta que nos da al correr ngrok http 5000

'use strict'

const express = require('express');
const bodyParser = require('body-parser');
const request = require('request');
const access_token = "EAAFO6rQZDZD";

const app = express();

app.set('port', 5000);
app.use(bodyParser.json());

app.get('/', function(req, response){
	response.send('Hola Mundoooo Eh vueltoooooooooo!');
})

app.get('/webhook', function(req, response){
	if(req.query['hub.verify_token'] === 'spt_token'){
		response.send(req.query['hub.challenge']);
	} else {
		response.send('No tienes permisos.')
	}
})

app.post('/webhook/', function(req, res){
	const webhook_event = req.body.entry[0];
	if(webhook_event.messaging) {
		webhook_event.messaging.forEach(event => {
			console.log(event);
			handleMessage(event);
		});
	}
	res.sendStatus(200);
});

function handleMessage(event){
	const senderId = event.sender.id;
	const messageText = event.message.text;
	const messageData = {
		recipient: {
			id: senderId
		},
		message: {
			text: messageText
		}
	}
	callSendApi(messageData);
}

function callSendApi(response) {
	request({
		"uri": "https://graph.facebook.com/me/messages",
		// "uri": "https://graph.facebook.com/v2.6/me/messages",
		"qs": {
			"access_token": access_token
		},
		"method": "POST",
		"json": response
	},
	function(err) {
		if(err) {
			console.log('Ha ocurrido un error')
		} else {
			console.log('Mensaje enviado')
		}
	}
	)
}


app.listen(app.get('port'), function(){
	console.log('Nuestro servidor esta funcionando en el puerto', app.get('port'));
})```


SOLUCIÓN
Enviaba mensaje y el bot no me respondía, es decir, enviada hola y el bot nada, entonces me puse a revisar la documentación de messenger, resulta que a la fecha de hoy 9 de Diciembre del 2018 en vez de:
https://graph.facebook.com/me/messages
se coloca en uri:
https://graph.facebook.com/v2.6/me/messages
Bibliografía:

todo bien a la primera!!!

deja la documentacion: aca

y el condigo:

function callSendApi(response) {
  request({
    "uri": `https://graph.facebook.com/v3.2/me/messages?access_token=${access_token}`,
    'method': "POST",
    "json": response
  },
  function(err) {
    if(err) {
      console.log('ha ocurrido un error')
    } else {
      console.log('mensaje enviado')
    }
  }
  )
}

El bot solo responde al chat desde la cuenta de donde se creó, ¿debería respoder desde cualquier otra cuenta?. Les agradecería si me resuelven esta duda 😃

Fui tecleando el código conforme se iba solicitando, yo sí escribí bien el link y eso me hizo dudar al final ya que al profesor le marcó error pero a mí me corrió sin problema jajajaja… hasta pensé: “¿Qué copie mal?” jajajaja…
Vamos al siguiente video =D

por alguna razon me manda error compañeros jajajaja

alguien ve mi error ? ? ? ?

si no les funciona el bot pueden utilizar este, ademas de entrar a la documentacion para mirar su actualizacion https://developers.facebook.com/docs/pages/realtime

"uri":"https://graph.facebook.com/v2.11/me/messages",

Como consejo hagan una app de prueba para que no tengan que llenar todos los permisos, en la misma app cuando le picas te da esa opcion

'use strict'

const express = require('express');
const bodyParser = require('body-parser');
const request = require('request');
const access_token = "EAAGiNT7ZAWP0BAKGjkyxCIhZAkXadKL1co532FfInRXZBq8HqXbEZCH7hyOZAAEiSZAxKuCuUlcyVKHqpLuvoQLU0IaUCGyvrTlZCedOIfkvRiAEdW8KobXCLD5cCk9ncXIumhwKpTVPiBn0feVljTXGtGL3gy4hS22hhKLO27XtQZDZD";

const app = express();

app.set('port', 5000);
app.use(bodyParser.json());

app.get('/', function(req, response){
    response.send('Hola mundo!');
})

app.get('/webhook', function(req, response){
    if(req.query['hub.verify_token'] === 'pugpizza_token'){
        response.send(req.query['hub.challenge'])
    } else {
        response.send('Pug Pizza no tienes persmisos')
    }
});

app.post('/webhook/', function(req, res){
    const webhook_event = req.body.entry[0];

    if(webhook_event.messaging){
        webhook_event.messaging.forEach(event =>{
            console.log(event);
            handleMessage(event);
        });
    }
    res.sendStatus(200);
});

function handleMessage(event){
    const senderId = event.sender.id;
    const messageText = event.message.text;
    const messageData = {
        recipent:{
            id: senderId
        },
        message: {
            text: messageText
        }
    }
    callSendApi(messageData);
}

function callSendApi(response){ 
    request({
        "uri": "https://graph.facebook.com/v2.6/me/messenger_codes?access_token=<ACCESS_TOKEN>",
        "qs": {
            "access_token": access_token
        },
        "metod": "POST", 
        "json": response
    },
    function(err) {
        if(err){
            console.log('ha ocurrido un error')
        } else{
            console.log('Mensaje enviado')
        }
    }
)
}

app.listen(app.get('port'), function(){
    console.log('Nuestro servidos esta funcionando en el puerto', app.get('port'));
});```

He buscado el error en todos lados, pero mi bot no me responde el mensaje.
En la consola sale el mensaje que recibe y el console.log de "Mensaje Enviado"
Pero nunca envia un mensaje.
Dejo mi code:

'use strict'

const express = require('express');
const bodyParser = require('body-parser');
const request = require('request');
const access_token="EAAFwN0PSNKwBAC0eEC0V1ZACY2mZBWAyUrrVEOGbgf46yXLiaBKgyjX8ptvDmiiJ6RFDEqKX0ghwxAl82b3ljDRLJ8nZAcugYu9pnemKyn9sD4juiIZA1FfInrhnYZA8erZBZBtMzmI9e9VObARG2PBZCjyHrNyY5NvetvgQy8lyMQZDZD";
const app = express();

app.set('port',5000);
app.use(bodyParser.json());

app.get('/', function(req, response){
  response.send('Hola Mundo!');
})

app.get('/webhook', function(req, response){
  if(req.query['hub.verify_token'] === 'pugpizza_token'){
    response.send(req.query['hub.challenge']);
  }
  else{
    response.send('Pug Pizza no tienes permisos')
  }
})


app.post('/webhook/', function(req,res){
  const webhook_event = req.body.entry[0];
  if(webhook_event.messaging){
    webhook_event.messaging.forEach(event =>{
      callSendApi(event)
      console.log(event);
    })
  }
  res.sendStatus(200);
})

function handleMessege(event){
  const senderId = event.sender.id;
  const messageText = event.message.text;
  const messageData = {
    recipient:{
      id: senderId
    },
    message:{
      text: messageText
    }
  }
  callSendApi(messageData);
}

function callSendApi(response){
  request({
    "uri": "https://graph.facebook.com/v2.6/me/messages/",
    "qs":{
      "access_token":access_token
    },
    "method": "POST",
    "json": response
  },
    function(err){
      if(err){
        console.log('Ha ocurrido un error')
      }
      else{
        console.log('Mensaje Enviado')
      }
    }
  )
}


app.listen(app.get('port'),function(){
  console.log('Nuestro servidor esta funcionando en el puerto',app.get('port'));
})

Yo: Hola
MyBot: Hola
Yo: Cómo estás?
MyBot: Cómo estás?

*Oh, se parece tanto a mi!
ahhahah!

mi ERROR era que estaba colocando functioncallsendapi() y va separado function calsendapi()

El bot solo responde desde la cuenta del dueño de la página.
.
Programen sin miedo, que sus clientes solo verán al Bot cuando lo saquen a producción.

estoy corriendo con el puerto 6000.tendria algún problema

Para los que tengan el error de que no reciben la respuesta del bot, la versión 9.0 (a fecha de 24/11/2020) me funcionó:
https://graph.facebook.com/v9.0/me/messages

Como hacer para enviar 2 bloques de texto y no solo 1(como en el ejemplo del profesor)

Por ejemplo:

Bloque 1: Hola como estas …
Bloque 2: Te comento sobre la promoción …

Invoke-WebRequest : No se puede enlazar el parámetro 'Headers'. No se puede convertir el valor "Content-Type: application/json" de tipo
"System.String" al tipo "System.Collections.IDictionary".
En línea: 1 Carácter: 17
+ curl -X POST -H "Content-Type: application/json" -d '{
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Invoke-WebRequest], ParameterBindingException
    + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.InvokeWebRequestCommand```

Genial! Me funciono!

que pasa si apago el ngrok xD ya no jala la conexion con FB

una buena idea para los que les arroja un erro, podría ser en el if de la función de error, un mandar console.log del error

aun vale ?

No logro hacer que el bot me conteste, ya intenté con todos los URI que aportan e incluso poniendo el que actualmenta aparece en la plataforma de desarrolladores y no funciona AYUDA!

No he podido hacer que el Bot me responda, tengo el código exacto al del profe y no funciona, copie y pegué el que proporciona el porfe en los archivos y tampoco funciona, hay algo desactualizado en el vídeo, a alguien le pasa lo mismo?

El bot me anda como lo esperado pero en la consola tira: TypeError: Cannot read property ‘text’ of undefined.
En la misma linea 37…

Pueden ayudarme no consigo hacer que el bot me responda, muchas gracias este es mi codigo

‘use strict’

const express = require(‘express’);
const bodyParser = require(‘body-parser’);
const request = require(‘request’);
const access_token = “EAAGiNT7ZAWP0BAKGjkyxCIhZAkXadKL1co532FfInRXZBq8HqXbEZCH7hyOZAAEiSZAxKuCuUlcyVKHqpLuvoQLU0IaUCGyvrTlZCedOIfkvRiAEdW8KobXCLD5cCk9ncXIumhwKpTVPiBn0feVljTXGtGL3gy4hS22hhKLO27XtQZDZD”;

const app = express();

app.set(‘port’, 5000);
app.use(bodyParser.json());

app.get(’/’, function(req, response){
response.send(‘Hola mundo!’);
})

app.get(’/webhook’, function(req, response){
if(req.query[‘hub.verify_token’] === ‘pugpizza_token’){
response.send(req.query[‘hub.challenge’])
} else {
response.send(‘Pug Pizza no tienes persmisos’)
}
});

app.post(’/webhook/’, function(req, res){
const webhook_event = req.body.entry[0];

if(webhook_event.messaging){
    webhook_event.messaging.forEach(event =>{
        console.log(event);
        handleMessage(event);
    });
}
res.sendStatus(200);

});

function handleMessage(event){
const senderId = event.sender.id;
const messageText = event.message.text;
const messageData = {
recipent:{
id: senderId
},
message: {
text: messageText
}
}
callSendApi(messageData);
}

function callSendApi(response){
request({
“uri”: “https://graph.facebook.com/v2.6/me/messenger_codes?access_token=<ACCESS_TOKEN>”,
“qs”: {
“access_token”: access_token
},
“metod”: “POST”,
“json”: response
},
function(err) {
if(err){
console.log(‘ha ocurrido un error’)
} else{
console.log(‘Mensaje enviado’)
}
}
)
}

app.listen(app.get(‘port’), function(){
console.log(‘Nuestro servidos esta funcionando en el puerto’, app.get(‘port’));
});

Hola compañeros la verdad tuve algunos problemas para poder hacer que el bot respodiera, pero me puse a leer todo el codigo y encontre que tuve algunos typos, despues de esto todo funciono muy bien.

mi typo fue :

function callSendApi(response){
  request({
    "uri": "https://graph.facebook.com/me/message/"

debi porner messages con s al final.

function callSendApi(response){
  request({
    "uri": "https://graph.facebook.com/me/messages/"

Espero les ayude saludos a todos.

Para los que nos les responda el bot, prueben con esta URL

`https://graph.facebook.com/v5.0/me/messages?access_token=${access_token}`

Además traten de completar los campos que Facebook solicita, no es necesario todos. Por ejemplo completen la categoría, el ícono de la app y Mantener mi propio negocio. Con eso me funcionó.

a mi si me dio el mensaje enviado sin error … que milagrooooo

Un webhook es un endpoint donde expone un pequeño servicio para escuchar y responder al API de messenger.

Para hoy, 12/08/2020 la uri sigue siendo:

"uri": "https://graph.facebook.com/me/messages/"

ya resolvi mi error

solo funciona local; consulta probe con otro perfil y no llega los mensajes ala consola y menos y menos reenvia¿¿¿¿

por si les da error recuerden que cada vez que abres y cierras el ngrok se cambia el https y tiene que volverlo a poner en el facebook dev

Hola que tal, hice el ejercicio y si me responde el BOT pero solo si le mando mensajes desde la misma cuenta de facebook. Es decir si lo busco en messenger y le envio un mensaje desde otra cuenta de facebook no me responde el mensaje. ¿Como podría probarlo ?

En el callback del request tambien podemos manejar otros parametros, en lo personal tuve un problema de typo y me di cuenta cuando vi en consola el valor de body.error.

function (err, res, body) {
        if (err || body.error) {
            console.log('Ha ocurrido un error.');
        } else {
            console.log('Mensaje enviado.');
        }
    }