Skip to content

Commit

Permalink
Fix #985: Update "acknowledging events" code snippet (#997)
Browse files Browse the repository at this point in the history
* Modify code snippet for modal input validation
* Simplify view's callback_id listener
* Modify code snippet for modal input validation, matching English changes
  • Loading branch information
zimeg authored Jul 8, 2021
1 parent 7d04f5d commit 260acde
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 18 deletions.
21 changes: 12 additions & 9 deletions docs/_basic/acknowledging_requests.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,26 +6,29 @@ order: 7
---

<div class="section-content">
Actions, commands, and options events must **always** be acknowledged using the `ack()` function. This lets Slack know that the event was received and updates the Slack user interface accordingly. Depending on the type of event, your acknowledgement may be different. For example, when acknowledging a dialog submission you will call `ack()` with validation errors if the submission contains errors, or with no parameters if the submission is valid.
Actions, commands, and options events must **always** be acknowledged using the `ack()` function. This lets Slack know that the event was received and updates the Slack user interface accordingly. Depending on the type of event, your acknowledgement may be different. For example, when acknowledging a modal submission you will call `ack()` with validation errors if the submission contains errors, or with no parameters if the submission is valid.

We recommend calling `ack()` right away before sending a new message or fetching information from your database since you only have 3 seconds to respond.
</div>

```javascript
// Regex to determine if this is a valid email
let isEmail = /^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/
// This uses a constraint object to listen for dialog submissions with a callback_id of ticket_submit
app.action({ callback_id: 'ticket_submit' }, async ({ action, ack }) => {
// it’s a valid email, accept the submission
if (isEmail.test(action.submission.email)) {
// This uses a constraint object to listen for modal submissions with a callback_id of ticket_submit
app.view('ticket_submit', async ({ ack, view }) => {
// get the email value from the input block with `email_address` as the block_id
const email = view.state.values['email_address']['input_a'].value;

// if it’s a valid email, accept the submission
if (isEmail.test(email)) {
await ack();
} else {
// if it isn’t a valid email, acknowledge with an error
await ack({
errors: [{
"name": "email_address",
"error": "Sorry, this isn’t a valid email"
}]
"response_action": "errors",
errors: {
"email_address": "Sorry, this isn’t a valid email"
}
});
}
});
Expand Down
21 changes: 12 additions & 9 deletions docs/_basic/ja_acknowledging_requests.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,26 +6,29 @@ order: 7
---

<div class="section-content">
アクション(action)、コマンド(command)、およびオプション(options)イベントは、**必ず** `ack()` 関数を用いて確認する必要があります。これにより Slack 側にイベントが正常に受信されたことを知らせることができ、それに応じて Slack のユーザーインターフェイスが更新されます。イベントのタイプによっては、確認の通知方法が異なる場合があります。たとえば、ダイアログの送信を確認するとき、送信内容にエラーがあればバリデーションエラーとともに `ack()` を呼び出しますが、送信内容が問題なければ、そのようなパラメータなしで `ack()` を呼び出します。
アクション(action)、コマンド(command)、およびオプション(options)イベントは、**必ず** `ack()` 関数を用いて確認する必要があります。これにより Slack 側にイベントが正常に受信されたことを知らせることができ、それに応じて Slack のユーザーインターフェイスが更新されます。イベントのタイプによっては、確認の通知方法が異なる場合があります。たとえば、モーダルの送信を確認するとき、送信内容にエラーがあればバリデーションエラーとともに `ack()` を呼び出しますが、送信内容が問題なければ、そのようなパラメータなしで `ack()` を呼び出します。

この `ack()` による応答は 3 秒以内に行う必要があります。新しいメッセージの送信や、データベースからの情報の取得などを行う前に、リクエストを受けてすぐに `ack()` を呼び出して応答を返してしまうことをおすすめします。
</div>

```javascript
// Regex でメールアドレスが有効かチェック
let isEmail = /^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/
// 制約付きのオブジェクト を使用して ticket_submit という callback_id を持つダイアログ送信をリッスン
app.action({ callback_id: 'ticket_submit' }, async ({ action, ack }) => {
// メールアドレスが有効。ダイアログを受信
if (isEmail.test(action.submission.email)) {
// 制約付きのオブジェクト を使用して ticket_submit という callback_id を持つモーダル送信をリッスン
app.view('ticket_submit', async ({ ack, view }) => {
// block_id が `email_address` の input ブロックからメールアドレスを取得
const email = view.state.values['email_address']['input_a'].value;

// メールアドレスが有効。モーダルを受信
if (isEmail.test(email)) {
await ack();
} else {
// メールアドレスが無効。エラーを確認
await ack({
errors: [{
"name": "email_address",
"error": "Sorry, this isn’t a valid email"
}]
"response_action": "errors",
errors: {
"email_address": "Sorry, this isn’t a valid email"
}
});
}
});
Expand Down

0 comments on commit 260acde

Please sign in to comment.