Skip to content

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étodoEndpointDescripció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

POST/v1/send-message/API keyCLI Auth

Envía un mensaje a los usuarios, equipos o canales especificados. Debe proporcionarse al menos un destino (usuarios, equipos o canales).

Parámetros del Cuerpo

NameTypeRequiredDescription
messagestringOptionalTexto del mensaje (plano o subconjunto seguro de HTML). Requerido si `messages` no se provee.
messagesarrayOptionalPayloads específicos por plataforma (avanzado). Requerido si `message` se omite.
target_usersarray<string>OptionalUUIDs, emails o IDs externos de usuarios. Al menos uno de target_users / target_channels / target_teams es requerido.
target_channelsarray<string | { id, channel_type?, thread? }>OptionalIDs de canal como strings o como objetos. Usa `{ id, thread: <ts_o_id_padre> }` para responder dentro de un hilo existente.
target_teamsarray<string>OptionalUUIDs de equipos — todos los miembros reciben el mensaje.
thread_responsesarray<{ message: string }>OptionalHasta **10** respuestas publicadas bajo el mismo padre en una sola llamada. Solo un nivel de anidamiento.
bot_message_idstringOptionalID de idempotencia personalizado. Reenvía con el mismo valor dentro de **72 horas** para editar el mensaje original.
platform_settings.bot_usernamestringOptionalNombre custom del bot para ese mensaje. **Solo Slack** (máx. 80 caracteres).
platform_settings.bot_icon_urlstringOptionalURL HTTPS del avatar del bot. **Solo Slack.** Mutuamente exclusivo con `bot_icon_emoji`.
platform_settings.bot_icon_emojistringOptionalCódigo emoji del avatar del bot, ej. `:rocket:`. **Solo Slack.**
platform_settings.is_ephemeralbooleanOptional**Solo Slack.** Cuando `true`, el mensaje se publica dentro del canal pero solo lo ven los usuarios de `target_users`.
image_urlstringOptionalURL HTTPS de imagen a adjuntar.
buttonsarray<{ label, button_type: 'link' | 'interactive', url? | value? }>OptionalBotones interactivos. `button_type: "link"` abre `url`; `"interactive"` devuelve `value` a través del webhook del mensaje.
metadataobjectOptionalMetadatos personalizados libres adjuntos al mensaje.
skip_users_on_time_offbooleanOptionalCuando es true, se omiten los usuarios marcados como OOO / de licencia.
Petición
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
json
{
  "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
json
{
  "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

Al menos uno de 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.

Padre + hasta 10 respuestas (una sola llamada)
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"}
    ]
  }'
Responder dentro de un hilo existente
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
json
{
  "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

El threading en DMs varía por plataforma: Slack mantiene hilos tanto en canales como en DMs; Microsoft Teams, Discord y Google Chat solo hacen hilos en canales — en DMs publican planos.

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.

Impersonar para un mensaje
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

Los campos de identidad se ignoran al editar — una vez publicado, la plataforma mantiene el nombre/avatar original aunque reenvíes con valores distintos.

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`.

Editar dentro de 72h
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

El CLI envuelve esto con 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.

Mensaje ephemeral solo en Slack
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

El canal debe contener al usuario objetivo — Slack no permite ephemerals a usuarios fuera del canal.

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_user UUID) 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_user es mutuamente exclusivo con bot_username, bot_icon_url y bot_icon_emoji.
Enviar como otro usuario (solo admins)
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"
  }'
HTTPcodeCuándo
403org_admin_requiredEl llamante no es admin de la organización.
400send_as_user_conflictsend_as_user combinado con bot_username, bot_icon_url o bot_icon_emoji.
400send_as_user_invalid_uuidFormato de UUID inválido.
400send_as_user_not_foundUsuario 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

POST/v1/send-email/API keyCLI Auth

Envía un email a los usuarios especificados (por UUID de usuario).

Parámetros del Cuerpo

NameTypeRequiredDescription
users_uuidsarray of strings (UUID)RequiredUUIDs de usuarios que recibirán el email.
email_subjectstringRequiredAsunto del email.
email_contentstringRequiredCuerpo del email (HTML o texto plano).
Petición
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
json
{
  "detail": "Emails sent successfully."
}

detail (string) — Mensaje de éxito.

Response400 Bad Request
json
{
  "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
json
{
  "detail": "Invalid or missing API key.",
  "code": "authentication_failed"
}

API key ausente o inválida.

Abrir Conversación

POST/v1/open-conversation/API keyCLI Auth

Crea una conversación grupal privada (ej. en Slack) con los usuarios especificados.

Parámetros del Cuerpo

NameTypeRequiredDescription
users_uuidsarray of strings (UUID)RequiredUUIDs de usuarios a incluir en la conversación.
Petició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
json
{
  "channel": "C0123456789"
}

channel (string) — ID del canal de la plataforma (ej. ID de canal de Slack).

Response400 Bad Request
json
{
  "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
json
{
  "detail": "Invalid or missing API key.",
  "code": "authentication_failed"
}

API key ausente o inválida.

Info

El endpoint Abrir Conversación actualmente solo está disponible para organizaciones que usan Slack como su plataforma.