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

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:

Eventos: 'communications' (CLIENT) — sync inicial; 'communicationUpdated' (CLIENT) — { communication, action }.

Propiedad: neblla.communications (CLIENT) — array de comunicaciones del usuario.