# Comandos (PDU)

Abaixo todos os comandos (PDU) permitidos e seus respectivos usos:

| Comando (PDU) | Descrição                                                                       |
| ------------- | ------------------------------------------------------------------------------- |
| submit\_sm    | Utilizado para enviar mensagem                                                  |
| deliver\_sm   | Utilizado para receber relatórios de entrega (DLR) e mensagens de resposta (MO) |
| enquire\_link | Necessário para manter conexão ativa com o servidor                             |
| unbind        | Remover sessão do usuário                                                       |

## Concatenação

Suportado os formatos UDH 8-bit e 16-bit.

**Referência**: [UDH Headers](https://en.wikipedia.org/wiki/Concatenated_SMS)

## submit\_sm

Veja abaixo os parâmetros considerados no envio da sua mensagem

| Parâmetro                                    | Obrigatório | Descrição                           | Valor                 |
| -------------------------------------------- | ----------- | ----------------------------------- | --------------------- |
| source\_addr                                 | Sim         | Remetente da mensagem               | Definido pelo usuário |
| source\_addr\_ton                            | Sim         | Tipo de remetente                   | 5                     |
| source\_addr\_npi                            | Sim         | Plano de numeração                  | 0                     |
| destination\_addr                            | Sim         | Destinatário da mensagem            | Definido pelo usuário |
| dest\_addr\_ton                              | Sim         | Tipo de destino                     | 1                     |
| dest\_addr\_npi                              | Sim         | Plano de numeração                  | 1                     |
| [registered\_delivery](#registered_delivery) | Não         | Nível de relatório de entrega (DLR) | Definido pelo usuário |
| [data\_coding](#data_coding)                 | Sim         | Encoding da mensagem                | Definido pelo usuário |

### registered\_delivery

A partir deste parâmetro você define quais os níveis de relatório que quer receber em seu PDU deliver\_sm.

| Valor | Hexadecimal | Descrição                          |
| ----- | ----------- | ---------------------------------- |
| 0     | 0x00        | Sem relatórios de entrega          |
| 1     | 0x01        | Somente relatórios finais          |
| 3     | 0x03        | Relatórios intermediários e finais |

{% hint style="info" %}
O **valor padrão do servidor é 0x03** nas ocasiões em que o parâmetro não seja enviado ou enviado um valor diferente dos demonstrados acima.
{% endhint %}

### data\_coding

Definição do tipo de encoding da mensagem enviada. Veja abaixo os valores aceitos.

| Tipo        | Valor | Hexadecimal |
| ----------- | ----- | ----------- |
| GSM-7       | 0     | 0x00        |
| UCS-2       | 8     | 0x08        |
| FLASH GSM-7 | 16    | 0x10        |
| FLASH UCS-2 | 24    | 0x18        |

{% hint style="info" %}
Seu [submit\_sm](#submit_sm) irá falhar com o código [ESME\_RINVDCS](#codigo-de-erros) caso utilize um valor diferente dos mencionados acima
{% endhint %}

## deliver\_sm

A partir deste PDU vamos enviar os dados de relatório de entrega e mensagens recebidas (MO) caso a conexão que você estiver usando tenha suporte.

{% tabs %}
{% tab title="DLR Pdu" %}

```protobuf
{
  command_length: 227,
  command_id: 5,
  command_status: 0,
  sequence_number: 3,
  command: 'deliver_sm',
  service_type: '',
  source_addr_ton: 0,
  source_addr_npi: 0,
  source_addr: '5512988439629',
  dest_addr_ton: 0,
  dest_addr_npi: 0,
  destination_addr: '4306745',
  esm_class: 4,
  protocol_id: 0,
  priority_flag: 0,
  schedule_delivery_time: '',
  validity_period: '',
  registered_delivery: 3,
  replace_if_present_flag: 0,
  data_coding: 1,
  sm_default_msg_id: 0,
  short_message: {
    message: 'id:d803ab6a-fecc-45ba-8c14-297dd7a45e7e sub:001 dlvrd:001 submit date:2509101509 done date:2509101509 stat:DELIVRD err:000 text:'
  },
  message_state: 2,
  receipted_message_id: 'd803ab6a-fecc-45ba-8c14-297dd7a45e7e'
}
```

{% endtab %}

{% tab title="MO Pdu" %}

```protobuf
{
  command_length: 67,
  command_id: 5,
  command_status: 0,
  sequence_number: 4,
  command: 'deliver_sm',
  service_type: '',
  source_addr_ton: 0,
  source_addr_npi: 0,
  source_addr: '5512988439629',
  dest_addr_ton: 0,
  dest_addr_npi: 0,
  destination_addr: '28149',
  esm_class: 0,
  protocol_id: 0,
  priority_flag: 0,
  schedule_delivery_time: '',
  validity_period: '',
  registered_delivery: 3,
  replace_if_present_flag: 0,
  data_coding: 8,
  sm_default_msg_id: 0,
  short_message: { message: 'Hello 🤩' }
}
```

{% endtab %}
{% endtabs %}

{% hint style="warning" %}
Os parâmetros **message\_state** e **receipted\_message\_id** podem não ser suportados em todos os tipos de bibliotecas SMPP. Se for o caso, utilize os dados recebidos em **short\_message**
{% endhint %}

### Message State

| Código | Nome    | Descrição                                                                         |
| ------ | ------- | --------------------------------------------------------------------------------- |
| 1      | ENROUTE | Mensagem recebida e direcionada a fila de processamento interna                   |
| 2      | DELIVRD | Operadora confirma o envio e a entrega da mensagem ao destinatário                |
| 3      | EXPIRED | Tempo limite de tentativas de entrega ao destinatário expirado na operadora.      |
| 4      | DELETED | Mensagem removida de processamento                                                |
| 5      | UNDELIV | Mensagem não entregue ao destinatário                                             |
| 6      | ACCEPTD | Mensagem aceita na operadora e enviada ao destinatário sem confirmação de entrega |
| 7      | UNKNOWN | Dados corrompidos vindos da operadora.                                            |
| 8      | REJECTD | Mensagem rejeitada na operadora                                                   |

{% hint style="success" %}
Todos os nomes e códigos de status estão de acordo com as especificações do protocolo. Para mais informações acesse o [manual do SMPP](https://smpp.org/smpp-delivery-receipt.html)
{% endhint %}

## Código de erros

Os erros seguem o padrão do protocolo. Acesse o link abaixo e consulte de acordo com o código recebido, mas se ainda assim surgirem dúvidas, entre em contato com nossa equipe de suporte

{% embed url="<https://smpp.org/smpp-error-codes.html>" %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.smsfire.com.br/apis-v3/sms/smpp/comandos-pdu.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
