Synergy Connect

Documentação

Janela de atendimento de 24 horas

O WhatsApp só deixa a empresa mandar mensagens livres a um cliente durante uma janela de 24 horas, contada da última mensagem que o cliente enviou para o número. Cada mensagem nova do cliente reabre a janela por mais 24 h. Fora dela, só um modelo aprovado é entregue. A janela define o que pode ser enviado; ela não define se a mensagem é cobrada (veja Cobrança).

O que dá para enviar#

SituaçãoMensagem livre (texto, mídia, localização, contatos, reação, interativa)Modelo (template)
Dentro da janelaSimSim
Fora da janela (ou o cliente nunca escreveu)Não: a Meta recusa com o código 131047Sim: é o único tipo entregue

Mensagens interativas (botões, lista, Flow…) também só vão dentro da janela (Mensagens interativas). O que um cliente responde a um modelo de marketing abre a janela: a partir daí, mensagens livres valem por 24 h, e as de marketing enviadas nela não contam no limite por cliente que a Meta aplica a modelos de marketing.

Quando a janela fecha#

Cada status sent que a Meta manda no webhook pode trazer conversation.expiration_timestamp: o momento (em segundos desde 1970, como texto) em que a janela da conversa fecha. Guarde-o junto do cliente para saber, antes de enviar, se o modelo será necessário. Se preferir, guarde o timestamp da última mensagem recebida do cliente e some 24 h.

JSON
{
  "statuses": [
    {
      "id": "wamid.HBgNNTUxMTk5OTk5OTk5ORUCABEYEjdGQjI0QzE4RTlBMDVENzQxAA==",
      "status": "sent",
      "timestamp": "1767225600",
      "recipient_id": "5511999999999",
      "conversation": {
        "id": "b1a2c3d4e5f60718293a4b5c6d7e8f90",
        "expiration_timestamp": "1767312000",
        "origin": {
          "type": "utility"
        }
      },
      "pricing": {
        "billable": true,
        "pricing_model": "PMP",
        "category": "utility"
      }
    }
  ]
}

No Instagram#

A regra é parecida, com três diferenças:

WhatsAppInstagram
Janela24 h desde a última mensagem do cliente24 h desde a última mensagem direta da pessoa
Fora da janelaA Meta recusa a mensagem livre (131047); um modelo aprovado é entregueNão há modelos: nada é enviado. A Synergy confere a janela antes e responde na hora, sem chamar a Meta
Resposta privada a um comentárioNão existeUma por comentário, em até 7 dias, sem precisar de janela aberta
Etiqueta Human Agent (janela de 7 dias)Não existeSó os atendentes na plataforma usam. A API nunca usa

Na API, uma mensagem para uma pessoa fora da janela responde 400 com o código 10 e o subcódigo 2534022; uma pessoa que nunca escreveu para a conta (sem conversa) responde 400, código 100, subcódigo 2534014. Veja Instagram.

Para uma Jornada iniciada pela API (Jornadas), a janela do Instagram também precisa estar aberta: 400 com a mensagem The 24-hour window of this conversation is closed.

JSON
{
  "error": {
    "message": "(#10) This message is sent outside of allowed window.",
    "type": "OAuthException",
    "code": 10,
    "error_subcode": 2534022,
    "fbtrace_id": "syn-3f9a1c0b"
  }
}

O erro da Meta (131047)#

No WhatsApp a Synergy não confere a janela: o envio vai à Meta, e é ela quem recusa. O erro volta com o status e o corpo que a Meta mandou, normalmente um 400:

Ele também pode aparecer depois do 200, no status failed do webhook:

Outros códigos da Meta que aparecem em errors (do status failed ou de uma mensagem não suportada):

CódigoQuando
131047Passaram mais de 24 h desde a última mensagem do cliente: use um modelo
131026O destinatário não tem WhatsApp
131049A Meta limitou modelos de marketing para este cliente; espere ao menos 24 h para reenviar
131051Tipo de mensagem não suportado (numa mensagem recebida)

Os códigos próprios da Synergy (faixa 139xxxx) estão em Erros. Em caso de dúvida sobre um código da Meta, vale a documentação de códigos de erro da Cloud API.

JSON
{
  "error": {
    "message": "Re-engagement message",
    "code": 131047,
    "fbtrace_id": "AbC"
  }
}
JSON
{
  "statuses": [
    {
      "id": "wamid.HBgNNTUxMTk5OTk5OTk5ORUCABEYEjdGQjI0QzE4RTlBMDVENzQxAA==",
      "status": "failed",
      "timestamp": "1767225600",
      "recipient_id": "5511999999999",
      "errors": [
        {
          "code": 131047,
          "title": "Re-engagement message",
          "message": "Re-engagement message",
          "error_data": {
            "details": "Message failed to send because more than 24 hours have passed since the customer last replied to this number."
          },
          "href": "https://developers.facebook.com/docs/whatsapp/cloud-api/support/error-codes/"
        }
      ]
    }
  ]
}

Como tratar no seu sistema#

Tente a mensagem livre e, se a Meta responder 131047, reenvie como modelo. O envio por modelo não precisa da janela (Modelos de mensagem (templates)).

Trate também o failed do webhook: um envio aceito (200) pode falhar depois com o mesmo código. Use o id do status para achar a mensagem e reenviar como modelo (Receber mensagens e status). Use uma Idempotency-Key diferente no reenvio, porque é outra requisição (Enviar mensagens).

Exemplo

JavaScript

async function post(body) {
  return fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
    method: 'POST',
    headers: { Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`, 'Content-Type': 'application/json' },
    body: JSON.stringify(body),
  });
}

async function notify(to, text, fallbackTemplate) {
  let res = await post({ messaging_product: 'whatsapp', to, type: 'text', text: { body: text } });
  if (res.status === 400 && (await res.clone().json()).error?.code === 131047) {
    // fora da janela: só um modelo aprovado
    res = await post({ messaging_product: 'whatsapp', to, type: 'template', template: fallbackTemplate });
  }
  return res;
}

Python

import os

import requests

URL = "https://api.synergyconnect.com.br/v25.0/106540352242922/messages"
HEADERS = {"Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}"}

def notify(to, text, fallback_template):
    res = requests.post(URL, headers=HEADERS, json={"messaging_product": "whatsapp", "to": to, "type": "text", "text": {"body": text}})
    if res.status_code == 400 and res.json().get("error", {}).get("code") == 131047:
        # fora da janela: só um modelo aprovado
        res = requests.post(URL, headers=HEADERS, json={"messaging_product": "whatsapp", "to": to, "type": "template", "template": fallback_template})
    return res

O que não depende da janela#

Um modelo vale dentro e fora dela. Todo o resto depende da janela aberta.

Cobrança#

A janela de 24 h decide o que você pode enviar sem modelo, mas não isenta de cobrança. Desde 1º de outubro de 2026, a Meta cobra por mensagem toda mensagem que não é modelo (texto, mídia, interativas, botões, listas e Flow) como mensagem de serviço, seja enviada por uma pessoa, um bot ou uma automação. Modelos de utilidade dentro da janela também são cobrados. A Meta dá 1.000 mensagens de serviço gratuitas por mês, por número conectado; passou disso, ela cobra o excedente direto na conta do cliente na Meta (a forma de pagamento fica cadastrada lá). Fora essa franquia, só é gratuito o que vai dentro da janela de 72 h de entrada gratuita, que vale apenas para quem veio de um anúncio direto para o WhatsApp (Click-to-WhatsApp ou botão de CTA do Facebook). A Synergy não cobra essas taxas: elas vão direto da sua conta para a Meta. Valores e regras atuais: preços de mensagens não-template da Meta.

Ficou com dúvida? Escreva para suporte@synergyconnect.com.br.