Agregar la Integración de SendGrid
SendGrid es un servicio basado en la nube para entregar correos electrónicos transaccionales y de marketing. Conectar esta integración permite que tu aplicación envíe correos electrónicos programáticamente (por ejemplo, correos de bienvenida, restablecimiento de contraseñas o notificaciones).
Pasos de Configuración
Sección titulada «Pasos de Configuración»Después de seleccionar SendGrid de la lista de integraciones, aparecerá un modal de configuración. Debes proporcionar las siguientes credenciales para establecer la conexión:
1. API Key
Sección titulada «1. API Key»Este es el token de autenticación generado dentro de tu cuenta de SendGrid.
- Entrada: Pega tu API Key privada de SendGrid en el campo de texto.
- Ayuda: Si no tienes una, haz clic en el enlace “¿Dónde encontrar la API Key?” proporcionado en el modal para obtener instrucciones sobre cómo generarla.
2. Ambiente
Sección titulada «2. Ambiente»Especifica el contexto del ambiente para esta integración.
- Entrada: Ingresa el identificador del ambiente (por ejemplo,
Production,Stagingo una etiqueta de configuración específica) en el campo Ambiente.
Finalizar la Conexión
Sección titulada «Finalizar la Conexión»Una vez que los campos estén llenos:
- Revisa la barra de estado (actualmente muestra Not Connected).
- Haz clic en el botón negro Add en la parte inferior derecha para guardar las credenciales y activar la integración.


Referencia de API de Integración SendGrid
Sección titulada «Referencia de API de Integración SendGrid»Configuración de SendGrid
Sección titulada «Configuración de SendGrid»Configurar API Key de SendGrid
Sección titulada «Configurar API Key de SendGrid»Configura la API key de SendGrid para un proyecto y ambiente específico.
Mutation:
mutation { sendgrid_configureSendGrid ( apiKey: "SG._api_key_here" )}Envío de Correos Electrónicos
Sección titulada «Envío de Correos Electrónicos»Enviar Correo Simple
Sección titulada «Enviar Correo Simple»Envía un correo electrónico a uno o múltiples destinatarios.
Mutation:
mutation sendgrid_sendEmail { sendgrid_sendEmail ( email: { from: { email: "sender@archie.com", name: "Sender Name" }, subject: "Test Email", to: { email: "recipient@gmail.com", name: "Recipient Name" }, content: { type: "text/html", value: "<h1>Hello World</h1><p>This is a test email.</p>" } } ) { messageId success }}Response:
{ "data": { "sendgrid_sendEmail": { "messageId": "sent-1234567890", "success": true } }}Enviar Correo con CC y BCC
Sección titulada «Enviar Correo con CC y BCC»Mutation:
mutation sendgrid_sendEmail { sendgrid_sendEmail ( email: { from: { email: "sender@example.com" name: "Sender Name" } to: [ { email: "recipient@example.com" name: "Recipient Name" } ] cc: [ { email: "cc@example.com" name: "CC Recipient" } ] bcc: [ { email: "bcc@example.com" } ] subject: "Email with CC and BCC" content: [ { type: "text/html" value: "<h1>Hello</h1><p>This email has CC and BCC recipients.</p>" } ] } ) { messageId success }}Enviar Correo con Archivos Adjuntos
Sección titulada «Enviar Correo con Archivos Adjuntos»Mutation:
mutation sendgrid_sendEmail { sendgrid_sendEmail( email: { from: { email: "sender@example.com" name: "Sender Name" } to: [ { email: "recipient@example.com" name: "Recipient Name" } ] subject: "Email with Attachment" content: [ { type: "text/html" value: "<h1>Hello</h1><p>Please find attached file.</p>" } ] attachments: [ { content: "SGVsbG8gV29ybGQ=" type: "text/plain" filename: "document.txt" disposition: "attachment" } ] } ) { messageId success }}Nota: El campo content en los archivos adjuntos debe estar codificado en Base64.
Enviar Correo con Categorías y Etiquetas
Sección titulada «Enviar Correo con Categorías y Etiquetas»Mutation:
mutation sendgrid_sendEmail { sendgrid_sendEmail( email: { from: { email: "sender@example.com" name: "Sender Name" } to: [ { email: "recipient@example.com" name: "Recipient Name" } ] subject: "Categorized Email" content: [ { type: "text/html" value: "<h1>Hello</h1>" } ] categories: ["transactional", "notification"] tags: ["important", "urgent"] } ) { messageId success }}Enviar Correo Programado
Sección titulada «Enviar Correo Programado»Mutation:
mutation sendgrid_sendEmail { sendgrid_sendEmail( email: { from: { email: "sender@example.com" name: "Sender Name" } to: [ { email: "recipient@example.com" name: "Recipient Name" } ] subject: "Scheduled Email" content: [ { type: "text/html" value: "<h1>Hello</h1>" } ] sendAt: "2025-12-25T10:00:00Z" } ) { messageId success }}Enviar Correo con Argumentos Personalizados
Sección titulada «Enviar Correo con Argumentos Personalizados»Mutation:
mutation sendgrid_sendEmail { sendgrid_sendEmail( email: { from: { email: "sender@example.com" name: "Sender Name" } to: [ { email: "recipient@example.com" name: "Recipient Name" } ] subject: "Email with Custom Args" content: [ { type: "text/html" value: "<h1>Hello</h1>" } ] customArgs: { orderId: "12345" userId: "67890" campaignId: "abc123" } } ) { messageId success }}Envío de Correos Masivos
Sección titulada «Envío de Correos Masivos»Enviar Múltiples Correos
Sección titulada «Enviar Múltiples Correos»Mutation:
mutation sendgrid_sendBulkEmail { sendgrid_sendBulkEmail( emails: { emails: [ { from: { email: "sender@example.com" name: "Sender Name" } to: [ { email: "recipient1@example.com" name: "Recipient 1" } ] subject: "Bulk Email 1" content: [ { type: "text/html" value: "<h1>Email 1</h1>" } ] } { from: { email: "sender@example.com" name: "Sender Name" } to: [ { email: "recipient2@example.com" name: "Recipient 2" } ] subject: "Bulk Email 2" content: [ { type: "text/html" value: "<h1>Email 2</h1>" } ] } ] } ) { messageIds success }}Response:
{ "data": { "sendgrid_sendBulkEmail": { "messageIds": ["sent-1234567890", "sent-1234567891"], "success": true } }}Enviar Correos con Plantillas
Sección titulada «Enviar Correos con Plantillas»Enviar Correo usando Plantilla Dinámica
Sección titulada «Enviar Correo usando Plantilla Dinámica»Mutation:
mutation sendgrid_sendTemplate { sendgrid_sendTemplate( email: { from: { email: "sender@example.com" name: "Sender Name" } to: [ { email: "recipient@example.com" name: "Recipient Name" } ] templateId: "d-1234567890abcdef" substitutions: { name: "John Doe" orderNumber: "12345" totalAmount: "$99.99" } } ) { messageId success }}Response:
{ "data": { "sendgrid_sendTemplate": { "messageId": "sent-1234567890", "success": true } }}Gestión de Contactos
Sección titulada «Gestión de Contactos»Agregar Contacto
Sección titulada «Agregar Contacto»Mutation:
mutation sendgrid_addContact { sendgrid_addContact( contact: { email: "newcontact@example.com" firstName: "John" lastName: "Doe" customFields: { company: "Acme Corp" phone: "+1234567890" position: "Developer" } listIds: ["list-id-1", "list-id-2"] } )}Response:
{ "data": { "sendgrid_addContact": true }}Actualizar Contacto
Sección titulada «Actualizar Contacto»Mutation:
mutation sendgrid_updateContact { sendgrid_updateContact( contact: { email: "existing@example.com" firstName: "Jane" lastName: "Smith" customFields: { company: "New Company" phone: "+0987654321" } } )}Response:
{ "data": { "sendgrid_updateContact": true }}Eliminar Contacto
Sección titulada «Eliminar Contacto»Mutation:
mutation sendgrid_deleteContact { sendgrid_deleteContact( email: "contact@example.com" )}Response:
{ "data": { "sendgrid_deleteContact": true }}Analíticas y Estadísticas
Sección titulada «Analíticas y Estadísticas»Obtener Estadísticas de Correo
Sección titulada «Obtener Estadísticas de Correo»Query:
query sendgrid_getEmailStats { sendgrid_getEmailStats ( startDate: "2025-01-01" endDate: "2025-01-31" ) { opens clicks bounces spamReports delivered startDate endDate }}Response:
{ "data": { "sendgrid_getEmailStats": { "opens": 150, "clicks": 75, "bounces": 5, "spamReports": 2, "delivered": 1000, "startDate": "2025-01-01T00:00:00Z", "endDate": "2025-01-31T00:00:00Z" } }}Validar Correo Electrónico
Sección titulada «Validar Correo Electrónico»Query:
query sendgrid_validateEmail { sendgrid_validateEmail ( email: "test@example.com" ) { valid score local domain reason suggestions }}Response (con SendGrid Premium):
{ "data": { "sendgrid_validateEmail": { "valid": true, "score": 0.95, "local": "test", "domain": "example.com", "reason": "", "suggestions": [] } }}Response (Validación básica - cuando SendGrid Premium no está disponible):
{ "data": { "sendgrid_validateEmail": { "valid": true, "score": 0.8, "local": "test", "domain": "example.com", "reason": "Basic validation (SendGrid premium validation not available)", "suggestions": [] } }}Nota: El endpoint de validación de correo electrónico de SendGrid (/v3/validations/email) requiere permisos especiales y puede no estar disponible en todas las cuentas. Si tu API key no tiene acceso a este endpoint (error 403), el sistema usará automáticamente validación básica basada en regex como respaldo.
Ejemplos Completos con Variables
Sección titulada «Ejemplos Completos con Variables»Ejemplo con Variables GraphQL
Sección titulada «Ejemplo con Variables GraphQL»Request:
{ "query": "mutation SendEmail($email: EmailInput!) { sendgrid_sendEmail(email: $email) { messageId success } }", "variables": { "email": { "from": { "email": "sender@example.com", "name": "Sender Name" }, "to": [ { "email": "recipient@example.com", "name": "Recipient Name" } ], "subject": "Test Email", "content": [ { "type": "text/html", "value": "<h1>Hello World</h1>" } ] } }}Manejo de Errores
Sección titulada «Manejo de Errores»Ejemplo de Error
Sección titulada «Ejemplo de Error»Request:
{ "query": "mutation { sendgrid_sendEmail(email: { from: { email: \"invalid\" }, to: [], subject: \"Test\", content: [] }) { messageId success } }"}Response Error:
{ "errors": [ { "message": "validation error: at least one recipient is required", "path": ["sendgrid_sendEmail"] } ], "data": null}Errores Comunes
Sección titulada «Errores Comunes»-
ID de Proyecto faltante:
{"errors": [{"message": "project ID is required in context"}]} -
Configuración no encontrada:
{"errors": [{"message": "sendgrid configuration not found for project: xxx, environment: master"}]} -
API Key inválida:
{"errors": [{"message": "sendgrid API error: status 401, body: ..."}]}
Webhooks
Sección titulada «Webhooks»Endpoint de Webhooks
Sección titulada «Endpoint de Webhooks»El endpoint de webhooks está disponible en:
- HTTP:
POST http://localhost:8080/webhooks/sendgrid - Lambda:
POST /webhooks/sendgrid
Configuración de SendGrid
Sección titulada «Configuración de SendGrid»- Ve a SendGrid Dashboard > Settings > Mail Settings > Event Webhook
- Configura la URL:
https://tu-dominio.com/webhooks/sendgrid - Selecciona los eventos que deseas recibir
- Configura la clave de verificación en la variable de entorno
WEBHOOK_VERIFICATION_KEY
Eventos Soportados
Sección titulada «Eventos Soportados»processed: Correo procesadodelivered: Correo entregadoopened: Correo abiertoclicked: Enlace clickeadobounce: Correo rebotadodropped: Correo descartadospamreport: Reportado como spamunsubscribe: Desuscripción