見出し画像

「秒」で投稿チェックを行うために、管理画面のないオペレーションを構築しました

秒.work では、管理画面のない、Slackで完結するオペレーションフローが構築されています。なので、スマートフォンしかない時でも、すばやく投稿の確認を行うことができます。

この記事では、どのようにしてSlack上で完結するオペレーションを実現したのかを軽く紹介したいと思います。

Block Kitによるインタラクティブなメッセージの投稿

Slack上で、ボタンなどによって反応することができる投稿を行うには、Block Kitを使用します。

このBlock Kitによって、投稿を許可するか拒否するかをボタンによって制御できれば、管理画面の存在しないSlackで完結するオペレーションが実現できそうです。

画像1

具体的には、次のようなJSONをSlackにPOSTしています。

{
  "blocks": [
    {
      "type": "image",
      "image_url": "https://storage.googleapis.com/byouwork-ogp-production/223929cf-abf9-4694-8461-43029710a796",
      "alt_text": "image1"
    },
    {
      "type": "actions",
      "elements": [
        {
          "type": "button",
          "text": {
            "type": "plain_text",
            "text": "許可"
          },
          "style": "primary",
          "value": "post_id",
          "action_id": "post_accepted"
        },
        {
          "type": "button",
          "text": {
            "type": "plain_text",
            "text": "許可しない"
          },
          "style": "danger",
          "value": "post_id",
          "action_id": "post_rejected"
        }
      ]
    }
  ]
}

↑ Block Kit Builder で上記JSONをPOSTしたときにどう見えるかのURLになっています。

ここでのポイントは、button action の value に投稿のIDを、action_id にどのようなボタンが押されたのかが分かるように含めておくことです。

SlackからのCallbackを受け取って解析

上記JSONはSlack Appから投稿するのですが、その投稿の button が押されたことを知るために、Callback URL を設定する必要があります。

画像2

すると、指定したURLにCallbackとして以下のドキュメントにある通りのJSONが返ってきます。

このCallbackによって、誰がボタンを押したか押されたボタンはどれかどの投稿に対してボタンが押されたか元の投稿のtimestampを知ることができます。この4つが重要です。

callbackを受けとると、その内容を解析して以下のことを行います。

1. callbackを解析して、どの投稿が許可または拒否されたかを判定する

2. 許可された場合、Twitterに投稿する

3. 投稿してくれたユーザーにDMを送信する

4. Slackの投稿をtimestampを元にして、誰が操作したかの表示に書き換える

これは、オファーについても同様のことを行っています。

このようにして、管理画面のない、秒で操作可能なオペレーションフローを構築しています。おそらく投稿の許可/拒否に最長でも5分はかかってないのではないでしょうか。

実際に自分が許可/拒否の操作をする側になると、この方針はとても便利です。簡単なオペレーションのフローは、Slack上で完結できるように構築することをオススメします!


この記事が気に入ったら、サポートをしてみませんか?気軽にクリエイターを支援できます。

note.user.nickname || note.user.urlname

投げ銭していただけるととても嬉しいです

帰って寝たい
コメントを投稿するには、 ログイン または 会員登録 をする必要があります。