# Операции bind и состояния сессии SMPP

> bind аутентифицирует и открывает сессию SMPP. bind_transmitter разрешает только отправку, bind_receiver — только приём, а bind_transceiver — и то и другое по одному соединению. ESME передаёт system_id, password и system_type; SMSC отвечает bind_resp. Успешный bind переводит сессию в связанное состояние вплоть до unbind или разрыва.

- Канонический URL: https://www.broadnet.me/ru/reference/smpp-bind-operations
- Язык: ru
- Последнее обновление: 2026-07-18
- Издатель: BroadNet (https://www.broadnet.me)

Как аутентифицируется сессия SMPP: bind_transmitter, bind_receiver и bind_transceiver, поля system_id/password/system_type, interface_version, состояния сессии и unbind.

## Три типа bind

Тип bind фиксирует направление трафика для сессии. Выберите transmitter для только исходящего трафика (отправка MT), receiver для только входящего (MO и отчёты о доставке) или transceiver, чтобы передавать оба направления по одному соединению — обычный выбор в v3.4, поскольку это вдвое сокращает число поддерживаемых соединений.

*Операции bind*

| Операция | command_id | Сессия может |
|---|---|---|
| bind_transmitter | 0x00000002 | Только отправка сообщений (MT) |
| bind_receiver | 0x00000001 | Только приём сообщений / отчётов о доставке (MO + DLR) |
| bind_transceiver | 0x00000009 | Отправка и приём по одному соединению |

## Поля запроса bind

Тело bind несёт учётные данные и заявленные возможности ESME. system_id и password аутентифицируют учётную запись; system_type опционально классифицирует ESME; interface_version объявляет версию SMPP; addr_ton, addr_npi и address_range позволяют SMSC маршрутизировать трафик от абонентов на этот bind. Несоответствие address_range молча блокирует маршрутизацию MO/DLR на bind типа receiver или transceiver — распространённая ошибка интеграции.

*Тело bind_transmitter/receiver/transceiver*

| Поле | Тип | Макс. | Примечания |
|---|---|---|---|
| system_id | C-Octet String | 16 | Идентификатор учетной записи/логина |
| password | C-Octet String | 9 | Пароль учетной записи |
| system_type | C-Octet String | 13 | Дополнительная категория ESME (часто пустая) |
| interface_version | Integer | 1 | 0x34 = v3.4, 0x50 = v5.0 |
| addr_ton | Integer | 1 | Тип номера для маршрутизации MO этому ESME |
| addr_npi | Integer | 1 | Индикатор плана нумерации |
| address_range | C-Octet String | 41 | Адрес/регулярное выражение, по которому SMSC маршрутизирует на этот bind |

## Ответ bind

SMSC отвечает соответствующим bind_resp (например, bind_transceiver_resp, 0x80000009). command_status равен ESME_ROK при успехе либо содержит ошибку, такую как ESME_RINVPASWD (неверный пароль), ESME_RINVSYSID (неверный системный идентификатор) или ESME_RBINDFAIL. Тело возвращает system_id SMSC и, начиная с v3.4, опциональный TLV sc_interface_version, сообщающий ESME, какую версию фактически поддерживает SMSC.

*Успешный обмен bind типа transceiver*

```text
ESME → SMSC   bind_transceiver   seq=1  system_id=acme  password=****
SMSC → ESME   bind_transceiver_resp seq=1  status=ESME_ROK  system_id=smsc01
  (session now BOUND_TRX — submit_sm and deliver_sm may flow)
```

## Состояния сессии

Сессия SMPP — это небольшой конечный автомат. Она начинается в состоянии OPEN после установления TCP-соединения, переходит в связанное состояние при успешном bind и возвращается в UNBOUND, а затем CLOSED при unbind или разрыве. Отправка операции, недопустимой для текущего состояния, возвращает ESME_RINVBNDSTS (неверный статус bind). Повторный bind по одному соединению возвращает ESME_RALYBND (уже связан).

*Состояния сессии SMPP*

| Состояние | Значение |
|---|---|
| OPEN | TCP-соединение установлено, bind ещё не выполнен |
| BOUND_TX | Привязан как transmitter — может отправлять |
| BOUND_RX | Привязан как receiver — может получать |
| BOUND_TRX | Привязан как transceiver — может отправлять и получать |
| UNBOUND | Unbind отправлен, ожидается закрытие |
| CLOSED | Соединение разорвано |

## unbind и outbind

unbind (0x00000006) запрашивает корректное закрытие сессии; узел отвечает unbind_resp, и обе стороны закрывают TCP-соединение. outbind (0x0000000B) — это обратный случай: SMSC просит прослушивающий ESME инициировать bind типа receiver; используется, когда SMSC нужно доставить трафик MO на ESME, который обычно ожидает соединений.

## Частые вопросы

### Использовать ли пары transmitter/receiver или transceiver?

Предпочитайте transceiver, где провайдер это допускает — одно соединение несёт и отправку, и приём, вдвое сокращая число соединений и упрощая корреляцию отчётов о доставке. Отдельные bind типа transmitter и receiver используйте только когда провайдер требует разделения по направлениям.

### Для чего нужен system_type?

system_type опционально определяет категорию ESME (например, конкретный класс приложения). Многие провайдеры оставляют его пустым. Задавайте его только тем значением, которое выделяет провайдер, поскольку некоторые маршрутизируют по нему.

### Почему мой bind типа receiver не получает отчёты о доставке?

Самая частая причина — несоответствие address_range / addr_ton / addr_npi: SMSC маршрутизирует трафик MO и DLR на тот bind, чей address_range совпадает, поэтому неверное значение молча их удерживает. Уточните точные выданные значения у провайдера.

### Что означает ESME_RALYBND?

ESME_RALYBND (0x00000005) означает, что ESME уже находится в связанном состоянии и попытался выполнить bind повторно в той же сессии. Выполняйте bind ровно один раз на соединение; если bind не удался, откройте новое соединение, а не выполняйте bind повторно на старом.

### Сколько одновременных bind можно открыть?

Это коммерческое ограничение, задаваемое вашим провайдером, а не протоколом. Открытие большего числа bind, чем выделено, — частая причина троттлинга или блокировки учётной записи. Согласуйте число bind и TPS на каждый bind письменно, прежде чем масштабироваться.

## Источники

- [SMPP v3.4 specification — §4.1 bind operations](https://smpp.org/SMPP_v3_4_Issue1_2.pdf)
- [SMPP v5.0 specification](https://smpp.org/SMPP_v5.pdf)

## См. также

- [Справочник по submit_sm в SMPP](https://www.broadnet.me/ru/reference/smpp-submit-sm)
- [SMPP enquire_link и троттлинг](https://www.broadnet.me/ru/reference/smpp-enquire-link-throttling)
- [Чек-лист интеграции SMPP (руководство)](https://www.broadnet.me/ru/guides/smpp-integration-checklist)
- [SMSC-шлюз (операторам)](https://www.broadnet.me/ru/operators/smsc-gateway)
- [Коды ошибок command_status в SMPP](https://www.broadnet.me/ru/reference/smpp-command-status-errors)
