utilitiesbeginner5 min setupby Mantle

Internal request form to a Slack channel

A public request form posts every submission into a Slack channel, formatted and ready to pick up.

Request formPost to #request

Drag to pan, pinch to zoom. This is the real graph the template installs.

Purpose

A public request form posts every submission into a Slack channel, formatted and ready to pick up.

How it works

What it does

  • Publishes a four-field request form at /forms/{your-tenant}/internal-request.
  • Every submission is posted to a Slack channel with the requester, the type and the details.

Validation

This template is contract-validated: the unit suite checks every node type, every config key and the whole graph against the same rules a saved workflow passes. It has not been run against the live provider — the ids, names and columns below are placeholders to replace with your own.

Nodes 2

  1. 01Request formtrigger.formTrigger
  2. 02Post to #requestsslack.post_messageApp
View template JSON
{
  "format": "mantle-workflow/v1",
  "id": "slack-form-request-to-channel",
  "name": "Internal request form to a Slack channel",
  "graph": {
    "nodes": [
      {
        "id": "form",
        "type": "trigger.form",
        "label": "Request form",
        "config": {
          "slug": "internal-request",
          "title": "Submit a request",
          "description": "Tell us what you need and we will pick it up in Slack.",
          "submit_label": "Send request",
          "response_message": "Thanks — the team has it.",
          "fields": [
            {
              "name": "requester",
              "label": "Your name",
              "type": "text",
              "required": true
            },
            {
              "name": "email",
              "label": "Email",
              "type": "email",
              "required": true
            },
            {
              "name": "kind",
              "label": "Type",
              "type": "select",
              "options": [
                "Access",
                "Bug",
                "Data",
                "Other"
              ],
              "required": true
            },
            {
              "name": "details",
              "label": "Details",
              "type": "textarea",
              "required": true
            }
          ]
        },
        "worker_type": "generic-worker",
        "position": {
          "x": 60,
          "y": 220
        }
      },
      {
        "id": "post",
        "type": "slack.post_message",
        "label": "Post to #requests",
        "config": {
          "channel": "#requests",
          "text": "*New {{ $json.kind }} request* from {{ $json.requester }} ({{ $json.email }})\n\n{{ $json.details }}"
        },
        "worker_type": "generic-worker",
        "position": {
          "x": 380,
          "y": 220
        }
      }
    ],
    "edges": [
      {
        "from": "form",
        "to": "post"
      }
    ]
  }
}

Requirements

The connections and permissions each step needs, from the node contracts in the catalog.

  • SlackAPI key

    Used by Post to #requests.

    Credential: the bot token (xoxb-…), or {"token": "xoxb-…"}

    • The bot must be a member of a private channel before it can post there (Slack error not_in_channel otherwise).

Setup

  • Pick a Slack connection on Post to #requests and set channel to your channel (a #name or a channel id). The bot has to be in the channel.
  • Edit the form's fields to match what you actually need; the message text reads them by name.

Sample input and output

Synthetic examples: node-contract samples or placeholders, never customer data.

Input

One form submission. Values are placeholders.

{
  "requester": "<Your name>",
  "email": "person@example.com",
  "kind": "Access",
  "details": "<Details>"
}

Output

Post to #requests slack.post_message

{
  "channel": "",
  "ok": true,
  "ts": ""
}

Failure handling

What the graph does when a step fails, read from its retry settings, error branches and error policies.

  • A step that fails, after any retries, fails the run. The failed step is kept with its input and error.

See it run, then make it yours.

Templates install as drafts. Edit any step, and Workflow Health re-checks the graph on every save.