---
id: messaging--sms-receiver
title: "Sms receiver"
summary: "Connects to an SMSC or SMS gateway over SMPP and emits every incoming SMS (and delivery report) as a message. It is a listener: the flow keeps running while it is connected."
audience: user
keywords: "start, output, deliveryack, bindtype, version, host, localendpointip, port, addressrange, systemid, password, systemtype, enquirelinkinterval, generaltimeout"
---
# Sms receiver

Connects to an SMSC or SMS gateway over SMPP and emits every incoming SMS (and delivery report) as a message. It is a listener: the flow keeps running while it is connected.

## Pins

| Pin | Kind | Types | Description |
|---|---|---|---|
| Start | start | - | Starts the SMPP session. Called by the system when the flow starts if it is not connected. |
| Output | output | `Viaducta.Plugins.Smpp.Types.SmppMessage` | One message per received SMS. |
| DeliveryAck | report | `Viaducta.Plugins.Smpp.Types.SmppMessage` | Delivery reports (`EsmClass` = `4`). |

`SmppMessage` fields filled on receive: `MessageText`, `Sender`, `Receivers` (destination address), `EsmClass`, `DataCoding`, `MessageFormat`, `TlvData` (list of `SmppTlvData { ID, Value }` with the optional parameters).

## Configuration

| Field | Type | Default | Description |
|---|---|---|---|
| `BindType` | dropdown: `1` BindReceiver, `2` BindTransciever (required) | `1` | SMPP bind mode. |
| `Version` | dropdown: `0` V3_3, `1` V3_4 (required) | `1` | SMPP protocol version. |
| `Host` | string (required) | `localhost` | SMSC / gateway host. |
| `LocalEndpointIp` | string | `Any` | Local IP to bind the socket to. |
| `Port` | integer 1-65535 | `10000` | SMSC port. |
| `AddressRange` | string, max 41 chars | empty | ESME address range served by this session (regular expression, as defined by SMPP). |
| `SystemId` | string, max 32 chars | empty | SMPP `system_id` (user name). |
| `Password` | password | empty | SMPP password. |
| `SystemType` | string | `ESME` | SMPP `system_type`. |
| `EnquireLinkInterval` | integer seconds, max 60 | `5` | Keep-alive (enquire_link) interval. |
| `GeneralTimeout` | integer seconds, max 300 | `5` | Response timeout for SMPP operations. |

## Behaviour

- On `Start` the plugin binds to the SMSC (the flow fails with "Failed to connect to host:port due to ..." if the bind is rejected) and starts reading messages.
- Each `deliver_sm` / `data_sm` becomes an `SmppMessage` with new metadata. Messages with `EsmClass` exactly `4` (delivery receipt) go to `DeliveryAck`, all others to `Output`.
- The connection is closed when the flow stops.

## Notes

- Concatenated (multi-part) SMS are not reassembled reliably: parts may be emitted individually or dropped.
- Errors while reading or in the downstream components are swallowed silently (not logged, not sent to the error handling). Add your own error handling in the following components.
- Delivery receipts whose `EsmClass` has other bits set besides `4` are sent to `Output`.
- Ports above 32767 are not handled correctly (the port is converted to a 16-bit signed number).
- Use an expression setting (`=Secrets.SmscPassword`) for `Password` instead of storing it in the flow.

## Example

```json
{ "BindType": 1, "Version": 1, "Host": "smsc.example.com", "Port": 2775, "SystemId": "myesme", "Password": "=Secrets.SmscPassword", "SystemType": "ESME", "EnquireLinkInterval": 30, "GeneralTimeout": 10 }
```

**Sms receiver** → C# script (parse command) → Sms transmitter (reply)
