Estoy usando la API de Slack para obtener un enlace de un espacio de trabajo de Slack. Funciona excepto cuando se publica un mensaje, se activa más de una vez. Cada vez. Aquí está el código que tengo:
exports.slack = (req , res) => { var message = req.body; if (message.challenge) { res.send(message.challenge); } else if (message.event.type == 'message_received') { if (message.event.text.includes('<')) { // Link console.log('NEW LINK'); var link = message.event.text.slice(1, -1); getArticleInfo(link, (error, body) => { if (error) console.error(error); else { newArticleToDB(body , link, req); } }); } } }Cada vez que se publica un nuevo mensaje, recibo un registro de 'NUEVO ENLACE' varias veces. ¿Alguna idea de dónde buscar este problema?
Gracias.
res.sendStatus(200) y ahora todo funciona como se esperaba. Aquí está el código:
exports.slack = (req , res) => { var message = req.body; res.sendStatus(200); if (message.challenge) { res.send(message.challenge); } else if (message.event.type == 'message' && message.event.subtype != 'message_changed') { if (message.event.text && message.event.text.includes('<')) { // Link console.log('NEW LINK'); var link = message.event.text.slice(1, -1); getArticleInfo(link, (error, body) => { if (error) console.error(error); else { newArticleToDB(body , link, req); } }); } }Tuve el problema, gracias por la sugerencia de @taylor-singletary. tuve que imprimir
console.log('Request Headers::: ', JSON.stringify(req.headers));buscar
"x-slack-retry-num":"1"Para obtener el valor del encabezado, simplemente consulte esta pregunta: Cómo extraer los encabezados HTTP de una solicitud mediante la conexión NodeJS
Tuve el mismo problema al recibir múltiples eventos. Resultó que estaba recibiendo 1 evento por cada evento de usuario de bot que agregué. No sé si este es el comportamiento previsto de la API, pero decidí eliminar todos los eventos excepto app_mention y ahora solo recibo 1 evento.