SDK Ruby
RubyGems: coffeemail v0.1.0Referencia completa de la gema oficial coffeemail para Ruby 3.3+. Sin dependencias de runtime, modelos inmutables, retorno seguro data, error, tipos RBS y verificación de webhooks.
¿Buscas la documentación para Node.js o TypeScript? Consulta la referencia oficial del paquete @coffeemail/node.
Instalación
rubygems.org/gems/coffeemail ↗Inicialización del Cliente
Sin api_key:, la clave se lee de la variable de entorno COFFEEMAIL_API_KEY. El cliente es inmutable y puede compartirse entre hilos.
CoffeeMail::Client.new(api_key: nil, locale: "pt-BR", timeout: 10, retry_policy: nil, transport: nil)Retorno Seguro y Manejo de Errores
Patrón Seguro data, errorCada operación devuelve un CoffeeMail::Response con data o error. Desestructura con data, error = ..., usa pattern matching o llama a unwrap! para lanzar el error tipado.
Validación Criptográfica de Webhooks
CoffeeMail::Webhook.from_rack valida el header x-webhook-signature (HMAC SHA-256 de timestamp, clave de idempotencia y cuerpo bruto) en tiempo constante y rechaza entregas fuera de la ventana de 5 minutos.
Catálogo de Métodos
Referencia de las operaciones más usadas del cliente oficial para Ruby.
Emails
client.emails.send(from:, to:, subject: nil, html: nil, text: nil, idempotency_key: nil, sandbox: false, **) -> Response[SendEmailResult]client.emails.send_batch(items) -> Response[Array[BatchSendItem]]client.emails.get(id) -> Response[EmailDetail]client.emails.list(status: nil, after: nil, limit: nil, **) -> Response[EmailList]Dominios
client.domains.create(name:) -> Response[CreatedDomain]client.domains.verify(id) -> Response[DomainVerification]Plantillas
client.templates.create(name:, html:, alias: nil, subject: nil, format: nil, **) -> Response[TemplateDetail]client.templates.preview_by_id(id, variables: nil) -> Response[RenderedTemplate]Audiencias y Contactos
client.audiences.contacts.create(audience_id, email:, first_name: nil, last_name: nil, metadata: nil) -> Response[Contact]Broadcasts
client.broadcasts.create(audience_id:, from_email:, template_id: nil, subject: nil, **) -> Response[BroadcastDetail]Supresiones
client.suppressions.create(email:, reason: nil, expires_at: nil) -> Response[SuppressionDetail]Webhooks
client.webhooks.create(url:, events:, description: nil) -> Response[WebhookDetail]CoffeeMail::Webhook.from_rack(request, secret:, tolerance: 300) -> Response[Webhook::Event]Métricas
client.stats.get(start_date: nil, end_date: nil, granularity: nil, **) -> Response[Stats]