Skip to main content

Envio de dados por API

Esta documentação tem como objetivo apresentar os principais serviços da Carol para criar uma integração para o envio de dados para Carol. Ele também abrange o processo de consumo de dados e o entendimento de como extrair dados do Golden Records.

Swagger

O Swagger é uma estrutura que permite aos desenvolvedores projetar, criar, documentar e consumir a API REST

Swagger

A Carol provê o acesso ao Swagger através de duas URLs:

Provê acesso aos serviços necessários para a integração de qualquer aplicativo com Carol, aproveitando ao máximo processos como autenticação, ingestão e consumo de dados.

Provê acesso aos serviços necessários para que recursos avançados na integração com a Carol sejam possíveis. Aqui há serviços ligados à Carol Apps, processamento de dados, segurança, privacidade de dados, entre outros. Boa parte dos serviços disponíveis nesta seção já estão disponíveis na plataforma Carol através de fluxos de UI.

Autenticação usuário/senha

Abaixo é listado os principais serviços ligados ao fluxo OAuth:

OAuth

Esses serviços permitem efetuar a autenticação na Carol e efetuar a validação de um token já existente. Vamos ver os detalhes desses serviços:

/api/v1/oauth2/token

Este endpoint permite efetuar a autenticação na Carol, validando se o usuário e a senha possuem acesso à plataforma. Abaixo é detalhado os parâmetros necessários:

ParâmetroValor
grant_typeEste parâmetro aceita um dos seguintes valores: password ou refresh_token.
Password é utilizado no fluxo de geração do token, enquanto refresh_token é utilizado par renovar um token já existente.
usernameUsuário que está no processo de autenticação.
passwordSenha do usuário no fluxo de autenticação.
refresh_tokenUtilizado apenas quando grant_type for refresh_token, este parâmetro espera o refresh_token para gerar um novo token.
subdomainEste parâmetro é o nome do ambiente (antes chamado de Tenant). O nome do ambiente é parte da URL, e pode ser obtido da seguinte forma: "totvs.carol.ai/production", o nome do ambiente é production.
orgSubdomainNome da organização. Este parâmetro espera o mesmo nome definido como subdomínio da URL da Carol. Por exemplo, "totvs.carol.ai/production, o nome da organização é "totvs."
connectorIdEste parâmetro recebe o código do conector (connectorID) ou o nome do conector (visualizado na URL ou nos detalhes do conector).

Abaixo é um exemplo da request usando o comando curl:

curl -X POST "https://api.carol.ai/api/v1/oauth2/token" -H "accept: application/json" -H "content-type: application/x-www-form-urlencoded" -d "grant_type=password&connectorId=clockinmobile&username=robson.poffo%40totvs.com&password=SENHA_AQUI&subdomain=poffo&orgSubdomain=poffo"

O resultado da request é semelhante ao abaixo:

 { "access_token": "ACCESS_TOKEN", "client_id": "4c2c9090e7c611e893bf0e900682978b_33dd1190ff2c11e8858be609736e2a59_c1367ca0e86311e8b979aedbc4a09666_mdmConnector", "expires_in": 3495, "refresh_token": "REFRESH_TOKEN", "state": "", "timeIssuedInMillis": 1591855130722, "token_type": "bearer" } 

/api/v1/oauth2/token/{access_token}/userAccessDetails

Este endpoint permite resgatar detalhes referente ao token, inclusive verificar se o token ainda esta válido:

ParâmetroValor
access_tokenAccess token gerado pelo endpoint "token".

Abaixo é um exemplo da request usando o comando curl:

 curl -X GET "https://api.carol.ai/api/v1/oauth2/token/TOKEN_AQUI/userAccessDetails" -H "accept: application/json" 

O resultado da request é semelhante ao abaixo:

{ "envUserId": "c1367ca0e86311e8b979aedbc4a09666", "externalAppId": "33dd1190ff2c11e8858be609736e2a59", "loginLevel": "mdmTenant", "orgId": "856e0510729e11e99928acde48001122", "refreshToken": "1fd8bc5763734ad0b8e18e2cd328f2f8", "system": false, "tenantId": "4c2c9090e7c611e893bf0e900682978b", "userId": "fe115382754247d883d9a11b88b3d96e" }

Depois que a autenticação ocorrer, teremos access_token disponível. Este valor deve ser inserido no swagger no atributo Access Token (parte superior central).

Swagger

Abaixo é um exemplo de uma request autenticada:

curl -X GET "https://api.carol.ai/api/v1/users?pageSize=10&sortOrder=ASC" -H "accept: application/json" -H "Authorization: TOKEN_AQUI"

Autenticação connector token

Além do processo convencional de autenticação do processo OAuth, é possível fazer a geracão de um token persistente. Este token é chamado de "Connector Token", e o mesmo é utilizado principalmente em integração de processos sendo que é utilizado uma chave pública e uma chave privada, conforme detalhado a seguir:

Sendo que já efetuamos o login na plataforma, vamos acessar item Tenant Admin no menu lateral (primeiro ícone no cabeçalho, da direita para a esquerda):

Tenant Admin

Após acessar Tenant Admin, clique na aba Tokens, a tela abaixo irá aparecer. Nesta tela podemos consultar todos os tokens disponíveis neste ambiente. Lembrando que não é possível ver o token gerado anteriormente - ele está disponível apenas logo após a criação.

Tenant Admin - Tokens

A criação de novos tokens ocorre pelo botão Create token (na tela acima). Na tela que será aberta, você deverá selecionar o tipo de Token a ser criado:

  • Carol Token: utilizado para comunicação através de API key com a Carol.
  • Google Service Account: token de comunicação diretamente com os serviços da Google (Bigquery).

Selecionando a opção Carol Token, você deverá selecionar o conector que será utilizado para criar o token, também é possível adicionar uma descrição para revisão futura deste token.

Tenant Admin - Tokens - Create

Ao término destes passos a tela abaixo será apresentada. Você deverá guardar as seguintes informações para utilizar nas requests à plataforma:

Tenant Admin - Tokens - Create - Done

Abaixo é um exemplo de uma request autenticada:

curl -X GET "https://api.carol.ai/api/v1/users?pageSize=10&sortOrder=ASC" -H "accept: application/json" -H "X-Auth-ConnectorId: CONNECTOR_ID_AQUI" -H "X-Auth-Key: CONNECTOR_TOKEN_AQUI"

Envio de dados

A Carol possui autenticação OAuth, podendo ser explorado a autenticação API Key (também conhecido como API Token ou Connector Token).

Abaixo é listado os principais serviços ligados ao fluxo staging area:

Swagger - Staging

Esses serviços permitem efetuar a definição da estrutura de dados (schema), efetuar o envio de dados bem como eliminação de dados e eliminação da staging table na Carol.

Definindo schema da staging table

Todos os dados enviados para a Carol devem possuir um schema, que é basicamente a definição da estrutura que será armazenado na Carol. O conceito do schema segue o mesmo princípio do schema de tabelas em banco de dados relacional.

O seguinte schema é um exemplo de como a definição ocorre na plataforma Carol:

{
"mdmFlexible":"false",
"mdmExportData":"false",
"mdmStagingMapping":{
"properties":{
"cod-emitente":{
"type":"integer"
},
"cgc":{
"type":"string"
},
"nome-emit":{
"type":"string"
}
}
},
"mdmCrosswalkTemplate":{
"mdmCrossreference":{
"emitente":[
"cod-emitente"
]
}
}
}

O identifier (chamado também de crosswalk) é a definição da chave primária de uma staging table. O identifier na Carol funciona com o objetivo de atualizar um registro na staging area, fazendo com que um registro já existente seja atualizado por novos valores. O identifier também é utilizado no processo de eliminação de registros, como veremos um pouco mais para frente.

Criando uma staging table

O Json definido na etapa anterior deve ser enviado no endpoint abaixo para efetuar a criação da staging table:

Swagger - Staging - Create

Schema Tabelas Protheus / Smartlink

Tabelas do Protheus devem sempre seguir as chaves primárias (PKs / crosswalk) conforme definido na tabela X2 do Protheus. O schema também deve ser conforme definição padrão do Protheus.

Caso a tabela em especifico não possua a chave primária definida na tabela X2, o dono do produto deverá ser consultado para definição da chave primária a ser assumido.

Definições sem o prévio alinhamento podem causar impactos no aplicativo por definições inconsistente para a mesma tabela.

Atualizando uma staging table

O endpoint abaixo permite atualizar o schema da staging table. O schema segue o mesmo podemo visualizado em Definindo schema da staging table:

Swagger - Staging - Update

Obs.: O schema da staging table pode ser ajustado através da interface gráfica da Carol.

Removendo uma staging table

O endpoint abaixo permite a eliminação de staging table através do nome da staging table:

Swagger - Staging - Drop

Enviando dados para a Carol

A staging table possui o objetivo de armazenar dados (registros/documentos) na sua estrutura. O serviço abaixo é o responsável por receber um conjunto de dados (array de documentos JSON). Conforme definido no capítulo anterior, o atributo identifier irá determinar se os registros serão adicionados na Carol ou se eles irão atualizar dados já existentes.

Swagger - Staging - Sending Data API

Observação: recomenda-se o envio de dados através da rota intake: /api/v3/staging/intake/{table}

Os parâmetros batchId e batchIdSequence são utilizados para tracking dos dados no recebimento, armazenamento e processamento dos dados. O parâmetro batchId representa um pacote de dados que estão sendo enviados (ou que foram enviados) por um conector para a plataforma Carol.

O envio de dados através do endpoint intake pode ocorrer para diversas entidades dentro do mesmo batchId, isso quer dizer que a plataforma não vai iniciar o processamento de dados enquanto o pacote inteiro não for completamente recebido, para evitar processamento de dados enquanto os dados estão parcialmente disponíveis na plataforma Carol.

Quando o conector chamar o endpoint summary (/api/v3/staging/batch/{batchId}/summary) encerrando o batchId indicará para a plataforma iniciar o processamento dos dados. Veja o capítulo da Eficiência do SQL Processing para maiores detalhes.

Atualmente apenas o ERP Protheus está compativel com o envio de dados através de batchId. Apenas releases de Outubro/2023 e superiores estão homologados.

Dados imutáveis

Os dados armazenados na plataforma Carol possuem a característica de serem imutáveis, o que faz com que a Carol armazene todas as versões que o dado sofreu durante as atualizações do registro. Em outras palavras, quando um dado é alterado a plataforma preservará as duas versões (antes de atualização e a versão mais recente).

A plataforma possui o processo de consolidação para que versões anteriores do registro sejam descartados. Este processo pode ser agendado para execução frequente e automática.

O serviço acima descrito permite o envio de dados seguinte a RFC1952 que permite o envio de dados compactados. Altamente recomendado que os dados sejam enviados desta forma, reduzindo assim o tempo de latência na requisição.

Parâmetros Request Envio de dados

A request de envio de dados permite a utilização do nome do conector no parâmetro "connectorId" tornando o aplicativo mais simples e menos dependente ao ambiente do cliente. O nome do conector pode ser obtido na tela de "Connectors" na Carol.

O nome da tabela deve possuir caracteres e número, sendo obrigatório iniciar com um caracter. Caracteres especiais não são permitidos.

O body deve ser um array de objetos Json seguindo o schema definido para a staging table no passo anterior.

Vale ressaltar que este serviço efetua o envio dos dados através de uma requisição assíncrona. Isso quer dizer que quando o serviço responder o código 200, os dados não estarão disponíveis na staging table ou no data model (explore), alguns segundos podem ser necessários para que isso ocorrá.

Enviando o sumário de um batchId

Este endpoint é necessário apenas quando o envio de dados ocorre através do endpoint de intake informando o batchId.

Este é o formato do Json esperado no endpoint:

{
"totalRecords": 6,
"totalRequests": 2,
"timestampEnd": "2023-12-04T19:15:30Z",
"timestampStart": "2023-12-04T18:15:30Z"
}

Assinatura do endpoint:

POST /api/v3/staging/batch/{batchId}/summary

Este endpoint foi desenhado para ser chamado ao concluir o envio de dados para a plataforma Carol, independentemente de quantas tabelas forem enviado os dados.

O sumário é encerrado automaticamente pela plataforma Carol em 30 minutos após o envio do último dado pelo endpoint intake. E com o encerramento do batchId (pelo sumário ou por timeout) é iniciado o processamento dos dados.

Eliminando dados através da staging area

Este serviço possui o objetivo de eliminar dados na Carol, através dos valores dos atributos definidos como identifier para a staging table.

Swagger - Staging - Delete Data API

Parâmetrodescription
bodyJson com a lista de IDs que deverão ser eliminados. Um exemplo deste parâmetro é: [{"issuer": {"cod-issente": "33"}}, {"issente": {"cod-emitente": "44"}}]
connectorIdO código do conector que a staging table acima pertence.
propagateCleanupParâmetro que indica se a eliminação dos registros devem ser propagados para o Golden Record e registros rejeitados, desta forma eliminando completamente este registro da Carol.
tableO nome da staging table que está sendo eliminado os registros.

Desta forma que processos externos podem efetuar a eliminação de registros na Carol.