слабые события API-интерфейсы запускаются несколько раз одним сообщением - PullRequest
0 голосов
/ 06 июня 2018

Я использую Slack API для получения ссылки из рабочей области Slack.Это работает за исключением того, что когда сообщение публикуется, оно срабатывает более одного раза.Каждый раз.Вот код, который у меня есть:

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

Каждый раз, когда публикуется новое сообщение, я получаю журнал 'NEW LINK' несколько раз.Есть идеи, где искать эту проблему?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 14 мая 2019

У меня была проблема, спасибо за предложение @ taylor-singletary.Мне пришлось напечатать

console.log('Request Headers::: ', JSON.stringify(req.headers));

, чтобы найти

"x-slack-retry-num":"1"

Чтобы получить значение заголовка, просто обратитесь к этому вопросу: Как извлечь заголовки http запроса из запроса с использованием NodeJSподключить

0 голосов
/ 07 июня 2018

Я добавил res.sendStatus(200) и теперь все работает как положено.Вот код:

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