4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

BoltでSlackアプリを作る際につまづきやすいこと

Posted at

最近BoltでSlackアプリを作成しています。
何気にいろんなつまづきポイントがあったので、まとめて行こうと思います。

Slackアプリ作成時につまづきやすいポイント

送信データを処理してくれない!

モーダルを開くところまでは実装できても、送信ができない...というケースがありました。

url: (56) Recv failure: Connection reset by peer

何かの操作に対してアプリがアクションを起こすには、 Interactivity & Shortcuts をオンにして
Request先のURLを登録する必要があります。

スクリーンショット 2021-06-24 18.40.03.png

特定の動作で弾かれる!

権限のスコープがうまく設定できていない可能性があります。
OAuth& PermissionsのScopesをチェックしましょう。
スクリーンショット 2021-06-24 18.42.23.png

ちなみに動作ベースで自動でスコープを追加する方法もあります。
Event SubscriptionsSubscribe to bot eventsから登録しましょう。
スクリーンショット 2021-06-24 18.44.16.png

Boltの記述で躓きやすいポイント

ackが返らずタイムエラーになる

BoltはAPIが走って3秒以内にackを実行しないとタイムエラーとなります。
基本的には処理の先頭に記述するようにします。

exports.default = (app) => {
  app.command('/register', async ({ ack, body, client }) => {
    await ack()

    try {
      const result = await client.views.open({
...

inputを必須に出来ない

slack apiドキュメントを読んでいて気づきました。
blockのtypeをsectionにしてしまうと、必須項目実装ができません。
必須にしたい場合はtypeをinputにする必要があるようです。

    try {
      const result = await client.views.open({
        ...// 略
          blocks: [
            {
              type: 'input',
              block_id: 'person',
              element: {
                type: 'users_select',
                placeholder: {
                  type: 'plain_text',
                  text: '田中 太郎',
                  emoji: true,
                },
                action_id: 'person',
              },
              label: {
                type: 'plain_text',
                text: '氏名',
                emoji: true,
              },
              optional: false // ここで必須・任意が切り替えられる
            },
            {

https://api.slack.com/reference/block-kit/blocks#input
スクリーンショット 2021-06-24 18.56.37.png

typeがinputだと上記のようにoptionalがありますが、

https://api.slack.com/reference/block-kit/blocks
スクリーンショット 2021-06-24 18.55.20.png

typeがsectionだと上記のようにaccessoryでinput系を選べるにも関わらず、optinalも存在しません。

blockを組み立てるのが難しい

Block Kit Builderがとても有能なので使いましょう。
直感的にbuildを組み立てることができます。
必須にする場合は前述の通りsectionを使わないように注意しましょう。

スクリーンショット 2021-06-24 18.59.40.png

4
2
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
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?