Sendgrid-nodejs: Assunto não definido se estiver usando modelos dinâmicos

Criado em 7 nov. 2018  ·  29Comentários  ·  Fonte: sendgrid/sendgrid-nodejs

Eu estava tentando adicionar assunto ao meu e-mail com modelos dinâmicos, mas não está funcionando. Já é um bug conhecido? Você pode sugerir alguma solução alternativa para esse problema?

código do modelo:

<html>
<head>
  <title></title>
</head>
<body>
  <p> Hello <span>{{test_name}}!</span></p>
</body>
</html>

função enviar e-mail:

const sgMail = require('@sendgrid/mail');
sgMail.setApiKey(settings.sendgrid.api_key);
sgMail.setSubstitutionWrappers('{{', '}}');

const msg = {
    to: '[email protected]',
    from: settings.sendgrid.from,
    subject: 'Test Subject',
    templateId: settings.sendgrid.template_id,
    dynamic_template_data: {
    test_name: 'Testing Name'
    },
};

sgMail.send(msg);
question

Comentários muito úteis

Olá @jlouie ,

A sua área de assunto se parece com isso na IU?

screen shot 2019-01-24 at 1 30 06 pm

Obrigado pela atenção,

Elmer

Todos 29 comentários

Igual a # 834

@ 10kc-zack eu vejo. É um problema conhecido então.

A propósito, que solução alternativa você fez para corrigir isso?

@ nyel-dev A configuração do assunto do modelo no site SendGrid funciona. O problema é que parece que a API do SendGrid não permite que você forneça um modelo ao acionar um modelo dinâmico.

Olá @ nyel-dev,

Eu acredito que no modelo transacional você definiria o assunto como {{subject}}, então em seu código você definiria data.subject como "[TEST] My Email Subject" .

Isso funciona para você?

Obrigado pela atenção,

Elmer

Olá, @thinkingserious . Espero que você tenha informações adicionais.

Estou fazendo a transição de um modelo legado para o modelo transacional e estou tendo o mesmo problema agora (sendgrid-nodejs v6.3.1, Node: v8.11.4), mesmo depois de substituir o campo de assunto do modelo transacional por {{subject}} . Não defini explicitamente os invólucros de substituição via setSubstitutionWrappers() e acabei de voltar ao conjunto de guiador padrão (embora eu tenha tentado defini-los também durante o teste).

Confirmei que estou passando uma propriedade subject (sem aspas ou caracteres especiais) como msg.subject em meu primeiro caso de teste, msg.dynamic_template_data.subject em meu segundo caso de teste e com ambos definido para o meu terceiro caso de teste e os emails resultantes recebidos ainda não têm o assunto substituído como eu esperava. O assunto do e-mail mostra "(sem assunto)".

Porém, testar o próprio modelo no site sendgrid no modo de visualização e definir os dados de teste substitui o texto conforme o esperado.

Qualquer ajuda seria apreciada. Obrigado!

* EDITAR *
Devo também mencionar que as substituições no corpo da mensagem são substituídas conforme o esperado, mas não na linha de assunto.

Olá @jlouie ,

Aqui está um exemplo completo . Espero que ajude!

Obrigado pela atenção,

Elmer

@thinkingserious o assunto não

to: "[email protected]",
  from: "[email protected]",
  subject: "Hello world",
  text: "Hello plain world!",
  html: "<p>Hello HTML world!</p>",
  templateId: "d-xxxx",
  dynamic_template_data: {
    subject: "Testing Templates & Stuff",
    name: 'Some "Testing" One',
    city: "<b>Denver<b>"
  }

image

Olá @jlouie ,

Aqui está um exemplo completo . Espero que ajude!

Obrigado pela atenção,

Elmer

@thinkingserious : Infelizmente, não. Ainda estou tendo uma linha de assunto ausente no e-mail enviado / recebido, assim como @nicholasess.

Olá @jlouie ,

A sua área de assunto se parece com isso na IU?

screen shot 2019-01-24 at 1 30 06 pm

Obrigado pela atenção,

Elmer

A propósito, consegui resolver esse problema usando Set Subject na interface do template do Sendgrid. Obrigado @thinkingserious

Eu sugiro que as configurações mudem para o menu como código, dados de teste.
image

O local onde estão as configurações, fica escondido: /

Obrigado pelo feedback @nicholasess! Vou repassar para a equipe de design.

Eu encontrei o mesmo problema e tive que confiar nesta solução alternativa, mas não teria funcionado sem peneirar os problemas.

Isso é muito contra-intuitivo, pois o documento diz que você define o assunto na chamada da API (e detalha como você pode defini-lo globalmente para a mensagem e substituí-lo nas personalizações, o que obviamente é perdido com essa solução alternativa).

Também perdemos o recurso "assunto padrão definido na página de administração, que pode ser substituído na chamada de API". Não, com a solução alternativa, sempre temos que especificar um assunto para os modelos afetados.

(A menos que haja uma maneira de definir o padrão na {{}} interpolação. Vou verificar o documento para isso, o que descobri até agora é sobre um método de interpolação usando travessões, com o qual não estou completamente familiarizado.)

@thinkingserious

Por que este problema foi encerrado? Não é fixo.

Eu sei que pode parecer estranho, mas pessoal, certifique-se de que você não abriu janelas ou guias com a mesma tela. Sendgrid ui tem autosave que pode reescrever todos os dados que você salvou antes.

usar em assuntos {{assunto}}

e enviar como variável como outras variáveis,

assim funciona.

Fiquei preso neste problema por muito tempo porque estava seguindo os documentos e pensei que fiz algo errado. Como estou migrando de modelos legados, pensei que a API permaneceria a mesma e fiquei surpreso ao ver que de repente ela não funcionou como esperado.

Existem planos para atualizar a documentação para v3/mail/send para refletir adequadamente esta mudança?

A única maneira de resolver esse problema foi com _triple-stash_:

{{{ subject }}}

De acordo com este artigo https://github.com/sendgrid/sendgrid-nodejs/blob/master/use-cases/transactional-templates.md

Pode confirmar usando três chaves em vez de chaves duplas no campo de assunto funciona

Sempre que salvo o triplo curlys ou qualquer outro código na linha de assunto, o código é revertido automaticamente após alguns minutos para o padrão <% subject%>.

Alguém mais está tendo o mesmo problema?

Alguém mais está tendo o mesmo problema?

Eu vi algo assim quando abri duas janelas. SendGrid salva automaticamente, então, se você tiver duas janelas abertas, elas se cancelarão.

A maneira como funcionou para mim:

use no campo de assunto na IU do SendGrid: {{{subject}}}

envie "subject": "test" em message.dynamic_template_data

Sugestão : Vocês realmente deveriam trabalhar em seus documentos. Na verdade, eles estão tão espalhados e pedaços estão desatualizados.

Os colchetes triplos ainda estão funcionando, estou apenas verificando se essa ainda é a solução oficial.

Obrigado!

image

@tcukanoot Sim.

Por favor, reabra o problema! Os documentos ainda não estão corretos, sugerindo que subject seja definido no nível superior da solicitação. No entanto, deve ser incluído em dynamic_template_data e o assunto no modelo deve ser definido como {{subject}} ou qualquer outra chave dinâmica. Está aberto a partir de 2018 e nenhuma alteração na documentação foi introduzida desde então!

Recebo um erro de solicitação 400 do servidor quando tento usar substituições ou dynamic_template_data

Por favor, corrija seus documentos. dynamic_template_date não deve ser válido com base na https://github.com/sendgrid/sendgrid-python/blob/main/use_cases/kitchen_sink.md e na documentação da v3
No entanto, as pessoas estão relatando que funciona para elas

o que está acontecendo? 🤔

A maneira como funcionou para mim:

use no campo de assunto na IU do SendGrid: {{{subject}}}

envie "subject": "test" em message.dynamic_template_data

Sugestão : Vocês realmente deveriam trabalhar em seus documentos. Na verdade, eles estão tão espalhados e pedaços estão desatualizados.

Como fazer em PHP. Por favor, compartilhe o código!

Os documentos estão atualmente apenas incorretos ao sugerir que o assunto seja enviado como um parâmetro de nível superior?

A maneira como funcionou para mim:

use no campo de assunto na IU do SendGrid: {{{subject}}}

envie "subject": "test" em message.dynamic_template_data

Sugestão : Vocês realmente deveriam trabalhar em seus documentos. Na verdade, eles estão tão espalhados e pedaços estão desatualizados.

Isso funcionou para mim! Seu documento deve ser semelhante a:

const msg = {
    to: toEmail,
    from: "email",
    templateId: "tempateId",
    dynamic_template_data: {
      subject: "subjectHere",
    },
  };

sendGridEmail
    .send(msg)
    .then(() => console.log("email sent"))
    .catch((error) => console.error(error.toString()))
Esta página foi útil?
1 / 5 - 1 avaliações

Questões relacionadas

egges picture egges  ·  3Comentários

prasoonjalan picture prasoonjalan  ·  3Comentários

thidasapankaja picture thidasapankaja  ·  4Comentários

murphman300 picture murphman300  ·  4Comentários

TobiahRex picture TobiahRex  ·  3Comentários