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

# Publicar mensajes

> Publique notificaciones con atributos, elija contenido por protocolo y siga la distribución.

Publique después de crear suscripciones. La respuesta confirma la aceptación para distribución asíncrona; no garantiza recepción ni procesamiento por el destinatario.

<span id="publish-a-notification" />

## Publicar una notificación

<Tabs>
  <Tab title="Console">
    Abra el tema y seleccione **Publish**. Indique mensaje y, opcionalmente, asunto y atributos. Tras publicar, la consola abre el mensaje. Use **Messages** y **Deliveries** en el tema para volver.
  </Tab>

  <Tab title="API">
    ```http theme={null}
    POST /v1/topics/{topic_id}/publish
    Content-Type: application/json
    ```

    ```json theme={null}
    {
      "subject": "Order paid",
      "message": "{\"order_id\":\"A-1001\",\"amount\":149.50}",
      "attributes": {
        "event": { "type": "String", "value": "order.paid" },
        "environment": { "type": "String", "value": "production" },
        "amount": { "type": "Number", "value": "149.50" }
      }
    }
    ```

    HTTP `202` devuelve `{"message_id": "..."}`. Guarde el ID para consultar `/v1/topics/{topic_id}/messages/{message_id}`. El listado usa `/v1/topics/{topic_id}/messages` con paginación por marcador.
  </Tab>

  <Tab title="CLI">
    Guarde la solicitud JSON de la pestaña API como `request-1.json`. Defina `TOPIC_ID` con el UUID del recurso. Use su cuenta y región configuradas.

    ```bash theme={null}
    basaltic notifications topic publish "$TOPIC_ID" --from-file request-1.json
    ```
  </Tab>

  <Tab title="Go">
    Guarde la solicitud JSON de la pestaña API como `request-1.json`. Defina `TOPIC_ID` con el UUID del recurso. Configure credenciales, cuenta y región mediante las variables de entorno del SDK.

    ```go theme={null}
    package main

    import (
    	"context"
    	"encoding/json"
    	"fmt"
    	"os"

    	basaltic "github.com/basaltic-sh/sdk-go"
    	"github.com/basaltic-sh/sdk-go/notifications"
    )

    func readJSON(path string, value any) error {
    	data, err := os.ReadFile(path)
    	if err != nil {
    		return err
    	}
    	return json.Unmarshal(data, value)
    }

    func run() error {
    	ctx := context.Background()
    	cfg, err := basaltic.NewConfig(ctx)
    	if err != nil {
    		return err
    	}
    	client := notifications.New(cfg)
    	var request1 notifications.PublishRequest
    	if err := readJSON("request-1.json", &request1); err != nil {
    		return err
    	}
    	result1, err := client.Publish(ctx, os.Getenv("TOPIC_ID"), &request1)
    	if err != nil {
    		return err
    	}
    	fmt.Printf("%+v\n", result1)
    	return nil
    }

    func main() {
    	if err := run(); err != nil {
    		fmt.Fprintln(os.Stderr, err)
    		os.Exit(1)
    	}
    }
    ```
  </Tab>
</Tabs>

<span id="payloads-and-attributes" />

## Contenido y atributos

`message` es una cadena no vacía de hasta 256 KiB. El contenido JSON debe codificarse como cadena en ese campo. El asunto opcional tiene hasta 100 bytes, sin saltos de línea. Los atributos son un mapa separado usado en el [filtrado de suscripciones](/es/notifications/filter-policies).

De forma predeterminada, todos los protocolos usan el mismo mensaje. Para contenidos distintos, defina `message_structure` como `json` y codifique un objeto de cadenas en `message`. Es obligatorio un valor `default`:

```json theme={null}
{
  "message_structure": "json",
  "message": "{\"default\":\"Order A-1001 paid\",\"email\":\"Your order A-1001 is paid.\",\"https\":\"{\\\"order_id\\\":\\\"A-1001\\\"}\"}"
}
```

Cada suscripción elige la clave del protocolo o `default` cuando no existe. Esto no cambia los filtros, que siguen comparando los atributos de la publicación.

<span id="batch-publishing" />

## Publicación por lotes

La operación por lotes acepta 1–10 entradas con ID propios únicos. La respuesta separa éxitos y fallos. Compruebe cada resultado; el éxito HTTP no prueba la aceptación de todo. Repita solo las entradas deseadas; una publicación nueva aceptada recibe otro ID.

<span id="follow-delivery" />

## Seguir la entrega

La distribución pasa por `pending`, `complete` o `failed`. Completar con cero entregas puede ser válido: no hay suscripciones confirmadas o todos los filtros rechazan los atributos.

Los registros muestran referencia de suscripción, resultado, intentos y último error. El listado en el tema acepta UUID o CRN en `message` para restringir. Siga los marcadores para obtener todas las páginas. **Metrics** muestra tendencias mediante Telemetry; use registros para fallos individuales.

Los consumidores de webhook y cola deben tolerar repeticiones. El éxito de webhook significa respuesta HTTP correcta; el éxito de cola significa encolado, no procesamiento por el consumidor. Consulte [comportamiento de entrega](/es/notifications/delivery).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.