unipile-v2-messaginglisted
Install: claude install-skill henriquecaner/next-level-outreach
# Unipile v2 — Envio (mensagens, convites, e-mail)
Todas as rotas são `/v2/{account_id}/...` com `account_id` no PATH. Ver [[unipile-v2-foundations]].
## Iniciar/enviar mensagem (LinkedIn, WhatsApp)
**Novo chat 1-a-1** — `POST /v2/{account_id}/chats/send` (application/json):
```json
{ "text": "<msg>", "users_ids": "<PROVIDER_ID>" }
```
- `users_ids` como **string única** → chat 1-a-1; como **array** → grupo.
- Opcional: `name` (nome do chat/grupo), `attachments` (base64 `{content,content_type,filename}`).
- **LinkedIn:** sem InMail só dá pra iniciar com **conexões**; p/ não-conexão → convide antes.
**Enviar em chat existente** — `POST /v2/{account_id}/chats/{chat_id}/messages/send`:
```json
{ "text": "<msg>", "quote_id": "<message_id a responder (opcional)>" }
```
Prefira quando já tiver o `chat_id` (ex.: respondendo a um webhook `message_received`).
## InMail (LinkedIn) — `POST /v2/{account_id}/chats/send` com `specifics`
Confirmado na spec 2.16.0: a flag vai em `specifics` — **NÃO existe**
`linkedin.api='inmail'` nem `subject` no top-level (shapes do v1 morto).
```json
{ "text": "<msg>", "users_ids": "<PROVIDER_ID>",
"specifics": { "linkedin": { "classic": { "inmail": true } } } }
```
- `subject` **só existe no produto Sales Navigator** (lá é obrigatório):
`"specifics": { "linkedin": { "sales_navigator": { "subject": "<assunto>" } } }`
— exige a conta com SN conectado. ✅ Nosso `sendInMail` roteia: com subject →
SN; sem subject → classic com `inmail: true`.
-