Pular para o conteúdo principal

Services (API)

Documentação dos serviços disponíveis para comunicação com a API.

Arquitetura

Todos os serviços usam o cliente api configurado com Axios:

apps/web/src/services/
├── api.ts # Cliente Axios configurado
├── authService.ts # Autenticação
├── chatService.ts # Conversas
├── crmService.ts # Contatos
├── groupService.ts # Grupos
├── campaignService.ts # Campanhas
├── templateService.ts # Templates HSM
├── channelService.ts # Canais WhatsApp
├── documentService.ts # Documentos/PDF
├── teamService.ts # Equipe/Usuários
├── tenantService.ts # Tenant
├── searchService.ts # Busca global
└── notificationService.ts # Notificações

authService

Gerencia autenticação e convites.

MétodoDescriçãoEndpoint
login(data)Autentica usuárioPOST /auth/login
invite(data)Envia convitePOST /auth/invite
completeRegistration(data)Completa cadastroPOST /auth/complete-registration

chatService

Gerencia conversas do WhatsApp.

MétodoDescriçãoEndpoint
getInbox(page, size)Lista conversasGET /flow/chats
getHistory(contactId, page, size)Histórico de mensagensGET /flow/chats/{id}/messages
markAsRead(contactId)Marca como lidoPOST /flow/chats/{id}/read
sendMessage(request, file?)Envia mensagemPOST /flow/chats/send

crmService

Gerencia contatos, tags e grupos.

MétodoDescriçãoEndpoint
listContacts(page, size, filters)Lista contatosGET /crm/contacts
getContact(id)Detalhe do contatoGET /crm/contacts/{id}
createContact(data)Cria contatoPOST /crm/contacts
updateContact(id, data)Atualiza contatoPUT /crm/contacts/{id}
deleteContact(id)Remove contatoDELETE /crm/contacts/{id}
importContacts(file)Importa CSVPOST /crm/contacts/import
listTags()Lista tagsGET /crm/tags
createTag(data)Cria tagPOST /crm/tags
assignGroups(contactId, groupIds)Atribui gruposPOST /crm/contacts/{id}/groups

campaignService

Gerencia campanhas de marketing.

MétodoDescriçãoEndpoint
list(page, size)Lista campanhasGET /campaigns
get(id)Detalhe da campanhaGET /campaigns/{id}
create(data)Cria campanhaPOST /campaigns
update(id, data)Atualiza campanhaPUT /campaigns/{id}
send(id)Envia campanhaPOST /campaigns/{id}/send
retry(id)Reenvia falhadosPOST /campaigns/{id}/retry
delete(id)Remove campanhaDELETE /campaigns/{id}

templateService

Gerencia templates HSM do WhatsApp.

MétodoDescriçãoEndpoint
list()Lista templatesGET /flow/templates
get(id)Detalhe do templateGET /flow/templates/{id}
sync()Sincroniza com MetaPOST /flow/templates/sync

channelService

Gerencia canais (números WhatsApp).

MétodoDescriçãoEndpoint
list()Lista canaisGET /flow/channels
connect(data)Conecta canalPOST /flow/channels/connect
disconnect(id)Desconecta canalPOST /flow/channels/{id}/disconnect

documentService

Gerencia documentos e PDFs.

MétodoDescriçãoEndpoint
list(page, size)Lista documentosGET /suite/documents
get(id)Detalhe do documentoGET /suite/documents/{id}
generate(data)Gera PDFPOST /suite/documents/generate
sign(id, certificate)Assina digitalmentePOST /suite/documents/{id}/sign
ocr(file)Extrai textoPOST /suite/documents/ocr

teamService

Gerencia usuários da equipe.

MétodoDescriçãoEndpoint
listTeam()Lista usuáriosGET /team
invite(data)Convida usuárioPOST /team/invite
updateRole(userId, role)Atualiza rolePUT /team/{id}/role
deactivate(userId)Desativa usuárioDELETE /team/{id}

Exemplo de Uso

'use client';

import { useEffect, useState } from 'react';
import { chatService, ChatInboxDTO } from '@/services/chatService';

function InboxList() {
const [conversations, setConversations] = useState<ChatInboxDTO[]>([]);
const [loading, setLoading] = useState(true);

useEffect(() => {
chatService.getInbox()
.then(response => setConversations(response.data.content))
.finally(() => setLoading(false));
}, []);

if (loading) return <Skeleton />;

return (
<ul>
{conversations.map(conv => (
<li key={conv.contactId}>{conv.contactName}</li>
))}
</ul>
);
}

Tratamento de Erros

Todos os serviços propagam erros que podem ser capturados:

try {
await chatService.sendMessage({ contactId, content });
toast.success('Mensagem enviada!');
} catch (error) {
if (error.response?.status === 429) {
toast.error('Muitas requisições. Aguarde.');
} else {
toast.error('Erro ao enviar mensagem');
}
}

Próximos Passos