Sendgrid-nodejs: подстановки не работают в транзакционных шаблонах

Созданный на 8 дек. 2017  ·  20Комментарии  ·  Источник: sendgrid/sendgrid-nodejs

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

Резюме проблемы

При использовании этой библиотеки подстановки не работают. Работает при использовании curl.

Действия по воспроизведению

  1. Создайте шаблон транзакционного электронного письма в своей учетной записи SendGrid
  2. В шаблоне есть <% body%>,% firstName% или оба (я пробовал оба)
  3. Выполнить этот код узла (заполнить конфиг)
`'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. Обратите внимание, что в доставленном электронном письме ничего не будет заменено. Опять же, он отлично работает с локонами.

Я также прилагаю скриншот шаблона в редакторе SendGrid и полученное письмо по электронной почте
screenshot from 2017-12-08 10-36-26

Технические подробности:

  • sendgrid-nodejs Версия: 6.1.4
  • Node.js Версия: 8.9.2
medium help wanted help wanted community enhancement up for grabs up-for-grabs

Самый полезный комментарий

Всем столь же отчаявшимся, как я вчера: в v3 API вам нужно использовать dynamic_template_data вместо substitutions , это еще нигде не задокументировано!

Затем используйте {{var_name}} в шаблоне электронной почты и dynamic_template_data: { var_name: "var_value" } в вызове API.

Все 20 Комментарий

@MaciejKrawczyk Вы пробовали использовать setSubstitutionWrapper и опускать обертки из substitutions ?

Пример:
sgMail.setSubstitutionWrappers('-', '-');
"substitutions": { "firstName": "Maciejs" }

Не знаю, как сделать таким образом сразу несколько оболочек, но мне удалось заставить подпрограммы работать с этой версией, не указав обертки в атрибуте подстановки. Мои сабы выглядят как
emailOptions.substitutions = {}
emailOptions.substitutions.CLIENT_NAME = myClientName

Оно работает. Спасибо!

Спасибо, что помогли @kmcurry!

Я рад, что у вас есть @MaciejKrawczyk!

Это обязательно нужно поместить в README! Мне потребовалось 2 часа, чтобы понять это!

@LASkuma ,

Это не хорошо :(

Эта документация помогает? Если да, не могли бы вы указать мне, где вы в первую очередь искали помощь, чтобы я мог убедиться, что у нас есть четкая ссылка?

Спасибо!

С наилучшими пожеланиями,

Элмер

@thinkingserious Да. Этот документ действительно очень помог. Однако, поскольку я пришел с официального сайта, где ключи подстановки должны включать оболочку, я не уделял слишком много внимания вариантам использования.

Привет @LASkuma!

Когда вы говорите, что пришли с официального сайта, не могли бы вы сообщить мне, какой URL-адрес вы имеете в виду? Спасибо!

Привет @thinkingserious ,
Я имел в виду эту страницу . Даже в разделе опробования есть ключи подстановки с включенными обертками. Прочитав документацию, я подумал, что библиотека Node естественно соответствует документации.

Спасибо @LASkuma!

Это действительно полезный отзыв.

Однако я не совсем уверен в решении. Эти документы предназначены для тех, кто хочет напрямую взаимодействовать с нашим API, а не использовать одну из наших вспомогательных библиотек.

Ранее вы упомянули, что мы должны включить эту документацию в README. Вы имеете в виду здесь ? Должны ли мы конкретно указать здесь вариант использования замены?

В очередной раз благодарим за помощь!

С наилучшими пожеланиями,

Элмер

Это обязательно должно быть в ридми. Я перепробовал все, я прочитал все документы по ссылке api SendGrid, все, что есть на GitHub (я думал), связался с поддержкой, и я бы сделал свою собственную оболочку api, если бы не @kmcurry, я думаю, это было бы намного проще и менее запутанно если бы вспомогательная библиотека работала точно так же, как сам API (см. мой код в начале потока).

Спасибо @MaciejKrawczyk ,

Это очень хороший отзыв, и я добавил его в список невыполненных работ нашей команды для более глубокого изучения. Мы будем предоставлять обновления в этой теме.

Спасибо!

С наилучшими пожеланиями,

Элмер

Это сделано? У меня такая же проблема;

Привет @sriharrsha ,

Вы пробовали предложение @kmcurry ?

Еще нет. Я обновлю, если это сработает или нет, в ближайшее время.
Извините за задержку с ответом.

Всем столь же отчаявшимся, как я вчера: в v3 API вам нужно использовать dynamic_template_data вместо substitutions , это еще нигде не задокументировано!

Затем используйте {{var_name}} в шаблоне электронной почты и dynamic_template_data: { var_name: "var_value" } в вызове API.

@tkafka боже мой! Спасибо за этого мужчину, который выдергивал мои волосы последние 2 дня.

@tkafka Большое спасибо! Это так неприятно! Занял у меня 3 часа дня ...

Вот весь код на тот случай, если кто-то ищет то же самое:

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

Документация sendgrid по меньшей мере ужасна.

Здравствуйте все,

Пожалуйста, просмотрите эту проблему для прогресса. В настоящее время мы работаем над обновлением для C #, затем для Java, а затем сразу после этого SDK. Благодарим за терпение и приносим свои извинения за задержку.

С наилучшими пожеланиями,

Элмер

Ха, dynamic_template_data . Я решил твою маленькую головоломку! :улыбка:

Для других пользователей машинописного текста - Создайте файл 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};
    }
}

Спасибо @xduseko !

Была ли эта страница полезной?
0 / 5 - 0 рейтинги