LoginSignup
11
4

More than 1 year has passed since last update.

[Slack] Bolt.js のリトライ対策をちゃんとやる

Posted at

経緯

問題発生

slack からイベントが発行されて 3 秒以内に返さないとリトライされてしまうという仕様により、同じ返信を複数回実行してしまう状態になりました。
試行錯誤をしたが、結局自前で用意した Express でリクエストを捌くという強引な方法で強引に乗り切りました。

開発者に解決方法を教えてもらう

上記の記事を twitter に投稿したところ、Bolt.js 開発者の方が解決方法を教えてくれました!ありがとうございました!

結論

import { App } from "@slack/bolt";
import { shouldSkip } from "./shouldSkip"

// アプリの設定など
const app = new App({
  token: process.env.SLACK_BOT_TOKEN,
  signingSecret: process.env.SLACK_SIGNING_SECRET
});

// global middleware。すべての event action command の前に実行される。
app.use(async (args) => {
  const { context, next } = args;

  // リトライされたイベントであればスキップすべきかどうか判断する
  if (context.retryNum && shouldSkip(contenxt)) {
    return;
  }

  await next();
})

// 処理
app.event("message", async ({ say }) => {  
  say("Hello world!");
});

(async () => {
  await app.start(8080);
  console.log("⚡️ Bolt app is running!");
})();

bolt.js の API だけを使ってリクエストを上手く処理することができました!

11
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
4