Sendgrid-nodejs: Sendgrid v3 Nodejs substituições em modelos não funcionam

Criado em 18 abr. 2018  ·  15Comentários  ·  Fonte: sendgrid/sendgrid-nodejs

Oi,

No pacote npm sendgrid nodejs, encontrei um problema. Posso enviar e-mails com substituições e modelo, mas o problema está no e-mail do cliente final% name%,% company% etc. as substituições não são substituídas pelo valor.

Fragmento de código
const sgMail = require ('@ sendgrid / mail');
sgMail.setApiKey (sendgrid_key);
var msg =
{
"personalizações": [{
"para": [{
"email": " [email protected] ",
"name": "Alguma Empresa"
}],
"substituições": {
"% name%": "John",
"% company%": "Alguma empresa",
"% business%": "Faster Pheny"
},
"assunto": "Fatura para alguma empresa!"
}],
"a partir de": {
"email": "CompanyA [email protected] ",
"nome": "Empresa A"
},
"responder a": {
"email": " [email protected] ",
"nome": "Atendimento ao cliente"
},
"subject": "Invoice For Some Company!",
"template_id": "93f052da-08d4-46f2-8f0c-f2a193bceea0"
};

sgMail
.send (msg)
.então (() => {
console.log ('SendGrid :: Resposta após envio de email com sucesso!');
})
.catch (erro => {
console.error ('Erro SendGrid :::' + error.toString ());
});

O código é executado e recebe e-mail sem substituições para% name%,% business%,% company%


Agora tentei usar o site sengrid https://sendgrid.com/docs/API_Reference/api_v3.html
Envia e-mail perfeito sem problemas e todas as substituições são feitas corretamente.

O que há de errado no código javascript npm que estou usando para definir os valores em sgMail.send (msg)?

Peça sua ajuda.

question

Comentários muito úteis

Sendgrid v3 requer a substituição de substituições por dynamic_template_data algo assim:

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 comentários

Parece que você está perdendo os wrappers de substituição. Acabei de usar o exemplo que eles usaram neste caso de uso com um modelo simples e 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);

Meu modelo consiste apenas neste snippet de código:

<%body%> {{name}}

Aparentemente, a parte <%body%> é obrigatória.

Talvez você possa tentar definir seus invólucros para algo como {{ , }} ou outra coisa (ou % , % no seu caso), também, observe que o exemplo não inclui os invólucros no objeto de substituição, apenas o nome da substituição.

Experimente algo assim:

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

Fantástico. Funcionou. Muito obrigado. Wrapper de substituição é o que estava faltando.

Obrigado pela resposta completa. Boa codificação!

@adamreisnz ,

Talvez devêssemos chamar sgMail.setSubstitutionWrappers('{{', '}}'); por padrão para evitar esse tipo de problema no futuro. O que você acha?

@adamreisnz ,

Talvez tentemos detectar alguns wrappers comuns, como% ou _?

Isso vai ser incrível. Quando o usuário através do portal Sendgrid cria / projeta o modelo, o portal por padrão insere a substituição% body% e% name%. Então, naturalmente, o usuário pensará em não alterar o caractere% e continuará com o modelo, pois ele não está totalmente ciente da funcionalidade. Se Sendgrid pode sugerir que% pode ser alterado para qualquer caractere ou o recurso preferir {{}} então o usuário irá usá-lo ou o modelo que carrega as configurações padrão substituirá% por {{em primeiro lugar. Isso vai evitar o problema que enfrentei.

Não gosto muito de detecção automática, a menos que seja um algoritmo muito robusto. O problema de tentar tornar o processo muito inteligente é que isso pode levar a erros potencialmente difíceis de depurar. E se alguém usar _ para dar ênfase? Por exemplo, _realmente_ enfatizado. Isso não significa que o símbolo _ seja o invólucro de substituição. O mesmo com % , você pode usá-lo para porcentagens e pode enganar o algoritmo fazendo-o pensar que você o está usando como um wrapper de substituição, onde não está.

Como Sendgrid está mudando para modelos de guidão, que usam {{ e }} como wrappers de substituição, acho que esse é um padrão sensato de se ter. Há uma razão para esses caracteres serem usados ​​como wrappers de substituição em linguagens como o guidão, porque eles não são muito comuns na linguagem normal. O sublinhado e a porcentagem são mais comuns e, portanto, potencialmente sujeitos a erros de interpretação.

Acho que é apenas uma questão de documentar bem isso para deixar claro. Com a opção de especificar seu próprio wrapper, o usuário deve ter tudo o que precisa para fazê-lo funcionar.

Se alguém tiver uma ideia para detecção automática robusta, adoraria ver um pseudo algoritmo que pode lidar bem com todos os cenários e todos os envoltórios possíveis, evitando falsos positivos.

Pensamentos?

Aceita. Atualizações de documentação serão a melhor opção.

@adamreisnz @vinvantest concordou, consulte https://github.com/sendgrid/sendgrid-nodejs/issues/681 para ver o progresso.

Sendgrid v3 requer a substituição de substituições por dynamic_template_data algo assim:

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

@goelmk ,

Aqui está um exemplo completo. Obrigado!

Obrigado pela atenção,

Elmer

Muito confuso que você tenha que usar dynamic_template_data
Seria bom atualizar a documentação https://sendgrid.com/docs/API_Reference/api_v3.html

Tentei seguir o exemplo mais recente de
Meu modelo foi construído usando seu editor WYSIWYG e tentei colocar {{verifyUrl}} em um componente de texto e um link de url do componente de botão. nem funciona.

@shawnkoh Você resolveu? Também criei o modelo com o designer visual e a substituição não está funcionando.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

polkhovsky picture polkhovsky  ·  3Comentários

metalshan picture metalshan  ·  3Comentários

murphman300 picture murphman300  ·  4Comentários

Loriot-n picture Loriot-n  ·  4Comentários

umarhussain15 picture umarhussain15  ·  3Comentários