Capítulo social de la guía Neblla — amigos y comunicaciones dev↔usuario. El contrato base está en core.txt.
Social
Amigos
Las amistades son entre personas (cross-app), pero todo lo que la app ve está filtrado por app: un amigo solo aparece si concedió el scope discoverable para *esta* app, y "online" significa "conectado a esta app ahora mismo". Requiere el scope friends en el login.
console.log(neblla.friends);
// [{ id, name, picture, online, ... }, ...]
Métodos:
neblla.requestFriend(targetUserId); // mandar petición a otro usuario online en esta app
neblla.acceptFriend(requestId);
neblla.rejectFriend(requestId);
neblla.removeFriend(friendId); // funciona offline
neblla.inviteFriend(targetUserId); // "ven a mi sala" (cualquier tipo de sala)
neblla.inviteToRoom(targetUserId); // añade a la whitelist de tu sala privada
neblla.getFriends(); // refresh manual
neblla.getFriendRequests(); // refresh manual
Eventos: 'friendRequest' ({ requestId, from }), 'friendAccepted', 'friendRemoved', 'friendsUpdated' ({ friends }), 'roomInvite' ({ from, roomName, appId, type }).
Propiedades: neblla.friends (amigos visibles en esta app), neblla.friendRequests (peticiones recibidas).
Invitar a un amigo de Neblla A LA APP
Distinto de inviteFriend (que es "ven a mi sala" dentro de la app). Aquí el usuario trae a un amigo que aún no conoce la app:
await neblla.inviteToApp(); // requiere usuario logueado
- Abre un popup alojado por Neblla donde el usuario elige a un amigo de su lista — la app nunca ve esa lista, ni quién fue elegido.
- Fire-and-forget: ni el invitador ni la app saben si el amigo estaba online o si le llegó.
- No requiere el scope
friends. - El amigo ve la invitación en su bandeja en play.neblla.com (caduca a los 5 minutos) con un enlace que lo trae a la app con
?nbla_invite=<token>.
Cuando alguien abre la app desde una invitación (o cuando un amigo lo invita estando ya dentro), el SDK rellena neblla.invitedBy ({ id, name, picture, slug, userId|null } — userId es el id por-app del que invitó si está online ahora) y dispara el evento 'appInvite' ({ from }). Si el invitado luego hace login, su amigo aparece en neblla.friends (si concedió discoverable), y con neblla.invitedBy.userId se le puede meter a una sala al instante.
Comunicaciones dev↔usuario
Canal para que el usuario hable con el desarrollador sin salir de la app. Requiere login. Hay que activar el feature: inbox: true en la config del dashboard (o vía neblla_update_app desde el MCP). Sin ese flag, las llamadas a sendCommunication no se materializan en el backoffice.
const { communication } = await neblla.sendCommunication({
message: 'Encontré un typo en la pantalla de resultados',
data: { type: 'bug' }
});
Firma completa: neblla.sendCommunication({ message, data?, dateFrom?, dateTo?, thread? }) (CLIENT).
El desarrollador lo ve en el backoffice de developers.neblla.com — con el id del usuario, la fecha, la categoría asignada en data.type — y puede responder desde allí. El evento communicationUpdated avisa en cliente de cualquier cambio en tiempo real:
neblla.on('communicationUpdated', ({ communication, action }) => {
if (action === 'created' && communication.from === 'dev') {
showToast('Tienes respuesta del desarrollador');
}
});
Otros métodos:
neblla.updateCommunication(commId, {...})(CLIENT) — edita una comunicación propia (mientras no esté marcada como leída).neblla.deleteCommunication(id)(CLIENT) — borra la suya.
Eventos: 'communications' (CLIENT) — sync inicial; 'communicationUpdated' (CLIENT) — { communication, action }.
Propiedad: neblla.communications (CLIENT) — array de comunicaciones del usuario.