twilio-whatsapp-send-message — скилл для Codex: правила WhatsApp
Справочник по отправке сообщений WhatsApp через Twilio: 24-часовое окно, шаблоны, песочница и разбор ошибок доставки.
npx skills add openai/plugins --skill twilio-whatsapp-send-message -a codexЧто делает twilio-whatsapp-send-message
Скилл объясняет, как Twilio проводит WhatsApp через Programmable Messaging API. Номера идут с префиксом whatsapp:+E.164, а режимов отправки два. Свободный текст можно слать только в течение 24 часов после последнего входящего от пользователя. Вне окна нужен шаблон: contentSid плюс contentVariables. Если отправить свободный текст не вовремя, доставка молча провалится — это повод проверять режим до отправки.
Внутри есть готовые примеры на Python и Node.js для обоих режимов, отправка медиа до 16 МБ (только в свободном режиме), таблица полей ответа вроде sid и status, а также разбор частых ошибок: 63003, 63018, 63020. Отдельно расписаны лимиты. Больше 80 сообщений в секунду на отправителя не пройдёт, очередь держит сообщение не дольше 4 часов, а песочница душит до 1 сообщения в 3 секунды и 50 в день.
Перед работой понадобится аккаунт Twilio с включённым WhatsApp, переменные TWILIO_ACCOUNT_SID и TWILIO_AUTH_TOKEN, SDK (pip install twilio или npm install twilio) и согласие получателя на рассылку. Для тестов хватит песочницы: отправьте join <your-code> на +14155238886, регистрация не нужна, но участники выпадают каждые 3 дня. Для продакшена сначала регистрируется WhatsApp Business sender. Отправка без opt-in грозит блокировкой аккаунта.
Какие задачи решает
- понять, когда можно слать свободный текст, а когда только шаблон
- поднять песочницу WhatsApp и протестировать отправку без регистрации
- разобраться, почему сообщение не дошло и что значит код ошибки
- проверить лимиты отправителя перед массовой рассылкой
- подключить отправку медиа с корректным размером файла
Примеры запросов агенту
- Помоги настроить отправку WhatsApp через Twilio: аккаунт, переменные окружения и первый тестовый запрос в песочнице
- Моё сообщение в WhatsApp не доставляется. Посмотри по скиллу twilio-whatsapp-send-message, в чём причина и какой код ошибки это объясняет
- Нужно отправить шаблонное сообщение вне 24-часового окна — покажи пример с contentSid и contentVariables
Как установить twilio-whatsapp-send-message
1Через Skills CLI (Vercel)
npx skills add openai/plugins --skill twilio-whatsapp-send-message -a codex2Вручную: положить файлы
.agents/skills/twilio-whatsapp-send-message/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add openai/plugins --skill twilio-whatsapp-send-message -a claude-code2Вручную: положить файлы
~/.claude/skills/twilio-whatsapp-send-message/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/twilio-whatsapp-send-message/
Вручную: положить файлы
.cursor/skills/twilio-whatsapp-send-message/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install openai/plugins twilio-whatsapp-send-message2Вручную: положить файлы
.github/skills/twilio-whatsapp-send-message/SKILL.mdКомандой платформы
gemini skills install https://github.com/openai/plugins --path plugins/twilio-developer-kit/skills/twilio-whatsapp-send-messageВручную: положить файлы
.devin/skills/twilio-whatsapp-send-message/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Claude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Скиллы Codex: как установить, где лежат и как вызвать
Из того же набора304
Весь набор →Похожие
Рядом в теме «Бэкенд и API»
Всё по теме «Бэкенд и API» →Вопросы о twilio-whatsapp-send-message
Как установить twilio-whatsapp-send-message в Codex?
Выполните npx skills add openai/plugins --skill twilio-whatsapp-send-message, затем npx skills add openai/plugins --skill twilio-whatsapp-send-message -a codex. После этого файл скилла лежит в .agents/skills/twilio-whatsapp-send-message/SKILL.md.
Что делает twilio-whatsapp-send-message?
Разбирает отправку сообщений WhatsApp через Twilio: два режима (свободный текст и шаблон), правила 24-часового окна, настройку песочницы, требования к продакшен-отправителю и ошибки доставки.
Чем этот скилл отличается от twilio-send-message?
Это справочник по специфике WhatsApp. Для самой отправки сообщений берите twilio-send-message, а сюда обращайтесь при первой настройке канала или когда разбираетесь с доставкой именно в WhatsApp.
Исходный текст
SKILL.md · MIT
---
name: twilio-whatsapp-send-message
description: >
WhatsApp messaging deep-dive reference. Covers the 24-hour service
window rules (free-form vs template mode), sandbox setup for testing,
template approval workflow, production sender requirements, and
WhatsApp-specific error handling. For sending WhatsApp messages, use
twilio-send-message instead. Use this skill when setting up WhatsApp
for the first time or debugging WhatsApp-specific delivery behavior.
---
## Overview
**WhatsApp is one channel in Twilio's Messaging platform.** All channels share the same `messages.create()` API — see `twilio-messaging-overview` for the full channel comparison and onboarding sequence.
Twilio routes WhatsApp through the Programmable Messaging API — all numbers use `whatsapp:+E.164` prefix. Two sending modes apply: **free-form** (within 24 hrs of last inbound) and **template** (anytime). Sending free-form outside the window causes silent delivery failure — always check which mode is required.
| Mode | When allowed | Parameters |
|------|-------------|------------|
| Free-form | Within 24 hrs of last inbound from user | `body`, optional `mediaUrl` |
| Template | Anytime | `contentSid` + `contentVariables` |
---
## Prerequisites
- Twilio account with WhatsApp enabled
— New to Twilio? See `twilio-account-setup`
- Environment variables:
- `TWILIO_ACCOUNT_SID`
- `TWILIO_AUTH_TOKEN`
— See `twilio-iam-auth-setup` for credential setup and best practices
- SDK: `pip install twilio` / `npm install twilio`
- Recipient opted in to receive messages from your WhatsApp Business Account
**Testing (sandbox):** Join by texting `join <your-code>` to `+14155238886`. No registration needed — see [Console > Messaging > Try it out > Send a WhatsApp message](https://console.twilio.com/us1/develop/sms/try-it-out/whatsapp-learn). Sandbox participants must re-join every 3 days.
**Production:** Register a WhatsApp Business sender first — see `twilio-whatsapp-manage-senders`.
---
## Quickstart
**Python**
```python
import os
from twilio.rest import Client
client = Client(os.environ["TWILIO_ACCOUNT_SID"], os.environ["TWILIO_AUTH_TOKEN"])
message = client.messages.create(
from_="whatsapp:+14155238886", # Sandbox sender (or your production number)
to="whatsapp:+15005550006", # Must have joined the sandbox
body="Your order has been confirmed."
)
print(message.sid) # MMxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
print(message.status) # queued | sent | delivered | failed
```
**Node.js**
```node
const twilio = require("twilio");
const client = twilio(process.env.TWILIO_ACCOUNT_SID, process.env.TWILIO_AUTH_TOKEN);
const message = await client.messages.create({
from: "whatsapp:+14155238886",
to: "whatsapp:+15005550006",
body: "Your order has been confirmed.",
});
console.log(message.sid);
console.log(message.status);
```
---
## Key Patterns
### Send a Template Message (outside service window)
Templates are created in Console > Messaging > Content Template Builder and must be approved by Meta. See `twilio-content-template-builder` for template creation.
**Python**
```python
message = client.messages.create(
from_="whatsapp:+14155238886",
to="whatsapp:+15005550006",
content_sid="HXxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
content_variables='{"1": "March 25", "2": "2:00 PM"}'
)
```
**Node.js**
```node
const message = await client.messages.create({
from: "whatsapp:+14155238886",
to: "whatsapp:+15005550006",
contentSid: "HXxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
contentVariables: JSON.stringify({ "1": "March 25", "2": "2:00 PM" }),
});
```
### Send Media (free-form only)
Max file size: 16 MB.
**Python**
```python
message = client.messages.create(
from_="whatsapp:+14155238886",
to="whatsapp:+15005550006",
body="Here is your invoice.",
media_url=["https://example.com/invoice.pdf"]
)
```
**Node.js**
```node
const message = await client.messages.create({
from: "whatsapp:+14155238886",
to: "whatsapp:+15005550006",
body: "Here is your invoice.",
mediaUrl: ["https://example.com/invoice.pdf"],
});
```
---
## Response Fields
| Field | Description |
|-------|-------------|
| `sid` | Unique message identifier (`MM...`) |
| `status` | `queued`, `sent`, `delivered`, `read`, `failed`, `undelivered` |
| `error_code` | Populated on failure |
| `error_message` | Human-readable error description |
| `date_sent` | UTC timestamp |
---
## Common Errors
| Code | Meaning | Fix |
|------|---------|-----|
| 63003 | Invalid WhatsApp destination number | Verify number is WhatsApp-enabled and correctly formatted |
| 63018 | Rate limit exceeded on sender | Reduce send rate; default is 80 MPS |
| 63020 | Business hasn't accepted Twilio's Meta invitation | Accept invite in Meta Business Manager |
| N/A | Free-form outside window | Switch to a template message |
---
## CANNOT
- **Cannot exceed 80 messages/second per sender** — Text-only can be raised to 400 MPS on request
- **Cannot queue messages beyond 4 hours** — Undelivered messages fail after 4 hours
- **Cannot exceed sandbox throttle limits** — 1 message per 3 seconds, 50 messages/day on trial, participants expire after 3 days
- **Cannot send without opt-in** — Sending without recipient opt-in risks account suspension
- **Cannot use WhatsApp Groups API** — Deprecated April 2020. Use Conversations API instead.
---
## Next Steps
- **Channel overview and onboarding guide:** `twilio-messaging-overview`
- **Register a production WhatsApp sender:** `twilio-whatsapp-manage-senders`
- **Create and manage message templates:** `twilio-content-template-builder`
- **Multi-channel conversations with history:** `twilio-conversations-api`
© Twilio · MIT · openai/plugins