Skip to content

Commit

Permalink
Merge branch 'main' into jwong_fix_view_submission
Browse files Browse the repository at this point in the history
  • Loading branch information
seratch authored Dec 6, 2021
2 parents 6f11021 + a1da64d commit 9d4fd93
Show file tree
Hide file tree
Showing 5 changed files with 57 additions and 16 deletions.
36 changes: 35 additions & 1 deletion docs/_advanced/ja_error_handling.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,38 @@ app.error((error) => {
// メッセージ再送信もしくはアプリを停止するかの判断をするためにエラーの詳細を出力して確認
console.error(error);
});
```
```

<details class="secondary-wrapper">
<summary class="section-head" markdown="0">
<h4 class="section-head">エラーハンドラーでのさらなるデータの参照</h4>
</summary>

<div class="secondary-content" markdown="0">
グローバルエラーハンドラーの中で、リクエストからのデータをログ出力したい場合もあるでしょう。あるいは単に Bolt に設定した `logger` を利用したい場合もあるでしょう。

バージョン 3.8.0 からは、コンストラクターに `extendedErrorHandler: true` を渡すと、エラーハンドラーはリクエストの `error``logger``context``body` を含むオブジェクトを受け取ります。

`context``body` オブジェクト内にアクセスしたいプロパティが存在するかどうかをチェックすることをおすすめします。なぜなら `body` オブジェクト内に存在するデータはイベント毎に異なりますし、エラーはリクエストのライフサイクルの中のどんなタイミング(例えば `context` のプロパティが設定される前)でも発生しうるからです。
</div>

```javascript
const { App } = require('@slack/bolt');

const app = new App({
signingSecret: process.env.SLACK_SIGNING_SECRET,
token: process.env.SLACK_BOT_TOKEN,
extendedErrorHandler: true,
});

app.error(({ error, logger, context, body }) => {
// Bolt で指定した logger を使ってエラー内容をログ出力
logger.error(error);

if (context.teamId) {
// デバッグのために teamId を使ってなんらかの処理
}
});
```

</details>
14 changes: 9 additions & 5 deletions docs/_deployments/aws-lambda.md
Original file line number Diff line number Diff line change
Expand Up @@ -141,11 +141,15 @@ const awsLambdaReceiver = new AwsLambdaReceiver({
const app = new App({
token: process.env.SLACK_BOT_TOKEN,
receiver: awsLambdaReceiver,
// The `processBeforeResponse` option is required for all FaaS environments.
// It allows Bolt methods (e.g. `app.message`) to handle a Slack request
// before the Bolt framework responds to the request (e.g. `ack()`). This is
// important because FaaS immediately terminate handlers after the response.
processBeforeResponse: true

// When using the AwsLambdaReceiver, processBeforeResponse can be omitted.
// If you use other Receivers, such as ExpressReceiver for OAuth flow support
// then processBeforeResponse: true is required. This option will defer sending back
// the acknowledgement until after your handler has run to ensure your function
// isn't terminated early by responding to the HTTP request that triggered it.

// processBeforeResponse: true

});
```

Expand Down
1 change: 1 addition & 0 deletions docs/_tutorials/ja_reference.md
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ App オプションは、`App` のコンストラクターに渡します。
| `authorize` | 複数のチームでのインストールをサポートする場合に使用する関数。どのトークンが受信イベントに関連づけられているかを判断するのに使用します。`authorize` 関数に渡される元データには、場合によって `userId``conversationId``enterpriseId``teamId``isEnterpriseInstall` が含まれます(受信イベントによって異なります)。`authorize` 関数は、`botToken``botId``botUserId`、または `userToken`を返します。[ビルトインの OAuth サポート](/bolt-js/concepts#authenticating-oauth)を使用する場合、`authorize` 関数は自動的に作成されるため、自分で渡す必要はありません。`authorize` 関数について詳しくは、こちらを参照してください。 |
| `logger` | ビルトインのロガーの代わりにカスタムのロガーを渡すためのオプション。ロガーには特定のメソッドが実装されている必要があります。これには [`Logger` インターフェイス](https://github.com/slackapi/node-slack-sdk/blob/main/packages/logger/src/index.ts)で定義されている `setLevel(level:LogLevel)``getLevel()``setName(name: string)``debug(...msgs: any\[])``info(...msgs: any\[])``warn(...msgs: any\[])``error(...msgs: any\[])` があります。ログ出力の詳細については、[ドキュメント](/bolt-js/concepts#logging)を参照してください。 |
| `logLevel` | 出力するログのレベルを指定するオプション。`LogLevel` の出力に含まれる情報のレベルには、重要度の低い順から高い順に `DEBUG``INFO``WARN``ERROR` があります。デフォルトの `logLevel``INFO` に設定されています。ログ出力の詳細については、[ドキュメント](/bolt-js/concepts#logging)を参照してください。 |
| `extendedErrorHandler` | 真偽値を指定するオプションで、 `true` に設定するとさらなるリクエストのコンテキスト情報を含んだオブジェクトがグローバルエラーハンドラーに渡されます。 バージョン 3.8.0 から利用することができます。 デフォルトは `false` です。 より高度なエラーの処理に関する詳細は [API ドキュメント](/bolt-js/ja-jp/concepts#error-handling)を参照してください。 |
| `ignoreSelf` | アプリ自身から発信されたメッセージをミドルウェアの関数で無視するかどうかを指定する真偽値。`botId` が必要です。デフォルトは `true` です。 |
| `clientOptions.slackApiUrl` | Slack Web API で使用するエンドポイントをカスタマイズできます。これが使用されるのはほとんどがテスト用途です。 |
| `socketMode` | 真偽値を指定するオプションで、`true` に設定するとアプリは[ソケットモード](/bolt-js/ja-jp/concepts#socket-mode)で起動します。ソケットモードは WebSocket のコネクションを通して Slack からのデータを受信する機能です。デフォルトは `false` です。
Expand Down
4 changes: 2 additions & 2 deletions docs/_tutorials/reference.md
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ Bolt includes a collection of initialization options to customize apps. There ar
| :---: | :--- |
| `signingSecret` | A `string` from your app's configuration (under "Basic Information") which verifies that incoming events are coming from Slack |
| `endpoints` | A `string` or `object` that specifies the endpoint(s) that the receiver will listen for incoming requests from Slack. Currently, the only key for the object is `key`, the value of which is the customizable endpoint (ex: `/myapp/events`). **By default, all events are sent to the `/slack/events` endpoint** |
| `processBeforeResponse` | `boolean` that determines whether events should be immediately acknowledged. This is primarily useful when running apps on FaaS to ensure events listeners don't unexpectedly terminate by setting it to `true`. Defaults to `false`. |
| `processBeforeResponse` | `boolean` that determines whether events should be immediately acknowledged. This is primarily useful when running apps on FaaS since listeners will terminate immediately once the request has completed. When set to `true` it will defer sending the acknowledgement until after your handlers run to prevent early termination. Defaults to `false`. |
| `clientId` | The client ID `string` from your app's configuration which is [required to configure OAuth](/bolt-js/concepts#authenticating-oauth). |
| `clientSecret` | The client secret `string` from your app's configuration which is [required to configure OAuth](/bolt-js/concepts#authenticating-oauth). |
| `stateSecret` | Recommended parameter (`string`) that's passed when [configuring OAuth](/bolt-js/concepts#authenticating-oauth) to prevent CSRF attacks |
Expand All @@ -98,7 +98,7 @@ Bolt includes a collection of initialization options to customize apps. There ar
| `installerOptions` | Optional object that can be used to customize [the default OAuth support](/bolt-js/concepts#authenticating-oauth). Read more in the OAuth documentation. |

### App options
App options are passed into the `App` constructor.
App options are passed into the `App` constructor. When the `receiver` argument is `undefined` the `App` constructor also accepts the [above `Receiver` options](#receiver-options) to initialize either a `HttpReceiver` or a `SocketModeReceiver` depending on the value of the `socketMode` argument.

| Option | Description |
| :---: | :--- |
Expand Down
18 changes: 10 additions & 8 deletions examples/deploy-aws-lambda/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,14 @@ const awsLambdaReceiver = new AwsLambdaReceiver({
const app = new App({
token: process.env.SLACK_BOT_TOKEN,
receiver: awsLambdaReceiver,
// The `processBeforeResponse` option is required for all FaaS environments.
// It allows Bolt methods (e.g. `app.message`) to handle a Slack request
// before the Bolt framework responds to the request (e.g. `ack()`). This is
// important because FaaS immediately terminate handlers after the response.
processBeforeResponse: true

// When using the AwsLambdaReceiver, processBeforeResponse can be omitted.
// If you use other Receivers, such as ExpressReceiver for OAuth flow support
// then processBeforeResponse: true is required. This option will defer sending back
// the acknowledgement until after your handler has run to ensure your function
// isn't terminated early by responding to the HTTP request that triggered it.

// processBeforeResponse: true
});

// Listens to incoming messages that contain "hello"
Expand Down Expand Up @@ -43,10 +46,9 @@ app.message('hello', async ({ message, say }) => {

// Listens for an action from a button click
app.action('button_click', async ({ body, ack, say }) => {
await say(`<@${body.user.id}> clicked the button`);

// Acknowledge the action after say() to exit the Lambda process
await ack();

await say(`<@${body.user.id}> clicked the button`);
});

// Listens to incoming messages that contain "goodbye"
Expand Down

0 comments on commit 9d4fd93

Please sign in to comment.