К основному содержанию
скилл CX Codex GP ChatGPT официальный · OpenAI

twilio-sendgrid-email-send — скилл для Codex: отправка писем

Скилл учит агента отправлять письма через SendGrid v3 Mail Send API: одиночные, пакетные с шаблонами, отложенные и с вложениями. Нужен ключ SendGrid с префиксом SG.

Установить в Codex · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add openai/plugins --skill twilio-sendgrid-email-send -a codex
Открыть на GitHub

Что делает twilio-sendgrid-email-send

Скилл описывает работу с эндпоинтом POST /v3/mail/send и даёт готовые примеры на Python и Node.js. Одиночная отправка, пакетная рассылка с динамическими шаблонами Handlebars (ID начинаются с d-), отложенная отправка, вложения в base64, категории и custom args для аналитики. Отдельный раздел — sandbox mode: запрос проверяется, но письмо не уходит, ответ приходит 200 OK вместо 202 Accepted.

Устроено как справочник с кодом и списком жёстких ограничений. Отложить отправку можно не больше чем на 72 часа, а отменить — только если batch ID присвоен заранее. send_at принимает Unix-секунды: Date.now() в JavaScript отдаёт миллисекунды, и такой timestamp молча отклоняется. Больше 1000 получателей за один вызов отправить нельзя, вложения — до 30MB.

Перед отправкой агент обязан согласовать получателей, тему и текст с пользователем: письмо после доставки не отозвать. Скилл не подойдёт, если вы работаете с Twilio Email API на comms.twilio.com — это другой продукт с другими учётными данными. Типичные грабли: опечатка в ключе dynamic_template_data не даёт ошибки, переменная просто отрендерится пустой строкой. Это повод проверять шаблоны на тестовой отправке.

Какие задачи решает

  • отправить письмо с подтверждением заказа из бэкенда
  • разослать персонализированные письма по списку получателей
  • отложить отправку письма на несколько часов и отменить её
  • приложить PDF-счёт к письму
  • проверить запрос на отправку без реальной доставки

Примеры запросов агенту

  • Отправь письмо с подтверждением заказа на [email protected] через SendGrid
  • Сделай пакетную рассылку по динамическому шаблону d-xxxxxxxxxxxxxxxxxxxxxxxxxxxx для двух получателей
  • Запланируй отправку на час вперёд и покажи batch_id, чтобы я мог её отменить

Как установить twilio-sendgrid-email-send

1Через Skills CLI (Vercel)

npx skills add openai/plugins --skill twilio-sendgrid-email-send -a codex

2Вручную: положить файлы

.agents/skills/twilio-sendgrid-email-send/SKILL.md

Для всех проектов — ~/.agents/skills/

По шагам, с командами для каждой платформы: Скиллы Codex: как установить, где лежат и как вызвать

Вопросы о twilio-sendgrid-email-send

Как установить twilio-sendgrid-email-send в Codex?

Выполните npx skills add openai/plugins --skill twilio-sendgrid-email-send -a codex, после чего скилл окажется в .agents/skills/twilio-sendgrid-email-send/SKILL.md.

Что делает twilio-sendgrid-email-send?

Описывает отправку писем через SendGrid v3 Mail Send API: одиночные и пакетные рассылки, динамические шаблоны, отложенную отправку с отменой, вложения и sandbox mode. Примеры даны на Python и Node.js.

Подойдёт ли скилл для Twilio Email API?

Нет. Он рассчитан на ключ SendGrid с префиксом SG, а Twilio Email API на comms.twilio.com — отдельный продукт с другими учётными данными.

Исходный текст

SKILL.md · MIT
---
name: twilio-sendgrid-email-send
description: >
  Send transactional and bulk email via the SendGrid v3 Mail Send API.
  Covers single sends, personalized batch sends with dynamic templates,
  scheduled sends with cancellation, attachments, and sandbox mode for
  testing. Use this skill when the caller has a SendGrid API key (SG.-prefix).
  Do NOT use this skill if the caller is using the Twilio Email API
  (comms.twilio.com) — that is a separate product with different credentials.
---

## Overview

> **Agent safety:** Always confirm recipients, subject, and content with the user before sending. Email is irreversible once delivered. Never send email autonomously without explicit user approval — especially for batch sends to multiple recipients.

All email sending goes through `POST /v3/mail/send`. This endpoint returns `202 Accepted` (queued) — NOT `200 OK` (delivered). Delivery confirmation comes asynchronously via Event Webhook. See `twilio-sendgrid-webhooks`.

---

## Basic Send

**Python**
```python
import os, sendgrid
from sendgrid.helpers.mail import Mail

sg = sendgrid.SendGridAPIClient(os.environ["SENDGRID_API_KEY"])
message = Mail(
    from_email="[email protected]",
    to_emails="[email protected]",
    subject="Order Confirmation",
    html_content="<p>Your order #1234 is confirmed.</p>"
)
response = sg.send(message)
print(f"Status: {response.status_code}")  # 202 = queued
```

**Node.js**
```javascript
const sgMail = require("@sendgrid/mail");
sgMail.setApiKey(process.env.SENDGRID_API_KEY);

const [response] = await sgMail.send({
    to: "[email protected]",
    from: "[email protected]",
    subject: "Order Confirmation",
    html: "<p>Your order #1234 is confirmed.</p>",
});
console.log(`Status: ${response.statusCode}`); // 202 = queued
```

---

## Personalized Batch Send with Dynamic Templates

Dynamic templates use Handlebars syntax. Template IDs start with `d-`. Create templates in SendGrid Console > Email API > Dynamic Templates.

**Python**
```python
from sendgrid.helpers.mail import Mail, To

message = Mail(
    from_email="[email protected]",
    to_emails=[
        To("[email protected]", dynamic_template_data={"name": "Alice", "order_id": "123"}),
        To("[email protected]", dynamic_template_data={"name": "Bob", "order_id": "456"}),
    ],
)
message.template_id = "d-xxxxxxxxxxxxxxxxxxxxxxxxxxxx"
sg.send(message)
```

**Node.js**
```javascript
await sgMail.send({
    from: { email: "[email protected]" },
    template_id: "d-xxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    personalizations: [
        { to: [{ email: "[email protected]" }], dynamic_template_data: { name: "Alice", order_id: "123" } },
        { to: [{ email: "[email protected]" }], dynamic_template_data: { name: "Bob", order_id: "456" } },
    ],
});
```

**Recipients in the same `to` array within a single personalization can see each other.** For private sends, use separate personalizations (one per recipient).

---

## Scheduled Sends

Schedule up to 72 hours in advance. Cancellation requires a batch ID assigned *before* sending.

**Python**
```python
import time, requests

headers = {"Authorization": f"Bearer {os.environ['SENDGRID_API_KEY']}", "Content-Type": "application/json"}

# Get batch ID first
batch = requests.post("https://api.sendgrid.com/v3/mail/batch", headers=headers).json()

# Include batch_id and send_at in the message
send_at = int(time.time()) + 3600  # Unix SECONDS, not ms

# Cancel if needed (before send_at)
requests.post("https://api.sendgrid.com/v3/user/scheduled_sends",
    headers=headers,
    json={"batch_id": batch["batch_id"], "status": "cancel"})
```

---

## Attachments

Base64-encode files in the `attachments` array. Total limit: 30MB per request (~22MB before encoding overhead).

```python
import base64
from sendgrid.helpers.mail import Mail, Attachment, FileContent, FileName, FileType, Disposition

with open("invoice.pdf", "rb") as f:
    encoded = base64.b64encode(f.read()).decode()

message = Mail(from_email="[email protected]", to_emails="[email protected]",
               subject="Your Invoice", html_content="<p>Invoice attached.</p>")
message.attachment = Attachment(FileContent(encoded), FileName("invoice.pdf"),
                                FileType("application/pdf"), Disposition("attachment"))
sg.send(message)
```

---

## Categories and Custom Args

**Categories** tag sends for analytics segmentation (up to 10 per message):
```python
message.category = ["transactional", "order-confirmation"]
```

**Custom Args** pass metadata through to Event Webhooks (key-value strings only):
```python
message.custom_args = {"order_id": "1234", "env": "production"}
```

These appear in webhook event payloads, enabling you to correlate delivery events back to your application data.

---

## Sandbox Mode (Testing)

Validates the request without delivering. Returns `200 OK` (not `202`).

```python
message.mail_settings = {"sandbox_mode": {"enable": True}}
response = sg.send(message)  # 200 = validated, not sent
```

---

## CANNOT

- **Cannot send more than 1,000 recipients per API call** — Hard limit. Split into multiple requests.
- **Cannot schedule sends more than 72 hours in advance** — `send_at` rejects timestamps beyond 72h.
- **Cannot cancel a send after processing** — Only scheduled messages with a pre-assigned batch ID can be cancelled.
- **Cannot use `send_at` with milliseconds** — JS `Date.now()` returns ms. Divide by 1000 or the timestamp is silently rejected (>72h).
- **The `subject` field in personalizations is a plain string override** — To use dynamic subjects, set Handlebars variables (e.g., `{{{subject}}}`) in the Dynamic Template's subject field and pass values via `dynamic_template_data`. The personalizations `subject` key bypasses the template subject entirely.
- **Undefined template variables render as empty strings** — No error for typos in `dynamic_template_data` keys. Silent failures.
- **`413 Payload Too Large` returns nginx HTML, not JSON** — Exceeding 30MB returns HTML error page. Check Content-Type before parsing.
- **Empty `content` when using `template_id`** — Omit the `content` field. If you include both, `template_id` takes precedence and `content` is ignored.

> **Agent usage:** When sending email on behalf of a user, always report back what was sent — recipients, subject, and the API response status code. Maintain an application-level audit log for all sends.

---

## Next Steps

- **Account setup and domain auth:** `twilio-sendgrid-account-setup`
- **Templates and settings:** `twilio-sendgrid-email-settings`
- **Delivery tracking via webhooks:** `twilio-sendgrid-webhooks`
- **Manage bounces and unsubscribes:** `twilio-sendgrid-suppressions`

© Twilio · MIT · openai/plugins

Похожие скиллы

Всё по теме «Бэкенд и API» →
email-smtp-send tiangong-ai Отправляет письма через SMTP с локальными вложениями и сохраняет копию в папку «Отправленные» через IMAP. Пригодится агенту для надёжной почтовой рассылки и отчётов. CX Codex +1 6 800установок send-email wangyendt Скилл отправляет письма через SMTP: обычный текст, HTML, вложения и шаблоны. Пригодится, когда агенту нужно послать отчёт или уведомление. CX Codex +1 652установок connector-twilio caffeinelabs Скилл для отправки SMS и MMS из Caffeine-канистры через пакет twilio-client. Экспериментальный: ни один вызов ещё не проверяли на живом Twilio. CX Codex +1 11 200установок Twilio SMS Automation Claude Office Skills Скилл для автоматизации SMS-рассылок, двусторонних переписок, кодов подтверждения и голосовых сценариев через Twilio. CX Codex +1 5 400установок email-template-builder Alireza Rezvani Создаёт систему транзакционных писем на React Email или MJML, подключает провайдеров и добавляет предпросмотр. Подходит для новых шаблонов, миграции и локализации писем. 602установок twilio-communications sickn33 Скилл помогает настроить отправку сообщений, голосовые вызовы и двухфакторную верификацию через Twilio. Пригодится при создании IVR-меню или защите входа через одноразовые коды. CX Codex +1 994установок

Из того же набора304

Весь набор →
twilio-voice-twiml Скилл для сборки голосовой логики звонков на TwiML: глаголы Say, Play, Gather, Dial, Record, Conference и пример IVR для входящего вызова. CX Codex GP ChatGPT ★ 7 596звёзд репо twilio-verify-send-otp Скилл учит агента проводить полный цикл одноразовых кодов в Twilio Verify: создать сервис, отправить код, проверить его. CX Codex GP ChatGPT ★ 7 596звёзд репо twilio-isv-sms-best-practices Скилл для тех, кто встраивает SMS в SaaS-платформу и рассылает сообщения от имени клиентов. Разбирает регистрацию A2P 10DLC и toll-free, субаккаунты и биллинг. CX Codex GP ChatGPT ★ 7 596звёзд репо twilio-sendgrid-inbound-parse Скилл учит агента принимать входящие письма через SendGrid Inbound Parse: MX-записи, разбор полей, вложения и подводные камни. CX Codex GP ChatGPT ★ 7 596звёзд репо twilio-security-api-auth Помогает выбрать способ аутентификации Twilio и подключить его правильно, чтобы Auth Token не утёк в продакшен. CX Codex GP ChatGPT ★ 7 596звёзд репо twilio-rcs-messaging Скилл для Codex и ChatGPT, который ведёт от онбординга RCS-отправителя до отправки карточек и каруселей через Twilio. CX Codex GP ChatGPT ★ 7 596звёзд репо twilio-notifications-alerts-advisor Помогает выбрать архитектуру транзакционных уведомлений: канал, срочность, подтверждение доставки и запасные варианты. CX Codex GP ChatGPT ★ 7 596звёзд репо twilio-lookup-phone-intelligence Скилл для Codex и ChatGPT, который проверяет телефонные номера через Twilio Lookup v2 и оценивает риск мошенничества до отправки SMS или звонка. CX Codex GP ChatGPT ★ 7 596звёзд репо

Спонсоры проекта

Компании, которые помогают держать аналитику открытой