Pulsa / para buscar

Toda la documentación
docs Operar Canales de notificación

Se ejecuta enWrit CloudDesktopAutoalojado

notify ▸ dónde caen las alertas

Nueve canales, y una rejilla.

Dos sistemas distintos comparten la palabra «notificación», y confundirlos cuesta una tarde. Los canales son lo que dispara un monitor o una automatización. Las preferencias son lo que la plataforma te cuenta. Esta página los separa.

Cada canal tiene un envío de prueba, así te enteras de que funciona antes que un incidente.

reparto ▸ dos sistemas

¿De cuál hablas?

Los dos viven en Ajustes, los dos dicen «notificaciones», y no comparten lista de canales. Empieza aquí:

Canales de monitors y automatizacionesNueve proveedores, configurados una vez para la organización. Un monitor detecta un cambio, o una automatización llega a un paso de aviso, y el mensaje sale. Los destinatarios se escriben «channel:id».
Preferencias de notificación de la plataformaSeis canales en siete categorías, por usuario. Seguridad, facturación, equipo, runs, agentes, marketplace y soporte — lo que Writ te cuenta sobre tu propia cuenta.

canales ▸ nueve

Configura un canal.

Configura cada uno una vez para la organización y añádele destinatarios. Cada canal tiene un envío de prueba.

CanalClave APIQué aportas tú
PushoverpushoverToken de aplicación y clave de usuario. Opcionalmente un título, un mensaje, una prioridad de −2 a 2, un sonido, un título de enlace y HTML activado o no.
Email (SMTP)emailHost, puerto, usuario, contraseña, dirección de origen, nombre de origen y TLS activado o no.
Email (Google Workspace)emailConecta con OAuth en vez de SMTP. La configuración indica qué proveedor está activo y qué cuenta está conectada, y puedes desconectarla.
SMStwilioAccount SID, auth token y un número de envío en formato E.164. El auth token no se devuelve nunca una vez guardado.
WhatsAppwhatsappUn número de envío en formato whatsapp:+1234567890. Va sobre las mismas credenciales del proveedor de SMS, así que solo sirve cuando ambos están configurados.
SignalsignalLa URL de un servidor REST signal-cli que operes tú, más el número remitente en formato E.164.
SlackslackUna URL de webhook de canal por destinatario. La API solo devuelve el host, nunca la URL completa.
DiscorddiscordUna URL de webhook de canal por destinatario. La API solo devuelve el host, nunca la URL completa.
TelegramtelegramEl token que te da BotFather, más un chat id por destinatario. El token se enmascara en las respuestas.
WebhookwebhookTu propia URL, con cabeceras personalizadas y verificación de firma HMAC opcionales. Las entregas se reintentan con retroceso exponencial.

Las credenciales entran y no vuelven a salir: el auth token de SMS no se devuelve una vez guardado, las URL de Slack y Discord vuelven solo como host, y el token de Telegram se enmascara. Si hay que cambiar una, sustitúyela — no puedes releerla para comprobarla.

El canal webhook firma cada entrega. El contrato de firma exacto, los nombres de cabecera y un ejemplo de verificación viven en Webhooks.

Webhooks →

destinatarios ▸ channel:id

Nombrar a quién avisar.

Cuando un canal ya tiene destinatarios, una automatización se refiere a ellos con cadenas "channel:id" — por ejemplo ["pushover:1","email:3"]. Una sola llamada lista todos los destinatarios de todos los canales, cada uno con su identificador enmascarado, que es lo que pinta un selector.

recipients

{
  "channels": ["pushover", "email"],
  "recipients": ["pushover:1", "email:3"]
}

Ojo: la clave de SMS es twilio, no sms — ese es el valor que la API espera en una lista de canales. En la rejilla de preferencias de más abajo, la misma idea se escribe sms. Son sistemas distintos.

controles ▸ toda la organización

Controles de entrega.

Se aplican a toda la organización, no por canal — para que una noche movida no acabe en cien mensajes:

ControlQué hace
Horas de silencioUna hora de inicio y otra de fin durante las cuales no se entrega nada.
Límite de frecuenciaUn número máximo de mensajes por periodo.
AgrupaciónJunta lo que ocurre dentro de una ventana, en minutos, y lo envía como un solo mensaje.
Alertas de error de agenteAvisar cuando un agente falla, con un umbral y un retardo en minutos.
Alertas de salud de destinoAvisar cuando un destino falla repetidamente, con un umbral y un intervalo de comprobación.
Alertas de salud del sistemaAvisar cuando un agente se desconecta, tras un retardo.

placeholders ▸ alertas de cambio

Qué puedes poner en el mensaje.

Las notificaciones de cambio insertan estos placeholders en tu plantilla de mensaje. Agrupados por lo que responden:

Qué se vigilaba {url} {target_id} {target_name} {selector} {selector_name} {agent_id} {agent_platform} {change_count} {check_count}
Qué cambió {diff} {detected_change} {previous_content} {new_content} {content_hash} {previous_hash}
Cuándo {timestamp} {date} {time}

Un placeholder desconocido se deja tal cual en vez de fallar, así que una errata te cuesta un token literal en el mensaje, no una alerta perdida. Las vistas previas se truncan: {diff} y {detected_change} a 500 caracteres, {previous_content} y {new_content} a 200.

relé ▸ desde un dispositivo

Un dispositivo vinculado pasando el testigo a la nube.

Un dispositivo ejecuta automatizaciones en local, pero algunos canales necesitan la nube para entregar. Solo email, pushover, SMS, WhatsApp y Signal pasan por el relé; webhook, Slack, Discord y Telegram los entrega el propio dispositivo, porque puede alcanzarlos directamente.

relay.sh

curl -X POST https://api.usewrit.app/api/notifications/relay \
  -H "Authorization: Bearer $WRIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "channels": ["email", "pushover"],
    "recipients": ["email:3", "pushover:1"],
    "title": "Price dropped",
    "message": "Now $41.00, was $49.00.",
    "url": "https://example.com/product/42"
  }'
CampoRegla
channelsDe 1 a 8, y subconjunto de los canales relevables. Cualquier otro se rechaza con 400.
recipientsReferencias de destinatario, las mismas cadenas «channel:id».
titleHasta 200 caracteres.
messageDe 1 a 4000 caracteres.
priorityOpcional.
urlEnlace opcional, hasta 2000 caracteres.
email_subjectOpcional, hasta 300 caracteres.

La entrega va a tus propios destinatarios configurados — nunca a una dirección arbitraria pasada en la llamada. Las notificaciones por relé están limitadas a 120 por hora y organización, para que una automatización local inestable no vacíe un presupuesto de SMS en minutos.

preferencias ▸ la otra rejilla

Preferencias de notificación de la plataforma.

Este es el segundo sistema: lo que Writ te cuenta, por usuario, en GET y PUT /api/notifications/preferences. Otro conjunto de canales, otro propósito.

Seis canales

No son los mismos nueve de arriba:

in_appLa campana y la bandeja dentro de Writ.
emailEl email de tu cuenta.
smsUn punto de contacto personal en tu fila de preferencias.
whatsappEl mismo punto de contacto personal.
signalEl mismo punto de contacto personal.
pushoverTu propia clave de usuario de Pushover.

Siete categorías

Los eventos se agrupan para poder razonar sin leer fila por fila:

SeguridadActividad de seguridad de la cuenta.
Facturación y pagosSaldo, recibos, problemas de pago.
EquipoInvitaciones y pertenencia.
Automatizaciones y runsQué hicieron tus workflows.
Agentes y dispositivosQué hicieron tus máquinas.
Marketplace y creadorPublicaciones, instalaciones, ingresos.
SoporteActividad de tickets.

Cuatro reglas que sorprenden

  1. La rejilla es dispersa. Solo se muestran los canales que un evento ofrece de verdad — una celda vacía no es un interruptor que te falte.
  2. Algunas celdas están bloqueadas y siempre activas: alertas de seguridad, problemas de pago e invitaciones de equipo. La API no guarda una anulación para ellas.
  3. Algunos eventos son solo por email, a propósito.
  4. Las alertas de cambio por monitor viven deliberadamente fuera de esta rejilla, con sus propios ajustes por destino.

El build autoalojado trae un catálogo recortado, sin los eventos de facturación ni de marketplace — en ese build no hay facturación ni marketplace de los que avisarte.

faq

Preguntas de notificaciones, respondidas.

¿Por qué hay dos ajustes de notificaciones distintos?
Porque responden a preguntas distintas. Los nueve canales son cómo tus monitors y automatizaciones llegan a quien debe enterarse. Las preferencias de plataforma son cómo Writ llega a ti sobre tu propia cuenta — seguridad, facturación, equipo, runs, agentes, marketplace y soporte. No comparten lista de canales.
¿Por qué no puedo releer mi token de SMS o mi URL de Slack?
Las credenciales entran y no vuelven a salir. El auth token de SMS no se devuelve una vez guardado, las URL de Slack y Discord vuelven solo como host, y el token de Telegram se enmascara. Si hay que cambiar una credencial, sustitúyela en vez de comprobarla.
¿Por qué no funciona WhatsApp si ya lo configuré?
WhatsApp va sobre las mismas credenciales de proveedor que el SMS, así que solo sirve cuando ambos están configurados. Pon primero el account SID, el auth token y el número de envío de SMS, y luego añade el número de envío de WhatsApp en formato whatsapp:+1234567890.
¿Qué pasa si me equivoco al escribir un placeholder?
Se deja tal cual en vez de fallar, así que el mensaje sale igualmente con el token literal dentro. Las vistas previas se truncan: {diff} y {detected_change} a 500 caracteres, {previous_content} y {new_content} a 200.
¿Qué canales retransmite por la nube un dispositivo vinculado?
Solo email, pushover, SMS, WhatsApp y Signal — los que necesitan credenciales en la nube. Webhook, Slack, Discord y Telegram los entrega el propio dispositivo. Una llamada de relé admite de 1 a 8 canales, un título de hasta 200 caracteres, un mensaje de 1 a 4000 y un enlace opcional de hasta 2000.
¿Puedo desactivar las alertas de seguridad?
No. Las alertas de seguridad, los problemas de pago y las invitaciones de equipo son celdas bloqueadas: están siempre activas, y la API de preferencias no guarda una anulación para ellas. Todo lo demás de la rejilla es tuyo para configurarlo.

fin ▸ conectar

Mándate una prueba.

Configura un canal, añade un destinatario y dispara el envío de prueba antes de necesitarlo.