Sendgrid-nodejs: las sustituciones no funcionan en plantillas transaccionales

Creado en 8 dic. 2017  ·  20Comentarios  ·  Fuente: sendgrid/sendgrid-nodejs

screenshot from 2017-12-08 10-36-46

Resumen de asuntos

Las sustituciones no funcionan cuando se usa esta biblioteca. Funciona cuando se usa curl.

Pasos para reproducir

  1. Cree una plantilla de correo electrónico transaccional en su cuenta SendGrid
  2. Tener <% body%> en la plantilla,% firstName% o ambos (probé ambos)
  3. Ejecute este código de nodo (complete la configuración)
`'use strict';

var config = {

    apiKey: '',
    from: '',
    to: '',
    templateId: ''

}

const sgMail = require('@sendgrid/mail');
sgMail.setApiKey(config.apiKey);

async function sendTest() {

 var newMsg = {

   "from": {
    "name": "Test Script",
    "email": config.from
   },
   "personalizations": [{
    "to": config.to,
    "substitutions": {
     "-firstName-": "Maciejs", 
     "%firstName%": "Maciej",
     "-first_name": "Maciej",
     "%first_name%": "Maciej"
    }
   }],
   "subject": "test subject",
   "content": [{
     "type": "text/plain",
     "value": "Hello, %firstName%!"
    },
    {
     "type": "text/html",
     "value": "<html><p>Hello, %firstName%!</html> "
    }],
    "template_id": config.templateId
 }

   await sgMail.send(newMsg);

}

sendTest();`
  1. Tenga en cuenta que no se reemplazará nada en el correo electrónico entregado. Nuevamente, funciona perfectamente con rizos.

También adjunto una captura de pantalla de la plantilla en el editor SendGrid y el correo electrónico que recibo.
screenshot from 2017-12-08 10-36-26

Detalles técnicos:

  • sendgrid-nodejs Versión: 6.1.4
  • Versión de Node.js: 8.9.2
medium help wanted help wanted community enhancement up for grabs up-for-grabs

Comentario más útil

Para todos los que estaban tan desesperados como yo ayer: en la API v3, debes usar dynamic_template_data lugar de substitutions , ¡esto aún no está documentado en ninguna parte!

Luego use {{var_name}} en la plantilla de correo electrónico y dynamic_template_data: { var_name: "var_value" } en la llamada API.

Todos 20 comentarios

@MaciejKrawczyk ¿Ha intentado usar setSubstitutionWrapper y omitir los contenedores de substitutions ?

Ex:
sgMail.setSubstitutionWrappers('-', '-');
"substitutions": { "firstName": "Maciejs" }

No estoy seguro de cómo haría varios contenedores a la vez de esta manera, pero pude hacer que los subs trabajaran con esta versión al no especificar los contenedores en el atributo de sustitución. Mis sumisos parecen
emailOptions.substitutions = {}
emailOptions.substitutions.CLIENT_NAME = myClientName

Funciona. ¡Gracias!

¡Gracias por ayudar a @kmcurry!

¡Me alegro de que esté en funcionamiento @MaciejKrawczyk!

¡Definitivamente debería incluirse en el archivo README! ¡Me costó 2 horas resolver esto!

@LASkuma ,

Eso no es bueno :(

¿Ayuda esta documentación ? Si es así, ¿podría indicarme dónde buscó ayuda por primera vez para asegurarme de que tenemos un vínculo claro allí?

¡Gracias!

Con los mejores deseos,

Elmer

@thinkingserious Sí. Este documento ayudó mucho. Sin embargo, como vengo del sitio web oficial, donde las claves de sustitución deben incluir el contenedor, no presté demasiada atención a los casos de uso.

Hola @LASkuma ,

Cuando dice que viene del sitio web oficial, ¿podría decirme a qué URL se refiere? ¡Gracias!

Hola @thinkingserious ,
Me refería a esta página . Incluso la sección de prueba tiene claves de sustitución con los envoltorios incluidos. Después de leer la documentación, pensé que la biblioteca de Node era naturalmente consistente con la documentación.

¡Gracias @LASkuma!

Esa es una retroalimentación realmente útil.

Sin embargo, no estoy muy seguro de la solución. Esos documentos son para aquellos que desean interactuar con nuestra API directamente en lugar de usar una de nuestras bibliotecas auxiliares.

Anteriormente mencionó que deberíamos incluir esta documentación en el archivo README. ¿Quieres decir aquí ? ¿Deberíamos mencionar específicamente el caso de uso de sustitución allí?

¡De nuevo, gracias por tu ayuda!

Con los mejores deseos,

Elmer

Esto definitivamente debería estar en el archivo Léame. Intenté todo, leí todos los documentos en la referencia de la api de SendGrid, todo lo que está en GitHub (pensé), me comuniqué con el soporte y estaría haciendo mi propia envoltura de la api si no fuera por

Gracias @MaciejKrawczyk ,

Esta es una muy buena respuesta y la he agregado a la lista de trabajos pendientes de nuestro equipo para profundizar. Proporcionaremos actualizaciones sobre este hilo.

¡Gracias!

Con los mejores deseos,

Elmer

Esta hecho? Tengo el mismo problema;

Hola @sriharrsha ,

¿Has probado la sugerencia de @kmcurry ?

Aún no. Actualizaré si funciona o no pronto.
Lo siento por la respuesta tardía.

Para todos los que estaban tan desesperados como yo ayer: en la API v3, debes usar dynamic_template_data lugar de substitutions , ¡esto aún no está documentado en ninguna parte!

Luego use {{var_name}} en la plantilla de correo electrónico y dynamic_template_data: { var_name: "var_value" } en la llamada API.

@tkafka ¡ oh Dios mío! gracias por este hombre, me he estado tirando de los pelos durante los últimos 2 días.

@tkafka ¡ Muchas gracias! ¡Esto es tan frustrante! Me tomó 3 horas de mi día ...

Aquí está el código completo en caso de que alguien esté buscando lo mismo:

var sendgrid = require('@sendgrid/mail');
sendgrid.setApiKey(env.sendgridApiKey);
sendgrid.setSubstitutionWrappers('{{', '}}');

var newMsg = {
      "from": {
       "name": "Your Company",
       "email": env.businessEmail
      },
      "personalizations": [{
       "to": order.email,
       "dynamic_template_data": {"order_id": "1234", "first_name": "Max", "last_name": "Mustermann"}
      }],
      "subject": "test subject",
      "content": [{
        "type": "text/plain",
        "value": "Hello, {{firstName}}!"
       },
       {
        "type": "text/html",
        "value": "<html><p>Hello, {{'firstName}}!</html> "
       }],
       "template_id": env.sendgridOrderConfirmationTemplateId
    };
    console.log("Sending confirmation email...")
    return sendgrid.send(newMsg);

La documentación de sendgrid es horrible por decir lo menos.

Hola a todos,

Consulte este problema para conocer el progreso. Actualmente estamos trabajando en la actualización para C #, luego Java, luego este SDK está justo después de eso. Gracias por su paciencia y mis disculpas por el retraso.

Con los mejores deseos,

Elmer

Ja, dynamic_template_data . ¡Resolví tu pequeño rompecabezas! :sonreír:

Para otros usuarios de mecanografiado: cree el archivo mail.d.ts :

import {MailData} from "@sendgrid/helpers/classes/mail";

// see https://github.com/sendgrid/sendgrid-nodejs/issues/638

declare module "@sendgrid/helpers/classes/mail" {
    export interface MailData {
        dynamic_template_data: {[key: string]: string};
    }
}

¡Gracias @xduseko !

¿Fue útil esta página
0 / 5 - 0 calificaciones