Почему мое событие app_home_opened иногда запускается дважды? - PullRequest
0 голосов
/ 13 июня 2019

Я подписал своего бота на следующее событие: https://api.slack.com/events/app_home_opened

Это работает, и событие запускается, когда вы открываете / фокусируете канал чата (DM) с ботом, как следует. Однако иногда (не всегда) событие вызывается дважды, и я не знаю почему.

Интересно, что второе событие может появиться на несколько секунд (~ 2-3 секунды) позже, чем первое без меня, переключающего окна или что-то еще.

Я использую следующий адаптер от Slack: https://github.com/slackapi/node-slack-events-api

А вот так выглядит мой код:

slackEvents.on('app_home_opened', (event: any, body: any) => {
  if (body.token !== process.env.SLACK_VERIFICATION_TOKEN) return;

  console.log('App home opened event: ', event);
  console.log('App home opened body: ', body);

  BotMessageInterpreter.handleAppHomeOpenedMessage(app, messagesDB, body);
});

Это данные о событии и теле, отправленные из Slack. Я удалил конфиденциальную информацию, но контролировал, что все идентично, кроме event_id и event_ts.

// First event
App home opened event:  
{ 
  type: 'app_home_opened',
  user: 'my-slack-id',
  channel: 'my-channel-id' 
}

App home opened body:  { 
  token: 'my-token',
  team_id: 'my-team-id',
  api_app_id: 'the-api-app-id',
  event:
  { 
    type: 'app_home_opened',
    user: 'my-slack-id',
    channel: 'my-channel-id' 
  },
  type: 'event_callback',
  event_id: 'EvKHQ2G7NU',
  event_time: 1560409852 
}

// Second event
App home opened event:  
{ 
  type: 'app_home_opened',
  user: 'my-slack-id',
  channel: 'my-channel-id' 
}

App home opened body:  
{ 
  token: 'my-token',
  team_id: 'my-team-id',
  api_app_id: 'the-api-app-id',
  event:
  { 
    type: 'app_home_opened',
    user: 'my-slack-id',
    channel: 'my-channel-id' 
  },
  type: 'event_callback',
  event_id: 'EvKKU0U6CE',
  event_time: 1560409840 
}

1 Ответ

1 голос
/ 14 июня 2019

Похоже, этого можно избежать, проверив количество повторов в заголовке:

if (headers['x-slack-retry-num']) return;
...