Sendgrid-nodejs: Les substitutions de Sendgrid v3 Nodejs dans les modèles ne fonctionnent pas

Créé le 18 avr. 2018  ·  15Commentaires  ·  Source: sendgrid/sendgrid-nodejs

Salut,

Dans le package sendgrid nodejs npm, j'ai rencontré un problème. Je suis capable d'envoyer des e-mails avec des substitutions et un modèle, mais le problème est dans l'e-mail à la fin du client, les substitutions% name%,% company% etc. ne sont pas remplacées par la valeur.

Extrait de code
const sgMail = require ('@ sendgrid / mail');
sgMail.setApiKey (sendgrid_key);
var msg =
{
"personnalisations": [{
"à": [{
"email": " [email protected] ",
"name": "Some Company"
}],
"substitutions": {
"% name%": "Jean",
"% company%": "Une société",
"% business%": "Pheny plus rapide"
},
"subject": "Facture pour une entreprise!"
}],
"de": {
"email": "CompanyA [email protected] ",
"name": "CompanyA"
},
"répondre à": {
"email": " [email protected] ",
"name": "Service client"
},
"subject": "Facture pour une entreprise!",
"template_id": "93f052da-08d4-46f2-8f0c-f2a193bceea0"
};

sgMail
.send (msg)
.then (() => {
console.log ('SendGrid :: Réponse après l'envoi d'un e-mail avec succès!');
})
.catch (erreur => {
console.error ('Erreur SendGrid :::' + error.toString ());
});

Le code est exécuté et reçoit des e-mails sans substitutions pour% name%,% business%,% company%


Maintenant, j'ai essayé d'utiliser le site Web sengrid https://sendgrid.com/docs/API_Reference/api_v3.html
Il envoie un e-mail parfait sans aucun problème et toutes les substitutions sont effectuées correctement.

Quel est le problème dans le code javascript npm que j'utilise pour définir les valeurs dans sgMail.send (msg)?

Demandez votre aide.

question

Commentaire le plus utile

Sendgrid v3 nécessite de remplacer les substitutions par dynamic_template_data quelque chose comme ceci:

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

Tous les 15 commentaires

Il semble que vous manquez les wrappers de substitution. Je viens d'utiliser l'exemple qu'ils ont utilisé dans ce cas d'utilisation avec un modèle simple, et cela fonctionne.

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);

Mon modèle se compose uniquement de cet extrait de code:

<%body%> {{name}}

Apparemment, la partie <%body%> est obligatoire.

Peut-être que vous pouvez essayer de définir vos wrappers sur quelque chose comme {{ , }} , ou autre chose (ou % , % dans votre cas), aussi, remarquez que l'exemple n'inclut pas les wrappers dans l'objet de substitution, juste le nom de la substitution.

Essayez avec quelque chose comme ceci:

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

Fantastique. Ça a marché. Merci beaucoup. Substitution Wrapper est ce qui manquait.

Merci pour la réponse complète. Bon codage!

@adamreisnz ,

Peut-être devrions-nous appeler sgMail.setSubstitutionWrappers('{{', '}}'); par défaut pour éviter ce genre de problème à l'avenir. Qu'est-ce que tu penses?

@adamreisnz ,

Peut-être que nous essayons de détecter quelques wrappers courants, tels que% ou _?

Ce sera génial. Lorsque l'utilisateur via le portail Sendgrid crée / conçoit le modèle, le portail insère par défaut la substitution% body% et% name%. Donc, naturellement, l'utilisateur pensera ne pas changer le caractère% et continuera avec le modèle car il n'est pas pleinement conscient de la fonctionnalité. Si Sendgrid peut suggérer que% peut être remplacé par n'importe quel caractère ou si la fonctionnalité préfère {{}}, alors l'utilisateur l'utilisera ou le modèle qui charge les paramètres par défaut remplace% par {{en premier lieu. Cela évitera le problème auquel j'ai été confronté.

Je n'aime pas trop la détection automatique, à moins que ce ne soit un algorithme très robuste. Le problème en essayant de rendre le processus trop intelligent est que cela peut conduire à des erreurs potentiellement difficiles à déboguer. Et si quelqu'un utilise _ pour mettre l'accent? Par exemple, vraiment souligné. Cela ne signifie pas que le symbole _ est le wrapper de substitution. De même avec % , vous pouvez l'utiliser pour des pourcentages et cela pourrait faire croire à l'algorithme que vous l'utilisez comme un wrapper de substitution là où vous ne l'êtes pas.

Puisque Sendgrid passe aux modèles de guidons, qui utilisent {{ et }} comme wrappers de substitution, je pense que c'est une valeur par défaut raisonnable. Il y a une raison pour laquelle ces caractères sont utilisés comme enveloppes de substitution dans des langues comme le guidon, car ils ne sont pas très courants dans la langue normale. Le trait de soulignement et le pourcentage sont plus courants et donc potentiellement sujets à une mauvaise interprétation.

Je pense que c'est juste une question de bien documenter cela pour que ce soit clair. Avec la possibilité de spécifier votre propre wrapper, l'utilisateur doit avoir tout ce dont il a besoin pour le faire fonctionner.

Si quelqu'un a une idée de détection automatique robuste, j'aimerais voir un pseudo-algorithme capable de bien gérer tous les scénarios et tous les wrappers possibles, tout en évitant les faux positifs.

Pensées?

Se mettre d'accord. Les mises à jour de la documentation seront la meilleure option.

@adamreisnz @vinvantest est d' accord, veuillez consulter https://github.com/sendgrid/sendgrid-nodejs/issues/681 pour connaître les progrès.

Sendgrid v3 nécessite de remplacer les substitutions par dynamic_template_data quelque chose comme ceci:

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

@goelmk ,

Voici un exemple complet. Merci!

Meilleures salutations,

Elmer

Très déroutant que vous devez utiliser dynamic_template_data
Ce serait bien de mettre à jour la documentation https://sendgrid.com/docs/API_Reference/api_v3.html

J'ai essayé de suivre l' exemple le plus récent de
Mon modèle a été créé à l'aide de votre éditeur WYSIWYG et j'ai essayé de mettre {{verifyUrl}} à la fois dans un composant de texte et dans le lien URL d'un composant de bouton. ni ne fonctionne.

@shawnkoh L' avez-vous résolu? J'ai également créé le modèle avec le concepteur visuel et la substitution ne fonctionne pas.

Cette page vous a été utile?
0 / 5 - 0 notes