# Automações do Instagram

> Regras de comentário: palavra-chave, resposta pública e mensagem direta.

As automações do Instagram respondem comentários nos seus posts: a regra olha as palavras do comentário, responde em público (se você quiser) e manda uma mensagem no direct de quem comentou. Duas permissões: `automacoes:ler` (regras, contas do Instagram e automações) e `automacoes:escrever` (criar, editar, ligar, desligar e apagar regras). O módulo Automações precisa estar no plano.

- Comece por [`GET /instagram/contas`](https://docs.forsi.com.br/api/automacoes/listar-contas-instagram) (o `id` é o `conexao_id`). Para iniciar uma automação com a mensagem direta, pegue o `automacao_id` em [`GET /automacoes?gatilho=comentario`](https://docs.forsi.com.br/api/automacoes/listar-automacoes-de-comentario).
- **Sempre informe `post_id`.** Sem ele (`null`) a regra vale para todas as publicações da conta e responde em qualquer post.
- A primeira regra que combinar com o comentário é a que vale. Em `modo: contem` o comentário só precisa ter a palavra; em `igual` ele é só a palavra.
- A regra nasce desligada, a menos que você mande `ativo: true`. Para pausar, use `PATCH` com `ativo: false`; `DELETE` não tem volta.
- `PATCH` muda só os campos enviados, mas o resultado final precisa ser válido (por exemplo, não dá para ficar sem resposta pública e sem resposta privada).
- `qualquer_comentario` e `botoes` só funcionam se estiverem liberados na organização; senão a resposta é `403 recurso_desligado`.
- Cada botão é um texto (devolve o toque) ou `{ "titulo": "Agendar", "url": "https://..." }` (abre o link; só `https`, até 2000 caracteres, `422 regra_botao_url_invalida`). A resposta traz `botoes` (títulos) e `botoes_detalhe` (título e link). Se a Meta recusar os botões na resposta a um comentário, a mensagem sai uma vez só com texto e os links vão no fim dele: o link nunca se perde.
- Limite de 200 regras por organização (`422 limite_de_regras`).
- **Dois tipos de regra.** `tipo: "comum"` é o padrão (e o que toda regra antiga é): responde o comentário e manda a mensagem no direct. `tipo: "seguir"` entrega um conteúdo só para quem segue o seu perfil. O fluxo, todos os campos e os padrões estão no guia [Seguir para receber](https://docs.forsi.com.br/seguir-para-receber). Toda regra traz `tipo` na resposta; filtre a listagem com `?tipo=seguir` ou `?tipo=comum`.
- Toda mudança fica na auditoria da organização com o nome da chave. Ids de outra organização dão `404`.
- Fora da API de propósito: regras por expressão regular, criação e edição de automações (fluxos) e listar as publicações da conta.

```json title="Regra comum (tipo omitido = comum)"
{
  "nome": "Comente QUERO",
  "conexao_id": "54b27747-86c2-455a-91a4-c0c02d0bd891",
  "post_id": "17912345678901234",
  "palavras": ["quero"],
  "responder_publico": "Te mandei no direct!",
  "resposta_privada": "Oi, {nome}! Aqui está o link: https://exemplo.com.br/oferta"
}
```

**Códigos de erro comuns aqui**: `regra_inexistente`, `regra_conexao_invalida`, `regra_sem_palavras`, `regra_modo_invalido`, `regra_sem_acao`, `regra_texto_longo`, `regra_variantes_demais`, `regra_extra_sem_publico`, `regra_automacao_invalida`, `regra_automacao_sem_privada`, `regra_botao_longo`, `regra_botao_repetido`, `regra_botao_url_invalida`, `regra_botoes_demais`, `regra_botoes_invalidos`, `regra_botoes_sem_privada`, `recurso_desligado`, `seguir_invalido`, `limite_de_regras` (todos em [Erros](https://docs.forsi.com.br/erros)).

## GET /instagram/contas — Listar contas do Instagram

- URL: `GET https://chat.forsi.com.br/api/v1/instagram/contas`
- Acesso: escopo `automacoes:ler` · módulos do plano: API + Automações
- Sucesso: `200`, `{"dados": ...}` com lista de `ContaInstagram`
- Página: https://docs.forsi.com.br/api/automacoes/listar-contas-instagram (Markdown: https://docs.forsi.com.br/api/automacoes/listar-contas-instagram.md)

Contas conectadas por login do Instagram, as que aceitam regras de comentário. O `id` é o `conexao_id` das regras.

**Exemplo (curl)**

```bash
curl "https://chat.forsi.com.br/api/v1/instagram/contas" \
  -H "Authorization: Bearer $FORSI_CHAVE"
```

**Resposta `200` (exemplo)**

```json
{
  "dados": [
    {
      "id": "e20de52a-e801-4676-9cd3-03e78b280315",
      "caixa_id": "7a9d53e9-9d1b-4122-923b-fac67958f445",
      "usuario": "texto",
      "nome": "Maria Souza"
    }
  ]
}
```

**Erros**: `401`, `403`, `422`, `429` (formato e códigos em "Erros"; códigos desta seção no início dela).

## GET /automacoes — Listar automações para ligar a uma regra

- URL: `GET https://chat.forsi.com.br/api/v1/automacoes`
- Acesso: escopo `automacoes:ler` · módulos do plano: API + Automações
- Sucesso: `200`, `{"dados": ...}` com lista de `AutomacaoResumo`
- Página: https://docs.forsi.com.br/api/automacoes/listar-automacoes-de-comentario (Markdown: https://docs.forsi.com.br/api/automacoes/listar-automacoes-de-comentario.md)

Com `gatilho=comentario`: as automações que uma regra de comentário pode iniciar (`automacao_id`).

**Parâmetros de consulta (query string)**

| Campo | Tipo | Obrigatório | Notas |
| --- | --- | --- | --- |
| `gatilho` | "comentario" | não | Por enquanto só `comentario`: automações que podem ser ligadas a uma regra de comentário. |

**Exemplo (curl)**

```bash
curl "https://chat.forsi.com.br/api/v1/automacoes?gatilho=comentario" \
  -H "Authorization: Bearer $FORSI_CHAVE"
```

**Resposta `200` (exemplo)**

```json
{"dados":[{"id":"fb75ed96-6799-4508-92b2-6bc7d57ff8a9","nome":"Maria Souza"}]}
```

**Erros**: `401`, `403`, `422`, `429` (formato e códigos em "Erros"; códigos desta seção no início dela).

## GET /regras-comentario — Listar regras de comentário

- URL: `GET https://chat.forsi.com.br/api/v1/regras-comentario`
- Acesso: escopo `automacoes:ler` · módulos do plano: API + Automações
- Sucesso: `200`, `{"dados": ...}` com lista de `RegraComentario` (paginada por cursor)
- Página: https://docs.forsi.com.br/api/automacoes/listar-regras-comentario (Markdown: https://docs.forsi.com.br/api/automacoes/listar-regras-comentario.md)

Regras que respondem comentários do Instagram, paginado por cursor. Filtre por conta, publicação, estado ou `tipo` (`comum` ou `seguir`). Regras `seguir` trazem o bloco `seguir` completo e `estatisticas`.

**Parâmetros de consulta (query string)**

| Campo | Tipo | Obrigatório | Notas |
| --- | --- | --- | --- |
| `conexao_id` | uuid | não | Só as regras desta conta do Instagram. |
| `post_id` | string | não | Só as regras desta publicação. |
| `ativo` | "true" \| "false" | não | true ou false. |
| `tipo` | "comum" \| "seguir" | não | Só as regras deste tipo: `comum` ou `seguir`. |
| `limite` | integer | não | Itens por página (1 a 100, padrão 50). |
| `cursor` | string | não | O valor de `proximo` da página anterior. até 80 caracteres |

**Exemplo (curl)**

```bash
curl "https://chat.forsi.com.br/api/v1/regras-comentario?conexao_id=54b27747-86c2-455a-91a4-c0c02d0bd891&ativo=true" \
  -H "Authorization: Bearer $FORSI_CHAVE"
```

**Resposta `200` (exemplo)**

```json
{
  "dados": [
    {
      "id": "cc23f373-2c83-42d6-83a7-c4e00ac10c39",
      "nome": "Maria Souza",
      "ativo": true,
      "conexao_id": "11908b04-f817-4068-afa6-896d3e1b7265",
      "post_id": "texto",
      "palavras": ["texto"],
      "modo": "contem",
      "qualquer_comentario": false,
      "automacao_id": "b6b1fba7-e2a3-4922-a365-70584a78e091",
      "automacao": "texto",
      "responder_publico": "texto",
      "resposta_privada": "texto",
      "respostas_publicas": ["texto"],
      "ocultar_apos": false,
      "botoes": ["texto"],
      "botoes_detalhe": [{"titulo":"Consulta de retorno","url":"https://seu-sistema.com.br/webhooks/forsi"}],
      "tipo": "comum",
      "seguir": {
        "botao_receber": "texto",
        "texto_nao_segue": "texto",
        "botao_estou_seguindo": "texto",
        "texto_ainda_nao_segue": "texto",
        "texto_ja_segue": "texto",
        "texto_seguiu_depois": "texto",
        "conteudo": {
          "texto": "Oi, queria remarcar minha consulta",
          "botao": {"titulo":"Consulta de retorno","url":"https://seu-sistema.com.br/webhooks/forsi"}
        },
        "max_tentativas": 12,
        "texto_limite": "texto",
        "se_nao_verificar": "enviar"
      },
      "estatisticas": {"pediram":12,"entregues":42,"ja_seguiam":12,"seguiram_depois":12,"aguardando":12},
      "atualizado_em": "2026-10-04T13:05:12.481Z",
      "execucoes_7d": 12,
      "ultima_em": "2026-10-04T13:05:12.481Z"
    }
  ],
  "proximo": "1791205512481_3791c08d-72dd-4002-89ff-1e14a11c07e5"
}
```

**Erros**: `401`, `403`, `422`, `429` (formato e códigos em "Erros"; códigos desta seção no início dela).

## POST /regras-comentario — Criar regra de comentário

- URL: `POST https://chat.forsi.com.br/api/v1/regras-comentario`
- Acesso: escopo `automacoes:escrever` · módulos do plano: API + Automações · aceita `Idempotency-Key`
- Sucesso: `201`, `{"dados": ...}` com `RegraComentario`
- Página: https://docs.forsi.com.br/api/automacoes/criar-regra-comentario (Markdown: https://docs.forsi.com.br/api/automacoes/criar-regra-comentario.md)

Nasce desligada, a menos que mande `ativo: true`. Informe `post_id`: sem ele a regra vale para todas as publicações. A primeira regra que combinar com o comentário vale. Até 200 regras por organização (422 `limite_de_regras`). Com `tipo: "seguir"` ("Seguir para receber") a pessoa precisa seguir a conta para receber o conteúdo: mande `resposta_privada` e `seguir.conteudo.texto`; o resto de `seguir` tem padrão (422 `seguir_invalido` se algum campo passar do limite). Sem `tipo`, a regra é `comum`. `qualquer_comentario`, `botoes` (inclusive botões de link) e `tipo: "seguir"` dão 403 `recurso_desligado` se não estiverem liberados. Mande `Idempotency-Key` para repetir com segurança.

**Corpo (JSON)**

| Campo | Tipo | Obrigatório | Notas |
| --- | --- | --- | --- |
| `nome` | string | sim | Nome da regra, só para você identificar. até 80 caracteres |
| `conexao_id` | uuid | sim | Conta do Instagram (GET /instagram/contas). |
| `post_id` | string ou null | não | Id da publicação. null = vale para qualquer publicação (não recomendado: responde em todos os posts). |
| `palavras` | lista de string | não | Até 30 palavras. Vazio só com `qualquer_comentario: true`. |
| `modo` | "contem" \| "igual" | não | `contem`: o comentário tem a palavra. `igual`: o comentário é só a palavra. |
| `qualquer_comentario` | boolean | não | true = dispara em qualquer comentário, sem palavras. Precisa estar liberado na organização. |
| `responder_publico` | string ou null | não | Resposta pública ao comentário (até 2200 caracteres). |
| `respostas_publicas` | lista de string | não | Variações da resposta pública (até 5), sorteadas a cada comentário. Precisa de `responder_publico`. |
| `ocultar_apos` | boolean | não | Oculta o comentário depois de responder. Precisa de `responder_publico`. |
| `resposta_privada` | string ou null | não | Mensagem direta enviada a quem comentou (até 1000 caracteres). |
| `automacao_id` | uuid ou null | não | Automação a iniciar com a resposta privada (GET /automacoes?gatilho=comentario). Precisa de `resposta_privada`. |
| `botoes` | lista de string ou object | não | Até 3 botões na mensagem direta. Cada botão é um texto (devolve o toque) ou `{ titulo, url? }`; com `url` (https) abre o link. Se a Meta recusar os botões nessa resposta, a mensagem sai só com texto e os links entram no fim do texto. Precisa de `resposta_privada` e de estar liberado na organização. |
| `ativo` | boolean | não | Liga ou desliga a regra. Ao criar, o padrão é false. |
| `tipo` | "comum" \| "seguir" | não | `comum` (padrão): responde e manda a mensagem. `seguir`: o conteúdo só é entregue a quem segue a conta; veja `seguir`. No tipo `seguir` não use `automacao_id` nem `botoes`. |
| `seguir` | object | não | Configuração do tipo `seguir`. Campos omitidos usam o padrão. Só `conteudo.texto` é obrigatório. Precisa de `resposta_privada` (até 640 caracteres) e estar liberado na organização (403 `recurso_desligado`). |
| `seguir.botao_receber` | string | não | Texto do botão que vai junto da mensagem do comentário. 1 a 20 caracteres, sem variáveis (o banco recusa "{"). Padrão: "Quero receber". |
| `seguir.texto_nao_segue` | string | não | Mensagem para quem pediu e ainda não segue a conta. 1 a 640 caracteres. Padrão: "Para receber, é só seguir o perfil @{conta} e depois tocar em "Estou seguindo".". Aceita {nome}, {usuario} e {conta}. |
| `seguir.botao_estou_seguindo` | string | não | Texto do botão para avisar que passou a seguir. 1 a 20 caracteres, sem variáveis (o banco recusa "{"). Padrão: "Estou seguindo". |
| `seguir.texto_ainda_nao_segue` | string | não | Mensagem quando a pessoa toca em "Estou seguindo" e ainda não segue. 1 a 640 caracteres. Padrão: "Ainda não apareceu que você segue @{conta}. Siga o perfil e toque de novo em "Estou seguindo".". Aceita {nome}, {usuario} e {conta}. |
| `seguir.texto_ja_segue` | string | não | Mensagem antes do conteúdo para quem já seguia. 0 a 640 caracteres. Padrão: "Que bom ter você por aqui! Aqui está o que você pediu:". Vazio ("") = não envia este texto, só o conteúdo. Aceita {nome}, {usuario} e {conta}. |
| `seguir.texto_seguiu_depois` | string | não | Mensagem antes do conteúdo para quem acabou de seguir. 0 a 640 caracteres. Padrão: "Obrigado por seguir! Aqui está o que você pediu:". Vazio ("") = não envia este texto, só o conteúdo. Aceita {nome}, {usuario} e {conta}. |
| `seguir.conteudo` | object | sim | O que é entregue quando a pessoa segue: texto e, se quiser, um botão de link. Obrigatório para o tipo `seguir`. |
| `seguir.max_tentativas` | integer ou null | não | Quantas vezes conferir se a pessoa passou a seguir (1 a 50). Padrão: null = confere até seguir, no máximo 50 vezes. |
| `seguir.texto_limite` | string ou null | não |  |
| `seguir.se_nao_verificar` | "enviar" \| "pedir_de_novo" | não | Se a Meta não deixar conferir: `enviar` (padrão) entrega o conteúdo assim mesmo; `pedir_de_novo` pede para seguir outra vez. |

**Exemplo (curl)**

```bash
curl -X POST "https://chat.forsi.com.br/api/v1/regras-comentario" \
  -H "Authorization: Bearer $FORSI_CHAVE" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: pedido-4821" \
  -d '{
    "nome": "Quero o preço",
    "conexao_id": "54b27747-86c2-455a-91a4-c0c02d0bd891",
    "post_id": "17912345678901234",
    "palavras": ["preço","valor"],
    "modo": "contem",
    "responder_publico": "Te mandei os detalhes no direct!",
    "resposta_privada": "Oi! Aqui estão os valores e como agendar.",
    "botoes": [
      "Falar com atendente",
      {"titulo":"Agendar","url":"https://exemplo.com.br/agendar"}
    ],
    "ativo": true
  }'
```

**Resposta `201` (exemplo)**

```json
{
  "dados": {
    "id": "cc23f373-2c83-42d6-83a7-c4e00ac10c39",
    "nome": "Maria Souza",
    "ativo": true,
    "conexao_id": "11908b04-f817-4068-afa6-896d3e1b7265",
    "post_id": "texto",
    "palavras": ["texto"],
    "modo": "contem",
    "qualquer_comentario": false,
    "automacao_id": "b6b1fba7-e2a3-4922-a365-70584a78e091",
    "automacao": "texto",
    "responder_publico": "texto",
    "resposta_privada": "texto",
    "respostas_publicas": ["texto"],
    "ocultar_apos": false,
    "botoes": ["texto"],
    "botoes_detalhe": [{"titulo":"Consulta de retorno","url":"https://seu-sistema.com.br/webhooks/forsi"}],
    "tipo": "comum",
    "seguir": {
      "botao_receber": "texto",
      "texto_nao_segue": "texto",
      "botao_estou_seguindo": "texto",
      "texto_ainda_nao_segue": "texto",
      "texto_ja_segue": "texto",
      "texto_seguiu_depois": "texto",
      "conteudo": {
        "texto": "Oi, queria remarcar minha consulta",
        "botao": {"titulo":"Consulta de retorno","url":"https://seu-sistema.com.br/webhooks/forsi"}
      },
      "max_tentativas": 12,
      "texto_limite": "texto",
      "se_nao_verificar": "enviar"
    },
    "estatisticas": {"pediram":12,"entregues":42,"ja_seguiam":12,"seguiram_depois":12,"aguardando":12},
    "atualizado_em": "2026-10-04T13:05:12.481Z",
    "execucoes_7d": 12,
    "ultima_em": "2026-10-04T13:05:12.481Z"
  }
}
```

**Erros**: `401`, `403`, `409`, `422`, `429` (formato e códigos em "Erros"; códigos desta seção no início dela).

## GET /regras-comentario/{id} — Ver uma regra de comentário

- URL: `GET https://chat.forsi.com.br/api/v1/regras-comentario/{id}`
- Acesso: escopo `automacoes:ler` · módulos do plano: API + Automações
- Sucesso: `200`, `{"dados": ...}` com `RegraComentario`
- Página: https://docs.forsi.com.br/api/automacoes/ver-regra-comentario (Markdown: https://docs.forsi.com.br/api/automacoes/ver-regra-comentario.md)

**Parâmetros no caminho**

| Campo | Tipo | Obrigatório | Notas |
| --- | --- | --- | --- |
| `id` | uuid | sim | No caminho da URL. |

**Exemplo (curl)**

```bash
curl "https://chat.forsi.com.br/api/v1/regras-comentario/7f0a344c-4fb9-4180-8d9b-46d51ab38635" \
  -H "Authorization: Bearer $FORSI_CHAVE"
```

**Resposta `200`**: mesmo formato do exemplo de `RegraComentario` acima (campos em "Objetos das respostas").

**Erros**: `401`, `403`, `404`, `422`, `429` (formato e códigos em "Erros"; códigos desta seção no início dela).

## PATCH /regras-comentario/{id} — Editar regra de comentário

- URL: `PATCH https://chat.forsi.com.br/api/v1/regras-comentario/{id}`
- Acesso: escopo `automacoes:escrever` · módulos do plano: API + Automações · aceita `Idempotency-Key`
- Sucesso: `200`, `{"dados": ...}` com `RegraComentario`
- Página: https://docs.forsi.com.br/api/automacoes/editar-regra-comentario (Markdown: https://docs.forsi.com.br/api/automacoes/editar-regra-comentario.md)

Só os campos enviados mudam. `ativo` liga ou desliga. Mudar `tipo` para `comum` apaga o bloco `seguir`. Em `seguir`, só os campos enviados mudam e os omitidos mantêm o valor atual (dentro de `conteudo` também; `conteudo.botao: null` tira o botão). O resultado final tem de continuar válido (por exemplo, não dá para ficar sem resposta nenhuma).

**Parâmetros no caminho**

| Campo | Tipo | Obrigatório | Notas |
| --- | --- | --- | --- |
| `id` | uuid | sim | No caminho da URL. |

**Corpo (JSON)**

| Campo | Tipo | Obrigatório | Notas |
| --- | --- | --- | --- |
| `nome` | string | não | Nome da regra, só para você identificar. até 80 caracteres |
| `conexao_id` | uuid | não | Conta do Instagram (GET /instagram/contas). |
| `post_id` | string ou null | não | Id da publicação. null = vale para qualquer publicação (não recomendado: responde em todos os posts). |
| `palavras` | lista de string | não | Até 30 palavras. Vazio só com `qualquer_comentario: true`. |
| `modo` | "contem" \| "igual" | não | `contem`: o comentário tem a palavra. `igual`: o comentário é só a palavra. |
| `qualquer_comentario` | boolean | não | true = dispara em qualquer comentário, sem palavras. Precisa estar liberado na organização. |
| `responder_publico` | string ou null | não | Resposta pública ao comentário (até 2200 caracteres). |
| `respostas_publicas` | lista de string | não | Variações da resposta pública (até 5), sorteadas a cada comentário. Precisa de `responder_publico`. |
| `ocultar_apos` | boolean | não | Oculta o comentário depois de responder. Precisa de `responder_publico`. |
| `resposta_privada` | string ou null | não | Mensagem direta enviada a quem comentou (até 1000 caracteres). |
| `automacao_id` | uuid ou null | não | Automação a iniciar com a resposta privada (GET /automacoes?gatilho=comentario). Precisa de `resposta_privada`. |
| `botoes` | lista de string ou object | não | Até 3 botões na mensagem direta. Cada botão é um texto (devolve o toque) ou `{ titulo, url? }`; com `url` (https) abre o link. Se a Meta recusar os botões nessa resposta, a mensagem sai só com texto e os links entram no fim do texto. Precisa de `resposta_privada` e de estar liberado na organização. |
| `ativo` | boolean | não | Liga ou desliga a regra. Ao criar, o padrão é false. |
| `tipo` | "comum" \| "seguir" | não | `comum` (padrão): responde e manda a mensagem. `seguir`: o conteúdo só é entregue a quem segue a conta; veja `seguir`. No tipo `seguir` não use `automacao_id` nem `botoes`. |
| `seguir` | object | não | Mesmo formato de `seguir`, com todos os campos opcionais (inclusive dentro de `conteudo`). Só os campos enviados mudam; os omitidos mantêm o valor atual. `max_tentativas: null` e `texto_limite: null` voltam ao padrão (sem limite). Se a regra era `comum`, o que faltar vem dos padrões e `conteudo.texto` é obrigatório. |
| `seguir.botao_receber` | string | não | Texto do botão que vai junto da mensagem do comentário. 1 a 20 caracteres, sem variáveis (o banco recusa "{"). Padrão: "Quero receber". |
| `seguir.texto_nao_segue` | string | não | Mensagem para quem pediu e ainda não segue a conta. 1 a 640 caracteres. Padrão: "Para receber, é só seguir o perfil @{conta} e depois tocar em "Estou seguindo".". Aceita {nome}, {usuario} e {conta}. |
| `seguir.botao_estou_seguindo` | string | não | Texto do botão para avisar que passou a seguir. 1 a 20 caracteres, sem variáveis (o banco recusa "{"). Padrão: "Estou seguindo". |
| `seguir.texto_ainda_nao_segue` | string | não | Mensagem quando a pessoa toca em "Estou seguindo" e ainda não segue. 1 a 640 caracteres. Padrão: "Ainda não apareceu que você segue @{conta}. Siga o perfil e toque de novo em "Estou seguindo".". Aceita {nome}, {usuario} e {conta}. |
| `seguir.texto_ja_segue` | string | não | Mensagem antes do conteúdo para quem já seguia. 0 a 640 caracteres. Padrão: "Que bom ter você por aqui! Aqui está o que você pediu:". Vazio ("") = não envia este texto, só o conteúdo. Aceita {nome}, {usuario} e {conta}. |
| `seguir.texto_seguiu_depois` | string | não | Mensagem antes do conteúdo para quem acabou de seguir. 0 a 640 caracteres. Padrão: "Obrigado por seguir! Aqui está o que você pediu:". Vazio ("") = não envia este texto, só o conteúdo. Aceita {nome}, {usuario} e {conta}. |
| `seguir.conteudo` | object | não | Só o que mudar: `texto`, `botao` ou os dois. `botao: null` tira o botão. |
| `seguir.max_tentativas` | integer ou null | não | Quantas vezes conferir se a pessoa passou a seguir (1 a 50). Padrão: null = confere até seguir, no máximo 50 vezes. |
| `seguir.texto_limite` | string ou null | não |  |
| `seguir.se_nao_verificar` | "enviar" \| "pedir_de_novo" | não | Se a Meta não deixar conferir: `enviar` (padrão) entrega o conteúdo assim mesmo; `pedir_de_novo` pede para seguir outra vez. |

**Exemplo (curl)**

```bash
curl -X PATCH "https://chat.forsi.com.br/api/v1/regras-comentario/7f0a344c-4fb9-4180-8d9b-46d51ab38635" \
  -H "Authorization: Bearer $FORSI_CHAVE" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: pedido-4821" \
  -d '{"palavras":["preço","valor","quanto custa"],"ativo":false}'
```

**Resposta `200`**: mesmo formato do exemplo de `RegraComentario` acima (campos em "Objetos das respostas").

**Erros**: `401`, `403`, `404`, `409`, `422`, `429` (formato e códigos em "Erros"; códigos desta seção no início dela).

## DELETE /regras-comentario/{id} — Apagar regra de comentário

- URL: `DELETE https://chat.forsi.com.br/api/v1/regras-comentario/{id}`
- Acesso: escopo `automacoes:escrever` · módulos do plano: API + Automações
- Sucesso: `200`, `{"dados": ...}` com `ApagadoRegra`
- Página: https://docs.forsi.com.br/api/automacoes/apagar-regra-comentario (Markdown: https://docs.forsi.com.br/api/automacoes/apagar-regra-comentario.md)

Sem volta. Para só pausar, use PATCH com `ativo: false`.

**Parâmetros no caminho**

| Campo | Tipo | Obrigatório | Notas |
| --- | --- | --- | --- |
| `id` | uuid | sim | No caminho da URL. |

**Exemplo (curl)**

```bash
curl -X DELETE "https://chat.forsi.com.br/api/v1/regras-comentario/7f0a344c-4fb9-4180-8d9b-46d51ab38635" \
  -H "Authorization: Bearer $FORSI_CHAVE"
```

**Resposta `200` (exemplo)**

```json
{"dados":{"apagado":false}}
```

**Erros**: `401`, `403`, `404`, `409`, `422`, `429` (formato e códigos em "Erros"; códigos desta seção no início dela).

## Objetos das respostas

Campos de cada objeto devolvido em `dados`. Campos novos podem aparecer: ignore os que não conhecer.

### ContaInstagram

| Campo | Tipo | Obrigatório | Notas |
| --- | --- | --- | --- |
| `id` | uuid | não |  |
| `caixa_id` | uuid ou null | não |  |
| `usuario` | string ou null | não |  |
| `nome` | string ou null | não |  |

### AutomacaoResumo

| Campo | Tipo | Obrigatório | Notas |
| --- | --- | --- | --- |
| `id` | uuid | não |  |
| `nome` | string | não |  |

### RegraComentario

| Campo | Tipo | Obrigatório | Notas |
| --- | --- | --- | --- |
| `id` | uuid | não |  |
| `nome` | string | não |  |
| `ativo` | boolean | não |  |
| `conexao_id` | uuid | não |  |
| `post_id` | string ou null | não |  |
| `palavras` | lista de string | não |  |
| `modo` | "contem" \| "igual" | não |  |
| `qualquer_comentario` | boolean | não |  |
| `automacao_id` | uuid ou null | não |  |
| `automacao` | string ou null | não | Nome da automação. |
| `responder_publico` | string ou null | não |  |
| `resposta_privada` | string ou null | não |  |
| `respostas_publicas` | lista de string | não |  |
| `ocultar_apos` | boolean | não |  |
| `botoes` | lista de string | não |  |
| `botoes_detalhe` | lista de object | não | Os mesmos botões com o link: `url` não aparece no botão que só devolve o toque. |
| `botoes_detalhe[].titulo` | string | não |  |
| `botoes_detalhe[].url` | string | não |  |
| `tipo` | "comum" \| "seguir" | não | `comum` ou `seguir` ("Seguir para receber"). Regras antigas são `comum`. |
| `seguir` | object ou null | não | Só no tipo `seguir`: completo, com os padrões aplicados. Não aparece no tipo `comum`; dentro dele, `conteudo.botao`, `max_tentativas` e `texto_limite` também não aparecem enquanto forem null. |
| `seguir.botao_receber` | string | não | Botão da mensagem do comentário (1 a 20). Padrão: "Quero receber". |
| `seguir.texto_nao_segue` | string | não | Para quem ainda não segue (1 a 640). |
| `seguir.botao_estou_seguindo` | string | não | Botão para avisar que passou a seguir (1 a 20). Padrão: "Estou seguindo". |
| `seguir.texto_ainda_nao_segue` | string | não | Quando toca em "Estou seguindo" e ainda não segue (1 a 640). |
| `seguir.texto_ja_segue` | string | não | Antes do conteúdo, para quem já seguia (0 a 640; "" = não envia). |
| `seguir.texto_seguiu_depois` | string | não | Antes do conteúdo, para quem acabou de seguir (0 a 640; "" = não envia). |
| `seguir.conteudo` | object | não | O que é entregue. |
| `seguir.max_tentativas` | integer ou null | não | null = confere até seguir (no máximo 50 vezes). mín. 1 |
| `seguir.texto_limite` | string ou null | não | Enviada uma vez quando as tentativas acabam (1 a 640). |
| `seguir.se_nao_verificar` | "enviar" \| "pedir_de_novo" | não | Quando a Meta não deixa conferir. Padrão: `enviar`. |
| `estatisticas` | object ou null | não | Só no tipo `seguir`. Contagem desde que a regra existe. |
| `estatisticas.pediram` | integer | não | Pessoas que receberam o botão. |
| `estatisticas.entregues` | integer | não | Pessoas que receberam o conteúdo. |
| `estatisticas.ja_seguiam` | integer | não | Já seguiam ao pedir. |
| `estatisticas.seguiram_depois` | integer | não | Passaram a seguir depois de pedir. |
| `estatisticas.aguardando` | integer | não | Ainda esperando tocar ou seguir. |
| `atualizado_em` | data e hora ISO 8601 | não |  |
| `execucoes_7d` | integer | não | Disparos nos últimos 7 dias. |
| `ultima_em` | data e hora ISO 8601 ou null | não |  |

### ApagadoRegra

| Campo | Tipo | Obrigatório | Notas |
| --- | --- | --- | --- |
| `apagado` | boolean | não |  |

---

Página: https://docs.forsi.com.br/api/automacoes · Índice: https://docs.forsi.com.br/llms.txt · Tudo num arquivo: https://docs.forsi.com.br/llms-full.txt
