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

# Send interactive

> Send interactive WhatsApp messages

Sends interactive messages (buttons, lists, CTAs) to users via WhatsApp.

Free-form carousel interactive messages are not available in workflow
`send_interactive` nodes. Use the Meta proxy or TypeScript SDK message API for
`interactive.type = "carousel"`.

## Configuration

* `whatsapp_config_id`: WhatsApp connection to use (optional; falls back to the conversation)
* `phone_number_id`: WhatsApp Business phone number ID to use (preferred for local/API source)
* `interactive_type`: button, list, cta\_url, flow, product, product\_list, catalog\_message, location\_request\_message
* `body_text`: Message content (string or AIField)
* `header_type`: none, text, image, video, document (optional)
* `header_text`: Header text for text headers (optional)
* `header_media_url`: Media URL for image/video/document headers (optional)
* `footer_text`: Footer text (optional)
* `provider_model_name`: Required when using AIField
* `to_phone_number`: Override destination phone number (optional; required for observer mode flows)

Type-specific options:

* `buttons`: For button type
* `list_button_text`, `list_sections`: For list type
* `cta_display_text`, `cta_url`: For cta\_url type
* `flow_id`, `flow_cta`, `flow_token`, `flow_action`, `flow_action_payload`: For flow type

## Workflow library example

```javascript theme={null}
workflow.addNode("show_menu", {
  type: "send_interactive",
  interactiveType: "button",
  phoneNumberId: "<phone-number-id>",
  bodyText: "What do you need help with?",
  buttons: [
    { id: "billing", title: "Billing" },
    { id: "support", title: "Support" }
  ]
});
```

### Flow type options

* `flow_id`: The WhatsApp Flow ID to send
* `flow_cta`: Button text to open the flow
* `flow_token`: Correlation ID for tracking responses (supports variable interpolation; defaults to flow\_id if not provided)
* `flow_action`: Action to perform when opening the flow - `navigate` (default) or `data_exchange`
* `flow_action_payload`: Initial screen and data to pass to the flow (supports variable interpolation)

Example with dynamic data:

```json theme={null}
{
  "node_type": "send_interactive",
  "config": {
    "interactive_type": "flow",
    "body_text": "Complete your checkout",
    "flow_id": "123456789012345",
    "flow_cta": "Continue",
    "flow_token": "order_{{vars.order_id}}",
    "flow_action": "navigate",
    "flow_action_payload": {
      "screen": "CHECKOUT",
      "data": {
        "phone_number": "{{context.phone_number}}",
        "order_total": "{{vars.cart_total}}"
      }
    }
  }
}
```

Variables like `{{context.phone_number}}`, `{{vars.cart_total}}`, and `{{vars.order_id}}` are automatically substituted with values from the workflow execution context. Use dynamic `flow_token` values to correlate flow responses with specific workflow instances or business entities.

## Interactive types

* **button**: Up to 3 reply buttons
* **list**: Dropdown menu with sections
* **cta\_url**: Single button that opens URL
* **flow**: WhatsApp Flow for data collection
* **product**: Single product from catalog
* **product\_list**: Multiple products from catalog
* **catalog\_message**: Full catalog browser
* **location\_request\_message**: Request user's current location

## Usage patterns

**Decision collection**

```mermaid theme={null}
graph LR
    A[Send interactive<br/>Button choices] --> B[Wait for Response]
    B --> C[Decide<br/>Route by selection]
```

**Menu system**

```mermaid theme={null}
graph LR
    A[Send interactive<br/>Main menu] --> B[Wait] --> C[Send interactive<br/>Submenu]
```
