Dex Bot

Digital Experience チームの Slack アプリケーション

Digital Experience チームは、チームへの重要なメッセージとアラートを自動化するための Slack アプリケーションを作成しました。アプリの設定はこちらで確認できます。

コラボレーター

現在、このアプリケーションは Digital Experience チームの次のメンバーによって管理されています:

Contentful 連携

現在、このボットの主な用途は、CMS プラットフォーム上でメインページのいずれかが変更された際にチームに通知することです。これにより次の情報を含むメッセージがチームへ送信されます:

  • エントリータイトル
  • 変更を行ったユーザーのユーザー ID
  • 更新時刻
  • エントリー ID
  • 変更後のエントリーバージョン

また、CMS で前のバージョンとの比較を開くボタンも含まれています。

DexBot Message

この連携は 2 つの Webhook を使用して行われています:

Contentful Webhook は、エントリー情報を含むカスタムペイロードを Slack Webhook へ送信するように設定されており、それが Slack ボットからのメッセージをトリガーします。このメッセージは Slack の dex-alerts チャンネルへ送信されます。

Slack Block

送信されるメッセージは、Slack の Block システム を使って作成されました。これは事前構築された Slack UI コンポーネントを使ってメッセージを構造化し、入力やボタンの形でインタラクティビティを追加するものです。これは JSON 形式で構築されています。CMS アラートメッセージで使用されているペイロードは次のとおりです:

{
  "blocks": [
    {
      "type": "header",
      "text": {
        "type": "plain_text",
        "text": "Monitored page content updated",
        "emoji": true
      }
    },
    {
      "type": "section",
      "text": {
        "type": "plain_text",
        "emoji": true,
        "text": "Entry title: {/payload/fields/title/en-US}"
      }
    },
    {
      "type": "divider"
    },
    {
      "type": "section",
      "text": {
        "type": "mrkdwn",
        "text": "*Updated by user:* {/payload/sys/updatedBy/sys/id} \n\n *Update time:* {/payload/sys/updatedAt} \n\n *Entry ID:* {/payload/sys/id} \n\n *Version*: {/payload/sys/revision}"
      },
      "accessory": {
        "type": "image",
        "image_url": "https://assets.stickpng.com/images/5a81af7d9123fa7bcc9b0793.png",
        "alt_text": "calendar thumbnail"
      }
    },
    {
      "type": "divider"
    },
    {
      "type": "section",
      "text": {
        "type": "mrkdwn",
        "text": "View changes in Contentful"
      },
      "accessory": {
        "type": "button",
        "text": {
          "type": "plain_text",
          "text": "View changes",
          "emoji": true
        },
        "url": "https://app.contentful.com/spaces/{/payload/sys/space/sys/id}/entries/{/payload/sys/id}/compare"
      }
    }
  ]
}