API Salas de Chat
Endpoints para salas internas entre agentes no Chat SentraX, incluindo membros, mensagens e mark-as-read.
Referência da API de Salas de Chat
Esta documentação fornece exemplos de uso da API de Salas de Chat usando curl.
Autenticação
Todas as solicitações requerem autenticação por meio de token de API. Você deve incluir o header api_access_token em cada solicitação.
# Configurar variáveis de ambiente
export API_TOKEN="seu_token_de_api"
export ACCOUNT_ID="1"
export BASE_URL="http://localhost:3000"
Salas de Chat
1. Listar Salas de Chat
Lista todas as salas de chat da conta.
Endpoint: GET /api/v1/accounts/:account_id/chat_rooms
curl -X GET \
"$BASE_URL/api/v1/accounts/$ACCOUNT_ID/chat_rooms" \
-H "api_access_token: $API_TOKEN" \
-H "Content-Type: application/json"
Exemplo de resposta:
[
{
"id": 1,
"name": "Equipe de Desenvolvimento",
"description": "Sala para a equipe de desenvolvimento",
"account_id": 1,
"avatar_url": "https://example.com/avatar.png",
"is_member": true,
"member_count": 5,
"last_message_at": 1640000000,
"unread_count": 3,
"members": [
{
"id": 1,
"name": "João Silva",
"email": "joao@example.com",
"thumbnail": "https://example.com/avatar1.png",
"availability_status": "online"
}
],
"created_at": 1640000000,
"updated_at": 1640000000
}
]
2. Criar Sala de Chat
Cria uma nova sala de chat.
Endpoint: POST /api/v1/accounts/:account_id/chat_rooms
curl -X POST \
"$BASE_URL/api/v1/accounts/$ACCOUNT_ID/chat_rooms" \
-H "api_access_token: $API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"chat_room": {
"name": "Equipe de Marketing",
"description": "Sala para coordenar campanhas de marketing"
}
}'
Com avatar (arquivo):
curl -X POST \
"$BASE_URL/api/v1/accounts/$ACCOUNT_ID/chat_rooms" \
-H "api_access_token: $API_TOKEN" \
-F "chat_room[name]=Equipe de Marketing" \
-F "chat_room[description]=Sala para coordenar campanhas" \
-F "chat_room[avatar]=@/caminho/para/avatar.png"
Exemplo de resposta:
{
"id": 2,
"name": "Equipe de Marketing",
"description": "Sala para coordenar campanhas de marketing",
"account_id": 1,
"avatar_url": null,
"is_member": true,
"member_count": 1,
"last_message_at": 1640000000,
"unread_count": 0,
"members": [],
"created_at": 1640000000,
"updated_at": 1640000000
}
3. Obter Sala de Chat
Obtém os detalhes de uma sala de chat específica.
Endpoint: GET /api/v1/accounts/:account_id/chat_rooms/:id
export CHAT_ROOM_ID="1"
curl -X GET \
"$BASE_URL/api/v1/accounts/$ACCOUNT_ID/chat_rooms/$CHAT_ROOM_ID" \
-H "api_access_token: $API_TOKEN" \
-H "Content-Type: application/json"
Exemplo de resposta:
{
"id": 1,
"name": "Equipe de Desenvolvimento",
"description": "Sala para a equipe de desenvolvimento",
"account_id": 1,
"avatar_url": "https://example.com/avatar.png",
"is_member": true,
"member_count": 5,
"last_message_at": 1640000000,
"unread_count": 3,
"members": [
{
"id": 1,
"name": "João Silva",
"email": "joao@example.com",
"thumbnail": "https://example.com/avatar1.png",
"availability_status": "online"
}
],
"created_at": 1640000000,
"updated_at": 1640000000
}
4. Atualizar Sala de Chat
Atualiza os detalhes de uma sala de chat.
Endpoint: PUT /api/v1/accounts/:account_id/chat_rooms/:id
curl -X PUT \
"$BASE_URL/api/v1/accounts/$ACCOUNT_ID/chat_rooms/$CHAT_ROOM_ID" \
-H "api_access_token: $API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"chat_room": {
"name": "Equipe de Desenvolvimento - Atualizada",
"description": "Nova descrição para a equipe"
}
}'
Atualizar com avatar:
curl -X PUT \
"$BASE_URL/api/v1/accounts/$ACCOUNT_ID/chat_rooms/$CHAT_ROOM_ID" \
-H "api_access_token: $API_TOKEN" \
-F "chat_room[name]=Equipe de Desenvolvimento - Atualizada" \
-F "chat_room[avatar]=@/caminho/para/novo_avatar.png"
Exemplo de resposta:
{
"id": 1,
"name": "Equipe de Desenvolvimento - Atualizada",
"description": "Nova descrição para a equipe",
"account_id": 1,
"avatar_url": "https://example.com/new_avatar.png",
"is_member": true,
"member_count": 5,
"last_message_at": 1640000000,
"unread_count": 3,
"members": [...],
"created_at": 1640000000,
"updated_at": 1640000100
}
5. Excluir Sala de Chat
Exclui uma sala de chat.
Endpoint: DELETE /api/v1/accounts/:account_id/chat_rooms/:id
curl -X DELETE \
"$BASE_URL/api/v1/accounts/$ACCOUNT_ID/chat_rooms/$CHAT_ROOM_ID" \
-H "api_access_token: $API_TOKEN"
Resposta: Status 200 OK sem conteúdo
6. Marcar como Lida
Marca todas as mensagens de uma sala como lidas para o usuário atual.
Endpoint: POST /api/v1/accounts/:account_id/chat_rooms/:id/mark_as_read
curl -X POST \
"$BASE_URL/api/v1/accounts/$ACCOUNT_ID/chat_rooms/$CHAT_ROOM_ID/mark_as_read" \
-H "api_access_token: $API_TOKEN"
Resposta: Status 200 OK sem conteúdo
Membros da Sala de Chat
7. Listar Membros
Lista todos os membros de uma sala de chat.
Endpoint: GET /api/v1/accounts/:account_id/chat_rooms/:chat_room_id/members
curl -X GET \
"$BASE_URL/api/v1/accounts/$ACCOUNT_ID/chat_rooms/$CHAT_ROOM_ID/members" \
-H "api_access_token: $API_TOKEN" \
-H "Content-Type: application/json"
Exemplo de resposta:
[
{
"id": 1,
"name": "João Silva",
"email": "joao@example.com",
"account_id": 1,
"role": "agent",
"confirmed": true,
"availability_status": "online",
"thumbnail": "https://example.com/avatar1.png"
},
{
"id": 2,
"name": "Maria Oliveira",
"email": "maria@example.com",
"account_id": 1,
"role": "agent",
"confirmed": true,
"availability_status": "offline",
"thumbnail": "https://example.com/avatar2.png"
}
]
8. Adicionar Membros
Adiciona um ou mais membros a uma sala de chat.
Endpoint: POST /api/v1/accounts/:account_id/chat_rooms/:chat_room_id/members
curl -X POST \
"$BASE_URL/api/v1/accounts/$ACCOUNT_ID/chat_rooms/$CHAT_ROOM_ID/members" \
-H "api_access_token: $API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"user_ids": [3, 4, 5]
}'
Exemplo de resposta:
[
{
"id": 3,
"name": "Pedro Santos",
"email": "pedro@example.com",
"account_id": 1,
"role": "agent",
"confirmed": true,
"availability_status": "online",
"thumbnail": "https://example.com/avatar3.png"
},
{
"id": 4,
"name": "Ana Costa",
"email": "ana@example.com",
"account_id": 1,
"role": "agent",
"confirmed": true,
"availability_status": "busy",
"thumbnail": "https://example.com/avatar4.png"
}
]
9. Atualizar Membros
Atualiza a lista completa de membros de uma sala (adiciona e/ou remove membros).
Endpoint: PATCH /api/v1/accounts/:account_id/chat_rooms/:chat_room_id/members
curl -X PATCH \
"$BASE_URL/api/v1/accounts/$ACCOUNT_ID/chat_rooms/$CHAT_ROOM_ID/members" \
-H "api_access_token: $API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"user_ids": [1, 2, 3, 6]
}'
Nota: Esta operação estabelece a lista completa de membros. Os usuários não incluídos em
user_idsserão removidos, e os novos serão adicionados.
Exemplo de resposta:
[
{
"id": 1,
"name": "João Silva",
"email": "joao@example.com",
"account_id": 1,
"role": "agent",
"confirmed": true,
"availability_status": "online",
"thumbnail": "https://example.com/avatar1.png"
},
{
"id": 2,
"name": "Maria Oliveira",
"email": "maria@example.com",
"account_id": 1,
"role": "agent",
"confirmed": true,
"availability_status": "offline",
"thumbnail": "https://example.com/avatar2.png"
},
{
"id": 3,
"name": "Pedro Santos",
"email": "pedro@example.com",
"account_id": 1,
"role": "agent",
"confirmed": true,
"availability_status": "online",
"thumbnail": "https://example.com/avatar3.png"
},
{
"id": 6,
"name": "Carlos Almeida",
"email": "carlos@example.com",
"account_id": 1,
"role": "agent",
"confirmed": true,
"availability_status": "busy",
"thumbnail": "https://example.com/avatar6.png"
}
]
10. Remover Membros
Remove um ou mais membros de uma sala de chat.
Endpoint: DELETE /api/v1/accounts/:account_id/chat_rooms/:chat_room_id/members
curl -X DELETE \
"$BASE_URL/api/v1/accounts/$ACCOUNT_ID/chat_rooms/$CHAT_ROOM_ID/members" \
-H "api_access_token: $API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"user_ids": [4, 5]
}'
Resposta: Status 200 OK sem conteúdo
Mensagens da Sala de Chat
11. Listar Mensagens
Lista as mensagens de uma sala de chat com paginação.
Endpoint: GET /api/v1/accounts/:account_id/chat_rooms/:chat_room_id/messages
# Listar mensagens (página 1)
curl -X GET \
"$BASE_URL/api/v1/accounts/$ACCOUNT_ID/chat_rooms/$CHAT_ROOM_ID/messages" \
-H "api_access_token: $API_TOKEN" \
-H "Content-Type: application/json"
Com paginação:
# Página 2, 50 mensagens por página
curl -X GET \
"$BASE_URL/api/v1/accounts/$ACCOUNT_ID/chat_rooms/$CHAT_ROOM_ID/messages?page=2&per_page=50" \
-H "api_access_token: $API_TOKEN" \
-H "Content-Type: application/json"
Headers de resposta com informações de paginação:
X-Total-Count: 150
X-Current-Page: 1
X-Per-Page: 20
X-Total-Pages: 8
Exemplo de resposta:
[
{
"id": 1,
"content": "Olá equipe, como está o andamento do projeto?",
"message_type": "outgoing",
"content_type": "text",
"content_attributes": {},
"created_at": 1640000000,
"conversation_id": 1,
"room_name": "Equipe de Desenvolvimento",
"sender": {
"id": 1,
"name": "João Silva",
"email": "joao@example.com",
"thumbnail": "https://example.com/avatar1.png",
"availability_status": "online"
},
"attachments": [],
"status": "sent"
},
{
"id": 2,
"content": "Tudo bem, estamos avançando conforme o planejado",
"message_type": "incoming",
"content_type": "text",
"content_attributes": {
"in_reply_to": 1
},
"created_at": 1640000060,
"conversation_id": 1,
"room_name": "Equipe de Desenvolvimento",
"sender": {
"id": 2,
"name": "Maria Oliveira",
"email": "maria@example.com",
"thumbnail": "https://example.com/avatar2.png",
"availability_status": "online"
},
"attachments": [],
"status": "read",
"in_reply_to": {
"id": 1,
"content": "Olá equipe, como está o andamento do projeto?",
"sender": {
"id": 1,
"name": "João Silva"
}
}
}
]
12. Enviar Mensagem
Envia uma nova mensagem para uma sala de chat.
Endpoint: POST /api/v1/accounts/:account_id/chat_rooms/:chat_room_id/messages
Mensagem de texto simples:
curl -X POST \
"$BASE_URL/api/v1/accounts/$ACCOUNT_ID/chat_rooms/$CHAT_ROOM_ID/messages" \
-H "api_access_token: $API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"chat_room_message": {
"content": "Esta é uma mensagem de teste",
"message_type": "outgoing"
}
}'
Mensagem com echo_id (para sincronização):
curl -X POST \
"$BASE_URL/api/v1/accounts/$ACCOUNT_ID/chat_rooms/$CHAT_ROOM_ID/messages" \
-H "api_access_token: $API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"chat_room_message": {
"content": "Mensagem com identificador temporário",
"message_type": "outgoing",
"echo_id": "temp-msg-12345"
}
}'
Mensagem em resposta a outra mensagem:
curl -X POST \
"$BASE_URL/api/v1/accounts/$ACCOUNT_ID/chat_rooms/$CHAT_ROOM_ID/messages" \
-H "api_access_token: $API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"chat_room_message": {
"content": "Respondendo à mensagem anterior",
"message_type": "outgoing",
"content_attributes": {
"in_reply_to": 123
}
}
}'
Mensagem com arquivos anexos:
curl -X POST \
"$BASE_URL/api/v1/accounts/$ACCOUNT_ID/chat_rooms/$CHAT_ROOM_ID/messages" \
-H "api_access_token: $API_TOKEN" \
-F "chat_room_message[content]=Anexo alguns arquivos" \
-F "chat_room_message[message_type]=outgoing" \
-F "chat_room_message[attachments][]=@/caminho/para/documento.pdf" \
-F "chat_room_message[attachments][]=@/caminho/para/imagem.png"
Exemplo de resposta:
{
"id": 150,
"content": "Esta é uma mensagem de teste",
"message_type": "outgoing",
"content_type": "text",
"content_attributes": {},
"created_at": 1640000500,
"conversation_id": 1,
"room_name": "Equipe de Desenvolvimento",
"sender": {
"id": 1,
"name": "João Silva",
"email": "joao@example.com",
"thumbnail": "https://example.com/avatar1.png",
"availability_status": "online"
},
"attachments": [],
"status": "sent"
}
Códigos de Error
Erros comuns
- 401 Unauthorized: Token de API inválido ou ausente
- 403 Forbidden:
- O recurso de salas de chat não está habilitado para a conta
- O usuário não é membro da sala de chat
- Permissões insuficientes
- 404 Not Found: Recurso não encontrado (sala, mensagem, usuário)
- 422 Unprocessable Entity: Erros de validação
Exemplo de erro:
{
"error": "Feature chat_rooms is not enabled for this account"
}
{
"message": "Name can't be blank"
}
Notas Adicionais
Paginação em Mensagens
- Padrão: 20 mensagens por página
- Máximo: 50 mensagens por página
- As mensagens são retornadas da mais recente para a mais antiga
- Use os headers de resposta para informações de paginação
Estados da Mensagem
sent: Mensagem enviadadelivered: Mensagem entregue (todos os membros receberam notificação)read: Mensagem lida por todos os membros (exceto o remetente)
Anexos
- Suporta múltiplos arquivos por mensagem
- Use
multipart/form-datapara enviar arquivos - Os arquivos podem ser imagens, documentos, vídeos, etc.
Respostas a Mensagens
- Use
content_attributes.in_reply_tocom o ID da mensagem original - A API retorna os dados da mensagem original no campo
in_reply_to
Permissões
- Apenas membros de uma sala podem visualizar e enviar mensagens
- Apenas administradores podem visualizar todas as salas (listar)
- Usuários normais apenas veem as salas das quais são membros
- Apenas administradores podem criar/atualizar/excluir salas