APIs

Solicitação de Monitoramento - SMON: Perspectiva Fornecedor

Se você é um Fornecedor de API para iniciar com o SMON você pode seguir os passos abaixo:

Passo 1: Especificação do Endpoint e do Request Body

  • Crie um novo endpoint POST /smon na aplicação ou servidor que hospeda a API.
  • Defina a estrutura do JSON que deve ser enviado no request body de acordo com o modelo abaixo.
{
  "operation_info": {
      "provider": 0,
      "operation_type": 2,
      "requested_by": {
          "name": "fusion",
          "country": 76,
          "identification": {
              "document_type": 20,
              "document_id": "19043440000235"
          }
      },
      "paid_by": {
          "name": "fusion",
          "country": 76,
          "identification": {
              "document_type": 20,
              "document_id": "19043440000235"
          }
      },
      "consumer_order": 1,
      "hasEscort": false
  },
  "regional_settings": {
      "language": 1,
      "currency": 2,
      "measurement": {
          "distance": 3,
          "weight": 4,
          "cubage": 5
      }
  },
  "carrier": {
      "name": "AGREGADOS MEGA G",
      "country": 76,
      "identification": {
          "document_type": 20,
          "document_id": "19043440000235"
      }
  },
  "shipper": {
      "name": "AGREGADOS MEGA G",
      "country": 76,
      "identification": {
          "document_type": 20,
          "document_id": "19043440000235"
      }
  },
  "drivers": [
      {
          "name": "GUSTAVO ANTUNES LUIS (NLT)",
          "contract_type": 1,
          "contact": {
              "international_code": "+55",
              "area_code": "11",
              "number": "937254131"
          },
          "country": 76,
          "identification": {
              "document_type": 20,
              "document_id": "50023372877"
          }
      },
      {
          "name": "ROWILSON DE ABREU CAMPOS",
          "contract_type": 2,
          "contact": {
              "international_code": "+55",
              "area_code": "11",
              "number": "987654321"
          },
          "country": 76,
          "identification": {
              "document_type": 20,
              "document_id": "52493075668"
          }
      }
  ],
  "vehicle_structure": {
      "truck": {
          "license_plate": "ABC123",
          "bound_with_carrier": 1,
          "country": 76,
          "work_type": 2,
          "tracking_device": {
              "id": "12345",
              "type": 1,
              "model": 2,
              "manufacturer": 3
          }
      },
      "trailers": [
          {
              "license_plate": "XYZ789",
              "bound_with_carrier": 1,
              "country": 76,
              "work_type": 2,
              "tracking_device": {
                  "id": "54321",
                  "type": 1,
                  "model": 2,
                  "manufacturer": 3
              }
          }
      ]
  },
  "itinerary": {
      "cargo_value": 1000.50,
      "waypoints": [
          {
              "stop_position": 1,
              "name": "Local de Parada 1",
              "type": 1,
              "cargo_doc": 1,
              "identification": {
                  "document_type": 20,
                  "document_id": "11111"
              },
              "address": {
                  "state": 1,
                  "city": 2,
                  "zipcode": "12345-678",
                  "neighborhood": "123",
                  "district": "Bairro Exemplo",
                  "street": "Rua Exemplo",
                  "number": 123,
                  "complement": "Complemento Exemplo",
                  "latitude": "123.456789",
                  "longitude": "12.345678"
              },
              "contacts": [
                  {
                      "international_code": "+1",
                      "area_code": "123",
                      "number": "123456789"
                  }
              ],
              "expected_departure_time": "2023-10-12T08:00:00Z",
              "expected_arrival_time": "2023-10-12T16:00:00Z"
          },
          {
              "stop_position": 2,
              "name": "Local de Parada 2",
              "type": 2,
              "cargo_doc": 2,
              "identification": {
                  "document_type": 20,
                  "document_id": "22222"
              },
              "address": {
                  "state": 3,
                  "city": 4,
                  "zipcode": "54321-987",
                  "neighborhood": "123",
                  "district": "Outro Bairro",
                  "street": "Outra Rua",
                  "number": 456,
                  "complement": "Complemento Outro",
                  "latitude": "12.345678",
                  "longitude": "98.765432"
              },
              "contacts": [
                  {
                      "international_code": "+2",
                      "area_code": "789",
                      "number": "987654321"
                  }
              ],
              "expected_departure_time": "2023-10-12T18:00:00Z",
              "expected_arrival_time": "2023-10-12T22:00:00Z"
          }
      ]
  },
  "cargo_tracking_devices": {
      "id": "78901",
      "type": 3,
      "model": 4,
      "manufacturer": 5
  },
  "contacts": [
      {
          "international_code": "+1",
          "area_code": "123",
          "number": "123456789"
      },
      {
          "international_code": "+2",
          "area_code": "234",
          "number": "234567890"
      }
  ],
  "expected_departure_time": "2023-10-30T08:00:00Z",
  "expected_arrival_time": "2023-10-30T22:00:00Z"
}'

Para entender o que significa cada campo consulte a documentação da Inclusão de Solicitação de Monitoramento.

Passo 2: Implementação do Middleware de Autenticação JWT

  • Implemente um middleware de autenticação JWT que irá verificar a presença e validade do Bearer Token JWT no header da solicitação. Certifique-se de que esse middleware funcione antes de qualquer processamento adicional do endpoint.

Passo 3: Obtenção da Chave Pública

  • Obtenha a chave pública necessária para validar os Tokens JWT. Esta chave pública será usada para verificar a autenticidade do Token. Pode ser obtida a partir da autoridade que emitiu os Tokens JWT, ou seja, a mesma que gera os Tokens JWT.

Passo 4: Validação do Token JWT

  • Utilize a chave pública obtida no "Passo 3" para validar o Token JWT recebido no header da solicitação. A validação deve incluir a verificação da assinatura, da validade do token e outros parâmetros relevantes. Para saber mais sobre a chave publica clique aqui.

Passo 5: Integração com as APIs do MDM

  • Implemente a integração com as APIs do MDM para obter informações a respeito dos IDs que são recebidos no payload do request. Isso envolverá a criação de requisições HTTP para as APIs do MDM, seguindo as especificações fornecidas pela documentação das APIs do MDM. Lembre-se que para utilizar o MDM você precisará estar autenticado na plataforma. Saiba mais sobre a autenticação clicando aqui.

📘

Você pode explorar o MDM na própria documentação clicando em Try it conforme imagem abaixo.

Passo 6: Mapeamento de IDs Recebidos no Payload

  • Quando receber IDs no payload da solicitação, utilize as informações obtidas nas APIs do MDM para mapear e interpretar esses IDs, garantindo que os dados associados sejam corretamente processados ou armazenados.

Passo 7: Resposta e Retorno

  • Responda à solicitação de acordo com os requisitos da documentação. Isso pode envolver a criação de uma resposta JSON, a atualização de registros no sistema ou outras ações necessárias.

Passo 8: Testes

  • Realize testes rigorosos para garantir que o endpoint funcione conforme o esperado, incluindo a autenticação JWT, a integração com as APIs do MDM e o processamento do request body.

Lembre-se de que a segurança é essencial ao lidar com Tokens JWT e a integração com sistemas externos, como as APIs do MDM. Portanto, certifique-se de implementar práticas recomendadas de segurança e testar exaustivamente o novo endpoint antes de disponibilizá-lo para uso em produção.