Antonnia Docs

Metadata

Como o metadata da sessão armazena informações de roteamento específicas do canal

O metadata da sessão é um dicionário arbitrário de chave-valor que sua integração usa para armazenar dados específicos do canal necessários para o roteamento de mensagens. É assim que a Antonnia sabe para onde entregar mensagens de saída.

Por que o metadata é importante

Quando a Antonnia dispara um webhook message.created, seu handler precisa saber:

  • Qual instância do canal usar para enviar (ex.: qual número de WhatsApp)
  • Para qual usuário final entregar (ex.: número de telefone ou ID do ticket)

Essa informação fica em session.metadata.

Convenção

Cada canal usa um prefixo para organizar suas chaves de metadata por namespace:

WhatsApp

{
  "whatsapp_phone_number": "5511999888777",
  "whatsapp_phone_number_id": "phone_id_123"
}

HubSpot

{
  "hubspot_ticket_id": "ticket_456",
  "hubspot_thread_id": "thread_789",
  "hubspot_channel_account_id": "account_001",
  "hubspot_portal_id": "portal_123",
  "hubspot_sender_id": "sender_456"
}

ZAPI

{
  "zapi_instance_id": "instance_123",
  "zapi_phone": "5511999888777"
}

Seu canal

Siga o mesmo padrão — prefixe todas as chaves com o nome do seu canal:

{
  "mychannel_user_id": "ext_user_456",
  "mychannel_instance_id": "inst_789"
}

Definindo metadata

O metadata é definido na criação da sessão e pode ser atualizado posteriormente:

// On creation
POST /sessions
{
  "contact_id": "user_123",
  "contact_name": "Jane Doe",
  "agent_id": "agent_abc",
  "metadata": {
    "mychannel_user_id": "ext_user_456",
    "mychannel_instance_id": "inst_789"
  }
}

// Update later
PATCH /sessions/{session_id}
{
  "fields": {
    "metadata": {
      "mychannel_user_id": "ext_user_456",
      "mychannel_instance_id": "inst_789",
      "mychannel_ticket_id": "ticket_001"
    }
  }
}

Atualizações de metadata substituem o objeto de metadata inteiro. Sempre inclua todas as chaves existentes ao atualizar, ou você perderá dados armazenados anteriormente.

Lendo metadata nos webhooks

Ao processar webhooks de saída, busque a sessão para obter o metadata de roteamento:

# In your message.created webhook handler
session = httpx.get(
    f"{BASE_URL}/sessions/{message['session_id']}",
    headers=HEADERS,
).json()

channel_user_id = session["metadata"]["mychannel_user_id"]
instance_id = session["metadata"]["mychannel_instance_id"]

# Now send the message through your channel API
send_to_my_channel(instance_id, channel_user_id, message["content"])

Metadata para busca de sessões

Use filtros de metadata em POST /sessions/search para encontrar sessões de uma instância de canal específica:

POST /sessions/search
{
  "contact_id": "user_123",
  "status": "open",
  "metadata": {
    "mychannel_instance_id": "inst_789"
  }
}

Isso evita colisões entre canais quando um contato tem sessões em múltiplos canais.

On this page