SendGrid
SendGrid — облачный сервис для доставки транзакционных и маркетинговых писем. Подключение этой интеграции позволяет приложению отправлять письма программно (например, приветственные письма, сброс пароля или уведомления).
Шаги настройки
Заголовок раздела «Шаги настройки»После выбора SendGrid в списке интеграций откроется окно настройки. Для установления соединения необходимо указать следующие учётные данные:
1. API-ключ
Заголовок раздела «1. API-ключ»Это токен аутентификации, созданный в вашей учётной записи SendGrid.
- Ввод: вставьте личный API-ключ SendGrid в текстовое поле.
- Справка: если ключа нет, нажмите ссылку “Where to find API Key?” в окне для инструкции по его созданию.
2. Окружение
Заголовок раздела «2. Окружение»Укажите контекст окружения для этой интеграции.
- Ввод: введите идентификатор окружения (например,
Production,Stagingили метку конфигурации) в поле Environment.
Завершение подключения
Заголовок раздела «Завершение подключения»После заполнения полей:
- Проверьте строку состояния (сейчас отображается Not Connected).
- Нажмите чёрную кнопку Add внизу справа, чтобы сохранить учётные данные и активировать интеграцию.

Справочник API интеграции SendGrid
Заголовок раздела «Справочник API интеграции SendGrid»Настройка SendGrid
Заголовок раздела «Настройка SendGrid»Настройка API-ключа SendGrid
Заголовок раздела «Настройка API-ключа SendGrid»Настраивает API-ключ SendGrid для конкретного проекта и окружения.
Mutation:
mutation { sendgrid_configureSendGrid ( apiKey: "SG._api_key_here" )}Отправка писем
Заголовок раздела «Отправка писем»Простая отправка письма
Заголовок раздела «Простая отправка письма»Отправляет письмо одному или нескольким получателям.
Mutation:
mutation sendgrid_sendEmail { sendgrid_sendEmail ( email: { from: { email: "sender@archie.com", name: "Sender Name" }, subject: "Test Email", to: { email: "recipient@gmail.com", name: "Recipient Name" }, content: { type: "text/html", value: "<h1>Hello World</h1><p>This is a test email.</p>" } } ) { messageId success }}Ответ:
{ "data": { "sendgrid_sendEmail": { "messageId": "sent-1234567890", "success": true } }}Письмо с копией и скрытой копией
Заголовок раздела «Письмо с копией и скрытой копией»Mutation:
mutation sendgrid_sendEmail { sendgrid_sendEmail ( email: { from: { email: "sender@example.com" name: "Sender Name" } to: [ { email: "recipient@example.com" name: "Recipient Name" } ] cc: [ { email: "cc@example.com" name: "CC Recipient" } ] bcc: [ { email: "bcc@example.com" } ] subject: "Email with CC and BCC" content: [ { type: "text/html" value: "<h1>Hello</h1><p>This email has CC and BCC recipients.</p>" } ] } ) { messageId success }}Письмо с вложениями
Заголовок раздела «Письмо с вложениями»Mutation:
mutation sendgrid_sendEmail { sendgrid_sendEmail( email: { from: { email: "sender@example.com" name: "Sender Name" } to: [ { email: "recipient@example.com" name: "Recipient Name" } ] subject: "Email with Attachment" content: [ { type: "text/html" value: "<h1>Hello</h1><p>Please find attached file.</p>" } ] attachments: [ { content: "SGVsbG8gV29ybGQ=" type: "text/plain" filename: "document.txt" disposition: "attachment" } ] } ) { messageId success }}Примечание: поле content во вложениях должно быть закодировано в Base64.
Письмо с категориями и тегами
Заголовок раздела «Письмо с категориями и тегами»Mutation:
mutation sendgrid_sendEmail { sendgrid_sendEmail( email: { from: { email: "sender@example.com" name: "Sender Name" } to: [ { email: "recipient@example.com" name: "Recipient Name" } ] subject: "Categorized Email" content: [ { type: "text/html" value: "<h1>Hello</h1>" } ] categories: ["transactional", "notification"] tags: ["important", "urgent"] } ) { messageId success }}Отложенная отправка письма
Заголовок раздела «Отложенная отправка письма»Mutation:
mutation sendgrid_sendEmail { sendgrid_sendEmail( email: { from: { email: "sender@example.com" name: "Sender Name" } to: [ { email: "recipient@example.com" name: "Recipient Name" } ] subject: "Scheduled Email" content: [ { type: "text/html" value: "<h1>Hello</h1>" } ] sendAt: "2025-12-25T10:00:00Z" } ) { messageId success }}Письмо с пользовательскими аргументами
Заголовок раздела «Письмо с пользовательскими аргументами»Mutation:
mutation sendgrid_sendEmail { sendgrid_sendEmail( email: { from: { email: "sender@example.com" name: "Sender Name" } to: [ { email: "recipient@example.com" name: "Recipient Name" } ] subject: "Email with Custom Args" content: [ { type: "text/html" value: "<h1>Hello</h1>" } ] customArgs: { orderId: "12345" userId: "67890" campaignId: "abc123" } } ) { messageId success }}Массовая отправка
Заголовок раздела «Массовая отправка»Несколько писем
Заголовок раздела «Несколько писем»Mutation:
mutation sendgrid_sendBulkEmail { sendgrid_sendBulkEmail( emails: { emails: [ { from: { email: "sender@example.com" name: "Sender Name" } to: [ { email: "recipient1@example.com" name: "Recipient 1" } ] subject: "Bulk Email 1" content: [ { type: "text/html" value: "<h1>Email 1</h1>" } ] } { from: { email: "sender@example.com" name: "Sender Name" } to: [ { email: "recipient2@example.com" name: "Recipient 2" } ] subject: "Bulk Email 2" content: [ { type: "text/html" value: "<h1>Email 2</h1>" } ] } ] } ) { messageIds success }}Ответ:
{ "data": { "sendgrid_sendBulkEmail": { "messageIds": ["sent-1234567890", "sent-1234567891"], "success": true } }}Письма с шаблонами
Заголовок раздела «Письма с шаблонами»Динамический шаблон
Заголовок раздела «Динамический шаблон»Mutation:
mutation sendgrid_sendTemplate { sendgrid_sendTemplate( email: { from: { email: "sender@example.com" name: "Sender Name" } to: [ { email: "recipient@example.com" name: "Recipient Name" } ] templateId: "d-1234567890abcdef" substitutions: { name: "John Doe" orderNumber: "12345" totalAmount: "$99.99" } } ) { messageId success }}Ответ:
{ "data": { "sendgrid_sendTemplate": { "messageId": "sent-1234567890", "success": true } }}Управление контактами
Заголовок раздела «Управление контактами»Добавить контакт
Заголовок раздела «Добавить контакт»Mutation:
mutation sendgrid_addContact { sendgrid_addContact( contact: { email: "newcontact@example.com" firstName: "John" lastName: "Doe" customFields: { company: "Acme Corp" phone: "+1234567890" position: "Developer" } listIds: ["list-id-1", "list-id-2"] } )}Ответ:
{ "data": { "sendgrid_addContact": true }}Обновить контакт
Заголовок раздела «Обновить контакт»Mutation:
mutation sendgrid_updateContact { sendgrid_updateContact( contact: { email: "existing@example.com" firstName: "Jane" lastName: "Smith" customFields: { company: "New Company" phone: "+0987654321" } } )}Ответ:
{ "data": { "sendgrid_updateContact": true }}Удалить контакт
Заголовок раздела «Удалить контакт»Mutation:
mutation sendgrid_deleteContact { sendgrid_deleteContact( email: "contact@example.com" )}Ответ:
{ "data": { "sendgrid_deleteContact": true }}Аналитика и статистика
Заголовок раздела «Аналитика и статистика»Статистика по письмам
Заголовок раздела «Статистика по письмам»Query:
query sendgrid_getEmailStats { sendgrid_getEmailStats ( startDate: "2025-01-01" endDate: "2025-01-31" ) { opens clicks bounces spamReports delivered startDate endDate }}Ответ:
{ "data": { "sendgrid_getEmailStats": { "opens": 150, "clicks": 75, "bounces": 5, "spamReports": 2, "delivered": 1000, "startDate": "2025-01-01T00:00:00Z", "endDate": "2025-01-31T00:00:00Z" } }}Проверка адреса
Заголовок раздела «Проверка адреса»Query:
query sendgrid_validateEmail { sendgrid_validateEmail ( email: "test@example.com" ) { valid score local domain reason suggestions }}Ответ (с SendGrid Premium):
{ "data": { "sendgrid_validateEmail": { "valid": true, "score": 0.95, "local": "test", "domain": "example.com", "reason": "", "suggestions": [] } }}Ответ (базовая проверка — если SendGrid Premium недоступен):
{ "data": { "sendgrid_validateEmail": { "valid": true, "score": 0.8, "local": "test", "domain": "example.com", "reason": "Basic validation (SendGrid premium validation not available)", "suggestions": [] } }}Примечание: конечная точка проверки e-mail SendGrid (/v3/validations/email) требует особых прав и может быть недоступна во всех аккаунтах. Если у API-ключа нет доступа (ошибка 403), система автоматически использует базовую проверку по регулярным выражениям.
Полные примеры с переменными
Заголовок раздела «Полные примеры с переменными»Пример с переменными GraphQL
Заголовок раздела «Пример с переменными GraphQL»Запрос:
{ "query": "mutation SendEmail($email: EmailInput!) { sendgrid_sendEmail(email: $email) { messageId success } }", "variables": { "email": { "from": { "email": "sender@example.com", "name": "Sender Name" }, "to": [ { "email": "recipient@example.com", "name": "Recipient Name" } ], "subject": "Test Email", "content": [ { "type": "text/html", "value": "<h1>Hello World</h1>" } ] } }}Обработка ошибок
Заголовок раздела «Обработка ошибок»Пример ошибки
Заголовок раздела «Пример ошибки»Запрос:
{ "query": "mutation { sendgrid_sendEmail(email: { from: { email: \"invalid\" }, to: [], subject: \"Test\", content: [] }) { messageId success } }"}Ответ с ошибкой:
{ "errors": [ { "message": "validation error: at least one recipient is required", "path": ["sendgrid_sendEmail"] } ], "data": null}Типичные ошибки
Заголовок раздела «Типичные ошибки»-
Не указан ID проекта:
{"errors": [{"message": "project ID is required in context"}]} -
Конфигурация не найдена:
{"errors": [{"message": "sendgrid configuration not found for project: xxx, environment: master"}]} -
Недействительный API-ключ:
{"errors": [{"message": "sendgrid API error: status 401, body: ..."}]}
Webhooks
Заголовок раздела «Webhooks»Конечная точка Webhooks
Заголовок раздела «Конечная точка Webhooks»Доступна по адресу:
- HTTP:
POST http://localhost:8080/webhooks/sendgrid - Lambda:
POST /webhooks/sendgrid
Настройка в SendGrid
Заголовок раздела «Настройка в SendGrid»- Перейдите в SendGrid Dashboard > Settings > Mail Settings > Event Webhook
- Укажите URL:
https://your-domain.com/webhooks/sendgrid - Выберите нужные события
- Укажите ключ проверки в переменной окружения
WEBHOOK_VERIFICATION_KEY
Поддерживаемые события
Заголовок раздела «Поддерживаемые события»processed: письмо обработаноdelivered: письмо доставленоopened: письмо открытоclicked: переход по ссылкеbounce: отскокdropped: письмо отброшеноspamreport: помечено как спамunsubscribe: отписка