Как можно перенести все шаблоны транзакций из одной учетной записи SendGrid в другую?
Учитывая большую библиотеку шаблонов SendGrid, как можно переместить их в другую учетную запись SendGrid одним щелчком мыши, скажем, для тестовой среды?
2 ответа
Не представляется возможным из коробки. Следующий код C# выполнит работу через API.
В коде используются следующие слепки: NewtonSoft Json.NET, SendGrid API Client.
Одно большое предостережение: после миграции идентификаторы шаблонов будут другими. Похоже, не способ сохранить их.
public ActionResult MigrateSendGridTemplates() {
//https://sendgrid.com/docs/API_Reference/Web_API_v3/Transactional_Templates/templates.html
//https://sendgrid.com/docs/API_Reference/Web_API_v3/Transactional_Templates/versions.html
var fromClient = new SendGridClient("full access api key"); //full access key
var toClient = new SendGridClient("full access api key"); //full access key - assume blank slate
//fetch all existing templates
var templatesRaw = fromClient.RequestAsync(SendGridClient.Method.GET, null, null, "templates").Result;
var templates = templatesRaw.DeserializeResponseBody(templatesRaw.Body);
var templatesEnumerable = ((IEnumerable)templates.First().Value).Cast<dynamic>().Reverse();
foreach (var template in templatesEnumerable)
{
//fetch template with versions attached
var templateWithVerisonRaw = fromClient.RequestAsync(SendGridClient.Method.GET, null, null, $"templates/{template.id}").Result;
var templateWithVersion = templateWithVerisonRaw.DeserializeResponseBody(templateWithVerisonRaw.Body);
//create template on the new account
var templateNewRaw = toClient.RequestAsync(SendGridClient.Method.POST, templateWithVerisonRaw.Body.ReadAsStringAsync().Result, null, "templates").Result;
var activeVersion = ((IEnumerable)templateWithVersion["versions"]).Cast<dynamic>().Where(v => v.active).SingleOrDefault();
if (activeVersion == null)
continue; //this template does not have any versions to migrate
//create template version on new account
var templateNewId = templateNewRaw.DeserializeResponseBody(templateNewRaw.Body)["id"];
var templateSerialized = JsonConvert.SerializeObject(activeVersion, Formatting.None);
var templateVersionNewRaw = toClient.RequestAsync(SendGridClient.Method.POST, templateSerialized, null, $"templates/{templateNewId}/versions").Result;
}
return Content($"Processed {templatesEnumerable.Count()} templates.");
}
Из этого следует, что ваш код не должен полагаться на идентификаторы шаблонов, если вы хотите, чтобы ваш код работал в разных учетных записях sendgrid. Вместо этого вы можете создать поисковый словарь и ссылаться на ваши шаблоны по их понятным именам, например так:
public static Dictionary<string, string> GetSendGridTemplates()
{
var templatesRaw = Persistent.ConfiguredSendGridClient.RequestAsync(SendGridClient.Method.GET, null, null, "templates").Result;
var templates = templatesRaw.DeserializeResponseBody(templatesRaw.Body);
var templatesEnumerable = ((IEnumerable)templates.First().Value).Cast<dynamic>();
var results = new Dictionary<string, string>();
foreach (dynamic template in templatesEnumerable)
{
var activeVersion = ((IEnumerable)template.versions).Cast<dynamic>().Where(v => v.active).SingleOrDefault();
if (activeVersion == null)
continue; //skip this one
results.Add((string)activeVersion.name, (string)template.id);
}
return results;
}
Пример результата:
реактивированный_121519737023655 -> "03e2b62f-51ed-43d0-b140-42bc98a448f6" деактивированный_11519736715430 -> "fb3e781b-5e67-45de-a958-bf0cd2682004"
Вы можете абсолютно сделать это, выполнив следующие шаги:
- перейдите к существующему шаблону в старой учетной записи
- открыть Сборка -> Дополнительно
- нажмите Экспорт HTML
Файл HTML будет экспортирован со всеми метаданными из редактора шаблонов Sendgrid.
Затем откройте новую учетную запись и создайте там шаблон шаблона:
- открыть Сборка -> Дополнительно
- импортировать перетаскивание HTML
- сохранять
Теперь вы можете использовать элементы в редакторе так же, как и в старом шаблоне.