Получение ошибки «неверный запрос» со следующей полезной нагрузкой.
cosnt msg = {
"to": "[email protected]",
"from": "[email protected]",
"subject": "Support Pay Transparency at PayCheck",
"templateId": "24ae3147-4faa-4380-8613-c5be144f4542",
"customArgs": {
"ally_id": "cj6zlh7yd000001qir4r5suuk"
}
};
sgMail.send(msg)
{
"message": "Bad Request",
"code": 400,
"response": {
"headers": {
"server": "nginx",
"date": "Wed, 30 Aug 2017 22:30:41 GMT",
"content-type": "application/json",
"content-length": "365",
"connection": "close",
"access-control-allow-origin": "https://sendgrid.api-docs.io",
"access-control-allow-methods": "POST",
"access-control-allow-headers": "Authorization, Content-Type, On-behalf-of, x-sg-elas-acl",
"access-control-max-age": "600",
"x-no-cors-reason": "https://sendgrid.com/docs/Classroom/Basics/API/cors.html"
},
"body": {
"errors": [
{
"message": "Unless a valid template_id is provided, the content parameter is required. There must be at least one defined content block. We typically suggest both text/plain and text/html blocks are included, but only one block is required.",
"field": "content",
"help": "http://sendgrid.com/docs/API_Reference/Web_API_v3/Mail/errors.html#message.content"
}
]
}
}
}
В документации написано templateId
но в сообщении об ошибке написано template_id
. Я пробовал оба и получил такое же сообщение об ошибке. Я прикрепил снимок экрана с моим шаблоном для проверки работоспособности, чтобы убедиться, что он правильно настроен в sendgrid.
@onesien API почтовой программы JS нового узла не зависит от регистра, поэтому вы можете использовать как templateId
и template_id
. Случай верблюда более распространен в области JS, поэтому мы добавили его поддержку, в то время как сам API использует случай змеи.
Я посмотрю, что происходит с идентификатором шаблона
Привет @onesien!
Вы также можете обратиться в службу поддержки . Я думаю, проблема может быть связана со старым редактором шаблонов.
Можете ли вы также попробовать создать новый шаблон и использовать этот идентификатор?
С наилучшими пожеланиями,
Элмер
@thinkingserious ты можешь проверить это на своем конце? Похоже, что мы правильно отправляем параметр template_id
с запросом. Я только что создал новый шаблон, и у меня тоже возникает эта проблема.
@adamreisnz ,
Мои локальные тесты работают, но у меня в аккаунте только новые шаблоны.
Я дважды проверю
Нет, я использовал новый шаблон, только что созданный, возникла та же проблема
Следующее работает для меня (с использованием версии v6.1.1), следуя приведенному здесь примеру:
// Setup sendgrid api
const sendGridMail = require('@sendGrid/mail');
sendGridMail.setApiKey(process.env.SENDGRID_API_KEY);
sendGridMail.setSubstitutionWrappers('-', '-');
//build object
var mailOptions = {
personalizations:[{
to: '[email protected]',
substitutions: {'name':'John', 'city':'Denver'}
}],
from: '[email protected]',
reply_to: '[email protected]',
subject: 'Hello',
html: 'email text goes here',
templateId: '13b8f94f-bcae-4ec6-b752-70d6cb59f932'
};
//send
sendGridMail.send(mailOptions);
Ах, я думаю, что у нас есть старая ошибка, когда API требует блокировать контент во всех случаях. Итак, это работает:
// Setup sendgrid api
const sendGridMail = require('@sendGrid/mail');
sendGridMail.setApiKey(process.env.SENDGRID_API_KEY);
sendGridMail.setSubstitutionWrappers('-', '-');
//build object
var mailOptions = {
to: '[email protected]',
from: '[email protected]',
reply_to: '[email protected]',
subject: 'Hello',
templateId: '13b8f94f-bcae-4ec6-b752-70d6cb59f932',
html: ' ',
substitutions: {
name: 'Some One',
city: 'Denver',
}
};
//send
sendGridMail.send(mailOptions);
но не это:
// Setup sendgrid api
const sendGridMail = require('@sendGrid/mail');
sendGridMail.setApiKey(process.env.SENDGRID_API_KEY);
sendGridMail.setSubstitutionWrappers('-', '-');
//build object
var mailOptions = {
to: '[email protected]',
from: '[email protected]',
reply_to: '[email protected]',
subject: 'Hello',
templateId: '13b8f94f-bcae-4ec6-b752-70d6cb59f932',
substitutions: {
name: 'Some One',
city: 'Denver',
}
};
//send
sendGridMail.send(mailOptions);
Внутренняя проверка ...
Мне пришлось добавить блок содержимого, чтобы отправить шаблон. Я получал _Bad Request (400) "Если не указан действительный template_id, параметр содержимого обязателен. Должен быть хотя бы один определенный блок содержимого ..." _ при использовании шаблона, созданного в новом редакторе html.
sgMail.setApiKey(sgKey);
sgMail.setSubstitutionWrappers('-', '-');
var msg: any = {
to: email,
from: '[email protected]',
templateId: 'xxxxxxx',
substitutions: {
verifyUrl: createAccountLink
}
};
sgMail.send(msg)
Если я добавлю блок содержимого, электронное письмо с шаблоном будет отправлено в редакторе html в формате.
sgMail.setApiKey(sgKey);
sgMail.setSubstitutionWrappers('-', '-');
var msg: any = {
to: email,
from: '[email protected]',
content: [{"type":"text/html","value":"0"}],
templateId: 'xxxxxx',
substitutions: {
verifyUrl: createAccountLink
}
};
sgMail.send(msg)
Хорошо, я оставляю это открытым как ошибку.
Я предполагаю, что этот SDK добавляет пустой объект содержимого, если он не установлен. Я думаю, нам нужно пропустить эти функции, когда html и txt не установлены.
На данный момент вышеуказанный обходной путь сделает то, что вам нужно.
@thinkingserious Думаю, ты прав. Я прочитал документацию по API и подумал, что это поле является обязательным. В нем есть только хорошо скрытый комментарий (который великолепно оформлен!), Который я пропустил:
Я создам PR для решения этой проблемы!
Хе-хе, спасибо Адаму!
PR установлен, это должно решить проблему, а не отправлять поле содержимого с запросом, если контент не предоставлен.
Спасибо за помощь пищит. Я буквально терял рассудок. Вчера поздно вечером я наконец придумал обходной путь и приходил сюда, чтобы сообщить больше информации, но похоже, что вы все уже используете это :-)
Извините за @onesien ,
Исправление только что было отправлено в npm (v6.1.2).
Я использовал дословный код из ответа @thinkingserious, и у возникают проблемы.
Я просто пытаюсь получить самые простые замены в шаблоне, который я создал в sengrid, для отправки. Ответ в CloudWatch (поскольку он работает в Lambda) отображается как 202, но я получаю электронное письмо: A message was received from this address by our systems that had errors in the smtpapi header, and cannot be processed. The error detected was: The template id must be a valid template id for your account.
Что я здесь делаю не так, ребята? Я пытаюсь просеять документы sendgrid, но все кажется действительно разрозненным.
Как вы отправляете идентификатор шаблона? Это через переменную окружения при вызове лямбды?
спасибо за быстрый ответ @cbilliau - нет, в моем случае строка шаблона жестко запрограммирована, так как я просто пытаюсь получить функциональную основу между интерфейсом и сервером. Мой дословный пример:
const sgMail = require("@sendgrid/mail");
sgMail.setApiKey(
"XXXXX"
);
sgMail.setSubstitutionWrappers("%", "%"); // Configure the substitution tag wrappers globally
const msg = {
to: formFields.toEmail,
from: formFields.fromEmail,
subject: "Hello world",
text: "test",
html: "<p>test</p>",
templateId: "be2cc0da-5b2c-428f-8e45-c140f6cfb6eb",
substitutions: {
name1: formFields.fromName,
name2: formFields.fromName,
date: formFields.date
}
};
sgMail.send(msg);
@tetreault Ознакомьтесь с моим ответом выше, я добавляю content: [{"type":"text/html","value":"0"}],
в свою функцию, и это сработало. Неизвестно почему.
просто попробовал, к сожалению, не изменил конечный результат @cbilliau :(. Получил то же письмо:
A message was received from this address by our systems that had errors in the smtpapi header, and cannot be processed.
The error detected was: The template id must be a valid template id for your account. You provided be2cc0da-5b2c-428f-8e45-c140f6cfb6eb
вау, позволь мне поклониться на секунду @cbilliau 🤣 я просто торопился с вещами и не обращал больше внимания. Я понял, что получаю уникальный идентификатор для шаблона, который я создал в разделе «маркетинг», а не в «шаблонах транзакций». Я не очень часто использую интерфейс sendgrid и просто напортачил с этим lol
Ладонь полностью закрываю лицо, фиксирую на моем конце и надеюсь, что это сработает.
кк - подтверждение его работа в настоящее время, особенно с помощью content: [{ type: "text/html", value: "0" }]
линии, @cbilliau упомянутого 👍
Самый полезный комментарий
Спасибо за помощь пищит. Я буквально терял рассудок. Вчера поздно вечером я наконец придумал обходной путь и приходил сюда, чтобы сообщить больше информации, но похоже, что вы все уже используете это :-)