# SMS de saída

URL canônica: https://texttree.ai/pt-br/docs/sms-saida/
URL em Markdown: https://texttree.ai/pt-br/docs/sms-saida.md
Tipo de página: docs
Translation status: draft
Legal status: english_controls

## Resumo

Envie SMS de produção por meio de supressão, gastos, verificações de remetente e provedor.

## Conteúdo fonte

Os envios de saída passam pelo mesmo caminho de segurança, independentemente de serem originados da API, do compositor de mensagens, do construtor de campanha ou do mecanismo de fluxo de trabalho.

## Exemplos de solicitação

### curl

```bash
curl https://api.texttree.ai/api/v1/messages \
  -H "Authorization: Bearer $TEXTREE_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "phone_number": "+15551234567",
    "body": "Your appointment is tomorrow at 9 AM.",
    "metadata": {
      "workflow": "appointment-reminder"
    }
  }'
```

### JavaScript

```js
const response = await fetch("https://api.texttree.ai/api/v1/messages", {
  method: "POST",
  headers: {
    Authorization: `Bearer undefined`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    phone_number: "+15551234567",
    body: "Your appointment is tomorrow at 9 AM.",
    metadata: { workflow: "appointment-reminder" },
  }),
});

const result = await response.json();
```

### Python

```py
import os
import requests

result = requests.post(
    "https://api.texttree.ai/api/v1/messages",
    headers={"Authorization": f"Bearer {os.environ['TEXTREE_ACCESS_TOKEN']}"},
    json={
        "phone_number": "+15551234567",
        "body": "Your appointment is tomorrow at 9 AM.",
        "metadata": {"workflow": "appointment-reminder"},
    },
    timeout=10,
).json()
```

### Elixir

```elixir
Mix.install([:req])

result =
  Req.post!(
    "https://api.texttree.ai/api/v1/messages",
    auth: {:bearer, System.fetch_env!("TEXTREE_ACCESS_TOKEN")},
    json: %{
      phone_number: "+15551234567",
      body: "Your appointment is tomorrow at 9 AM.",
      metadata: %{workflow: "appointment-reminder"}
    }
  ).body
```

Cada remessa é verificada em relação a exclusões de espaço de trabalho, limites de gastos, reserva contábil, disponibilidade
do remetente, validação da carga útil e preparação do fornecedor antes da execução com o fornecedor. Remessas de campanha
Eles também verificam exclusões específicas da campanha antes de enfileirar uma mensagem TextTree e novamente se
adiciona uma supressão de campanha antes do envio final.

O formulário de Fast Send e a página de envio do painel usam o mesmo caminho de fila que
a API. As operadoras podem escolher um número de remetente de marca conectado no aplicativo ou
deixe a seleção do remetente no automático. Um remetente selecionado deve permanecer conectado ao
espaço de trabalho quando o trabalhador despacha a mensagem; Se não estiver disponível, o
o trabalho termina com `sender_number_unavailable` e não recorre a outro
remetente.

A idempotência da mensagem inclui o remetente selecionado. Reutilizar um `idempotency_key`
com um destinatário, órgão, custo ou remetente diferente é um conflito de idempotência.

## Comportamento de falha

Se um envio for bloqueado, a API retornará uma falha estruturada e o log de mensagens mostrará o mesmo
razão na linha do tempo.

```json
{
  "error": {
    "code": "workspace_suppressed",
    "message": "Recipient is suppressed for this workspace.",
    "fix": "Respect the suppression or remove it only after your compliance process allows SMS again."
  }
}
```
