Iniciar uma Jornada
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
apie journeysjourneyse journeysProjourneysProVer os planos que incluem - Formato
- O da API de WhatsApp Cloud da Meta, na requisição e na resposta.
Parâmetros#
No caminho#
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| version | string | obrigatório | A versão da Graph API da Meta que a chamada usa (vN.N): repassada à Meta como veio. |
| id | string | obrigatório | O 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_id | string | obrigatório | O id da Jornada (jrn_ e 16 caracteres). Precisa estar ativa nesta conta e ter o gatilho api. |
Cabeçalhos#
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| Authorization | string | obrigatório | Sua chave de API, no formato Bearer <chave>. Veja Autenticação. |
| Idempotency-Key | string | obrigatório | Uma 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.
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| recipient | object | obrigatório | id (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#
| Status | Código | Quando acontece |
|---|---|---|
| 202 | — | Execução criada |
| 400 | 100 | Falta Idempotency-Key, ou ela não tem de 8 a 128 caracteres válidos |
| 400 | 100 | O corpo não é JSON, tem um campo desconhecido, ou o recipient não é { id } nem { wa_id } |
| 400 | 100 | A Jornada não existe na conta, está inativa, ou o gatilho dela não é api |
| 400 | 100 | A pessoa não tem conversa com a conta (a API não inicia conversa) |
| 400 | 100 | Instagram: a janela de 24 h da conversa fechou |
| 400 | 100 | Corpo acima de 1 KB |
| 401 | 190 | Sem Authorization: Bearer, chave malformada ou forjada, chave revogada, ou chave sem acesso a este número |
| 403 | 200 | A chave não tem o escopo messages |
| 403 | 1390004 | O plano da organização não inclui a API |
| 403 | 1390005 | Conta em modo leitura ou suspensa por falta de pagamento |
| 404 | 100 | O phone_number_id não é um número ativo desta organização (ou não tem de 5 a 20 dígitos) |
| 404 | 100 | O journey_id não tem o formato de um id de Jornada |
| 409 | 1390001 | A conversa está com um atendente, ou com a automação de uma chave de API |
| 409 | 1390016 | A pessoa já tem uma execução de Jornada em andamento: espere ela terminar (uma chave nova não resolve) |
| 409 | 1390002 | Uma chamada com esta Idempotency-Key ainda está em andamento |
| 422 | 1390003 | A chave já foi usada para outra pessoa |
| 429 | 130429 | Mais de 2000 requisições em 10 s com esta chave neste número (Retry-After: 10) |
| 429 | 130429 | O número acabou de recusar por vazão, ou está sobrecarregado: o 429 se repete por 200 ms (Retry-After: 1) |
| 429 | 130429 | Um teto da Jornada barrou a entrada (por pessoa no dia, por hora, reentrada ou disjuntor): Retry-After: 1 |
| 429 | 130429 | O id é novo para a rota e a chave já gastou as 30 tentativas do minuto: Retry-After: 1 |
| 503 | 2 | Serviç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#
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| run_id | integer | obrigatório | A 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
apiresponde 400 (código 100), não 404. Umjourney_idque 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: 1em vez de 404 (veja o parâmetroid): repita.
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())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.