API de Pontos de Entrada
Um Ponto de Entrada é uma regra de encaminhamento: “quando isto acontece neste canal, entregue a conversa a este Agente”. Ligar um canal faz com que as mensagens cheguem à conta e criar um Agente dá-lhe algo que pode responder, mas nenhum dos dois decide quem responde à primeira mensagem de um desconhecido. Os Pontos de Entrada fazem-no. Para o produto em si, consulte o guia de Pontos de Entrada.
- URL Base —
https://api.youraiconnector.com/v1 - Autenticação — a sua chave de API (ver Autenticação)
- Erros e paginação — ver Erros e Paginação
Todos os exemplos abaixo mostram o formato de consulta ?apiKey= em cURL e o cabeçalho X-API-Key em JavaScript e Python — qualquer um funciona em todos os endpoints.
No explorador da API. Todos os endpoints nesta página estão na especificação OpenAPI publicada, pelo que pode consultar os seus campos exatos e executar pedidos em tempo real no explorador da API.
A única chamada de que a maioria das integrações precisa
Ligue um canal, crie um Agente e, em seguida, aponte o canal para o Agente:
curl -X PUT "https://api.youraiconnector.com/v1/entry-points/channel-defaults?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "channel": "whatsapp", "agent_id": "ag7HkQ2ZpLxR3mNb" }'
Essa é toda a configuração para “este Agente responde ao WhatsApp”. Tudo o resto nesta página serve para regras mais específicas (palavras-chave, comentários, novos seguidores), vários números num único canal e para ler o que está configurado.
Como é decidido o encaminhamento
Quando uma mensagem chega, a plataforma percorre uma hierarquia fixa e o primeiro passo que decide ganha:
- Um humano assumiu o controlo da conversa — sem IA.
- O contacto já está atribuído a um Agente, manualmente ou porque uma conversa com esse Agente está em curso — o mesmo Agente mantém-na. Os Pontos de Entrada nunca movem uma conversa existente; para entregar um chat a um Agente diferente, atribua-o (na aplicação ou com a ação Automações).
- O contacto está a responder a uma difusão — o Agente da difusão responde, ou ninguém se a difusão não tiver nenhum.
- Um Ponto de Entrada específico corresponde. As regras de palavras-chave superam as regras de comentários, que superam as regras de seguidores. Entre duas regras do mesmo tipo, ganha a que foi atualizada mais recentemente.
- O padrão do canal para o canal onde a mensagem chegou. Um padrão limitado ao número específico para o qual o contacto escreveu supera o padrão de todo o canal.
- Nada correspondeu — a mensagem cai na caixa de entrada da sua equipa e nenhum assistente responde.
Duas coisas atenuam o passo 6. Uma conta com exatamente um Agente ativo e sem padrão configurado para o canal ainda recebe esse Agente como o responsável pela resposta, pelo que uma conta nova que liga o WhatsApp e envia uma mensagem de teste não fica em silêncio. Esse limite mínimo nunca se aplica a um canal que tenha uma regra de palavra-chave (aí, uma mensagem que não corresponde a nenhuma palavra-chave é deixada deliberadamente para um humano) e nunca substitui um canal que definiu como ninguém (consulte Deixar um canal sem ninguém a responder).
Se a hierarquia está ativa para uma conta é reportado por GET /entry-points/routing-status. Está ativa para todas as contas hoje; a chamada existe para que uma integração possa verificar em vez de assumir.
O objeto Ponto de Entrada
{
"id": "ep3KmQ8vTzXr5nWd",
"type": "keyword",
"channels": ["whatsapp", "instagram"],
"agent_id": "ag7HkQ2ZpLxR3mNb",
"enabled": true,
"match_config": {
"keywords": ["pricing", "quote"]
},
"first_response_mode": null,
"first_response_exact_text": null,
"public_comment_reply_exact_text": null,
"created_at": 1700000000000,
"last_modified_at": 1700000000000
}
| Campo | Descrição |
|---|---|
id |
O ID da regra. |
type |
Um de channel_default, keyword, instagram_comment, facebook_comment, instagram_follower. Consulte Tipos de regra. |
channels |
Os canais que a regra abrange: whatsapp, whatsapp_web, instagram, instagram_private, messenger, telegram, sms, email, chat_widget, custom_channel, line, viber, tiktok, imessage, linkedin, skool. As regras de comentários usam instagram ou facebook. |
agent_id |
O Agente para o qual a regra encaminha. Vazio num padrão de canal que é deliberadamente definido como ninguém. |
enabled |
false para uma regra que foi desativada. As regras desativadas são histórico, não definições ativas, e ambas são devolvidas pelos endpoints de listagem. |
match_config |
Definições específicas do tipo — consulte Tipos de regra. Vazio para um padrão de canal simples. |
first_response_mode |
ai (padrão) permite que o Agente escreva a primeira resposta; exact_text envia first_response_exact_text na íntegra. Respeitado nas regras de comentários hoje; aceite e armazenado nas regras de palavras-chave, mas ainda não utilizado aí. |
first_response_exact_text |
A primeira DM fixa quando first_response_mode é exact_text. {{first_name}} é substituído pelo primeiro nome da pessoa, ou “aí” quando é desconhecido. |
public_comment_reply_exact_text |
Apenas regras de comentários: a resposta pública fixa sob o comentário. Em branco ignora a resposta pública; a DM continua a ser enviada. |
created_at, last_modified_at |
Milissegundos da época. |
Tipos de regra
type |
Dispara quando | match_config |
|---|---|---|
channel_default |
Um contacto novo e desconhecido escreve num dos channels. |
phone_numbers (opcional) — limite o padrão a um número ligado em vez de todo o canal. Consulte Um Agente por número de WhatsApp. |
keyword |
A primeira mensagem de um novo contacto é uma das keywords. A correspondência ignora maiúsculas/minúsculas e espaços, e uma quase correspondência (“info pf” contra INFO) ainda é resolvida pela IA, a menos que defina fuzzy_match: false — faça isso para códigos promocionais e SKUs onde uma quase correspondência não deve contar. Não aplicado em sms ou imessage. |
keywords (pelo menos um, obrigatório), fuzzy_match (padrão true). |
instagram_comment / facebook_comment |
Alguém comenta numa das suas publicações. channels deve incluir instagram ou facebook respetivamente. |
keywords (vazio significa que todos os comentários nas publicações vigiadas contam), post_ids (vazio significa todas as publicações), delay_minutes (esperar antes de a DM ser enviada), reply_instructions (como o Agente deve redigir a sua resposta). |
instagram_follower |
Alguém novo segue a sua conta de Instagram. Requer a ligação Instagram (Pessoal) — a ligação oficial de DMs do Instagram não consegue ver seguidores. | reply_instructions (opcional). |
Uma regra de palavra-chave num canal sem predefinição de canal também funciona como um filtro: as mensagens que não correspondem a nenhuma das palavras-chave não recebem resposta automática e vão simplesmente para a sua caixa de entrada, mesmo numa conta com um único Agente.
Direcionar um canal para um Agente
PUT /entry-points/channel-defaults — torna um Agente o responsável por responder a novos contactos num canal. Qualquer outro Agente atualmente definido como predefinição desse canal é removido na mesma chamada, pelo que um canal tem sempre exatamente um responsável pelas respostas. Definir o Agente que já é a predefinição não altera nada.
| Campo | Obrigatório | Descrição |
|---|---|---|
channel |
Sim | O canal, por exemplo whatsapp, whatsapp_web, instagram, messenger, telegram, sms, email, chat_widget ou custom_channel. |
agent_id |
Sim | O Agente que deve responder. Tem de pertencer à sua conta. |
phone_number |
Não | Limita a predefinição a um dos seus números ligados neste canal (E.164 com o + inicial, exatamente como aparece em números ligados). Deixa a predefinição de todo o canal inalterada. Consulte Um Agente por número de WhatsApp. |
cURL
curl -X PUT "https://api.youraiconnector.com/v1/entry-points/channel-defaults?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "channel": "instagram", "agent_id": "ag7HkQ2ZpLxR3mNb" }'
JavaScript
const res = await fetch("https://api.youraiconnector.com/v1/entry-points/channel-defaults", {
method: "PUT",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({ channel: "instagram", agent_id: "ag7HkQ2ZpLxR3mNb" }),
});
const data = await res.json();
Python
import requests
res = requests.put(
"https://api.youraiconnector.com/v1/entry-points/channel-defaults",
headers={"X-API-Key": "YOUR_API_KEY"},
json={"channel": "instagram", "agent_id": "ag7HkQ2ZpLxR3mNb"},
)
data = res.json()
Resposta
{
"success": true,
"entry_point_id": "ep3KmQ8vTzXr5nWd",
"disabled_entry_point_ids": ["epPrevious1234"]
}
entry_point_id é a regra agora em vigor; disabled_entry_point_ids lista quaisquer regras removidas para dar lugar a esta (vazio quando não havia nada para substituir). Apenas os contactos com quem nunca falou são afetados — qualquer pessoa que já esteja numa conversa com um Agente mantém esse Agente.
Um 400 significa que channel ou agent_id está em falta, o Agente pertence a outra conta ou phone_number não é um dos seus números ligados.
Ver quem responde a cada canal
GET /entry-points/channel-defaults — predefinição de todos os canais na conta, do mais recente para o mais antigo, incluindo os desativados (enabled: false) e um canal deliberadamente definido como ninguém (agent_id: ""). Filtre por enabled para obter a imagem atual.
cURL
curl "https://api.youraiconnector.com/v1/entry-points/channel-defaults?apiKey=YOUR_API_KEY"
JavaScript
const res = await fetch("https://api.youraiconnector.com/v1/entry-points/channel-defaults", {
headers: { "X-API-Key": "YOUR_API_KEY" },
});
const data = await res.json();
Python
import requests
res = requests.get(
"https://api.youraiconnector.com/v1/entry-points/channel-defaults",
headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()
Resposta
{
"success": true,
"entry_points": [
{
"id": "ep3KmQ8vTzXr5nWd",
"type": "channel_default",
"channels": ["whatsapp"],
"agent_id": "ag7HkQ2ZpLxR3mNb",
"enabled": true,
"match_config": {},
"created_at": 1700000000000,
"last_modified_at": 1700000000000
},
{
"id": "epAEnhHoozpoGVze",
"type": "channel_default",
"channels": ["whatsapp"],
"agent_id": "agRotterdamBranch",
"enabled": true,
"match_config": { "phone_numbers": ["+31685101091"] },
"created_at": 1700000000000,
"last_modified_at": 1700000000000
}
]
}
Esta é a leitura ao nível da conta. Listar as regras de um Agente com GET /agents/{agentId}/entry-points não permite mostrar um canal definido como ninguém, porque essa regra não pertence a nenhum Agente.
Sair de um canal sem ninguém a responder
DELETE /entry-points/channel-defaults?channel=instagram — desativa a predefinição de todo o canal para um canal específico. O canal é nomeado como um parâmetro de consulta, não no corpo. Adicione &phone_number=%2B31685101091 para limpar apenas a predefinição desse número e permitir que o número volte para quem responder ao canal.
cURL
curl -X DELETE "https://api.youraiconnector.com/v1/entry-points/channel-defaults?channel=instagram&apiKey=YOUR_API_KEY"
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/entry-points/channel-defaults?channel=instagram",
{ method: "DELETE", headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const data = await res.json();
Python
import requests
res = requests.delete(
"https://api.youraiconnector.com/v1/entry-points/channel-defaults",
params={"channel": "instagram"},
headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()
Resposta
{ "success": true, "disabled_entry_point_ids": ["ep3KmQ8vTzXr5nWd"] }
Seguro para repetir: limpar um canal que não tem predefinição é um 200 com uma lista vazia. Limpar significa remover a definição, não silenciar — numa conta com exatamente um Agente ativo, um canal não configurado continua a recorrer a esse Agente. Para manter a IA totalmente fora de um canal, selecione Ninguém responde no painel Quem responde a novas conversas da aplicação (isso escreve uma predefinição explícita de “ninguém” que o recurso nunca substitui), ou pause o Agente com PATCH /agents/{agentId}/active.
Um Agente por número de WhatsApp
O encaminhamento é por canal, por predefinição: todos os seus números de WhatsApp partilham um responsável pelas respostas. Com dois ou mais números ligados no WhatsApp Business ou WhatsApp Web, uma predefinição pode ser limitada a um único número, para que uma empresa com um número por sucursal ou marca possa atribuir a cada um o seu próprio Agente dentro de uma única conta.
Envie phone_number com a chamada set:
curl -X PUT "https://api.youraiconnector.com/v1/entry-points/channel-defaults?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"channel": "whatsapp_web",
"agent_id": "agRotterdamBranch",
"phone_number": "+31685101091"
}'
- O número tem de ser um dos seus números ligados nesse canal, escrito tal como aparece em números ligados (E.164 com o
+); qualquer outra coisa é um400. - A regra é guardada como predefinição de canal com
match_config.phone_numbers: ["+31685101091"]. Uma mensagem que chegue a esse número vai para o seu Agente; todos os outros números continuam a seguir a predefinição de todo o canal. - Definir ou limpar a predefinição de todo o canal não altera as regras específicas de cada número, e vice-versa. Limpe a regra própria de um número com
DELETE /entry-points/channel-defaults?channel=whatsapp_web&phone_number=%2B31685101091. - As respostas saem sempre do número para o qual o contacto escreveu, para que o contacto continue a falar com o mesmo número e o mesmo Agente.
Adicionar uma regra mais específica
POST /agents/{agentId}/entry-points — cria uma regra de palavra-chave, comentário ou seguidor (ou uma predefinição de canal, embora PUT /entry-points/channel-defaults seja a melhor opção para isso, pois retira o responsável anterior por si). O Agente no caminho ganha sempre: uma regra nunca pode ser criada para um Agente diferente daquele que está no URL.
| Campo | Obrigatório | Descrição |
|---|---|---|
type |
Sim | keyword, instagram_comment, facebook_comment, instagram_follower ou channel_default. |
channels |
Sim | Uma lista não vazia dos canais que a regra abrange. Uma regra de comentário tem de listar o seu próprio canal (instagram ou facebook). |
match_config |
Depende do tipo | Ver Tipos de regra. Uma regra de palavra-chave precisa de pelo menos uma entrada em keywords. |
enabled |
Não | Predefinição para true. |
first_response_mode, first_response_exact_text, public_comment_reply_exact_text |
Não | As definições de primeira resposta descritas em O objeto Ponto de Entrada. |
cURL
curl -X POST "https://api.youraiconnector.com/v1/agents/ag7HkQ2ZpLxR3mNb/entry-points?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"type": "keyword",
"channels": ["whatsapp", "instagram"],
"match_config": { "keywords": ["pricing", "quote"] }
}'
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/agents/ag7HkQ2ZpLxR3mNb/entry-points",
{
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
type: "keyword",
channels: ["whatsapp", "instagram"],
match_config: { keywords: ["pricing", "quote"] },
}),
}
);
const data = await res.json();
Python
import requests
res = requests.post(
"https://api.youraiconnector.com/v1/agents/ag7HkQ2ZpLxR3mNb/entry-points",
headers={"X-API-Key": "YOUR_API_KEY"},
json={
"type": "keyword",
"channels": ["whatsapp", "instagram"],
"match_config": {"keywords": ["pricing", "quote"]},
},
)
data = res.json()
Resposta (201)
{ "success": true, "entry_point_id": "ep3KmQ8vTzXr5nWd" }
Uma regra de comentário para mensagem direta (DM) que apenas reage a comentários que digam “LINK” em duas publicações específicas, aguarda dois minutos e envia uma primeira mensagem fixa:
{
"type": "instagram_comment",
"channels": ["instagram"],
"match_config": {
"keywords": ["LINK"],
"post_ids": ["17895695668004550", "17841400008460056"],
"delay_minutes": 2
},
"first_response_mode": "exact_text",
"first_response_exact_text": "Hi {{first_name}}, here is the link you asked for: https://example.com/guide",
"public_comment_reply_exact_text": "Sent you a DM!"
}
Deixe keywords vazio para enviar uma DM a todos os que comentarem nas publicações monitorizadas, e post_ids vazio para monitorizar todas as publicações. Um 400 indica o que está errado: um type desconhecido, um channels vazio, uma regra de palavra-chave sem palavras-chave, ou uma regra de comentário que não lista o seu próprio canal.
Listar as regras de um Agente
GET /agents/{agentId}/entry-points — as regras que enviam conversas para este Agente, da mais recente para a mais antiga: as suas predefinições de canal, regras de palavra-chave, regras de comentário e regras de seguidor. As regras retiradas também regressam, com enabled: false.
cURL
curl "https://api.youraiconnector.com/v1/agents/ag7HkQ2ZpLxR3mNb/entry-points?apiKey=YOUR_API_KEY"
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/agents/ag7HkQ2ZpLxR3mNb/entry-points",
{ headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const data = await res.json();
Python
import requests
res = requests.get(
"https://api.youraiconnector.com/v1/agents/ag7HkQ2ZpLxR3mNb/entry-points",
headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()
Resposta
{
"success": true,
"entry_points": [
{
"id": "ep3KmQ8vTzXr5nWd",
"type": "keyword",
"channels": ["whatsapp", "instagram"],
"agent_id": "ag7HkQ2ZpLxR3mNb",
"enabled": true,
"match_config": { "keywords": ["pricing", "quote"] },
"created_at": 1700000000000,
"last_modified_at": 1700000000000
}
]
}
Alterar uma regra
PUT /entry-points/{entryPointId} — altera uma regra. Envie apenas os campos que está a alterar; as definições aninhadas podem ser endereçadas folha a folha com uma chave pontuada, como "match_config.keywords". Sempre que a alteração toca em type, channels ou match_config, a regra completa é reavaliada, pelo que uma edição parcial nunca pode deixar uma regra inutilizável (mudar type para keyword sem fornecer palavras-chave é rejeitado). Enviar agent_id entrega a regra a outro dos seus Agentes; uma regra em branco é rejeitada. Os campos de propriedade e identidade são ignorados.
cURL
curl -X PUT "https://api.youraiconnector.com/v1/entry-points/ep3KmQ8vTzXr5nWd?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "match_config": { "keywords": ["pricing", "quote", "demo"] } }'
JavaScript
const res = await fetch("https://api.youraiconnector.com/v1/entry-points/ep3KmQ8vTzXr5nWd", {
method: "PUT",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({ match_config: { keywords: ["pricing", "quote", "demo"] } }),
});
const data = await res.json();
Python
import requests
res = requests.put(
"https://api.youraiconnector.com/v1/entry-points/ep3KmQ8vTzXr5nWd",
headers={"X-API-Key": "YOUR_API_KEY"},
json={"match_config": {"keywords": ["pricing", "quote", "demo"]}},
)
data = res.json()
Resposta
{ "success": true, "entry_point_id": "ep3KmQ8vTzXr5nWd" }
Outras edições comuns: { "enabled": false } retira uma regra sem a eliminar, e { "agent_id": "agOtherAgent" } move-a para um Agente diferente. Um corpo vazio devolve 400 com "No fields to update".
Eliminar uma regra
DELETE /entry-points/{entryPointId} — remove a regra permanentemente. Nada mais faz referência a um Ponto de Entrada, por isso não há nada para destacar primeiro.
cURL
curl -X DELETE "https://api.youraiconnector.com/v1/entry-points/ep3KmQ8vTzXr5nWd?apiKey=YOUR_API_KEY"
JavaScript
const res = await fetch("https://api.youraiconnector.com/v1/entry-points/ep3KmQ8vTzXr5nWd", {
method: "DELETE",
headers: { "X-API-Key": "YOUR_API_KEY" },
});
const data = await res.json();
Python
import requests
res = requests.delete(
"https://api.youraiconnector.com/v1/entry-points/ep3KmQ8vTzXr5nWd",
headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()
Resposta
{ "success": true, "entry_point_id": "ep3KmQ8vTzXr5nWd" }
Para impedir que uma regra seja ativada, mas mantê-la guardada, defina enabled como false. As predefinições de canal, em particular, são normalmente retiradas em vez de eliminadas, que é o que DELETE /entry-points/channel-defaults faz.
Verificar se o encaminhamento está ativo
GET /entry-points/routing-status — devolve se a hierarquia de Pontos de Entrada decide quem responde nesta conta. Legível com acesso de visualização, para que um membro da equipa veja a mesma resposta que o proprietário.
curl "https://api.youraiconnector.com/v1/entry-points/routing-status?apiKey=YOUR_API_KEY"
{ "success": true, "cutover_enabled": true }
Atualmente, é true em todas as contas. A chamada é mantida para que uma integração possa verificar antes de informar alguém de que a sua alteração de encaminhamento está ativa, em vez de assumir que está.
As chamadas mais antigas, em forma de campanha
Dois endpoints de antes dos Agentes continuam a funcionar para contas organizadas em torno de campanhas. As novas integrações devem utilizar as chamadas de predefinições de canal acima.
PUT /channel-routing/{channel}com{ "campaignId": "cp5NbV8xQrT2wYzA" }— nomeia uma campanha e o Agente dessa campanha torna-se o responsável por responder ao canal.{ "campaignId": null }limpa o canal. Uma campanha apenas de saída é rejeitada porque não tem comportamento de entrada para oferecer.POST /channel-routing/clearcom{ "channels": ["whatsapp", "instagram"] }— liberta vários canais do Agente que lhes responde numa única chamada, normalmente antes de os direcionar para outro local. A resposta listareleased_channels, aqueles que tinham efetivamente um responsável por responder.
Ambos anulam a definição em vez de silenciar: numa conta com exatamente um Agente ativo, um canal libertado continua a recorrer a esse Agente.
Erros da API de Pontos de Entrada
Os endpoints de Ponto de Entrada devolvem o envelope de erro padrão:
{
"success": false,
"error": "Entry point not found"
}
| Estado | Quando acontece num endpoint de Ponto de Entrada |
|---|---|
400 |
Falta um campo ou a regra seria inutilizável: não existe channel ou agent_id numa chamada de definição, um type desconhecido, um channels vazio, uma regra de palavra-chave sem palavras-chave, uma regra de comentário que não lista o seu próprio canal, um agent_id em branco numa atualização, um corpo de atualização vazio ou um phone_number que não é um dos seus números ligados. |
403 |
A chave ou o membro da equipa pode não ter permissão para editar o encaminhamento. As escritas requerem direitos de edição em campanhas; as leituras de lista e estado requerem direitos de visualização. |
404 |
O Ponto de Entrada ou o Agente não foi encontrado — ou não existe ou pertence a outra conta. |
Os códigos partilhados que qualquer endpoint pode devolver — 401, 403 (o seu plano não inclui acesso à API), 429 (limite de taxa) e 500 — estão listados com orientações de repetição em Erros e Paginação.
Próximos passos
- Pontos de Entrada — o conceito, os tipos de regras e o painel Quem Responde a Novas Conversas na aplicação.
- API de Agentes de IA — crie e configure os Agentes para os quais estas regras encaminham.
- API de Canais — ligue os próprios canais.
- Automação de Comentário para DM — o que as regras de comentário fazem assim que são acionadas.