Remote Lockとは
よくジム等でQRコードをスキャンして入退室することがあると思います。
そのサードパーティーの一つです。
webhookとは?
webhook自体の説明は簡略化します。以下が参考になると思います。
Webhooks(ウェブフック)とは、Webアプリケーションやサービスで特定のイベントが発生した際に、HTTPプロトコルを使用してリアルタイムで自動的に通知を行うシステムです。
例えば、GitHubでコードがプッシュされたり、Slackで特定のメッセージが投稿されたりした瞬間に、別のアプリケーションに即座に情報を伝達することができます。Webhooksを活用することで手動での作業を大幅に削減し、業務プロセスの自動化と効率化を実現できます。
Webhooksの特徴は、事前に設定した特定のイベントをトリガーに、自動的に処理を実行できる点です。Slack・LINE・Zoom・Dropbox・Githubなど、多くの主要サービスがWebhooksに対応しており、企業のデジタルワークフローを劇的に改善する可能性を秘めています。
Remote Lockのwebhookの特殊な仕様
送信が成功しない下記の条件でWebhookの通知が停止されるようになりました。
[ 無効なwebhookなdeactivateの処理]
webhookの通知が失敗する通知先について、合計5回でのリトライで成功が確認できない場合、当該の通知先を無効化( webhookの送信を停止 )します。
webhookの送信は、送信先サーバーから httpsステータスコードが2XX系の応答が3秒以内が返却されることで成功となります。
つまり、webhookでAPIをコールし、それが400, 500系エラーとなった場合webhookが停止してしまう場合があります。
Remote Lockのwebhookのバグ?
webhook起因でエラーが発生し、webhookが停止する事象が頻発していました。
原因は、1 ~ 2週間前の過去のイベントデータが飛んでくる
ということでした。
そのため、この謎事象に対するハンドリングをすべきでした。
正確にいうと、APIの内部でそのような不適切なイベントは400エラーを返しているのですがそれだとRemote Lockの仕様でwebhookが停止してしまいます。
そのため、「webhookが止まっても構わない」
というハンドリング以外は200エラーで返し、エラーログだけ出すようにしておくのがよいでしょう。
また、エラーログはSlackに通知されるような設定をしておけば検知自体はしやすいと思います。