-
Notifications
You must be signed in to change notification settings - Fork 0
Adiciona detalhamento sobre webhooks #13
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
tobiasfreire-gaudium
wants to merge
6
commits into
main
Choose a base branch
from
topic/docs-sobre-webhooks
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
6 commits
Select commit
Hold shift + click to select a range
0abc243
chore: adiciona detalhamento sobre webhooks
tobiasfreire-gaudium 2775028
fix: corrige inconsistencias
tobiasfreire-gaudium 0116700
feat: adiciona icone nas paginas sobre webhook
tobiasfreire-gaudium 118d2a9
Merge branch 'main' into topic/docs-sobre-webhooks
tobiasfreire-gaudium 8855ad4
chore: adiciona detalhamento de webhooks na tab de entregas v2
tobiasfreire-gaudium a7e82f1
Merge main into topic/docs-sobre-webhooks
JVVeiga File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,239 @@ | ||
| --- | ||
|
marcos-marques-gaudium marked this conversation as resolved.
|
||
| title: 'Sobre' | ||
| description: 'Entenda o funcionamento, payloads e campos dos Webhooks da plataforma Machine.' | ||
| icon: 'book-open' | ||
| --- | ||
|
|
||
| Um webhook é uma forma de recebimento de informações quando ocorre um dado evento. Neste caso, quando uma solicitação sofrer uma alteração do seu estado, a Machine irá acionar uma URL informada pela central com determinadas informações sobre a solicitação que sofreu a mudança. | ||
|
|
||
| O nosso webhook do tipo status envia eventos nos seguintes momentos: quando uma solicitação muda de status, quando o condutor sinaliza que chegou ao local e quando uma parada é confirmada. As informações enviadas vão variar conforme o estado da solicitação. Por exemplo, enquanto a solicitação não foi aceita, nenhum dado associado ao aceite será enviado, entretanto, quando ela for aceita, as informações associadas ao aceite serão enviadas. | ||
|
|
||
| O nosso webhook do tipo posição envia a posição dos condutores que estão com solicitações aceitas (`A`), em andamento (`E`) ou em espera (`S`). | ||
|
|
||
|
tobiasfreire-gaudium marked this conversation as resolved.
|
||
| > ⚠️ **Atenção**: Os antigos formatos dos Webhooks de Status e Posição serão deprecados. A central deve cadastrar novamente os webhooks para utilizar os novos formatos. | ||
|
|
||
| --- | ||
|
|
||
| # (Novo) Webhook de Posição | ||
|
|
||
| O **Webhook de Posição** realiza o envio da posição de condutores, a cada 15s, que estão com solicitações em espera (`S`), em andamento (`E`) ou aceitas (`A`). | ||
|
|
||
| ## Exemplo do Payload | ||
|
|
||
| ```json | ||
| { | ||
| "datetime": "2025-08-29T13:20:05Z", | ||
| "event_id": "550e8400-e29b-41d4-a716-446655440000", | ||
| "company_id": 8, | ||
| "request_id": 12345, | ||
| "driver_id": 8101, | ||
| "latitude": -22.906847, | ||
| "longitude": -43.172896, | ||
| "links": { | ||
| "request": "https://api.taximachine.com.br/api/v1/request/12345", | ||
| "driver": "https://api.taximachine.com.br/api/integracao/condutor?id=8101", | ||
| "enterprise": "https://api.taximachine.com.br/api/integracao/empresa?empresa_id=987" | ||
| } | ||
| } | ||
| ``` | ||
|
|
||
| ## Campos | ||
|
|
||
| | Campo | Formato | Requerido | Descrição | | ||
| | :--- | :--- | :--- | :--- | | ||
| | `datetime` | ISO-8601 | SIM | Data e hora do evento gerado pela Machine. | | ||
| | `event_id` | UUID | SIM | Identificação única do evento (idempotência). | | ||
| | `company_id` | INT | SIM | Identificador da central. | | ||
| | `request_id` | INT | SIM | Identificador da solicitação. | | ||
| | `driver_id` | INT | SIM | Identificador do condutor na plataforma Machine. | | ||
| | `latitude` | DECIMAL | SIM | Latitude do condutor. | | ||
| | `longitude` | DECIMAL | SIM | Longitude do condutor. | | ||
| | `links` | Object | SIM | URLs relacionadas ao evento. Inclui sempre `request` e `driver`. | | ||
|
|
||
| ### Links no Payload | ||
|
|
||
| - `links.request` -> acesso aos detalhes da solicitação. | ||
| - `links.driver` -> referência ao condutor. | ||
| - `links.enterprise` -> (opcional) referência à empresa vinculada. | ||
|
|
||
| --- | ||
|
|
||
| # (Novo) Webhook de Status | ||
|
|
||
| O **Webhook de Status** é acionado sempre que uma solicitação passa por uma **mudança de estado** (ex.: aceita, em andamento, finalizada, cancelada), quando o condutor indica chegada ao local ou quando uma parada é confirmada. | ||
|
|
||
| ## Exemplo do Payload | ||
|
|
||
| ```json | ||
| { | ||
| "datetime": "2025-08-29T13:20:05Z", | ||
| "event_id": "550e8400-e29b-41d4-a716-446655440000", | ||
| "company_id": 8, | ||
| "request_id": 12345, | ||
| "status_code": "A", | ||
| "status_label": "ACEITA", | ||
|
marcos-marques-gaudium marked this conversation as resolved.
|
||
| "stop_id": 567, | ||
| "links": { | ||
| "request": "https://api.taximachine.com.br/api/v1/request/12345", | ||
|
tobiasfreire-gaudium marked this conversation as resolved.
|
||
| "driver": "https://api.taximachine.com.br/api/integracao/condutor?id=321", | ||
| "enterprise": "https://api.taximachine.com.br/api/integracao/empresa?empresa_id=987" | ||
| } | ||
| } | ||
| ``` | ||
|
|
||
| ## Exemplo de apresentação do `status_label` | ||
|
|
||
| #### Enum de Status | ||
|
|
||
| | Código (`status_code`) | Label (`status_label`) | Descrição | | ||
| | :--- | :--- | :--- | | ||
| | `AP` | `ARRIVED_AT_LOCATION` | Condutor chegou ao local | | ||
| | `ER` | `STOP_FINISHED` | Parada finalizada | | ||
| | `L` | `WAITING_RELEASE` | Aguardando liberação | | ||
| | `R` | `WAITING_PAYMENT` | Aguardando pagamento | | ||
| | `D` | `DISTRIBUTING` | Distribuindo | | ||
| | `G` | `WAITING_ACCEPTANCE` | Aguardando aceite | | ||
| | `P` | `PENDING` | Pendente | | ||
| | `S` | `ON_HOLD` | Solicitação em espera | | ||
| | `N` | `NOT_SERVED` | Solicitação não atendida ou buscando condutor | | ||
| | `A` | `ACCEPTED` | Solicitação aceita | | ||
| | `E` | `IN_PROGRESS` | Solicitação em andamento | | ||
| | `C` | `CANCELLED` | Solicitação cancelada | | ||
| | `F` | `FINISHED` | Solicitação finalizada | | ||
| | `U` | `GROUPED` | Solicitação agrupada em andamento | | ||
|
|
||
| #### Como usar | ||
|
|
||
| - `status_code`: valor curto do status | ||
| - `status_label`: valor descritivo do status | ||
|
tobiasfreire-gaudium marked this conversation as resolved.
|
||
| - **Extensibilidade**: se a Machine adicionar novos status no futuro, basta incluir novos pares para `codes/label` | ||
|
|
||
| ## Campos | ||
|
|
||
| | Campo | Formato | Requerido | Descrição | | ||
| | :--- | :--- | :--- | :--- | | ||
| | `datetime` | ISO-8601 | SIM | Data e hora do evento gerado pela Machine. | | ||
| | `event_id` | UUID | SIM | Identificação única do evento (idempotência). | | ||
| | `company_id` | INT | SIM | Identificador da central | | ||
| | `request_id` | INT | SIM | Identificador da solicitação | | ||
| | `status_code` | VARCHAR(2) | SIM | Código do status | | ||
| | `status_label` | ENUM | SIM | Status descritivo | | ||
|
marcos-marques-gaudium marked this conversation as resolved.
|
||
| | `stop_id` | INT | NÃO | Identificador da parada (preenchido apenas no status `STOP_FINISHED`) | | ||
| | `links` | Object | SIM | URLs relacionadas ao evento. Inclui sempre `request` e pode incluir `enterprise` e `driver` (se aplicável) | | ||
|
|
||
| ### Links no Payload | ||
|
|
||
| - `links.request` -> acesso aos detalhes da solicitação | ||
| - `links.enterprise` -> (opcional) referência à empresa | ||
| - `links.driver` -> (opcional) referência ao condutor | ||
|
|
||
| --- | ||
|
|
||
| # Webhook de Mensagens | ||
|
|
||
| O **Webhook de Mensagens** é acionado sempre que ocorre o recebimento de mensagens relacionadas a uma central. Ele possibilita à central receber as mensagens enviadas pelo **condutor** e **empresa**, garantindo histórico e rastreabilidade da comunicação. | ||
|
|
||
| ## Exemplo do Payload | ||
|
tobiasfreire-gaudium marked this conversation as resolved.
|
||
|
|
||
| ```json | ||
| { | ||
| "company_id": 8, | ||
| "content": "me aguarde", | ||
| "datetime": "2025-08-29T14:01:36Z", | ||
| "event_id": "0198f622-400f-7137-a03d-142dd9c2298a", | ||
| "message_id": 24148, | ||
| "sender_id": 8101, | ||
| "sequence": 1, | ||
| "type_code": "DRIVER", | ||
| "type_label": "P", | ||
|
marcos-marques-gaudium marked this conversation as resolved.
|
||
| "links": { | ||
| "sender": "https://api.taximachine.com.br/api/integracao/condutor?id=8101" | ||
| } | ||
| } | ||
| ``` | ||
|
|
||
| ## Campos | ||
|
|
||
| | Campo | Formato | Requerido | Descrição | | ||
| | :--- | :--- | :--- | :--- | | ||
| | `datetime` | ISO-8601 | SIM | Data e hora do evento gerado pela Machine. | | ||
| | `event_id` | UUID | SIM | Identificação única do evento (idempotência). | | ||
| | `company_id` | INT | SIM | Identificador da central | | ||
| | `message_id` | INT | SIM | Identificador da mensagem | | ||
| | `sender_id` | INT | SIM | Identificador do remetente (condutor, empresa) | | ||
| | `sequence` | INT | SIM | Número sequencial da mensagem no contexto da solicitação | | ||
| | `type_code` | ENUM | SIM | Origem da mensagem ( `DRIVER`, `ENTERPRISE`) | | ||
| | `type_label` | String | SIM | Indicação adicional do tipo de mensagem (pode variar por contexto) | | ||
| | `content` | String | SIM | Conteúdo textual da mensagem | | ||
| | `links` | Object | SIM | URLs relacionadas ao evento. Inclui, por exemplo, a referência ao remetente ( `sender`) | | ||
|
|
||
| ### Enum `type_label` | ||
|
|
||
| | Code | Label | Descrição | | ||
| | :--- | :--- | :--- | | ||
| | `P` | `DRIVER` | Chat do tipo condutor | | ||
| | `E` | `ENTERPRISE` | Chat do tipo empresa | | ||
|
tobiasfreire-gaudium marked this conversation as resolved.
|
||
|
|
||
| --- | ||
|
|
||
| # (DEPRECADO) Webhook de Posição | ||
|
|
||
| O webhook de posição realiza o envio de posição de condutores, a cada 15s, que estão com solicitações em espera (S), em andamento (E) ou aceitas (A). Caso a central configuração e de corrida sejam a mesma, a central receberá o evento do webhook apenas uma vez. | ||
|
|
||
| | Campo | Formato | Descrição | | ||
| | :--- | :--- | :--- | | ||
| | `id_mch` | String (Obrigatório) | Identificação da corrida no Sistema Machine | | ||
| | `condutor_id` | String | Identificação do condutor | | ||
| | `lat_cond` | String (Obrigatório) | Latitude do condutor | | ||
| | `lng_cond` | String (Obrigatório) | Longitude do condutor | | ||
|
|
||
| --- | ||
|
|
||
| # (DEPRECADO) Webhook de Mudança de Status | ||
|
|
||
| Um webhook é uma forma de recebimento de informações quando ocorre um dado evento. Neste caso, quando uma corrida sofrer uma alteração do seu estado, quando uma parada for confirmada ou quando o condutor indicar que chegou ao local, a Machine irá acionar uma URL informada pela central com determinadas informações. Este é um mecanismo prático para receber dados da Machine. Caso a central configuração e de corrida sejam a mesma, a central receberá o evento do webhook apenas uma vez. | ||
|
|
||
| | Campo | Formato | Descrição | | ||
| | :--- | :--- | :--- | | ||
| | `id_mch` | String (Obrigatório) | Identificação da solicitação no Sistema Machine | | ||
| | `id_externo` | String | Identificação da solicitação pela central | | ||
| | `status_solicitacao` | String (Obrigatório) | Status da solicitação. | | ||
| | `data_hora_solicitacao` | Datetime (Obrigatório) | Data e hora de abertura da solicitação | | ||
| | `chave_trajeto` | String (Obrigatório) | Chave para acesso a consulta aos trajetos | | ||
| | `usuario` | String | Nome do usuário de abertura da solicitação | | ||
| | `condutor` | | (Bloco opcional) - usado apenas quando o condutor atender a solicitação | | ||
| | `id` | Integer (Obrigatório) | Identificação do condutor na plataforma machine | | ||
| | `nome` | String (Obrigatório) | Nome do condutor | | ||
| | `vtr` | String (Obrigatório) | Número da viatura no cadastro do condutor | | ||
| | `telefone` | String (Obrigatório) | Telefone do cadastro do condutor | | ||
| | `cpf` | String (Obrigatório) | CPF do condutor | | ||
| | `modelo` | String (Obrigatório) | Modelo do veículo | | ||
| | `placa` | String (Obrigatório) | Placa do veículo | | ||
| | `empresa` | | (Bloco opcional) - usado para solicitação em eTicket ou Voucher | | ||
| | `nome` | String (Obrigatório) | Nome da empresa | | ||
| | `centro_custo` | String | Nome do centro de custo | | ||
| | `serie_voucher` | String (Obrigatório) | Série do voucher | | ||
| | `numero_voucher` | String (Obrigatório) | Número do voucher | | ||
| | `status_ticket` | String (Obrigatório) | Status de autorização do eTicket. | | ||
| | `numero_autorizacao` | Number (Obrigatório) | Número de autorização | | ||
| | `data_hora_autorizacao` | Datetime (Obrigatório) | Data e hora da autorização | | ||
| | `tipo_finalizacao` | String (Obrigatório) | Tipo de finalização do eTicket | | ||
| | `andamento` | | (Bloco opcional) - usado para andamento da solicitação | | ||
|
|
||
| --- | ||
|
|
||
| # Assinatura de validação do Webhook | ||
|
|
||
| A assinatura de validação do webhook tem como objetivo garantir a integridade e a autenticação da mensagem. | ||
|
|
||
| Os campos de assinatura, contidos no HEADER, seguem o padrão HMAC-SHA-512. | ||
|
|
||
| O campo `Signature-V2` é composto pelos elementos enviados no webhook, a função de hash SHA-512 e a chave da API. | ||
|
|
||
| É importante observar que o campo `Signature` está atualmente obsoleto, sendo substituído pelo `Signature-V2`; no entanto, ele é construído com base nos dados recebidos no webhook, a função de hash SHA-512 e a chave privada previamente informada. | ||
|
|
||
|
tobiasfreire-gaudium marked this conversation as resolved.
|
||
| ```http | ||
| Content-Type: application/json | ||
| Signature-V2: 17d3170aa2271f8ce1151f730cfea1660359f073e99bc96c2320a49a23bf0700225017c3135693eb7bd1ba9aa06ada60924fdf38f2856bd3ef3aca169f89988a | ||
| @deprecated Signature: 17d3170aa2271f8ce1151f730cfea1660359f073e99bc96c2320a49a23bf0700225017c3135693eb7bd1ba9aa06ada60924fdf38f2856bd3ef3aca169f89988a | ||
| ``` | ||
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.