Sendgrid-nodejs: Как использовать версии шаблонов для поддержки нескольких языков

Созданный на 27 мая 2018  ·  33Комментарии  ·  Источник: sendgrid/sendgrid-nodejs

image

Кажется, я могу отправлять разные электронные письма, написанные на разных языках для каждого клиента (локализация) в соответствии с документацией, но как я могу это сделать?
В нем говорится, что мне нужно активировать и изменять через API, но я не мог понять, как этого добиться.
или мне нужно использовать замены и отправлять пакеты сообщений из нашего бэкэнда?
Любая помощь будет оценена по достоинству!

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

  • sendgrid-nodejs Версия: master (последняя фиксация: [13af4a6])
  • Node.js Версия: 6.12.3
unknown or a waiting for feedback question

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

@thinkingserious мега +1 для этой функции - Нам также нужна эта функция, для нас вариант использования немного другой, мы хотим переложить создание / поддержку шаблонов на наших маркетологов, только эти люди не программисты, поэтому нам нужны простые шаблоны WYSIWYG для каждого языка. Наличие отдельной версии для каждого языка было бы решением нашей проблемы.

Еще лучше было бы следующее:

1 - возможность установить версию по умолчанию (если версия не выбрана или указана недопустимая версия, версия по умолчанию вступит в силу)
2 - просто добавьте дополнительный параметр в POST /mail/send API для добавления версии

У нас есть платформа с более чем 12 языками и их количество (да, нам нравятся задачи), поэтому нам нужны конкретные маркетологи для разных языков, они не кодируют такие простые шаблоны. Кроме того, мы планируем привлечь большое количество пользователей, поэтому сначала установите активный требуемый шаблон, а затем отправьте электронное письмо, что приведет к проблемам с параллелизмом, когда будут выбраны неправильные шаблоны.

Большое спасибо,

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

Привет @ ifndefdeadmau5!

Вот документация API по этой функции. Вот как использовать этот SDK для вызова этого API.

Надеюсь, это поможет!

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

Элмер

Спасибо, что ответили мне

Я до сих пор не могу понять, как на самом деле можно использовать «активировать определенную версию шаблона».
Я думал о сценарии, в котором у меня есть 2 версии шаблона, написанные более чем на 2 языках, может быть, на английском и испанском, или на чем-то еще.

Затем я делаю вызов API отправки сообщения с определенными версиями шаблона, которые соответствуют языку пользователя.

export function sendSendGridEmail()
{
  sgMail.setApiKey(config.get('sendgrid.API_KEY'));
  sgMail.setSubstitutionWrappers('{{', '}}');
  const msg = {
    to: '[email protected]',
    from: '[email protected]',
    subject: 'Sending with SendGrid is Fun',
    text: 'and easy to do anywhere, even with Node.js',
    html: '<strong>and easy to do anywhere, even with Node.js</strong>',
    templateId: isUserLocaleEnglish ? ENGLISH_TEMPLATE_ID : SPANISH_TEMPLATE_ID, // This line!
    substitutions: {
      name: 'Some One',
      city: 'Denver',
    },
  };
  sgMail.send(msg);
}

Но в приведенном выше примере требуются 2 отдельных шаблона, а не один шаблон другой версии. Это может привести к созданию отдельных шаблонов, но контент связан.
Что мне здесь не хватает? пожалуйста просветите меня.
Еще раз спасибо и с нетерпением ждем вашего ответа!

Привет @ ifndefdeadmau5!

У вас может быть несколько версий для одного шаблона. Затем вы можете использовать SDK для активации определенной версии.

Во-первых, вы должны создать несколько версий своего шаблона. Затем вы должны активировать желаемую версию, прежде чем сделать вышеуказанный вызов.

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

Элмер

Доброе утро @thinkingserious ,

Спасибо за быстрый ответ, и я не представлял себе такой работы.
Теперь я понимаю, как это сделать, но один вопрос: почему бы не активировать все версии шаблона в первый раз, а затем просто позволить пользователю использовать его, не беспокоясь об активации / деактивации?

Меня беспокоит, что если более двух пользователей, использующих разные языки, выполняют некоторые действия одновременно (точно так же), поэтому нашему серверу необходимо одновременно адресовать 2 запроса. Тогда какая версия шаблона будет активирована?

ниже - часть нашего серверного кода, чтобы вы знали мою ситуацию

export async function sendSendGridEmail() {
  const locale = 'ko';
  const isEnglishUser = locale === 'en';
  const PASSWORD_RESET_TEMPLATE_ID = '2096abb7-a9f8-413f-96a1-b9df0644b313';

  const { versions } = await getTemplate(PASSWORD_RESET_TEMPLATE_ID);
  const KO_VER = _.find(versions, { name: 'Korean' }).id;
  const EN_VER = _.find(versions, { name: 'English' }).id;

  await activateVersion(PASSWORD_RESET_TEMPLATE_ID, isEnglishUser ? EN_VER : KO_VER);

  sgMail.setSubstitutionWrappers('{{', '}}');
  const msg = {
    to: '[email protected]',
    from: '[email protected]',
    templateId: PASSWORD_RESET_TEMPLATE_ID,
    substitutions: {
      username: 'Test Username',
    },
  };
  sgMail.send(msg);
}

Привет @ ifndefdeadmau5!

Это серьезное беспокойство.

Похоже, что вам действительно нужна наша новая (бета-версия) система шаблонов . Чтобы присоединиться к бета-тестированию, напишите по адресу [email protected].

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

Элмер

Привет @thinkingserious ,

Я запросил по электронной почте на адрес [email protected]. Спасибо!

Я также искал транзакционные шаблоны, чтобы увидеть, как мы можем использовать версии шаблонов для разных локальных электронных писем.
Я согласен, мне кажется странным, что нужно активировать определенную версию шаблона перед ее использованием. Это не лучшее решение для нашего программного обеспечения с большим количеством транзакций. Я ожидал, что смогу указать, какую версию использовать в запросе POST /mail/send .

Привет @ andyblack19
Нет необходимости в управлении версиями с новыми шаблонами, которые мы ввели. В вашем аккаунте вы должны увидеть опцию «Транзакционные» шаблоны. Там вы можете создать один шаблон, который будет работать на многих языках. Вероятно, вы захотите взглянуть на документацию здесь и на пример здесь .

Я прочитал эту страницу ... но полностью пропустил многоязычный раздел! Спасибо за вашу помощь

Похоже, что использование шаблонов режима «Редактор дизайна» невозможно с упомянутой выше стратегией руля. Если кто-то хочет иметь несколько шаблонов для разных вариантов использования, по крайней мере, на двух разных языках, следует ли копировать вставку кода шаблона в каждый шаблон при изменении общего макета? Почему нет способа создать макеты верхнего уровня, которыми можно поделиться?

Кроме того, может показаться, что вам нужно локализовать тему электронного письма на стороне сервера, а не в содержимом шаблона, где вы уже устанавливаете тело шаблона для каждого языка? Так разделять предмет и тело не имеет смысла. Или я что-то упустил?

Привет @raine

Похоже, что использование шаблонов режима «Редактор дизайна» невозможно с упомянутой выше стратегией руля.

Вы правы, конкретный дизайн найденного здесь языкового шаблона не предназначен для работы в режиме «Редактор дизайна». Вы все еще можете создать что-то подобное в «Редакторе дизайна», используя модуль кода.

Если кто-то хочет иметь несколько шаблонов для разных вариантов использования, по крайней мере, на двух разных языках, следует ли копировать вставку кода шаблона в каждый шаблон при изменении общего макета? Почему нет способа создать макеты верхнего уровня, которыми можно поделиться?

Это на самом деле то, что довели до сведения наших инженеров. Я бы по-прежнему рекомендовал вам использовать кнопку обратной связи, когда вы вошли в свою учетную запись, чтобы наши инженеры знали, что это необходимо. Чем больше людей отправят такой отзыв, тем больше вероятность того, что мы увидим такое улучшение. Кнопка обратной связи - один из лучших способов получить обратную связь непосредственно с нашими инженерами, когда дело доходит до чего-либо, кроме библиотек кода. Я лично проголосовал за нечто похожее на то, что вы ищете.

Кроме того, может показаться, что вам нужно локализовать тему электронного письма на стороне сервера, а не в содержимом шаблона, где вы уже устанавливаете тело шаблона для каждого языка? Так разделять предмет и тело не имеет смысла. Или я что-то упустил?

Я думаю, вы что-то упустили. Из своего личного тестирования я знаю, что рули работают при настройке темы шаблона. Хотя, возможно, я неправильно понимаю вашу формулировку. Я знаю, что тема не была визуально разработана для поддержки этого, поэтому лучше всего создать код и контент в чем-то вроде текстового редактора и затем вставить его в поле темы. Это еще одна область, в которой рекомендуется использовать кнопку обратной связи. Не стесняйтесь предлагать, как вы думаете, лучший способ сделать это.

Пожалуйста, исправьте все, что я допустил, и дайте мне более подробную информацию, чтобы я мог лучше понять.

Кайл

Как выглядит пример многоязычного перевода строки темы электронного письма?

@esiqveland

В строке темы в шаблоне вы должны использовать что-то вроде этого:

{{#if english}}
Hello
{{else if spanish}}
Hola
{{else if french}}
Bonjour
{{/if}}

Вы в основном используете ту же структуру, что и в HTML-содержимом. Пожалуйста, дайте нам знать, если у вас возникнут дополнительные вопросы.

Привет @kylearoberts , есть ли способ проверить значение переменной в условном english или spanish , я бы просто проверил, равна ли переменная language en или es . Это не имеет большого значения в самом шаблоне, но имеет значение на бэкэнде, где мне нужно перевести переменную языкового кода в переменную со специальным именем в данных динамического шаблона.

Я кратко проверил Handlebars, и, похоже, он не поддерживает его по умолчанию. Но, возможно, в SendGrid есть встроенные специальные помощники.

@tlinhart

Спасибо за отличный вопрос. В настоящее время система не будет работать таким образом, но, вероятно, позже у нас будет что-то, что позволит нечто подобное. Когда мы действительно внесем такое изменение, мы, скорее всего, обновим нашу документацию и примеры того, как использовать шаблоны транзакций.

Здравствуй,
В настоящее время я использую новую систему шаблонов для своих многоязычных писем. Основная проблема - ограниченная длина предметного поля. По сути, мой тематический контент такой:

{{#if english}}
Привет бла бла ...
{{else if испанский}}
Привет бла бла ...
{{else if французский}}
Привет бла бла ...
{{/если}}

Но есть несколько проблем:

  1. Длина предметного поля недостаточна для более чем нескольких языков. Мне пришлось сократить текст и имена переменных, чтобы не выходить за рамки. Но, очевидно, это не сработает, если нам придется добавлять новый язык.
  2. В редакторе отображается однострочное поле для ввода темы, что не подходит для работы с шаблонными темами.
  3. Поле темы редактора удачно сокращает вводимый текст после вставки. Это приведет к ошибке шаблона, поскольку синтаксис будет неправильным из-за удаленного кода сценария шаблона.

@bragma

Я столкнулся с той же проблемой, что и вы. Это тоже не первый раз, когда мы слышим это. Нам нравится получать подобные отзывы, потому что они помогают нам улучшать наши продукты. Я получил ваши отзывы от нашей команды инженеров и могу сказать, что это одна из областей, которые они хотят улучшить. Когда у них появляется возможность поработать над улучшениями, это, вероятно, будет одним из них. Еще раз спасибо за отзыв.

@thinkingserious +1 Мне нужна функция локализации

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

@thinkingserious мега +1 для этой функции - Нам также нужна эта функция, для нас вариант использования немного другой, мы хотим переложить создание / поддержку шаблонов на наших маркетологов, только эти люди не программисты, поэтому нам нужны простые шаблоны WYSIWYG для каждого языка. Наличие отдельной версии для каждого языка было бы решением нашей проблемы.

Еще лучше было бы следующее:

1 - возможность установить версию по умолчанию (если версия не выбрана или указана недопустимая версия, версия по умолчанию вступит в силу)
2 - просто добавьте дополнительный параметр в POST /mail/send API для добавления версии

У нас есть платформа с более чем 12 языками и их количество (да, нам нравятся задачи), поэтому нам нужны конкретные маркетологи для разных языков, они не кодируют такие простые шаблоны. Кроме того, мы планируем привлечь большое количество пользователей, поэтому сначала установите активный требуемый шаблон, а затем отправьте электронное письмо, что приведет к проблемам с параллелизмом, когда будут выбраны неправильные шаблоны.

Большое спасибо,

Привет всем, кто внес свой вклад в эту проблему!

Мы проводим некоторые исследования с клиентами, чтобы попытаться понять, как лучше всего решить проблему локализации / перевода писем, отправленных с помощью SendGrid. Если у вас есть время, которое вы можете сэкономить, мы будем рады вашим отзывам, поскольку мы думаем, как это сделать!

Вот ссылка для регистрации на слот, чтобы поговорить со мной и моей командой о том, как вы сегодня справляетесь с переводом и локализацией: https://calendly.com/travisterwilligar/sendgrid-research?month=2019-09

Большое спасибо за ваше время!

@ ben-grid только что проверил calendy, но времена не работают для меня, поэтому я дам краткое описание того, что было бы круто.

У нас есть система электронной коммерции с песочницей и производственной учетной записью. И когда мы одобряем tempalte, мы экспортируем и импортируем его в рабочую среду (это тоже было бы отличной функцией, имея песочницу и рабочие шаблоны с конвейером продвижения)

Так или иначе ... сейчас у нас 2 языка, но сейчас стоит задача перейти на 5 языков. На данный момент у нас есть 11 шаблонов. Что мы делаем сейчас, это {{if lang.en}} Привет {{else}} Привет {{/ if}}, только это не будет работать для 5 языков (20 языков в ближайшем будущем), поэтому теперь мы собираемся создать отдельные шаблоны для каждого языка, создавая 55 шаблонов вместо 11. (ужасно)

Что было бы здорово!

Опция 1:
Добавьте параметр «версия» в API и просто отправьте предоставленную версию. Теперь мы можем хотя бы отправить конкретную версию на письменном языке (версии могут быть переведенной версией шаблона, резервная версия будет активной)

Вариант 2
Добавьте в шаблон локализованные параметры. Таким образом, мы можем использовать шаблон для нескольких языков, переводя только параметры. Недостатком этого подхода является то, что некоторые конструкции предложений не работают для каждого языка, поэтому, вероятно, вы хотели бы иметь больше гибкости.

* Вариант 3 Единорог с золотыми слезами *
Обычно есть вкладка перевода для каждого модуля, который вы вставляете. Поэтому, когда вы вставляете такой модуль
image этот модуль будет иметь несколько локалей. В основном клон оригинала для разных языков. У вас должна быть возможность установить язык шаблона (установка всех модулей на определенные языки, включая тему и предзаголовок), возможно, окрашивание модулей в красный цвет, если они еще не заполнены для этого модуля

Только мои 2 цента, я хотел бы получить ваш отзыв по этому поводу , если вы хотите [email protected] , я хотел бы соображениями . Спасибо и надеюсь, что решение будет быстро. И если не понимание того, как с этим бороться, чтобы мы могли подготовиться,

@reneweteling Большое спасибо, это очень полезно. Мы работаем над прототипом, который, вероятно, будет больше похож на варианты 2 и 3, чем на 1. Я свяжусь с вами по электронной почте, когда у нас будет что-то стоящее для обратной связи. Еще раз спасибо за ваш вклад!

@reneweteling Я думаю, что вариант 1 или 2

@ ben-grid & @ a-tonchev Спасибо за всю тяжелую работу! Я сменил работу, поэтому для меня это уже не актуально. Продолжайте хорошую работу!

Есть новости по этому поводу? Ограничение длины темы является проблемой для меня, учитывая, что мне также нужно локализовать строку темы, и я думаю, что с новым редактором длина темы еще меньше, у меня может быть около 110 символов в строке темы.

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

Если компания поддерживает несколько языков, то на их веб-сайте уже будет решение этой проблемы, которое должно быть на стороне сервера (загрузка языков из XML / базы данных). На мой взгляд, любые электронные письма, относящиеся к одному и тому же проекту, также должны содержать свой текст в этих языковых файлах.

Необходимые абзацы / текст затем могут быть извлечены из этих файлов в зависимости от языка пользователя, а затем переданы как переменные шаблона в sendgrid. Sendgrid будет просто всеобъемлющим шаблоном (например, нижний колонтитул и т. Д. - только стили и изображения), и даже некоторые стили должны быть сохранены в самом языковом файле - например, какие слова выделить жирным шрифтом и т. Д.

Таким образом, шаблон будет выглядеть так: subject HelloLine welcomeparagraph helpparagraph footerslogan . Вот и все.

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

Если компания поддерживает несколько языков, то на их веб-сайте уже будет решение этой проблемы, которое должно быть на стороне сервера (загрузка языков из XML / базы данных). На мой взгляд, любые электронные письма, относящиеся к одному и тому же проекту, также должны содержать свой текст в этих языковых файлах.

Необходимые абзацы / текст затем могут быть извлечены из этих файлов в зависимости от языка пользователя, а затем переданы как переменные шаблона в sendgrid. Sendgrid будет просто всеобъемлющим шаблоном (например, нижний колонтитул и т. Д. - только стили и изображения), и даже некоторые стили должны быть сохранены в самом языковом файле - например, какие слова выделить жирным шрифтом и т. Д.

Таким образом, шаблон будет выглядеть так: subject HelloLine welcomeparagraph helpparagraph footerslogan . Вот и все.

С этим невозможно справиться, потому что вам нужно повторно развертывать почтовую службу при каждом изменении копирайтинга. Также в некоторых компаниях за содержание почты несут ответственность не разработчики, а маркетологи / копирайтеры. Вам нужно будет повторно развернуть другой пользовательский интерфейс, чтобы разрешить его редактирование, но мы платим Sendgrid даже за это.

В одном проекте мы используем автономную CMS для редактирования и создания шаблонов электронной почты для каждого языка. Сервер считывает эти шаблоны усов во время выполнения и генерирует тело сообщения электронной почты для отправки в Sendgrid. Редактирование UX шаблона Sendgrid совершенно бесполезно, поэтому мы решили пойти на это.

@cecchisandrone Я согласен, что sendgrid может быть лучше. Им нужно добавить правильное управление языком и просто сделать его параметром. Но, как я уже сказал, некоторые переменные, которые мы им отправляем, в любом случае необходимо будет локализовать, например, форматы даты и времени.

Как заявил @ corneliu-gavrilovici
Это даже стоит сейчас. В недавнем обновлении длина темы стала еще короче. На данный момент мы используем только 2 языка, и мы делали это так, как показано ниже в поле темы:

{{#if english}}
Hello blah blah...
{{else if french}}
Hello blah blah...
{{/if}}

Я не понимаю, почему это было обновлено, продукт, который мы могли использовать, больше не может использоваться по этой причине. В своей документации вы говорите о том, как работать с многоязычным шаблоном, но его нельзя использовать должным образом. @ Бен-сетка
https://sendgrid.com/docs/for-developers/sending-email/using-handlebars/#multiple -languages

ИМО, кажется, что более работоспособным решением было бы сгенерировать всю текстовую сторону сервера, а затем просто вставить ее в шаблон в виде фрагментов абзацев.
...
Необходимые абзацы / текст затем могут быть извлечены из этих файлов в зависимости от языка пользователя, а затем переданы как переменные шаблона в sendgrid. Sendgrid будет просто всеобъемлющим шаблоном (например, нижний колонтитул и т. Д. - только стили и изображения), и даже некоторые стили должны быть сохранены в самом языковом файле - например, какие слова выделить жирным шрифтом и т. Д.

Таким образом, шаблон будет выглядеть так: subject HelloLine welcomeparagraph helpparagraph footerslogan . Вот и все.
Я сделал это в SalesForce, используя серверный JS. Объект json находится в шаблоне, но выполняется на сервере во время компиляции. Это похоже на наличие реальной функции локализации и не зависит от разрабатываемых публикаций, которые вы имели бы в среде ecomm.
Я с нетерпением жду того, что придумала команда SG, о чем упоминает @ ben-grid.

+1 функция локализации. Если у нас несколько языков, это беспорядок со многими if / else.

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

Смежные вопросы

umarhussain15 picture umarhussain15  ·  3Комментарии

amlcodes picture amlcodes  ·  4Комментарии

Loriot-n picture Loriot-n  ·  4Комментарии

nicoasp picture nicoasp  ·  3Комментарии

danielflippance picture danielflippance  ·  4Комментарии