Audiencias y Contactos
Una audiencia (audience) en Resend es un grupo de contactos a los que puedes enviar broadcasts -- emails de marketing, newsletters o comunicaciones masivas. Es el equivalente a una lista de suscriptores.
Audiencias son solo para broadcasts
Las audiencias son exclusivamente para broadcasts (emails masivos como newsletters). Para emails transaccionales (confirmaciones de cuenta, reset de contraseña, notificaciones) no necesitas audiencias. Esos los envías directamente con resend.emails.send() al destinatario específico.
Crear una audiencia
Desde el dashboard
- Ve al dashboard de Resend
- Haz clic en Audiences en el menú lateral
- Haz clic en Create Audience
- Escribe un nombre descriptivo (por ejemplo "Newsletter" o "Usuarios Pro")
- Haz clic en Create
Por API
import { Resend } from 'resend'
const resend = new Resend(process.env.RESEND_API_KEY)
const { data, error } = await resend.audiences.create({
name: 'Newsletter',
})
// data.id contiene el ID de la audiencia (aud_xxxx)
console.log(data?.id)Agregar contactos
Cada contacto tiene un email, nombre opcional y un flag de suscripción.
Por API
const { data, error } = await resend.contacts.create({
audienceId: 'aud_xxxx',
email: 'usuario@ejemplo.com',
firstName: 'Juan',
lastName: 'Pérez',
unsubscribed: false,
})Los campos firstName, lastName y unsubscribed son opcionales. Si no pasas unsubscribed, el valor por defecto es false (suscrito).
Agrega contactos después del registro
Puedes agregar contactos a tu audiencia de forma programática justo después de que un usuario se registra en tu app. Así lo agregas a tu newsletter automáticamente sin que tenga que suscribirse por separado:
// En tu lógica de registro de usuarios
async function registrarUsuario(email: string, nombre: string) {
// 1. Crear usuario en tu base de datos
const usuario = await db.usuarios.create({ email, nombre })
// 2. Agregarlo a la audiencia de newsletter
await resend.contacts.create({
audienceId: process.env.RESEND_AUDIENCE_ID!,
email: usuario.email,
firstName: nombre,
unsubscribed: false,
})
// 3. Enviar email de bienvenida (transaccional, sin audiencia)
await resend.emails.send({
from: 'Mi App <noreply@midominio.com>',
to: [email],
subject: 'Bienvenido a Mi App',
react: WelcomeEmail({ nombre }),
})
}Agregar múltiples contactos
Para agregar varios contactos a la vez, puedes iterar sobre un array:
const contactos = [
{ email: 'ana@ejemplo.com', firstName: 'Ana' },
{ email: 'carlos@ejemplo.com', firstName: 'Carlos' },
{ email: 'maria@ejemplo.com', firstName: 'María' },
]
for (const contacto of contactos) {
await resend.contacts.create({
audienceId: 'aud_xxxx',
email: contacto.email,
firstName: contacto.firstName,
unsubscribed: false,
})
}Importar desde CSV
Si ya tienes una lista de contactos, puedes importarlos desde el dashboard:
- Ve a tu audiencia en Audiences
- Haz clic en Import contacts
- Sube un archivo CSV con las columnas:
email,first_name,last_name,unsubscribed - Resend procesa el archivo y agrega los contactos
Listar contactos
Para obtener todos los contactos de una audiencia:
const { data, error } = await resend.contacts.list({
audienceId: 'aud_xxxx',
})
// data.data es un array de contactos
data?.data.forEach((contacto) => {
console.log(contacto.email, contacto.firstName)
})Obtener un contacto específico
const { data, error } = await resend.contacts.get({
audienceId: 'aud_xxxx',
id: 'contacto_id',
})Actualizar un contacto
const { data, error } = await resend.contacts.update({
audienceId: 'aud_xxxx',
id: 'contacto_id',
unsubscribed: true,
})Eliminar un contacto
const { data, error } = await resend.contacts.remove({
audienceId: 'aud_xxxx',
id: 'contacto_id',
})También puedes eliminar por email:
const { data, error } = await resend.contacts.remove({
audienceId: 'aud_xxxx',
email: 'usuario@ejemplo.com',
})Unsubscribe automático
Cuando envías un broadcast a través de Resend, el email incluye automáticamente un link de unsubscribe (darse de baja) en el footer. Esto es obligatorio por ley en la mayoría de países (CAN-SPAM en EE.UU., RGPD en Europa).
Cuando un contacto hace clic en el link de unsubscribe, Resend actualiza automáticamente su campo unsubscribed a true y no le envía más broadcasts. No necesitas implementar esta lógica manualmente.
Listar audiencias
Si tienes múltiples audiencias, puedes listarlas:
const { data, error } = await resend.audiences.list()
data?.data.forEach((audiencia) => {
console.log(audiencia.id, audiencia.name)
})Eliminar una audiencia
const { data, error } = await resend.audiences.remove({
id: 'aud_xxxx',
})Eliminar una audiencia es irreversible
Al eliminar una audiencia se eliminan todos sus contactos. No hay forma de recuperarlos. Exporta tus contactos antes de eliminar una audiencia si necesitas conservar la lista.