Skip to main content

We use cookies for essential site functions and anonymous analytics. Choose what to allow.

Accepts all cookies and closes this banner
Reject All
Back to Insights
Communication AutomationGuide

Fly.io and Microsoft Teams: How to Route Deploy Notifications Without Native Webhooks

Fly.io is CLI-first with no Slack or Teams integration. How to send deploy results and health alerts to both from GitHub Actions, and where a bridge fits.

Published
Updated
7 min read
Kumar Makala

Kumar Makala is the founder of SyncRivo, a messaging interoperability platform that bridges Slack, Microsoft Teams, Google Chat, Webex and Zoom Team Chat.

Fly.io and Microsoft Teams: How to Route Deploy Notifications Without Native Webhooks

Fly.io sits in a unique position among modern PaaS platforms: it is genuinely CLI-first, with no dashboard-based notification system comparable to Railway's built-in webhook configuration, Render's outgoing webhook settings, or Heroku's webhook delivery infrastructure.

This is a deliberate product decision — Fly.io optimizes for developer experience at the CLI (flyctl), not for dashboard-driven notification management. The result is that Fly.io has no native Slack integration and no native Teams integration. Deployment notifications must be emitted from your CI/CD pipeline.

The Fly.io Notification Gap

When you deploy to Railway, you can configure webhook notifications directly in Railway's dashboard — a single URL that receives DEPLOY_SUCCESS, DEPLOY_FAILURE, DEPLOY_CRASHED, and SERVICE_CRASHED events without any pipeline changes.

When you deploy to Render, you configure webhooks in Render's Account Settings → Notifications panel. Render pushes Deploy Live, Deploy Failed, Service Suspended, and Custom Alert payloads to your endpoint automatically.

When you deploy to Fly.io, there is no equivalent dashboard-based webhook. Fly.io fires no notification events to any external endpoint automatically. If you want deploy notifications, you must emit them yourself from wherever "fly deploy" runs.

The GitHub Actions Pattern

The most common Fly.io deployment pattern uses GitHub Actions with flyctl as the deployment runner. The standard workflow looks like this:

- name: Deploy to Fly.io
  uses: superfly/flyctl-actions/setup-flyctl@master
- run: flyctl deploy --remote-only
  env:
    FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }}

To add notifications, append steps with GitHub's if: success() and if: failure() conditions that POST to a Slack incoming webhook and to a Teams incoming-webhook or Workflows URL. Store both URLs as repository secrets:

- name: Notify Slack and Teams on failure
  if: failure()
  run: |
    curl -X POST ${{ secrets.SLACK_WEBHOOK_URL }} \
      -H "Content-Type: application/json" \
      -d '{"text":"Deploy failed: ${{ env.FLY_APP }} (${{ github.ref_name }} @ ${{ github.sha }})"}'
    curl -X POST ${{ secrets.TEAMS_WEBHOOK_URL }} \
      -H "Content-Type: application/json" \
      -d '{"text":"Deploy failed: ${{ env.FLY_APP }} (${{ github.ref_name }} @ ${{ github.sha }})"}'

Add a matching if: success() step for the success message if your team wants it. The exact JSON shape depends on the Teams flow you set up; the Slack incoming webhook accepts the simple text field shown.

SyncRivo is not one of these targets. It has no inbound webhook endpoint for pipeline events, no per-environment or per-severity routing rules, and it does not relay messages posted by bots or apps.

Machine Health Monitoring

Fly.io's proxy runs health checks on deployed Machines, restarting them automatically on failure. But Fly does not fire an external notification when a Machine restarts or crashes — you are not alerted unless you have external monitoring.

The reliable approach: configure an external uptime monitoring tool (Better Uptime, Grafana Synthetic Monitoring, UptimeRobot Pro) to watch your Fly app's health endpoint, and use that tool's own Slack and Teams notification channels so both platforms are alerted when the check returns non-200.

Where SyncRivo Fits (and Where It Doesn't)

What SyncRivo bridges is the human conversation around the deploy. Connect the engineering Slack channel where the failure alert lands to the Teams channel where the engineering lead or the on-call manager works, and the exchange that follows — "rolling back", "which commit", "customer-facing?" — is visible on both platforms, in both directions, with threads, edits, files, and @mentions kept in sync. Each channel still gets the notification from the pipeline step above.

When Fly.io's Model Makes Sense

Fly.io's CLI-first philosophy has real advantages for engineering teams who deploy frequently and don't want platform-imposed notification complexity. For teams already using GitHub Actions as the deployment runtime, adding two curl steps is minimal overhead.

Full setup guide: Fly.io Deploy Notifications in Slack & Teams

Bridge your messaging platforms without migrating

Connect Slack, Teams, Google Chat, Webex, and Zoom with any-to-any routing. No guest accounts. No migration. BAA available for Enterprise.