Enviar eventos a un miembro
Envía eventos personales, como actualizaciones de pedidos, notificaciones de documentos compartidos o cambios de saldo, directamente a un miembro. No necesitas crear un canal para cada persona.
Esta guía explica cómo recibir eventos de miembro, enviarlos desde tu servidor y elegir entre eventos de miembro y canales privados.
Antes de empezar
La conexión debe tener sesión iniciada con una identidad de miembro. Consulta Requerir conexiones autorizadas para signin() y su endpoint de autorización.
Recibir eventos en tu app
Cuando signin() se complete, vincula el nombre del evento en bird.member. Usa el mismo nombre que tu servidor envía como event. Los eventos de miembro no requieren suscripción a un canal.
import { BirdRealtime } from "@messagebird/realtime";
const bird = new BirdRealtime({
appKey: "your-app-key",
region: "us1",
memberAuthEndpoint: "/bird/auth/member",
});
await bird.signin();
bird.member.bind("order.shipped", (data) => {
showToast(`Order ${data.order_id} is on its way`);
});import BirdRealtime
let bird = BirdRealtime(options: .init(
appKey: "your-app-key",
region: "us1",
memberAuthEndpoint: URL(string: "https://your-backend.example.com/bird/auth/member")
))
let me = try await bird.signin()
print("signed in as", me.memberId)
bird.member.bind("order.shipped") { data in
let orderId = (data as? [String: Any])?["order_id"] as? String ?? ""
showToast("Order \(orderId) is on its way")
}import com.bird.realtime.BirdRealtime
import com.bird.realtime.BirdRealtimeOptions
import kotlinx.serialization.json.jsonObject
import kotlinx.serialization.json.jsonPrimitive
val bird = BirdRealtime(
BirdRealtimeOptions(
appKey = "your-app-key",
region = "us1",
memberAuthEndpoint = "https://your-backend.example.com/bird/auth/member",
)
)
val me = bird.signin() // suspending
println("signed in as ${me.memberId}")
bird.member.bind("order.shipped") { data ->
val orderId = data?.jsonObject?.get("order_id")?.jsonPrimitive?.content
showToast("Order $orderId is on its way")
}El cliente conserva la vinculación, inicia sesión tras reconectarse y luego reanuda la entrega de eventos de miembro.
signin() es asíncrono en los tres clientes. Devuelve una promesa en el navegador, usa async en Swift y suspende en Kotlin. Llámalo desde el contexto asíncrono apropiado. Una sola llamada activa el inicio de sesión automático en reconexiones posteriores.
Enviar un evento desde tu servidor
Llama a members.send con el ID de la app, el ID del miembro y el evento:
await bird.realtime.members.send("rap_01krdgeqcxet5s7t44vh8rt9mg", "u_42", {
event: "order.shipped",
data: { order_id: "ord_123" },
});client.realtime.members.send(
"rap_01krdgeqcxet5s7t44vh8rt9mg",
"u_42",
event="order.shipped",
data={"order_id": "ord_123"},
)err = client.Realtime.Members.Send(context.Background(), "rap_01krdgeqcxet5s7t44vh8rt9mg", "u_42", bird.RealtimeMemberSendParams{
Event: "order.shipped",
Data: map[string]any{"order_id": "ord_123"},
})$bird->realtime->members->send('rap_01krdgeqcxet5s7t44vh8rt9mg', 'u_42', (new RealtimeMemberPublish())
->setEvent('order.shipped')
->setData(['order_id' => 'ord_123']));curl -X POST \
https://us1.platform.bird.com/v1/realtime/apps/rap_01krdgeqcxet5s7t44vh8rt9mg/members/u_42/events \
-H "Authorization: Bearer $BIRD_API_KEY" \
-H "X-Realtime-Key: $BIRD_REALTIME_KEY" \
-H "X-Realtime-Secret: $BIRD_REALTIME_SECRET" \
-H "Content-Type: application/json" \
-d '{ "event": "order.shipped", "data": { "order_id": "ord_123" } }'u_42 es el member_id firmado por tu endpoint de autorización. Usa el identificador existente de tu sistema si cumple los requisitos del ID de miembro.
Quién recibe el evento
- Cada conexión que ese miembro tenga, en todas sus pestañas y dispositivos. Una sola llamada, sin importar cuántas conexiones.
- Nadie más, aunque la app de otro miembro vincule el mismo nombre de evento.
- Nada si el miembro no tiene conexiones activas. La llamada se completa con éxito porque la entrega no se encola y no puede confirmar ocupación. Almacena las notificaciones durables y cárgalas cuando el miembro regrese.
Evento de miembro o canal privado
| Usa un evento de miembro | Usa un canal privado |
|---|---|
| El destinatario es el destino: notificaciones personales, cambios de cuenta | El destino es algo compartido que varias personas observan: un documento, un pedido, una sala |
| No necesitas nombrar ni autorizar un canal | Nombras el canal y autorizas cada suscripción |
| Sin presencia, conteos de conexiones ni eventos de cliente | Presencia, conteos de conexiones y eventos de cliente disponibles |
Próximos pasos
- Conexiones autorizadas cubre signin() y el endpoint de autenticación del miembro.
- Terminar conexiones de un miembro cierra todas las conexiones que un miembro tenga.
- Enviar un evento a un miembro es la referencia completa de API.
Recursos relacionados
Continúa con la documentación, guías y ejemplos sobre este tema. Los recursos están en inglés.
Explorar la funcionalidadRealtimeSeguir la ruta de aprendizajeBuild your first integrationGuía de implementaciónSend your first realtime event
Prueba el ejercicio y obtén un resumen de implementación