Pular para o conteúdo
PATCH/regras-comentario/{id}

Editar regra de comentário

automacoes:escrevermódulo Automaçõesaceita Idempotency-Key

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).

PATCH /regras-comentario/{id}

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
{
  "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"
  }
}

Parâmetros no caminho#

  • iduuidobrigatório

    No caminho da URL.

Corpo da requisição#

JSON. Mande com Content-Type: application/json.

  • nomestringopcional

    Nome da regra, só para você identificar.

    • até 80 caracteres
  • conexao_iduuidopcional

    Conta do Instagram (GET /instagram/contas).

  • post_idstring ou nullopcional

    Id da publicação. null = vale para qualquer publicação (não recomendado: responde em todos os posts).

  • palavraslista de stringopcional

    Até 30 palavras. Vazio só com qualquer_comentario: true.

  • modo"contem" | "igual"opcional

    contem: o comentário tem a palavra. igual: o comentário é só a palavra.

  • qualquer_comentariobooleanopcional

    true = dispara em qualquer comentário, sem palavras. Precisa estar liberado na organização.

  • responder_publicostring ou nullopcional

    Resposta pública ao comentário (até 2200 caracteres).

  • respostas_publicaslista de stringopcional

    Variações da resposta pública (até 5), sorteadas a cada comentário. Precisa de responder_publico.

  • ocultar_aposbooleanopcional

    Oculta o comentário depois de responder. Precisa de responder_publico.

  • resposta_privadastring ou nullopcional

    Mensagem direta enviada a quem comentou (até 1000 caracteres).

  • automacao_iduuid ou nullopcional

    Automação a iniciar com a resposta privada (GET /automacoes?gatilho=comentario). Precisa de resposta_privada.

  • botoeslista de string ou objectopcional

    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.

  • ativobooleanopcional

    Liga ou desliga a regra. Ao criar, o padrão é false.

  • tipo"comum" | "seguir"opcional

    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.

  • seguirobjectopcional

    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_receberstringopcional

    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_seguestringopcional

    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_seguindostringopcional

    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_seguestringopcional

    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_seguestringopcional

    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_depoisstringopcional

    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.conteudoobjectopcional

    Só o que mudar: texto, botao ou os dois. botao: null tira o botão.

  • seguir.max_tentativasinteger ou nullopcional

    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_limitestring ou nullopcional
    —
  • seguir.se_nao_verificar"enviar" | "pedir_de_novo"opcional

    Se a Meta não deixar conferir: enviar (padrão) entrega o conteúdo assim mesmo; pedir_de_novo pede para seguir outra vez.

Resposta#

200 com {"dados": ...}: RegraComentario.

  • iduuidopcional
    —
  • nomestringopcional
    —
  • ativobooleanopcional
    —
  • conexao_iduuidopcional
    —
  • post_idstring ou nullopcional
    —
  • palavraslista de stringopcional
    —
  • modo"contem" | "igual"opcional
    —
  • qualquer_comentariobooleanopcional
    —
  • automacao_iduuid ou nullopcional
    —
  • automacaostring ou nullopcional

    Nome da automação.

  • responder_publicostring ou nullopcional
    —
  • resposta_privadastring ou nullopcional
    —
  • respostas_publicaslista de stringopcional
    —
  • ocultar_aposbooleanopcional
    —
  • botoeslista de stringopcional
    —
  • botoes_detalhelista de objectopcional

    Os mesmos botões com o link: url não aparece no botão que só devolve o toque.

  • botoes_detalhe[].titulostringopcional
    —
  • botoes_detalhe[].urlstringopcional
    —
  • tipo"comum" | "seguir"opcional

    comum ou seguir ("Seguir para receber"). Regras antigas são comum.

  • seguirobject ou nullopcional

    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_receberstringopcional

    Botão da mensagem do comentário (1 a 20). Padrão: "Quero receber".

  • seguir.texto_nao_seguestringopcional

    Para quem ainda não segue (1 a 640).

  • seguir.botao_estou_seguindostringopcional

    Botão para avisar que passou a seguir (1 a 20). Padrão: "Estou seguindo".

  • seguir.texto_ainda_nao_seguestringopcional

    Quando toca em "Estou seguindo" e ainda não segue (1 a 640).

  • seguir.texto_ja_seguestringopcional

    Antes do conteúdo, para quem já seguia (0 a 640; "" = não envia).

  • seguir.texto_seguiu_depoisstringopcional

    Antes do conteúdo, para quem acabou de seguir (0 a 640; "" = não envia).

  • seguir.conteudoobjectopcional

    O que é entregue.

  • seguir.max_tentativasinteger ou nullopcional

    null = confere até seguir (no máximo 50 vezes).

    • mín. 1
  • seguir.texto_limitestring ou nullopcional

    Enviada uma vez quando as tentativas acabam (1 a 640).

  • seguir.se_nao_verificar"enviar" | "pedir_de_novo"opcional

    Quando a Meta não deixa conferir. Padrão: enviar.

  • estatisticasobject ou nullopcional

    Só no tipo seguir. Contagem desde que a regra existe.

  • estatisticas.pediramintegeropcional

    Pessoas que receberam o botão.

  • estatisticas.entreguesintegeropcional

    Pessoas que receberam o conteúdo.

  • estatisticas.ja_seguiamintegeropcional

    Já seguiam ao pedir.

  • estatisticas.seguiram_depoisintegeropcional

    Passaram a seguir depois de pedir.

  • estatisticas.aguardandointegeropcional

    Ainda esperando tocar ou seguir.

  • atualizado_emdata e hora ISO 8601opcional
    —
  • execucoes_7dintegeropcional

    Disparos nos últimos 7 dias.

  • ultima_emdata e hora ISO 8601 ou nullopcional
    —

Erros#

Todo erro vem como {"erro": {"codigo", "mensagem"}}. Trate pelo codigo: ele não muda.

Status de erro desta operação
StatusQuando
401Chave ausente ou inválida (resposta igual para qualquer motivo).
403Plano sem API, escopo insuficiente ou https/origem recusados.
404Não existe nesta organização.
409Conflito (repetido, Idempotency-Key com outro corpo).
422Dados inválidos ou regra de negócio (ex.: janela_fechada; conta_restrita = a Meta restringiu a conta por spam: erro traz os campos de RestricaoMeta, como ate, escopo, motivo e retry_after_s).
429Limite de requisições. Veja Retry-After.
Códigos de erro que esta área pode devolver19
  • regra_inexistenteRegra de comentário não encontrada (veja GET /regras-comentario).
  • regra_conexao_invalidaconexao_id precisa ser uma conta do Instagram conectada por login (veja GET /instagram/contas).
  • regra_sem_palavrasInforme de 1 a 30 palavras, ou use qualquer_comentario: true.
  • regra_modo_invalidomodo deve ser contem ou igual.
  • regra_sem_acaoA regra precisa de uma resposta pública ou de uma resposta privada.
  • regra_texto_longoTexto longo demais: resposta pública até 2200 caracteres e resposta privada até 1000.
  • regra_variantes_demaisNo máximo 5 respostas_publicas.
  • regra_extra_sem_publicorespostas_publicas e ocultar_apos só valem com responder_publico preenchido.
  • regra_automacao_invalidaautomacao_id não é uma automação desta organização (veja GET /automacoes?gatilho=comentario).
  • regra_automacao_sem_privadaPara ligar uma automação, preencha resposta_privada.
  • regra_botao_longoCada botão tem no máximo 20 caracteres.
  • regra_botao_repetidoBotões repetidos. Cada botão deve ser diferente.
  • regra_botao_url_invalidaA url do botão deve ser um link https:// válido, com até 2000 caracteres.
  • regra_botoes_demaisNo máximo 3 botões.
  • regra_botoes_invalidosbotoes deve ser uma lista de textos ou de objetos { titulo, url }.
  • regra_botoes_sem_privadaPara ter botões, preencha resposta_privada.
  • recurso_desligadoEste recurso não está liberado para a sua organização.
  • seguir_invalidoAlgum campo de `seguir` é inválido. A mensagem diz qual: textos de 1 a 640 caracteres (os de "já segue" e "seguiu depois" podem ser vazios), botões de 1 a 20 e sem `{` (botão não troca variáveis), cada texto até 900 bytes (emoji e acento contam mais), sem caractere de controle ou invisível, `max_tentativas` de 1 a 50 e link do conteúdo em https.
  • limite_de_regrasLimite de 200 regras de comentário por organização. Apague alguma para criar outra.

Os erros que valem para qualquer rota (chave, limite, JSON) estão em Erros.