# Atlassian Statuspage Inbound Webhook Script

**URL:** <https://forums.rocket.chat/t/atlassian-statuspage-inbound-webhook-script/16273>\
**Category:** Community Creations\
**Created:** [March 21, 2023, 7:15pm UTC](https://forums.rocket.chat/t/atlassian-statuspage-inbound-webhook-script/16273 "2023-03-21T19:15:26Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![elliot](https://sea1.discourse-cdn.com/flex021/user_avatar/forums.rocket.chat/elliot/32/4522_2.png) [@elliot](https://forums.rocket.chat/u/elliot)\
**Post date:** [March 21, 2023, 7:15pm UTC](https://forums.rocket.chat/t/atlassian-statuspage-inbound-webhook-script/16273/1 "2023-03-21T19:15:26Z")

</div>

I created this script when setting up an inbound webhook to get notifications from any status page built with Atlassian Statuspage:

```auto

const CHANNEL = "#incidents"

class Script {
  process_incoming_request({ request }) {
    console.log("Atlassian Statuspage Webhook Request", request.content)

    const incident = request.content.incident
    const latestUpdate = incident.incident_updates[0]

    return {
      content: {
        text: incident.name,
        channel: CHANNEL,
        attachments: [
          {
            color: getAttachmentColor(incident.status),
            title: s.humanize(incident.status),
            title_link: incident.shortlink,
            text: latestUpdate.body,
          },
        ],
      },
    }
  }
}

function getAttachmentColor(status) {
  switch (status) {
    case "identified":
    case "investigating":
    case "in_progress":
      return "#f4452a"
    case "verifying":
    case "monitoring":
    case "scheduled":
      return "#f4a02a"
    case "completed":
    case "resolved":
      return "#05b870"
    default:
      return "#c9d0d9"
  }
}

```

---

<div class="post-metadata">

**Author:** ![dudanogueira](https://sea1.discourse-cdn.com/flex021/user_avatar/forums.rocket.chat/dudanogueira/32/2529_2.png) [@dudanogueira](https://forums.rocket.chat/u/dudanogueira)\
**Post date:** [March 23, 2023, 5:31pm UTC](https://forums.rocket.chat/t/atlassian-statuspage-inbound-webhook-script/16273/2 "2023-03-23T17:31:34Z")

</div>

Thanks for sharing!!! 🤝

---

<div class="post-metadata">

**Author:** ![elliot](https://sea1.discourse-cdn.com/flex021/user_avatar/forums.rocket.chat/elliot/32/4522_2.png) [@elliot](https://forums.rocket.chat/u/elliot)\
**Post date:** [April 26, 2023, 4:16pm UTC](https://forums.rocket.chat/t/atlassian-statuspage-inbound-webhook-script/16273/4 "2023-04-26T16:16:43Z")

</div>

V2 with support for component updates as well as incident updates:

```auto
const CHANNEL = "#incidents"

class Script {
  process_incoming_request({ request }) {
    console.log("Atlassian Statuspage Webhook Request", request.content)

    const type = request.content.incident
      ? "incident"
      : request.content.component
      ? "component"
      : "unknown"

    switch (type) {
      case "incident": {
        const incident = request.content.incident
        const latestUpdate = incident.incident_updates[0]

        return {
          content: {
            text: incident.name,
            channel: CHANNEL,
            attachments: [
              {
                color: getAttachmentColor(incident.status),
                title: humanizeString(incident.status),
                title_link: incident.shortlink,
                text: latestUpdate.body,
              },
            ],
          },
        }
      }

      case "component": {
        const page = request.content.page
        const component = request.content.component
        return {
          content: {
            text: component.name,
            channel: CHANNEL,
            attachments: [
              {
                color: getAttachmentColor(component.status),
                fields: [
                  {
                    title: "Status",
                    value: humanizeString(component.status),
                    short: true,
                  },
                  {
                    title: "Details",
                    value: page.status_description,
                    short: false,
                  },
                ],
              },
            ],
          },
        }
      }
    }
  }
}

function getAttachmentColor(status) {
  switch (status) {
    case "identified":
    case "investigating":
    case "in_progress":
    case "partial_outage":
    case "major_outage":
      return "#f4452a"
    case "verifying":
    case "monitoring":
    case "scheduled":
    case "under_maintenance":
    case "degraded_performance":
      return "#f4a02a"
    case "operational":
    case "completed":
    case "resolved":
      return "#05b870"
    default:
      return "#c9d0d9"
  }
}

function humanizeString(string) {
  string = string
    .toLowerCase()
    .replace(/[_-]+/g, " ")
    .replace(/\s{2,}/g, " ")
    .trim()
  string = string.charAt(0).toUpperCase() + string.slice(1)
  return string
}

```
