Mensajería
Envía mensajes a individuos, equipos o canales a través de Dailybot. El endpoint send-message maneja texto, imágenes, botones, respuestas en hilo, impersonación del bot y edición en el mismo POST. Los mensajes se entregan en la plataforma conectada por tu organización (Slack, Microsoft Teams, Discord o Google Chat).
| Método | Endpoint | Descripción |
|---|---|---|
| POST | /v1/send-message/ | Enviar, agrupar en hilo, impersonar y editar mensajes del bot |
| POST | /v1/send-email/ | Enviar un email a usuarios por UUID |
| POST | /v1/open-conversation/ | Crear una conversación grupal privada (Slack) |
Enviar Mensaje
/v1/send-message/API keyCLI AuthEnvía un mensaje a los usuarios, equipos o canales especificados. Debe proporcionarse al menos un destino (usuarios, equipos o canales).
Parámetros del Cuerpo
| Name | Type | Required | Description |
|---|---|---|---|
message | string | Optional | Texto del mensaje (plano o subconjunto seguro de HTML). Requerido si `messages` no se provee. |
messages | array | Optional | Payloads específicos por plataforma (avanzado). Requerido si `message` se omite. |
target_users | array<string> | Optional | UUIDs, emails o IDs externos de usuarios. Al menos uno de target_users / target_channels / target_teams es requerido. |
target_channels | array<string | { id, channel_type?, thread? }> | Optional | IDs de canal como strings o como objetos. Usa `{ id, thread: <ts_o_id_padre> }` para responder dentro de un hilo existente. |
target_teams | array<string> | Optional | UUIDs de equipos — todos los miembros reciben el mensaje. |
thread_responses | array<{ message: string }> | Optional | Hasta **10** respuestas publicadas bajo el mismo padre en una sola llamada. Solo un nivel de anidamiento. |
bot_message_id | string | Optional | ID de idempotencia personalizado. Reenvía con el mismo valor dentro de **72 horas** para editar el mensaje original. |
platform_settings.bot_username | string | Optional | Nombre custom del bot para ese mensaje. **Solo Slack** (máx. 80 caracteres). |
platform_settings.bot_icon_url | string | Optional | URL HTTPS del avatar del bot. **Solo Slack.** Mutuamente exclusivo con `bot_icon_emoji`. |
platform_settings.bot_icon_emoji | string | Optional | Código emoji del avatar del bot, ej. `:rocket:`. **Solo Slack.** |
platform_settings.is_ephemeral | boolean | Optional | **Solo Slack.** Cuando `true`, el mensaje se publica dentro del canal pero solo lo ven los usuarios de `target_users`. |
image_url | string | Optional | URL HTTPS de imagen a adjuntar. |
buttons | array<{ label, button_type: 'link' | 'interactive', url? | value? }> | Optional | Botones interactivos. `button_type: "link"` abre `url`; `"interactive"` devuelve `value` a través del webhook del mensaje. |
metadata | object | Optional | Metadatos personalizados libres adjuntos al mensaje. |
skip_users_on_time_off | boolean | Optional | Cuando es true, se omiten los usuarios marcados como OOO / de licencia. |
curl -X POST "https://api.dailybot.com/v1/send-message/" \
-H "X-API-KEY: tu_api_key" \
-H "Content-Type: application/json" \
-d '{
"message": "Despliegue completado exitosamente! ✅",
"target_users": ["a1b2c3d4-e5f6-7890-abcd-ef1234567890"],
"target_teams": ["b2c3d4e5-f6a7-8901-bcde-f12345678901"]
}'Response200 OK
{
"bot_message_id": "$db/ae007b43-dde2-4fa9-bce3-71fb0975a249"
}bot_message_id (string) — El ID enviado en la petición o un ID generado por el servidor en la forma $db/<uuid>. Reutilízalo dentro de 72h para editar el mensaje.
Response403 Forbidden
{
"detail": "cli_send_message_target_not_allowed",
"code": "cli_send_message_target_not_allowed"
}El scoping por rol del CLI bloqueó la petición — ver scoping por rol.
Info
target_users, target_channels o target_teams debe proporcionarse. Puedes combinarlos — el mensaje va a cada destino listado.Respuestas en hilo
Dos formas de armar hilos. Pasa `thread_responses` (hasta 10) para publicar un padre más respuestas en una sola llamada. Los IDs de respuesta vienen en el response para editarlos después.
Para responder dentro de un hilo existente, usa la forma de objeto de `target_channels` y define `thread` como el timestamp/id del mensaje padre.
curl -X POST "https://api.dailybot.com/v1/send-message/" \
-H "X-API-KEY: tu_api_key" \
-H "Content-Type: application/json" \
-d '{
"message": "Release 4.12.0 saliendo ya.",
"target_channels": ["C0123456789"],
"thread_responses": [
{"message": "Frontend: build en verde"},
{"message": "Backend: migraciones OK"},
{"message": "Changelog completo: https://acme.example/rel/4.12.0"}
]
}'curl -X POST "https://api.dailybot.com/v1/send-message/" \
-H "X-API-KEY: tu_api_key" \
-H "Content-Type: application/json" \
-d '{
"message": "Un detalle: activa el feature flag \"nav_v2\" primero.",
"target_channels": [
{ "id": "C0123456789", "thread": "1710000000.123456" }
]
}'ResponseRespuesta con thread_responses
{
"bot_message_id": "$db/ae007b43-dde2-4fa9-bce3-71fb0975a249",
"thread_responses": [
"$db/thread-1",
"$db/thread-2",
"$db/thread-3"
]
}Cada entrada de thread_responses es un ID de respuesta editable. Pásalo a dailybot chat update <id> o vuelve a hacer POST con bot_message_id con ese valor.
Info
Impersonación del bot (Slack)
`platform_settings.bot_username` junto con `bot_icon_url` O `bot_icon_emoji` cambian la apariencia del bot para ese mensaje. Solo Slack hoy — otras plataformas ignoran el bloque y usan la identidad del bot conectado.
curl -X POST "https://api.dailybot.com/v1/send-message/" \
-H "X-API-KEY: tu_api_key" \
-H "Content-Type: application/json" \
-d '{
"message": "Deploy de 4.12.0 en producción ✅",
"target_channels": ["C0123456789"],
"platform_settings": {
"bot_username": "Release Bot",
"bot_icon_emoji": ":rocket:"
}
}'Info
Editar un mensaje
Reenvía la petición con el mismo `bot_message_id` dentro de **72 horas** para editar el original. Funciona tanto en el padre como en cualquiera de los IDs devueltos en `thread_responses`.
curl -X POST "https://api.dailybot.com/v1/send-message/" \
-H "X-API-KEY: tu_api_key" \
-H "Content-Type: application/json" \
-d '{
"bot_message_id": "release-4.12.0",
"message": "Deploy de 4.12.0 — rollback en curso ⚠️",
"target_channels": ["C0123456789"]
}'Info
dailybot chat update -m "…" . Ver la skill de Bot messaging en el agent skill pack para uso de más alto nivel.Mensajes ephemeral (Slack)
Define `platform_settings.is_ephemeral: true` junto con `target_users` para publicar un mensaje dentro del canal que solo esos usuarios ven. Solo Slack; otras plataformas lo tratan como mensaje normal.
curl -X POST "https://api.dailybot.com/v1/send-message/" \
-H "X-API-KEY: tu_api_key" \
-H "Content-Type: application/json" \
-d '{
"message": "Aviso: tu turno de on-call empieza en 10 minutos.",
"target_channels": ["C0123456789"],
"target_users": ["a1b2c3d4-e5f6-7890-abcd-ef1234567890"],
"platform_settings": { "is_ephemeral": true }
}'Tip
Identidad personalizada con send_as_user (solo Slack)
send_as_user permite que una llamada autorizada publique un mensaje que aparece como si viniera de otro usuario — el mensaje muestra el nombre y avatar del usuario destino en lugar de la identidad del bot de Dailybot.
El mensaje se entrega igualmente a través del token del bot de Dailybot (no usa el token de Slack del usuario destino), por lo que respeta el acceso a canales del bot y las reglas de atribución de mensajes de Slack.
- El llamante debe ser admin de la organización (o tener una key cuyo owner sea admin).
- El usuario objetivo (
send_as_userUUID) debe estar activo y en la misma organización. - Solo Slack — otras plataformas ignoran el campo y usan la identidad normal del bot.
send_as_useres mutuamente exclusivo conbot_username,bot_icon_urlybot_icon_emoji.
curl -X POST "https://api.dailybot.com/v1/send-message/" \
-H "X-API-KEY: $DAILYBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"message": "El sprint está cerrado y todos los tickets resueltos.",
"target_channels": ["C0123456789"],
"send_as_user": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}'| HTTP | code | Cuándo |
|---|---|---|
| 403 | org_admin_required | El llamante no es admin de la organización. |
| 400 | send_as_user_conflict | send_as_user combinado con bot_username, bot_icon_url o bot_icon_emoji. |
| 400 | send_as_user_invalid_uuid | Formato de UUID inválido. |
| 400 | send_as_user_not_found | Usuario no encontrado, inactivo o en una organización diferente. |
Casos de uso
- Resúmenes automáticos de standups publicados con el nombre del miembro del equipo.
- Recordatorios de check-in generados por IA atribuidos al manager.
- Salidas de flujos de trabajo atribuidas al usuario que los disparó.
Scoping por rol del CLI
Cuando quien llama es un usuario autenticado por CLI (no una API key de máquina), Dailybot aplica scoping por rol: admins y managers pueden apuntar a cualquier usuario/equipo/canal público; miembros de equipo pueden apuntar a compañeros de sus equipos compartidos y a canales públicos; invitados solo pueden mandarse mensajes a sí mismos. Fuera de ese scope el endpoint devuelve 403 con `cli_send_message_target_not_allowed`.
Enviar Email
/v1/send-email/API keyCLI AuthEnvía un email a los usuarios especificados (por UUID de usuario).
Parámetros del Cuerpo
| Name | Type | Required | Description |
|---|---|---|---|
users_uuids | array of strings (UUID) | Required | UUIDs de usuarios que recibirán el email. |
email_subject | string | Required | Asunto del email. |
email_content | string | Required | Cuerpo del email (HTML o texto plano). |
curl -X POST "https://api.dailybot.com/v1/send-email/" \
-H "X-API-KEY: tu_api_key" \
-H "Content-Type: application/json" \
-d '{
"users_uuids": ["a1b2c3d4-e5f6-7890-abcd-ef1234567890"],
"email_subject": "Reporte Semanal Listo",
"email_content": "Tu reporte semanal del equipo está disponible. Revisa tu dashboard."
}'Response200 OK
{
"detail": "Emails sent successfully."
}detail (string) — Mensaje de éxito.
Response400 Bad Request
{
"detail": "one_or_more_users_not_found",
"code": "one_or_more_users_not_found"
}Uno o más UUIDs de usuario no encontrados.
Response403 Forbidden
{
"detail": "Invalid or missing API key.",
"code": "authentication_failed"
}API key ausente o inválida.
Abrir Conversación
/v1/open-conversation/API keyCLI AuthCrea una conversación grupal privada (ej. en Slack) con los usuarios especificados.
Parámetros del Cuerpo
| Name | Type | Required | Description |
|---|---|---|---|
users_uuids | array of strings (UUID) | Required | UUIDs de usuarios a incluir en la conversación. |
curl -X POST "https://api.dailybot.com/v1/open-conversation/" \
-H "X-API-KEY: tu_api_key" \
-H "Content-Type: application/json" \
-d '{
"users_uuids": [
"a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"b2c3d4e5-f6a7-8901-bcde-f12345678901"
]
}'Response200 OK
{
"channel": "C0123456789"
}channel (string) — ID del canal de la plataforma (ej. ID de canal de Slack).
Response400 Bad Request
{
"detail": "one_or_more_users_not_found",
"code": "one_or_more_users_not_found"
}Uno o más UUIDs de usuario no encontrados en la organización.
Response403 Forbidden
{
"detail": "Invalid or missing API key.",
"code": "authentication_failed"
}API key ausente o inválida.
Info