Schedule Mattermost messages

Post to a Mattermost channel on a schedule, on Mattermost Cloud or your own server. cronservices sends the message through an incoming webhook and can fill it in from any API first.

Example: nightly build status

json
{
  "name": "Nightly build status",
  "cron": { "expression": "30 6 * * *", "time_zone": "UTC" },
  "nodes": [
    { "id": "build", "request": { "method": "GET", "endpoint": "https://ci.example.com/api/builds/latest?branch=main", "credential_id": "YOUR_CI_TOKEN_ID" } },
    { "id": "post", "mattermost_send_message": {
        "webhook_url": "https://chat.example.com/hooks/xjw7c9r4ofbx3ga6h1k8mzqp5e",
        "text": "Nightly build #{{ $.number }}: **{{ $.status }}** in {{ $.duration_minutes }} min",
        "username": "ci-bot" } }
  ]
}

Set up

In Mattermost, open Integrations → Incoming Webhooks → Add Incoming Webhook, choose the channel, and copy the URL into webhook_url. To set username, the server must allow integrations to override usernames.

Reference

Send a Mattermost message: mattermost_send_message

Sends POST to the incoming webhook URL with {"text": …}. Output for the next step: The text ok.

Field Type Notes
webhook_url string, required An incoming webhook, https://<your server>/hooks/<id>.
text string, required Markdown, up to 16,383 characters. Placeholders allowed.
username string Overrides the webhook’s name, if the server allows it.

More ideas

  • A weekly on-call handoff note from PagerDuty.
  • A daily reminder to review open merge requests.
  • A monthly security patch reminder on the second Tuesday: 0 9 * * TUE#2.