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 鈥淢i 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茅: 鈥溌縌u茅 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 鈥榯ext鈥 of undefined.
En la misma linea 37鈥

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

鈥榰se strict鈥

const express = require(鈥榚xpress鈥);
const bodyParser = require(鈥榖ody-parser鈥);
const request = require(鈥榬equest鈥);
const access_token = 鈥淓AAGiNT7ZAWP0BAKGjkyxCIhZAkXadKL1co532FfInRXZBq8HqXbEZCH7hyOZAAEiSZAxKuCuUlcyVKHqpLuvoQLU0IaUCGyvrTlZCedOIfkvRiAEdW8KobXCLD5cCk9ncXIumhwKpTVPiBn0feVljTXGtGL3gy4hS22hhKLO27XtQZDZD鈥;

const app = express();

app.set(鈥榩ort鈥, 5000);
app.use(bodyParser.json());

app.get(鈥/鈥, function(req, response){
response.send(鈥楬ola mundo!鈥);
})

app.get(鈥/webhook鈥, function(req, response){
if(req.query[鈥榟ub.verify_token鈥橾 === 鈥榩ugpizza_token鈥){
response.send(req.query[鈥榟ub.challenge鈥橾)
} else {
response.send(鈥楶ug 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({
鈥渦ri鈥: 鈥https://graph.facebook.com/v2.6/me/messenger_codes?access_token=<ACCESS_TOKEN>鈥,
鈥渜s鈥: {
鈥渁ccess_token鈥: access_token
},
鈥渕etod鈥: 鈥淧OST鈥,
鈥渏son鈥: response
},
function(err) {
if(err){
console.log(鈥榟a ocurrido un error鈥)
} else{
console.log(鈥楳ensaje enviado鈥)
}
}
)
}

app.listen(app.get(鈥榩ort鈥), function(){
console.log(鈥楴uestro servidos esta funcionando en el puerto鈥, app.get(鈥榩ort鈥));
});

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.');
        }
    }