From eec521f57469690e1c6adecc684cdf33788d345f Mon Sep 17 00:00:00 2001 From: Kazuhiro Sera Date: Tue, 19 Apr 2022 11:02:48 +0900 Subject: [PATCH] Update the JP version of error handling document page --- docs/_advanced/error_handling.md | 4 +-- docs/_advanced/ja_error_handling.md | 40 +++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/docs/_advanced/error_handling.md b/docs/_advanced/error_handling.md index ee31f0c69..c0cd502ef 100644 --- a/docs/_advanced/error_handling.md +++ b/docs/_advanced/error_handling.md @@ -17,7 +17,7 @@ You can also define more focussed and specific error handlers for a variety of e - `unhandledRequestHandler`: triggered when a request from Slack goes unacknowledged. - `unhandledRequestTimeoutMillis`: the amount of time in milliseconds to wait for request acknowledgement from the application before triggering the `unhandledRequestHandler`. Default is `3001`. -*NOTE*: It is imperative that any custom Error Handlers defined in your app respond to the underlying Slack request that led to the error, using `response.writeHead` to set the HTTP status code of the response and `response.end()` to dispatch the response back to Slack. See the example for details. +*NOTE*: It is imperative that any custom Error Handlers defined in your app respond to the underlying Slack request that led to the error, using `response.writeHead()` to set the HTTP status code of the response and `response.end()` to dispatch the response back to Slack. See the example for details. ```javascript @@ -41,8 +41,8 @@ const app = new App({ return true; }, unhandledRequestHandler: async ({ logger, response }) => { - // acknowledge it anyway! logger.info('Acknowledging this incoming request because 2 seconds already passed...'); + // acknowledge it anyway! response.writeHead(200); response.end(); }, diff --git a/docs/_advanced/ja_error_handling.md b/docs/_advanced/ja_error_handling.md index cdae9b9fd..b6d579ce5 100644 --- a/docs/_advanced/ja_error_handling.md +++ b/docs/_advanced/ja_error_handling.md @@ -11,7 +11,47 @@ order: 1 リスナーでエラーが発生した場合は `try`/`catch` を使って直接ハンドリングすることをおすすめします。しかし、それでもなおすり抜けてしまうエラーのパターンもあるでしょう。デフォルトでは、このようなエラーはコンソールにログ出力されます。ご自身でこれらをハンドリングするには、`app.error(fn)` メソッドによって、グローバルエラーハンドラーを定義してください。 +また、様々なエラーパターンにより特化したエラーハンドラーを `HTTPReceiver` に直接設定することができます。 + +- `dispatchErrorHandler`: 想定しないパスにリクエストが来たときに実行されます +- `processEventErrorHandler`: リクエストを処理するとき(例:ミドルウェアや認可プロセス)に発生した例外に対して実行されます +- `unhandledRequestHandler`: Slack からのリクエストが確認(`ack()`)されなかったときに実行されます +- `unhandledRequestTimeoutMillis`: リクエストが受信されてから `unhandledRequestHandler` が実行されるまでの待機時間(ミリ秒単位)。 デフォルトは `3001` です。 + +*注*: あなたのアプリ内に定義されたカスタムのエラーハンドラーは、エラーとなった Slack からのリクストに応答するために `response.writeHead()` を呼び出して応答の HTTP ステータスコードを設定し、かつ `response.end()` を呼び出して Slack へのレスポンスを送信する必要があります。詳細は以下の例を参考にしてください。 + + ```javascript +const { App } = require('@slack/bolt'); + +const app = new App({ + receiver: new HTTPReceiver({ + signingSecret: process.env.SLACK_SIGNING_SECRET, + // より詳細で特化したエラーハンドラー + dispatchErrorHandler: ({ error, logger, response }) => { + logger.error(`dispatch error: ${error}`); + response.writeHead(404); + response.write("Something is wrong!"); + response.end(); + }, + processEventErrorHandler: ({ error, logger, response }) => { + logger.error(`processEvent error: ${error}`); + // とにかく ack する場合の方法! + response.writeHead(200); + response.end(); + return true; + }, + unhandledRequestHandler: async ({ logger, response }) => { + logger.info('Acknowledging this incoming request because 2 seconds already passed...'); + // とにかく ack する場合の方法! + response.writeHead(200); + response.end(); + }, + unhandledRequestTimeoutMillis: 2000, // デフォルト値は 3001 + }), +}); + +// より一般的でグローバルなエラーハンドラー app.error((error) => { // メッセージ再送信もしくはアプリを停止するかの判断をするためにエラーの詳細を出力して確認 console.error(error);