Skip to content
15 changes: 15 additions & 0 deletions apps/docs/components/icons.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2047,6 +2047,21 @@ export function TwilioIcon(props: SVGProps<SVGSVGElement>) {
)
}

export function SendblueIcon(props: SVGProps<SVGSVGElement>) {
return (
<svg {...props} viewBox='0 0 72 72' fill='none' xmlns='http://www.w3.org/2000/svg'>
<path
fill='currentColor'
d='M58.5425 5.19973C53.9872 5.19973 50.2944 8.89316 50.2944 13.4492C50.2944 18.0053 53.9872 21.6987 58.5425 21.6987C63.0978 21.6987 66.7906 18.0053 66.7907 13.4492C66.7907 8.89316 63.0978 5.19973 58.5425 5.19973Z'
/>
<path
fill='currentColor'
d='M0.0122017 36C0.0122012 41.6798 4.37038 46.3269 9.92916 46.8072C6.33936 51.07 6.54347 57.4463 10.5535 61.457C14.5635 65.4676 20.9387 65.6718 25.2008 62.0814C25.669 67.6411 30.3274 72 36.0062 72C41.685 72 46.3314 67.6411 46.8116 62.0814C51.0737 65.6718 57.4489 65.4676 61.4589 61.457C65.4689 57.4463 65.673 51.0701 62.0832 46.8072C67.642 46.3389 72.0002 41.6798 72.0002 36C72.0002 30.008 67.1378 25.1448 61.1468 25.1448C60.7266 25.1448 60.3183 25.1808 59.9101 25.2288C59.4659 25.2769 59.0097 25.2889 58.5415 25.2889C56.9927 25.2889 55.5159 24.9887 54.1713 24.4483C51.1458 23.2475 48.7446 20.8339 47.544 17.8199C47.0037 16.463 46.7035 14.986 46.7035 13.449C46.7035 12.9807 46.7155 12.5364 46.7636 12.0801C46.8116 11.6718 46.8476 11.2635 46.8476 10.8553C46.8476 4.86326 41.9852 1.65468e-05 35.9942 1.60229e-05C30.3154 1.55264e-05 25.669 4.35892 25.1888 9.91862C20.9267 6.32823 14.5515 6.53237 10.5415 10.543C6.53146 14.5537 6.32736 20.93 9.91715 25.1928C4.35837 25.6611 0.000195295 30.3202 0.000194799 36L0.0122017 36Z'
/>
</svg>
)
}

export function ImageIcon(props: SVGProps<SVGSVGElement>) {
return (
<svg
Expand Down
2 changes: 2 additions & 0 deletions apps/docs/components/ui/icon-mapping.ts
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,7 @@ import {
SapS4HanaIcon,
SESIcon,
SecretsManagerIcon,
SendblueIcon,
SendgridIcon,
SentryIcon,
SerperIcon,
Expand Down Expand Up @@ -392,6 +393,7 @@ export const blockTypeToIconMap: Record<string, IconComponent> = {
sap_concur: SapConcurIcon,
sap_s4hana: SapS4HanaIcon,
secrets_manager: SecretsManagerIcon,
sendblue: SendblueIcon,
sendgrid: SendgridIcon,
sentry: SentryIcon,
serper: SerperIcon,
Expand Down
1 change: 1 addition & 0 deletions apps/docs/content/docs/en/tools/meta.json
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,7 @@
"sap_concur",
"sap_s4hana",
"secrets_manager",
"sendblue",
"sendgrid",
"sentry",
"serper",
Expand Down
197 changes: 197 additions & 0 deletions apps/docs/content/docs/en/tools/sendblue.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,197 @@
---
title: Sendblue
description: Send and receive iMessage and SMS
---

import { BlockInfoCard } from "@/components/ui/block-info-card"

<BlockInfoCard
type="sendblue"
color="#008BFF"
/>

{/* MANUAL-CONTENT-START:intro */}
## Manual Description

Sendblue connects your agents to iMessage and SMS through your own dedicated phone number. Use it to text one person or a group, attach images and other media, check whether a number can receive iMessage before you send, show a typing indicator, and look up the delivery status of any message.

Authentication uses a Sendblue **API Key ID** and **API Secret Key**, sent as the `sb-api-key-id` and `sb-api-secret-key` headers. You can find both in your [Sendblue dashboard](https://dashboard.sendblue.com). Every message is sent from one of your registered Sendblue lines, supplied as the **From Number** in E.164 format (for example `+15551234567`).

**Operations**

- **Send Message** — send an iMessage or SMS to a single recipient. Provide message text, a media URL, or both, and optionally apply an iMessage expressive style (celebration, fireworks, lasers, confetti, and more).
- **Send Group Message** — send to multiple recipients at once. Pass one recipient per line; reuse the returned `group_id` to keep replying in the same thread.
- **Evaluate Service** — check whether a number is reachable on iMessage or only SMS, so you can branch before sending.
- **Send Typing Indicator** — show a recipient that a reply is being composed (one-to-one chats only).
- **Get Message** — retrieve a single message and its current status by message handle.

**Triggers**

- **Message Received** — fires on every inbound message. Configure it as the **Receive** webhook in your Sendblue dashboard.
- **Message Status Updated** — fires when an outbound message changes state (`SENT`, `DELIVERED`, `ERROR`). Configure it as the **Outbound** webhook, or pass its URL per message as `status_callback`.

Each trigger generates its own webhook URL — paste the matching URL into the corresponding field in your Sendblue dashboard.
{/* MANUAL-CONTENT-END */}


## Usage Instructions

Send iMessages and SMS to individuals or groups, check whether a number supports iMessage, show typing indicators, and look up message status with Sendblue. Trigger workflows on inbound messages and delivery status updates.



## Tools

### `sendblue_send_message`

Send an iMessage or SMS to a single recipient via Sendblue.

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `number` | string | Yes | Recipient phone number in E.164 format \(e.g., +19998887777\) |
| `from_number` | string | Yes | One of your registered Sendblue phone numbers to send from, in E.164 format \(e.g., +18887776666\) |
| `content` | string | No | Message text content. Either content or media_url must be provided. |
| `media_url` | string | No | URL of a media file to send. Either content or media_url must be provided. |
| `send_style` | string | No | iMessage expressive style \(e.g., celebration, fireworks, lasers, confetti, balloons, invisible, slam\). |
| `status_callback` | string | No | Webhook URL that Sendblue will POST message status updates to. |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `status` | string | Message status: QUEUED, SENT, DELIVERED, or ERROR |
| `message_handle` | string | Unique identifier for tracking the message |
| `account_email` | string | Email of the account that sent the message |
| `content` | string | Message content |
| `is_outbound` | boolean | Whether this is an outbound message |
| `from_number` | string | Sending phone number |
| `number` | string | Recipient phone number |
| `media_url` | string | URL of attached media |
| `send_style` | string | iMessage expressive style applied |
| `seat_id` | string | UUID of the seat that sent the message |
| `sender_email` | string | Email of the seat \(user\) that sent the message |
| `error_code` | number | Numeric error code if the message failed |
| `error_message` | string | Error message if the message failed |
| `date_created` | string | When the message was created |
| `date_updated` | string | When the message was last updated |

### `sendblue_send_group_message`

Send an iMessage or SMS to a group of recipients via Sendblue.

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `numbers` | array | Yes | Recipient phone numbers in E.164 format \(e.g., \["+19998887777", "+13334445555"\]\) |
| `from_number` | string | Yes | One of your registered Sendblue phone numbers to send from, in E.164 format \(e.g., +18887776666\) |
| `content` | string | No | Message text content. Either content or media_url must be provided. |
| `media_url` | string | No | URL of a media file to send. Either content or media_url must be provided. |
| `send_style` | string | No | iMessage expressive style \(e.g., celebration, fireworks, lasers, confetti, balloons, invisible, slam\). |
| `group_id` | string | No | Unique identifier of an existing group to send to. Omit to start a new group. |
| `status_callback` | string | No | Webhook URL that Sendblue will POST message status updates to. |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `status` | string | Message status: QUEUED, SENT, DELIVERED, or ERROR |
| `message_handle` | string | Unique identifier for tracking the message |
| `group_id` | string | Identifier of the group the message was sent to |
| `participants` | array | Phone numbers participating in the group |
| `account_email` | string | Email of the account that sent the message |
| `content` | string | Message content |
| `is_outbound` | boolean | Whether this is an outbound message |
| `from_number` | string | Sending phone number |
| `number` | string | Recipient phone number |
| `media_url` | string | URL of attached media |
| `send_style` | string | iMessage expressive style applied |
| `seat_id` | string | UUID of the seat that sent the message |
| `sender_email` | string | Email of the seat \(user\) that sent the message |
| `error_code` | number | Numeric error code if the message failed |
| `error_message` | string | Error message if the message failed |
| `date_created` | string | When the message was created |
| `date_updated` | string | When the message was last updated |

### `sendblue_evaluate_service`

Check whether a phone number can receive iMessage or only SMS.

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `number` | string | Yes | Phone number to evaluate, in E.164 format \(e.g., +19998887777\) |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `number` | string | The evaluated phone number in E.164 format |
| `service` | string | The service the number supports: iMessage or SMS |

### `sendblue_send_typing_indicator`

Display a typing indicator to a recipient (not supported in group chats).

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `number` | string | Yes | Recipient's phone number in E.164 format \(e.g., +19998887777\) |
| `from_number` | string | No | Your Sendblue line number to send from, in E.164 format. |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `status` | string | Delivery status of the typing indicator \(e.g., QUEUED\) |
| `status_code` | number | Numeric status code returned by Sendblue |
| `number` | string | The recipient phone number |
Comment thread
waleedlatif1 marked this conversation as resolved.
| `error_message` | string | Error details, null on success |

### `sendblue_get_message`

Retrieve a single message and its current status by message handle/ID.

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `message_id` | string | Yes | The message handle/ID returned when the message was sent. |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `status` | string | Current message status |
| `message_handle` | string | Unique message identifier |
| `account_email` | string | Email of the account |
| `content` | string | Message content |
| `is_outbound` | boolean | Whether the message is outbound |
| `from_number` | string | Sending phone number |
| `number` | string | Recipient phone number |
| `to_number` | string | Destination phone number |
| `media_url` | string | URL of attached media |
| `message_type` | string | Message category: message or group |
| `service` | string | Messaging service: iMessage, SMS, or RCS |
| `group_id` | string | Group identifier \(empty for non-group\) |
| `group_display_name` | string | Group chat name |
| `participants` | array | Participant phone numbers |
| `send_style` | string | Expressive style applied |
| `was_downgraded` | boolean | True if the recipient lacks iMessage support |
| `opted_out` | boolean | True if the recipient has opted out |
| `plan` | string | Account plan type |
| `sendblue_number` | string | Sendblue phone number used |
| `seat_id` | string | Seat UUID |
| `sender_email` | string | Email of the sending seat |
| `error_code` | number | Numeric error code if failed |
| `error_message` | string | Error message if failed |
| `error_reason` | string | Additional error context |
| `error_detail` | string | Detailed error information |
| `date_sent` | string | ISO 8601 creation timestamp |
| `date_updated` | string | ISO 8601 last-update timestamp |


1 change: 1 addition & 0 deletions apps/docs/content/docs/en/triggers/meta.json
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
"outlook",
"resend",
"salesforce",
"sendblue",
"servicenow",
"slack",
"stripe",
Expand Down
93 changes: 93 additions & 0 deletions apps/docs/content/docs/en/triggers/sendblue.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
---
title: Sendblue
description: Available Sendblue triggers for automating workflows
---

import { BlockInfoCard } from "@/components/ui/block-info-card"

<BlockInfoCard
type="sendblue"
color="#008BFF"
/>

Sendblue provides 2 triggers for automating workflows based on events.

## Triggers

### Sendblue Message Received

Trigger when an inbound iMessage or SMS is received in Sendblue

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `account_email` | string | Email of the Sendblue account |
| `content` | string | Message text content |
| `media_url` | string | CDN link to attached media, if any |
| `is_outbound` | boolean | True for outbound messages, false for inbound |
| `status` | string | Message status \(e.g., RECEIVED, QUEUED, SENT, DELIVERED, ERROR\) |
| `error_code` | number | Error identifier, null if none |
| `error_message` | string | Descriptive error text, null if none |
| `error_reason` | string | Additional error context, null if none |
| `error_detail` | string | Detailed error information, null if none |
| `message_handle` | string | Sendblue message identifier \(use to deduplicate\) |
| `date_sent` | string | ISO 8601 creation timestamp |
| `date_updated` | string | ISO 8601 last-update timestamp |
| `from_number` | string | E.164 sender phone number |
| `number` | string | E.164 recipient/counterparty phone number |
| `to_number` | string | E.164 destination phone number |
| `was_downgraded` | boolean | True if the recipient lacks iMessage support |
| `plan` | string | Account plan type |
| `message_type` | string | Message category \(e.g., message, group\) |
| `group_id` | string | Group identifier, empty for non-group messages |
| `participants` | array | Participant phone numbers for group messages |
| `send_style` | string | Expressive style if applied |
| `opted_out` | boolean | True if the recipient has opted out |
| `sendblue_number` | string | Sendblue phone number used |
| `service` | string | Messaging service \(iMessage or SMS\) |
| `group_display_name` | string | Group chat name, null for non-group messages |
| `sender_email` | string | Email of the user who sent the message |
| `seat_id` | string | Seat UUID, null if absent |
| `raw` | string | Complete raw webhook payload from Sendblue as a JSON string |


---

### Sendblue Message Status Updated

Trigger when an outbound message status changes (SENT, DELIVERED, ERROR) in Sendblue

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `account_email` | string | Email of the Sendblue account |
| `content` | string | Message text content |
| `media_url` | string | CDN link to attached media, if any |
| `is_outbound` | boolean | True for outbound messages, false for inbound |
| `status` | string | Message status \(e.g., RECEIVED, QUEUED, SENT, DELIVERED, ERROR\) |
| `error_code` | number | Error identifier, null if none |
| `error_message` | string | Descriptive error text, null if none |
| `error_reason` | string | Additional error context, null if none |
| `error_detail` | string | Detailed error information, null if none |
| `message_handle` | string | Sendblue message identifier \(use to deduplicate\) |
| `date_sent` | string | ISO 8601 creation timestamp |
| `date_updated` | string | ISO 8601 last-update timestamp |
| `from_number` | string | E.164 sender phone number |
| `number` | string | E.164 recipient/counterparty phone number |
| `to_number` | string | E.164 destination phone number |
| `was_downgraded` | boolean | True if the recipient lacks iMessage support |
| `plan` | string | Account plan type |
| `message_type` | string | Message category \(e.g., message, group\) |
| `group_id` | string | Group identifier, empty for non-group messages |
| `participants` | array | Participant phone numbers for group messages |
| `send_style` | string | Expressive style if applied |
| `opted_out` | boolean | True if the recipient has opted out |
| `sendblue_number` | string | Sendblue phone number used |
| `service` | string | Messaging service \(iMessage or SMS\) |
| `group_display_name` | string | Group chat name, null for non-group messages |
| `sender_email` | string | Email of the user who sent the message |
| `seat_id` | string | Seat UUID, null if absent |
| `raw` | string | Complete raw webhook payload from Sendblue as a JSON string |

Loading
Loading