Integração do pedido de venda via API
A geração de pedidos de venda no ambiente do Senior X pode ser realizada por meio de chamadas via APIs públicas, oferecendo aos clientes da Senior maior flexibilidade para implementar novas soluções e estabelecer parcerias com terceiros, aprimorando a usabilidade do sistema.
Este documento é direcionado a parceiros interessados em integrar-se ao ERP da Senior, com foco específico no módulo de Mercado para a geração de pedidos de venda.
Antes de iniciar o processo de integração para a geração de pedidos de venda, é recomendável ler os tutoriais básicos sobre o uso das APIs da Senior.
A geração de um pedido de venda via integração pode ser resumida em três partes principais: autenticação, solicitação de criação do pedido de venda e retorno assíncrono do status do pedido. O diagrama de atividades abaixo apresenta o fluxo geral desse processo de integração.
Autenticação
As APIs da Senior adotam um mecanismo de autenticação que utiliza uma chave e um segredo por meio da primitiva loginWithKey. Essa primitiva é responsável por gerar os tokens de autenticação necessários para acessar as demais APIs da plataforma Senior X. Para mais detalhes sobre o uso dessa API, acesse o nosso tutorial.
{ //Obrigatório: Chave da aplicação accessKey: string //Obrigatório: Segredo da chave informada secret: string //Obrigatório: Nome do tenant em que se deseja efetuar o login tenantName: string //Opcional: Escopo do token da autenticação. Se não for informado será usado o valor padrão 'desktop' scope : string }
Detalhes dos parâmetros:
- accessKey: Chave de aplicação gerada no momento da criação da aplicação, disponível no caminho: Tecnologia > Administração > Gerenciamento de aplicações. A chave se encontra no campo Chave de acesso das propriedades da aplicação;
- secret: Chave única gerada no momento da criação da aplicação, disponível no caminho: Tecnologia > Administração > Gerenciamento de aplicações. A chave se encontra no campo Secret das propriedades da aplicação, e deve ser copiada logo após a sua criação.
- Tanto o secret como o accessKey são valores únicos responsáveis pela identificação da aplicação que está tentando conectar com o ERP;
- tenantName: Identificação do cliente que o parceiro representa e utiliza a base de dados.
Geração de pedido de venda
A geração de pedidos de venda no módulo de Mercado do ERP senior X ocorre de forma assíncrona, por meio da chamada à API abaixo:
api.senior.com.br/erpx_com_ven/pedido/apis/order
Para utilizar essa funcionalidade, é fundamental que todos os pré-requisitos estejam devidamente configurados.
- Cadastrar uma aplicação no Senior X: Para mais detalhes, consulte o tópico Utilizando a aplicaçãodo artigo Consumindo uma API, disponível no portal de APIs da Senior;
- Registrar a aplicação no portal de API: Para realizar o cadastro, siga o tutorial do artigo Criando uma Aplicação, disponível no portal de APIs da Senior;
- Associar a aplicação a um papel: Para conceder permissões de uso dos módulos do ERP senior X para integração, associe a aplicação a um papel em: Tecnologia > Administração > Autorização > Gestão de papéis.
- Ativar a replicação para o datacenter: Esse serviço é essencial para que a integração realize as consultas. Para isso, siga os passos abaixo:
- Acesse Tecnologia > Configuração > Por tenant;
- Na seção Domínios e serviços, encontre o domínio erpx;
- Clique no botão Editar do serviço datacenter;
- Nas propriedades do serviço datacenter, clique na guia Sistema;
- Defina a propriedade Ativar replicação de entidades para a base centralizada como Verdadeiro.
A criação do pedido de venda é iniciada por meio de uma requisição POST:
api.senior.com.br/erpx_com_ven/pedido/apis/order
Header: No cabeçalho da requisição, é obrigatório incluir dois parâmetros: authorization e client_id.
- O client_id é utilizado para identificar a aplicação que está se conectando. Caso ainda não tenha sido cadastrado conforme especificado nos pré-requisitos, realize o processo seguindo as instruções do tutorial do artigo Criando uma Aplicação, disponível no portal de APIs da Senior;
Body: No corpo da requisição, é possível enviar diversos parâmetros, alguns obrigatórios e outros opcionais. Um exemplo completo, incluindo o uso e a descrição dos campos das APIs, pode ser consultado no portal de APIs da Senior.
Veja a seguir os parâmetros de requisição e um exemplo mínimo de request:
- id (uuid?): Identificador único da entidade. Campo opcional.
- company (company): Informações sobre a empresa. Campo obrigatório.
- branch (branch): Dados da filial que está fazendo o pedido. Campo obrigatório.
- customer (customer): Dados do cliente que está fazendo a solicitação. Campo obrigatório.
- representative (representative?): Informações sobre o representante responsável pelo pedido. Campo opcional.
- paymentTerms (recDefaultData?): Condições de pagamento aplicáveis à transação. Campo opcional.
- paymentMethod (paymentMethod?): Forma de pagamento escolhida. Campo opcional.
- shippingCompany (recDefaultData?): Dados da transportadora responsável pela entrega. Campo opcional.
- redispatchCompany (recDefaultData?): Dados da transportadora de redespacho, caso aplicável. Campo opcional.
- deliveryAddress (recDefaultData?): Endereço de entrega dos produtos. Campo opcional.
- issueDate (date?): Data de emissão do pedido. Campo opcional.
- items (item): Lista de itens que compõem o pedido. Campo obrigatório.
- externalId (string?): Identificação externa do pedido, usada para integração com outros sistemas. Campo opcional.
- observation (string (999)?): Observações gerais sobre o pedido. Campo opcional, com limite de 999 caracteres.
- shippingCost (money?): Valor do frete. Valor mínimo: 0.00, máximo: 9999999999999.99. Campo opcional, com valor padrão de 0.
- discount (money?): Valor total de desconto aplicado ao pedido. Valor mínimo: 0.00, máximo: 9999999999999.99. Campo opcional, com valor padrão de 0.
- close (boolean?): Indica se o pedido deve ser fechado. Campo opcional, com valor padrão false.
- origin (externalIntegration?): Indicação da origem externa do pedido, para integração com sistemas externos. Campo opcional.
- expectedDeliveryDate (date?): Data prevista para a entrega do pedido. Campo opcional.
- freightType (enumCifFob?): Tipo de frete (CIF ou FOB). Campo opcional.
- customerOrderNumber (string (20)?): Número do pedido informado pelo cliente. Campo opcional, com limite de 20 caracteres.
- keepInstallments (boolean?): Indica se as parcelas devem ser mantidas no faturamento. Campo opcional, com valor padrão false.
- fiscalAddress (recDefaultData?): Endereço fiscal do cliente ou empresa. Campo opcional.
- productTransaction (recDefaultData?): Dados referentes à transação de produtos. Campo opcional.
- serviceTransaction (recDefaultData?): Dados referentes à transação de serviços. Campo opcional.
Veja no cURL abaixo o exemplo de chamada de API para criação de pedido de venda:
curl --location 'api.senior.com.br/erpx_com_ven/pedido/apis/order' \ --header 'client_id: acf0b99e-087d-4cf1-8783-fcadd69f6177' \ --header 'authorization: Bearer Knt5O79ZpfJVH90ivqfrc34Ci8SQKrBC' \ --header 'Content-Type: application/json' \ --data '{ "externalId": "RFEFpXQmwdqDfbBiwzjA", "company": { "code": 1 }, "branch": { "code": 1 }, "customer": { "code": 752 }, "paymentTerms": { "code": "003" }, "paymentMethod": { "code": 15 }, "items": [ { "product": { "code": "01.01.001" }, "price": 1, "quantity": 1 } ], "close": true, "origin": "FORCA_DE_VENDA" }'
O parâmetro externalId é o identificador de um pedido de venda gerado por meio de integração. Como o processo ocorre de forma assíncrona, o número do pedido será gerado apenas em um momento posterior.
Integração com geração de pedido de vendas
O processo de geração de vendas ocorre de maneira assíncrona. Ou seja, após a solicitação de criação de um pedido de venda por meio da chamada à API, são realizadas algumas validações iniciais do payload. Veja abaixo a URL da API e possíveis retornos dessa requisição:
URL da API
api.senior.com.br/erpx_com_ven/pedido/apis/order
Possíveis retornos dessa requisição
- 201 : Requisição de pedido criado;
- 400 : Requisição inválida, parâmetros obrigatórios não informados ou campo informado incorretamente;
- 403 : Usuário sem permissão.
Ao receber o status 201 - Created, indica que os parâmetros enviados estão corretos e que o processo assíncrono de criação do pedido foi iniciado com sucesso. A partir desse momento, é possível consultar opcionalmente o status da integração e da geração do pedido por meio de uma API interna, filtrando pelo externalId enviado na requisição.
Esse processo não indica o registro do pedido, mas sim o registro da integração.
curl --location 'https://platform.senior.com.br/t/senior.com.br/bridge/1.0/rest/erpx_com_ven/pedido/entities/externalOrderIntegration?size=10&offset=0&filter=idExterno%3D%278940%27' \ --header 'authority: platform.senior.com.br' \ --header 'accept: application/json, text/plain, */*' \ --header 'accept-language: en-US,en;q=0.9' \ --header 'content-type: application/json' \ --header 'Authorization: Bearer ngbyTltpTMuo3mFvcVDXAPmKsR5Evlig'
Webhook
O retorno sobre o processo de criação do pedido de venda e feito por meio de webhooks.
Um webhook é um mecanismo automatizado de comunicação entre sistemas, funcionando como uma "notificação em tempo real" enviada de um sistema para outro quando um evento específico ocorre. No contexto da criação de pedidos de venda, o webhook notifica imediatamente sobre o status do pedido, informando se a geração foi concluída com sucesso ou se houve erro, avisando automaticamente o parceiro. Isso elimina a necessidade de verificações constantes pelo sistema que aguarda a informação.
Para isso, é necessário configurar os webhooks, fornecendo os dados que serão acionados quando o evento ocorrer.
Veja os passos necessário para o cadastro de um webhook:
Na plataforma Senior X, siga o caminho: Tecnologia > Customização > Events Hub > Webhooks. Nessa seção, você deverá criar dois registros que serão responsáveis por notificar seu sistema sempre que um evento ocorrer.
- Criação de Webhooks:
- Crie um registro para o evento erpx_com_ven/pedido/orderGenerationSuccess, que será acionado quando um pedido for gerado com sucesso;
- Crie outro registro para o evento erpx_com_ven/pedido/orderGenerationError, que será acionado em caso de erro na geração do pedido.
- Configuração:
- Para cada evento, adicione a URL que deverá ser chamada quando o evento ocorrer;
- Inclua as credenciais de autenticação, caso sejam necessárias;
- Se desejar, é possível cadastrar múltiplas URLs para o mesmo evento;
- Certifique-se de ativar o endpoint após a configuração.
- Verificação de logs:
- Em caso de falhas na integração, você pode verificar os logs. Acesse a seção "Ações" no endpoint cadastrado e clique em "Detalhes" para visualizar as informações.
Os endpoints cadastrados retornam os seguintes conteúdos:
{ "message": "conteúdo do erro", "externalOrderId": "externalId" }
{ "orderId": "id do pedido gerado (UUID)", "orderNumber": "Numero do pedido gerado", "orderStatus": "Status do pedido de venda", "externalOrderId": "externalId", "orderValue": "valor do pedido" }
Já os status do pedido, podem ser:
{ "Fechado - Saldo total" V1 "Fechado - Saldo parcial" V2 "Suspenso" V3 "Faturado" V4 "Cancelado" V5 "Fechado -Orçamento" V6 "Confirmado" V7 "NF em composição" V8 "Em digitação" V9 "Processando fechamento" V10 "Rejeitado" V11 "Vencido" V12 "Aguardando integração" V13 "Cobrança pendente" V14 "Processando reabilitação" V15 "Processando cancelamento" V16 "Processando exclusão" V17 }
Cadastros necessários
Este documento foi elaborado com o objetivo de demonstrar o processo de criação de um pedido de venda via integração com o ERPX. Vale destacar que, para a geração do pedido, é necessário realizar alguns cadastros obrigatórios, como o cadastro de cliente (customer) e o cadastro de produto (product), que será utilizado na inserção do item. Esses cadastros básicos também podem ser realizados via API. Todas as APIs disponíveis para esses cadastros podem ser consultadas no portal de APIs da Senior:
Criar um novo cliente:
https://api.senior.com.br/erpx/foundation/entities/person
Criar um novo produto:
https://api.senior.com.br/erpx/foundation/entities/product