> ## Documentation Index
> Fetch the complete documentation index at: https://docs.b3os.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Webhook to Slack

Build a workflow that receives an external event, formats it, and sends a Slack alert.

Use this when another product can send HTTP events and your team wants a structured Slack notification with run history in B3OS.

**Get a Slack Alert Every Time a Vendor Pays Your Coinbase Invoice**

## Pattern

```text
manual/webhook trigger -> format -> Slack message -> optional webhook response
```

**Webhook to Slack flow**

**External event**
  **Webhook trigger**
  **Format alert**
  **Slack message**
  **POST**
  **trigger body**
  **formatted text**

## Build Steps

**Create a manual trigger**

Use the `manual` trigger with an input schema that matches the event body you expect to receive.
  **Format the alert**

Add the `format` action and reference trigger fields such as `{{$trigger.body.customerId}}`, `{{$trigger.body.amount}}`, and `{{$trigger.body.status}}`.
  **Send the Slack message**

Add a Slack message action, attach the Slack connector, and use the formatted output as message text.
  **Publish and copy the webhook URL**

Publish the workflow, then use the workflow run URL or public execution URL appropriate for your integration surface.

## Example Nodes

```json
{
  "nodes": {
    "root": {
      "type": "manual",
      "payload": {
        "inputSchema": {
          "type": "object",
          "required": ["customerId", "amount"],
          "properties": {
            "customerId": { "type": "string" },
            "amount": { "type": "number" },
            "status": { "type": "string" }
          }
        }
      },
      "children": ["format_alert"]
    },
    "format_alert": {
      "type": "format",
      "payload": {
        "data": {
          "customerId": "{{$trigger.body.customerId}}",
          "amount": "{{$trigger.body.amount}}",
          "status": "{{$trigger.body.status}}"
        },
        "template": "Customer {{@customerId}} status {{@status}} for {{@amount}}"
      },
      "children": ["send_slack"]
    },
    "send_slack": {
      "type": "slack-send-message",
      "connector": {
        "type": "slack",
        "id": "conn_slack"
      },
      "payload": {
        "channelId": "C0123456789",
        "text": "{{$nodes.format_alert.result.formatted}}"
      },
      "children": []
    }
  }
}
```

## Production Checks

| Check | Requirement |
| --- | --- |
| Input schema matches the sender | Required fields are explicit and optional fields have fallback behavior. |
| Connector is attached | The Slack connector belongs to the same organization and has access to the target channel. |
| Failure path is visible | Add an execution webhook or monitoring alert for failed deliveries. |