Orkes logo image
Product
Platform
Orkes Platform thumbnail
Orkes Platform
Orkes Agentic Workflows
Orkes Conductor Vs Conductor OSS thumbnail
Orkes vs. Conductor OSS
Orkes Cloud
How Orkes Powers Boat Thumbnail
How Orkes Powers BOAT
Try enterprise Orkes Cloud for free
Enjoy a free 14-day trial with all enterprise features
Start for free
Capabilities
Microservices Workflow Orchestration icon
Microservices Workflow Orchestration
Enable faster development cycles, easier maintenance, and improved user experiences.
Realtime API Orchestration icon
Realtime API Orchestration
Enable faster development cycles, easier maintenance, and improved user experiences.
Event Driven Architecture icon
Event Driven Architecture
Create durable workflows that promote modularity, flexibility, and responsiveness.
Human Workflow Orchestration icon
Human Workflow Orchestration
Seamlessly insert humans in the loop of complex workflows.
Process orchestration icon
Process Orchestration
Visualize end-to-end business processes, connect people, processes and systems, and monitor performance to resolve issues in real-time
Use Cases
By Industry
Financial Services icon
Financial Services
Secure and comprehensive workflow orchestration for financial services
Media and Entertainment icon
Media and Entertainment
Enterprise grade workflow orchestration for your media pipelines
Telecommunications icon
Telecommunications
Future proof your workflow management with workflow orchestration
Healthcare icon
Healthcare
Revolutionize and expedite patient care with workflow orchestration for healthcare
Shipping and logistics icon
Shipping and Logistics
Reinforce your inventory management with durable execution and long running workflows
Software icon
Software
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean leo mauris, laoreet interdum sodales a, mollis nec enim.
Docs
Developers
Learn
Blog
Explore our blog for insights into the latest trends in workflow orchestration, real-world use cases, and updates on how our solutions are transforming industries.
Read blogs
Check out our latest blog:
Conductor CLI Guide: Register, Run, Retry, and Recover Durable Workflows Without Leaving Your Terminal 💻
Customers
Discover how leading companies are using Orkes to accelerate development, streamline operations, and achieve remarkable results.
Read case studies
Our latest case study:
Twilio Case Study Thumbnail
Orkes Academy New!
Master workflow orchestration with hands-on labs, structured learning paths, and certification. Build production-ready workflows from fundamentals to Agentic AI.
Explore courses
Featured course:
Orkes Academy Thumbnail
Events icon
Events
Videos icons
Videos
In the news icon
In the News
Whitepapers icon
Whitepapers
About us icon
About Us
Pricing
Get a demo
Signup
Slack FaviconDiscourse Logo icon
Get a demo
Signup
Slack FaviconDiscourse Logo icon
Orkes logo image

Company

Platform
Careers
HIRING!
Partners
About Us
Legal Hub
Security

Product

Cloud
Platform
Support

Community

Docs
Blogs
Events

Use Cases

Microservices Workflow Orchestration
Realtime API Orchestration
Event Driven Architecture
Agentic Workflows
Human Workflow Orchestration
Process Orchestration

Compare

Orkes vs Camunda
Orkes vs BPMN
Orkes vs LangChain
Orkes vs Temporal
Twitter or X Socials linkLinkedIn Socials linkYouTube Socials linkSlack Socials linkGithub Socials linkFacebook iconInstagram iconTik Tok icon
© 2026 Orkes. All Rights Reserved.
Back to Blogs

Table of Contents

Share on:Share on LinkedInShare on FacebookShare on Twitter
Worker Code Illustration

Get Started for Free with Dev Edition

Signup
Back to Blogs
AGENTIC ENGINEERING

Enterprise Uptime Guardrails: Build a Website Health Checker Workflow (HTTP Checks + Inline Logic + SMS Alerts)

Maria Shimkovska
Maria Shimkovska
Content Engineer
Last updated: December 2, 2025
December 2, 2025
5 min read

Related Blogs

Build an AI-Powered Loan Risk Assessment Workflow (with Sub-Workflows + Human Review)

Dec 4, 2025

Build an AI-Powered Loan Risk Assessment Workflow (with Sub-Workflows + Human Review)

Vector Databases 101: A Simple Guide for Building AI Apps with Conductor

Nov 26, 2025

Vector Databases 101: A Simple Guide for Building AI Apps with Conductor

Orkes Conductor Embeddings Explained: The Tasks Behind Semantic Search & AI Workflows

Nov 25, 2025

Orkes Conductor Embeddings Explained: The Tasks Behind Semantic Search & AI Workflows

Ready to Build Something Amazing?

Join thousands of developers building the future with Orkes.

Start for free

Cover illustration for the workflow of Website Health Checker.

Section 1: Enterprise Use Cases

Use Cases in Banking

In banking, website health checks are crucial for ensuring customers can access services and complete transactions. If the login page, or customer portal, or a payment initiation endpoint goes down, customers can't access account and transfers may fail. This can lead to contact centers getting overwhelmed fast and customers potentially losing trust in the bank. And even short outages can trigger reputational damage and mistrust.

So this workflow acts like a lightweight guardrail for critical endpoints like:

  • https://bank.com/login
  • https://bank.com/api/auth/health
  • https://bank.com/api/payments/health

It answers the question:
"Can our customers authenticate and reach our banking services right now. And if not, can we page the on-call team immediately so we can fix it?"

Use Cases in E-Commerce

In e-commerce, a health check like this protects revenue on the checkout path. Yes, it does also prevent users from getting annoyed when the website is down, but from a business perspective you do want to make sure that nothing interrupts the checkout flow and it's smooth and pleasant for users.

If a checkout page or payments endpoint or a cart API become unhealthy, sales can drop immediately. Having an automated workflow to detect failures early and paging the right team before customers complain is critical for any successful ecommerce business.

Here are example endpoints this workflow can monitor and be a guardrail for:

  • https://shop.com/checkout
  • https://shop.com/api/cart/health
  • https://shop.com/api/payments/health

Like in the previous example, it answers a similar question: "Can our customers complete their purchase right now? If not, we need to alert the on-call team immediately with enough context to act quickly."

What “healthy” means (in this workflow)

To keep things simple and predictable, “healthy” here is based on HTTP status codes only.

If the website returns any status code in the 200–299 range, we treat that as healthy. Anything else (including errors and timeouts) is treated as unhealthy and will trigger an on-call page (SMS via Twilio in this example).

Later, if you want, you can expand this in a bunch of directions too. For example, you can add response-time thresholds (“it’s technically up but it’s very slow”), content checks (“it’s up but the page is serving the wrong thing”), SSL/redirect checks (“the endpoint is up but it’s redirecting somewhere sketchy or the cert is expired”), and preventing duplicate alerts (“don’t text me every minute while it’s still down”).

But for a starter workflow, status codes are a really solid baseline for this example.

Section 2: How to Build It

This section walks through the workflow tasks and how the data flows between them. Like in my other examples, the goal isn’t just to show you what tasks are used, but why they’re wired this way.

At a high level, this workflow has three phases:

  1. Check the site (HTTP task)
  2. Turn the response into a clear decision (INLINE JavaScript logic)
  3. If unhealthy, send an SMS (HTTP task to Twilio), using a Switch to route execution

What the workflow looks like

The workflow starts by calling your website URL. Then it evaluates what came back. And if the outcome is “this looks bad,” it branches into the SMS alert path.

A nice thing about doing it this way (instead of doing everything inside one big script) is that each step is easy to inspect. If you’re debugging later, you can open the workflow execution and immediately see where it failed and what the inputs/outputs were for that task.

Screenshot of the workflow and how it looks in the Developer Edition of Orkes Conductor

What Are the Inputs for the workflow?

Here’s what you pass into the workflow execution:

  • websiteUrl — the website URL to check (ex: https://example.com/health)
  • twilioAccountSid — your Twilio Account SID
  • twilioAuthToken — your Twilio auth token (used for Basic auth)
  • twilioPhoneNumber — the Twilio number sending the message
  • phoneNumber — the phone number to alert

What happens step by step?

1. Check Website (HTTP task)

The first task is check_website, and it’s a built-in Conductor HTTP task. It sends a GET request to whatever URL is passed into websiteUrl.

It’s configured with short timeouts (3 seconds for connection and 3 seconds for reading), which is usually what you want for a health check. If a site can’t respond quickly, you’d rather treat that as suspicious and alert sooner rather than later.

It also retries a couple times (retryCount: 2). That helps avoid false alarms from one-off network hiccups.

Key output used later: check_website_ref.output.response.statusCode

2. Evaluate Health (INLINE task)

Next comes evaluate_health, which is an INLINE task running a small JavaScript snippet (GraalJS). This is the “translator” step. It takes a raw status code and turns it into something more human friendly.

Instead of passing around “statusCode = 503” and forcing every downstream step to interpret that, this task produces a nice little result object that looks like:

json
{
  "healthy": true,
  "statusCode": 200,
  "message": "Website is healthy",
  "checkedAt": "2025-12-03T12:34:56.789Z"
}

Note: This step might feel “extra” at first, but it’s actually what makes the workflow easy to extend. Once you have a clean result object, you can add new alert paths later (Slack, email, PagerDuty, etc.) without rewriting how health is calculated.

Route based on health (SWITCH)

After we’ve got a clean healthy: true/false, the workflow runs a SWITCH task called check_if_unhealthy.

The SWITCH checks this expression:

js
$.healthy === false

If that evaluates to true (meaning: it’s unhealthy), the workflow takes the alert branch and sends an SMS. If it evaluates to false (meaning: it’s healthy), it just finishes without doing anything dramatic.

Send SMS Alert (Twilio HTTP call)

If we hit the unhealthy branch, the workflow runs send_sms_alert, which is another HTTP task. It calls Twilio’s Messages API endpoint and sends a text message to your phone.

The alert includes the status code, so at a glance you can tell whether it was a server error, a client error, etc.

Why Conductor?

You could do this as a tiny script, but scripts tend to turn into little snowballs that keep growing. Once you want retries, timeouts, branching, clean outputs, auditing, and easy extensions, Conductor gives you that structure without you needing to reinvent it each time.

Also: when something goes wrong, you can open the workflow execution and see exactly what happened. That’s the kind of boring reliability you actually want in anything ops-related.

Copy/Paste the workflow

With Conductor's UI you cam easily copy and paste a workflow definition and have it be built right in front of your eyes. It's super cool. Check it out. You can make a free account in our Developer Edition and copy/paste the following code in the code tab when you create a new workflow definition:

json
{
  "name": "website_health_checker",
  "description": "Monitors website health by checking HTTP response status and response time",
  "version": 1,
  "tasks": [
    {
      "name": "check_website",
      "taskReferenceName": "check_website_ref",
      "inputParameters": {
        "http_request": {
          "uri": "${workflow.input.websiteUrl}",
          "method": "GET",
          "connectionTimeOut": 3000,
          "readTimeOut": 3000
        }
      },
      "type": "HTTP",
      "decisionCases": {},
      "defaultCase": [],
      "forkTasks": [],
      "startDelay": 0,
      "joinOn": [],
      "optional": false,
      "defaultExclusiveJoinTask": [],
      "asyncComplete": false,
      "loopOver": [],
      "retryCount": 2,
      "onStateChange": {},
      "permissive": false
    },
    {
      "name": "evaluate_health",
      "taskReferenceName": "evaluate_health_ref",
      "inputParameters": {
        "evaluatorType": "graaljs",
        "expression": "var statusCode = $.statusCode; var isHealthy = (statusCode >= 200 && statusCode < 300); var result = { 'healthy': isHealthy, 'statusCode': statusCode, 'message': isHealthy ? 'Website is healthy' : 'Website is down or unhealthy', 'checkedAt': new Date().toISOString() }; result;",
        "statusCode": "${check_website_ref.output.response.statusCode}"
      },
      "type": "INLINE",
      "decisionCases": {},
      "defaultCase": [],
      "forkTasks": [],
      "startDelay": 0,
      "joinOn": [],
      "optional": false,
      "defaultExclusiveJoinTask": [],
      "asyncComplete": false,
      "loopOver": [],
      "onStateChange": {},
      "permissive": false
    },
    {
      "name": "check_if_unhealthy",
      "taskReferenceName": "check_if_unhealthy_ref",
      "inputParameters": {
        "healthy": "${evaluate_health_ref.output.result.healthy}"
      },
      "type": "SWITCH",
      "decisionCases": {
        "true": [
          {
            "name": "send_sms_alert",
            "taskReferenceName": "send_sms_alert_ref",
            "inputParameters": {
              "http_request": {
                "uri": "https://api.twilio.com/2010-04-01/Accounts/${workflow.input.twilioAccountSid}/Messages.json",
                "method": "POST",
                "headers": {
                  "Authorization": "Basic ${workflow.input.twilioAuthToken}",
                  "Content-Type": "application/x-www-form-urlencoded"
                },
                "body": {
                  "To": "${workflow.input.phoneNumber}",
                  "From": "${workflow.input.twilioPhoneNumber}",
                  "Body": "ALERT: Website ${workflow.input.url} is down! Status code: ${evaluate_health_ref.output.result.statusCode}"
                },
                "encode": "FORM_URL_ENCODED"
              }
            },
            "type": "HTTP",
            "decisionCases": {},
            "defaultCase": [],
            "forkTasks": [],
            "startDelay": 0,
            "joinOn": [],
            "optional": false,
            "defaultExclusiveJoinTask": [],
            "asyncComplete": false,
            "loopOver": [],
            "onStateChange": {},
            "permissive": false
          }
        ]
      },
      "defaultCase": [],
      "forkTasks": [],
      "startDelay": 0,
      "joinOn": [],
      "optional": false,
      "defaultExclusiveJoinTask": [],
      "asyncComplete": false,
      "loopOver": [],
      "evaluatorType": "javascript",
      "expression": "$.healthy === false",
      "onStateChange": {},
      "permissive": false
    }
  ],
  "inputParameters": [],
  "outputParameters": {},
  "schemaVersion": 2,
  "restartable": true,
  "workflowStatusListenerEnabled": false,
  "ownerEmail": "my@email.com",
  "timeoutPolicy": "TIME_OUT_WF",
  "timeoutSeconds": 3600,
  "variables": {},
  "inputTemplate": {},
  "enforceSchema": true,
  "metadata": {},
  "maskedFields": []
}

Conclusion

This workflow is a simple, practical starter for monitoring a website. It checks a URL, interprets the result with small inline logic, and alerts you only when things look unhealthy. It’s small enough to feel approachable, but it’s also built in a way that makes it easy to grow into something more production ready later.