Synergy Connect

Documentação

Iniciar uma Jornada

POST/{version}/{id}/journeys/{journey_id}/runs

Inicia, para uma pessoa, uma Jornada ativa cujo gatilho é api (escolhido no editor). Rota da Synergy, sem equivalente na Meta. A resposta é 202: a execução foi criada e os blocos rodam em seguida, não dentro da chamada.

{id} é o phone_number_id (WhatsApp, com recipient.wa_id) ou o ig-user-id (Instagram, com recipient.id, o IGSID). A pessoa precisa já ter uma conversa com a conta: a API não inicia conversa nova. No Instagram, a janela de 24 h da conversa precisa estar aberta.

Idempotência: o header Idempotency-Key é obrigatório (de 8 a 128 caracteres: letras, dígitos e _ . : -). Repetir a chamada com a mesma chave para a mesma pessoa devolve o mesmo run_id, sem iniciar outra execução; a mesma chave para outra pessoa é recusada (422, código 1390003). A chave vale por Jornada.

O envio de cada bloco obedece às regras e aos tetos de uma Jornada que começou sozinha: a janela, os limites por pessoa e por hora, a reentrada e o disjuntor. Um teto atingido responde 429 com Retry-After: 1 e é contado nas métricas da Jornada. A pessoa que já tem uma execução em andamento, mesmo com uma Idempotency-Key nova, recebe 409 (código 1390016): espere a Jornada atual dela terminar. O 409 do código 1390002 fica para uma chamada com a mesma chave ainda em andamento. Uma conversa com um atendente, ou com a automação de uma chave de API, recebe 409 (código 1390001).

Exige uma chave de escopo messages e os recursos api, journeys e journeysPro (e instagram, numa conta do Instagram). Uma chave de assistente não inicia Jornadas numa conta do Instagram (403, código 200).

Requer#

Escopo da chave
Enviar mensagens messagesComo os escopos funcionam
Recurso do plano
API e webhooks api e journeys journeys e journeysPro journeysProVer os planos que incluem
Formato
O da API de WhatsApp Cloud da Meta, na requisição e na resposta.

Parâmetros#

No caminho#

No caminho
NomeTipoObrigatórioDescrição
versionstringobrigatórioA versão da Graph API da Meta que a chamada usa (vN.N): repassada à Meta como veio.
idstringobrigatórioO phone_number_id de um número de WhatsApp ou o ig-user-id de uma conta do Instagram da organização. A rota descobre o canal pelo id (um id que ela não conhece pode responder 429 com Retry-After: 1 em vez de 404: repita).
journey_idstringobrigatórioO id da Jornada (jrn_ e 16 caracteres). Precisa estar ativa nesta conta e ter o gatilho api.

Cabeçalhos#

Cabeçalhos
NomeTipoObrigatórioDescrição
AuthorizationstringobrigatórioSua chave de API, no formato Bearer <chave>. Veja Autenticação.
Idempotency-KeystringobrigatórioUma chave escolhida pela integração para UMA execução (por exemplo o id do pedido). A mesma chave nunca inicia uma segunda execução.

Corpo#

Tipo de conteúdo: application/json.

Campos do corpo
NomeTipoObrigatórioDescrição
recipientobjectobrigatórioid (o IGSID) numa conta do Instagram; wa_id (de 8 a 15 dígitos) num número de WhatsApp. A pessoa precisa já ter conversa com a conta.

Respostas#

Respostas
StatusCódigoQuando acontece
202—Execução criada
400100Falta Idempotency-Key, ou ela não tem de 8 a 128 caracteres válidos
400100O corpo não é JSON, tem um campo desconhecido, ou o recipient não é { id } nem { wa_id }
400100A Jornada não existe na conta, está inativa, ou o gatilho dela não é api
400100A pessoa não tem conversa com a conta (a API não inicia conversa)
400100Instagram: a janela de 24 h da conversa fechou
400100Corpo acima de 1 KB
401190Sem Authorization: Bearer, chave malformada ou forjada, chave revogada, ou chave sem acesso a este número
403200A chave não tem o escopo messages
4031390004O plano da organização não inclui a API
4031390005Conta em modo leitura ou suspensa por falta de pagamento
404100O phone_number_id não é um número ativo desta organização (ou não tem de 5 a 20 dígitos)
404100O journey_id não tem o formato de um id de Jornada
4091390001A conversa está com um atendente, ou com a automação de uma chave de API
4091390016A pessoa já tem uma execução de Jornada em andamento: espere ela terminar (uma chave nova não resolve)
4091390002Uma chamada com esta Idempotency-Key ainda está em andamento
4221390003A chave já foi usada para outra pessoa
429130429Mais de 2000 requisições em 10 s com esta chave neste número (Retry-After: 10)
429130429O número acabou de recusar por vazão, ou está sobrecarregado: o 429 se repete por 200 ms (Retry-After: 1)
429130429Um teto da Jornada barrou a entrada (por pessoa no dia, por hora, reentrada ou disjuntor): Retry-After: 1
429130429O id é novo para a rota e a chave já gastou as 30 tentativas do minuto: Retry-After: 1
5032Serviço temporariamente indisponível

Os erros no formato da Meta trazem o código em error.code. Ver todos os erros.

Corpo da resposta 202#

Campos da resposta 202
NomeTipoObrigatórioDescrição
run_idintegerobrigatórioA execução criada. A mesma Idempotency-Key para a mesma pessoa devolve o mesmo run_id.

Limites de taxa#

  • Borda: 2000 requisições a cada 10 s por chave × número (API_EDGE_LIMIT).

Notas#

  • O corpo tem até 1 KB e só o recipient: qualquer outro campo responde 400.
  • Uma Jornada que não existe na conta, está inativa ou não tem o gatilho api responde 400 (código 100), não 404. Um journey_id que não tem o formato de um id de Jornada responde 404.
  • Os tetos da Jornada que barram a entrada respondem todos o mesmo 429; as métricas da Jornada, no app, dizem qual foi.
  • Um id que a rota ainda não conhece pode responder 429 com Retry-After: 1 em vez de 404 (veja o parâmetro id): repita.
Requisição

curl

curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/journeys/jrn_nbswy3dpeb3w64tm/runs' \
  -H "Authorization: Bearer $SYNERGY_API_KEY" \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: pedido-42-a-caminho' \
  -d '{"recipient":{"wa_id":"5511999999999"}}'

JavaScript

const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/journeys/jrn_nbswy3dpeb3w64tm/runs', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
    'Content-Type': 'application/json',
    'Idempotency-Key': 'pedido-42-a-caminho',
  },
  body: JSON.stringify({
    "recipient": {
      "wa_id": "5511999999999"
    }
  }),
});
console.log(res.status, await res.json());

Python

import os

import requests

res = requests.post(
    "https://api.synergyconnect.com.br/v25.0/106540352242922/journeys/jrn_nbswy3dpeb3w64tm/runs",
    headers={
        "Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
        "Idempotency-Key": "pedido-42-a-caminho",
    },
    json={
        "recipient": {
            "wa_id": "5511999999999",
        },
    },
)
print(res.status_code, res.json())
Resposta

202

{
  "run_id": 4821
}

400

{
  "error": {
    "message": "(#100) Invalid parameter.",
    "type": "OAuthException",
    "code": 100,
    "error_data": {
      "messaging_product": "whatsapp",
      "details": "The Idempotency-Key header is required: 8 to 128 characters (letters, digits, _ . : -)."
    },
    "fbtrace_id": "syn-3f9a1c0b"
  }
}

Há 6 casos com este status; veja a tabela de respostas.

401

{
  "error": {
    "message": "(#190) Invalid OAuth access token.",
    "type": "OAuthException",
    "code": 190,
    "fbtrace_id": "syn-3f9a1c0b"
  }
}

403

{
  "error": {
    "message": "(#200) Permissions error: this key does not have access to this resource.",
    "type": "OAuthException",
    "code": 200,
    "fbtrace_id": "syn-3f9a1c0b"
  }
}

Há 3 casos com este status; veja a tabela de respostas.

404

{
  "error": {
    "message": "(#100) Unsupported request: object does not exist or this key cannot reach it.",
    "type": "OAuthException",
    "code": 100,
    "fbtrace_id": "syn-3f9a1c0b"
  }
}

Há 2 casos com este status; veja a tabela de respostas.

409

{
  "error": {
    "message": "(#1390001) This conversation is being handled by an agent. Bot keys cannot send to it until it is returned to the automation.",
    "type": "OAuthException",
    "code": 1390001,
    "fbtrace_id": "syn-3f9a1c0b"
  }
}

Há 3 casos com este status; veja a tabela de respostas.

422

{
  "error": {
    "message": "(#1390003) This Idempotency-Key was already used for a message to another recipient.",
    "type": "OAuthException",
    "code": 1390003,
    "fbtrace_id": "syn-3f9a1c0b"
  }
}

429

{
  "error": {
    "message": "(#130429) Rate limit hit: the number's message throughput has been reached.",
    "type": "OAuthException",
    "code": 130429,
    "fbtrace_id": "syn-3f9a1c0b"
  }
}

Há 4 casos com este status; veja a tabela de respostas.

503

{
  "error": {
    "message": "(#2) Service temporarily unavailable.",
    "type": "OAuthException",
    "code": 2,
    "fbtrace_id": "syn-3f9a1c0b"
  }
}

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