Sendgrid-nodejs: les substitutions ne fonctionnent pas dans les modèles transactionnels

Créé le 8 déc. 2017  ·  20Commentaires  ·  Source: sendgrid/sendgrid-nodejs

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

Résumé de la question

Les substitutions ne fonctionnent pas lors de l'utilisation de cette bibliothèque. Cela fonctionne lors de l'utilisation de curl.

Étapes à suivre pour reproduire

  1. Créez un modèle d'e-mail transactionnel dans votre compte SendGrid
  2. Avoir soit <% body%> dans le modèle,% firstName% ou les deux (j'ai essayé les deux)
  3. Exécutez ce code de nœud (remplissez la configuration)
`'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. Notez que rien ne sera remplacé dans l'e-mail livré. Encore une fois, cela fonctionne parfaitement avec curl.

Je joins également une capture d'écran du modèle dans l'éditeur SendGrid et l'e-mail que je reçois
screenshot from 2017-12-08 10-36-26

Détails techniques:

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

Commentaire le plus utile

À tout le monde aussi désespéré que moi hier: dans l'API v3, vous devez utiliser dynamic_template_data au lieu de substitutions , ce n'est encore documenté nulle part!

Ensuite, utilisez {{var_name}} dans le modèle d'e-mail et dynamic_template_data: { var_name: "var_value" } dans l'appel API.

Tous les 20 commentaires

@MaciejKrawczyk Avez-vous essayé d'utiliser setSubstitutionWrapper et d'omettre les wrappers de substitutions ?

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

Je ne sais pas comment vous feriez plusieurs wrappers à la fois de cette façon, mais j'ai pu faire en sorte que les sous-marins travaillent avec cette version en ne spécifiant pas les wrappers dans l'attribut de substitution. Mes sous-marins ressemblent à
emailOptions.substitutions = {}
emailOptions.substitutions.CLIENT_NAME = myClientName

Ça marche. Merci!

Merci d'être intervenu pour aider @kmcurry!

Je suis content que vous soyez opérationnel @MaciejKrawczyk!

Cela devrait être définitivement mis dans le README! Cela m'a coûté 2 heures pour comprendre cela!

@LASkuma ,

Ce n'est pas bon :(

Cette documentation vous aide-t-elle? Dans l'affirmative, pouvez-vous m'indiquer où vous avez d'abord cherché de l'aide afin que je puisse m'assurer que nous avons un lien clair là-bas?

Merci!

Meilleures salutations,

Elmer

@thinkingserious Oui. Ce doc a beaucoup aidé. Cependant, comme je viens du site officiel, où les clés de substitution devraient inclure le wrapper, je n'ai pas accordé trop d'attention aux cas d'utilisation.

Salut @LASkuma ,

Lorsque vous dites que vous venez du site officiel, pourriez-vous s'il vous plaît me faire savoir à quelle URL vous faites référence? Merci!

Salut @thinkingserious ,
Je faisais référence à cette page . Même la section d'essai a des clés de substitution avec les wrappers inclus. Après avoir lu la documentation, j'ai pensé que la bibliothèque Node était naturellement cohérente avec la documentation.

Merci @LASkuma!

Ce sont des commentaires vraiment utiles.

Je ne suis pas tout à fait sûr de la solution. Ces documents sont destinés à ceux qui souhaitent interagir directement avec notre API plutôt que d'utiliser l'une de nos bibliothèques d'aide.

Vous avez mentionné précédemment que nous devrions inclure cette documentation dans le fichier README. Voulez-vous dire ici ? Devrions-nous appeler spécifiquement le cas d'utilisation de substitution ici?

Merci encore pour votre aide!

Meilleures salutations,

Elmer

Cela devrait certainement être sur le readme. J'ai tout essayé, j'ai lu tous les documents sur la référence de l'API SendGrid, tout ce qui se trouve sur GitHub (je pensais), j'ai contacté le support et je créerais mon propre wrapper d'API si ce n'était pour

Merci @MaciejKrawczyk ,

Ce sont de très bons retours et j'ai ajouté cela au backlog de notre équipe pour une plongée plus profonde. Nous fournirons des mises à jour sur ce fil.

Merci!

Meilleures salutations,

Elmer

Est-ce fait? J'ai le même problème;

Salut @sriharrsha ,

Avez-vous essayé la suggestion de @kmcurry ?

Pas encore. Je mettrai à jour si cela fonctionne ou pas bientôt.
Désolé pour la réponse tardive.

À tout le monde aussi désespéré que moi hier: dans l'API v3, vous devez utiliser dynamic_template_data au lieu de substitutions , ce n'est encore documenté nulle part!

Ensuite, utilisez {{var_name}} dans le modèle d'e-mail et dynamic_template_data: { var_name: "var_value" } dans l'appel API.

@tkafka oh mon dieu! merci pour cet homme, qui m'arrache les cheveux depuis 2 jours.

@tkafka Merci beaucoup! C'est tellement frustrant! Cela m'a pris 3 heures de ma journée ...

Voici le code complet au cas où quelqu'un chercherait le même:

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 documentation de sendgrid est pour le moins horrible.

Bonjour tout le monde,

Veuillez consulter ce numéro pour connaître la progression. Nous travaillons actuellement sur la mise à jour pour C #, puis Java, puis ce SDK est juste après cela. Merci pour votre patience et mes excuses pour le retard.

Meilleures salutations,

Elmer

Hah, dynamic_template_data . J'ai résolu votre petit puzzle! :sourire:

Pour les autres utilisateurs dactylographiés - Créez le fichier 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};
    }
}

Merci @xduseko !

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

Questions connexes

polkhovsky picture polkhovsky  ·  3Commentaires

Chrischuck picture Chrischuck  ·  3Commentaires

TobiahRex picture TobiahRex  ·  3Commentaires

danielflippance picture danielflippance  ·  4Commentaires

umarhussain15 picture umarhussain15  ·  3Commentaires