Sendgrid-nodejs: Las sustituciones de Sendgrid v3 Nodejs en las plantillas no funcionan

Creado en 18 abr. 2018  ·  15Comentarios  ·  Fuente: sendgrid/sendgrid-nodejs

Hola,

En el paquete npm de sendgrid nodejs encontré un problema. Puedo enviar correos electrónicos con sustituciones y plantilla, pero el problema está en el correo electrónico al final del cliente,% name%,% company%, etc., las sustituciones no se reemplazan con el valor.

Fragmento de código
const sgMail = require ('@ sendgrid / mail');
sgMail.setApiKey (sendgrid_key);
var msg =
{
"personalizaciones": [{
"a": [{
"email": " [email protected] ",
"name": "Alguna empresa"
}],
"sustituciones": {
"% name%": "Juan",
"% company%": "Alguna empresa",
"% business%": "Faster Pheny"
},
"subject": "¡Factura de alguna empresa!"
}],
"de": {
"email": "CompanyA [email protected] ",
"nombre": "EmpresaA"
},
"responder a": {
"email": " [email protected] ",
"nombre": "Servicio al cliente"
},
"subject": "¡Factura de alguna empresa!",
"template_id": "93f052da-08d4-46f2-8f0c-f2a193bceea0"
};

sgMail
.enviar (mensaje)
.entonces (() => {
console.log ('SendGrid :: ¡Respuesta después de enviar un correo electrónico con éxito!');
})
.catch (error => {
console.error ('Error SendGrid :::' + error.toString ());
});

El código se ejecuta y recibe correo electrónico sin sustituciones de% name%,% business%,% company%


Ahora intenté usar el sitio web de sengrid https://sendgrid.com/docs/API_Reference/api_v3.html
Envía un correo electrónico perfecto sin problemas y todas las sustituciones se realizan correctamente.

¿Qué está mal en el código javascript npm que estoy usando para establecer los valores en sgMail.send (msg)?

Solicite su ayuda.

question

Comentario más útil

Sendgrid v3 requiere reemplazar las sustituciones con dynamic_template_data algo como esto:

const msg = {
    to: email,
    from: '[email protected]',
    subject: 'Sample Email Subject',
    templateId: 'your_template_id_here,
    substitutionWrappers: ['{{', '}}'],
    dynamic_template_data: {
      "data_item": "value" 
    }
   };

Todos 15 comentarios

Parece que te faltan los envoltorios de sustitución. Solo usé el ejemplo que usaron en este caso de uso con una plantilla simple, y funciona.

const sgMail = require('@sendgrid/mail');
sgMail.setApiKey(process.env.SENDGRID_API_KEY);
sgMail.setSubstitutionWrappers('{{', '}}'); // Configure the substitution tag wrappers globally
const msg = {
  to: '[email protected]',
  from: '[email protected]',
  subject: 'Hello world',
  text: 'Notification',
  html: '<p></p>',
  templateId: 'your-id-goes-here',
  substitutions: {
    name: 'John'
  },

};
sgMail.send(msg);

Mi plantilla consta solo de este fragmento de código:

<%body%> {{name}}

Aparentemente, la parte <%body%> es obligatoria.

Tal vez pueda intentar configurar sus envoltorios en algo como {{ , }} , o algo más (o % , % en su caso), también, aviso que el ejemplo no incluye los contenedores en el objeto de sustitución, solo el nombre de la sustitución.

Prueba con algo como esto:

"substitutions": {
  name: "John",
  company: "Some Company",
  business: "Faster Pheny"
},

Fantástico. Funcionó. Gracias una tonelada. Envoltorio de sustitución es lo que faltaba.

Gracias por la respuesta completa. ¡Feliz codificación!

@adamreisnz ,

Quizás deberíamos llamar a sgMail.setSubstitutionWrappers('{{', '}}'); de forma predeterminada para evitar este tipo de problemas en el futuro. ¿Qué piensas?

@adamreisnz ,

Tal vez intentemos detectar algunos contenedores comunes, como% o _?

Eso será genial. Cuando el usuario a través del portal Sendgrid crea / diseña la plantilla, el portal inserta por defecto la sustitución% body% y% name%. Entonces, naturalmente, el usuario pensará en no cambiar el carácter% y continuará con la plantilla, ya que no es completamente consciente de la funcionalidad. Si Sendgrid puede sugerir que% se puede cambiar a cualquier carácter o la función prefiere {{}}, entonces el usuario la usará o la plantilla que carga la configuración predeterminada reemplaza% con {{en primer lugar. Evitará el problema que enfrenté.

No me gusta la detección automática, a menos que sea un algoritmo muy robusto. El problema de intentar que el proceso sea demasiado inteligente es que puede provocar errores potencialmente difíciles de depurar. ¿Qué pasa si alguien usa _ como énfasis? Por ejemplo, _realmente_ enfatizado. Eso no significa que el símbolo _ sea ​​el contenedor de sustitución. Lo mismo con % , podría usarlo para porcentajes y podría engañar al algoritmo haciéndole creer que lo está usando como un contenedor de sustitución donde no lo está.

Dado que Sendgrid se está moviendo a las plantillas de manubrio, que usa {{ y }} como envoltorios de sustitución, creo que este es un valor predeterminado sensato. Hay una razón por la que esos caracteres se usan como envoltorios de sustitución en idiomas como manubrios, porque no son muy comunes en el lenguaje normal. El subrayado y el porcentaje son más comunes y, por lo tanto, son potencialmente propensos a interpretaciones erróneas.

Creo que es solo una cuestión de documentar esto bien para dejarlo claro. Con la opción de especificar su propio contenedor, el usuario debe tener todo lo que necesita para que funcione.

Si alguien tiene una idea para una detección automática sólida, me encantaría ver un pseudo algoritmo que pueda manejar bien todos los escenarios y todos los envoltorios posibles, evitando los falsos positivos.

Pensamientos?

De acuerdo. Las actualizaciones de la documentación serán la mejor opción.

@adamreisnz @vinvantest estuvo de acuerdo, consulte https://github.com/sendgrid/sendgrid-nodejs/issues/681 para ver el progreso.

Sendgrid v3 requiere reemplazar las sustituciones con dynamic_template_data algo como esto:

const msg = {
    to: email,
    from: '[email protected]',
    subject: 'Sample Email Subject',
    templateId: 'your_template_id_here,
    substitutionWrappers: ['{{', '}}'],
    dynamic_template_data: {
      "data_item": "value" 
    }
   };

@goelmk ,

A continuación se muestra un ejemplo completo. ¡Gracias!

Con los mejores deseos,

Elmer

Es muy confuso que tenga que usar dynamic_template_data
Sería bueno actualizar la documentación https://sendgrid.com/docs/API_Reference/api_v3.html

Intenté seguir el ejemplo más reciente de
Mi plantilla fue construida usando su editor WYSIWYG e intenté poner {{verifyUrl}} tanto en un componente de texto como en un enlace de URL del componente de botón. tampoco funciona.

@shawnkoh ¿Lo

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