Table of Contents

SMPP Server FAQ

How to send message to connected client

In following code target client is selected and DeliverSm message is sent to this client.

public async Task DeliverToClient(SmppServerSample.TextMessage message)
{
    string systemId = GetSystemIdByServiceAddress(message.ServiceAddress);

    SmppServerClient client = FindClient(systemId);

    await client.DeliverAsync(SMS.ForDeliver()
        .From(message.PhoneNumber)
        .To(message.ServiceAddress)
        .Text(message.Text)
    );

}

How to send messages out from the server on client bind

private void OnClientBind(object sender, SmppServerClient client, Bind pdu)
{
    if (client.BindingMode == ConnectionMode.Transceiver || client.BindingMode == ConnectionMode.Receiver)
    {
        //Start messages delivery

        Task messagesTask = DeliverMessagesAsync(client, pdu);

    }
}


private async Task DeliverMessagesAsync(SmppServerClient client, Bind pdu)
{
    var messages = _messageStore.GetMessagesForClient(pdu.SystemId, pdu.SystemType);

    foreach (TextMessage message in messages)
    {
        var pduBuilder = SMS.ForDeliver()
            .From(message.PhoneNumber)
            .To(message.ServiceAddress)
            .Text(message.Text);

        var responses = await client.DeliverAsync(pduBuilder);

        _messageStore.UpdateMessageState(message.Id, responses);
    }
}

public interface IServerMessageStore
{
    IEnumerable<TextMessage> GetMessagesForClient(string systemId, string systemType);
    void UpdateMessageState(string messageId, DeliverSmResp[] responses);
}

public class TextMessage
{
    public string Id { get; set; }
    public string PhoneNumber { get; set; }
    public string Text { get; set; }

    public string ServiceAddress { get; set; }
}

How to set MessageId

MessageId must be set on the server side. When server receives SubmitSm or SubmitMulti PDU it generates corresponding response and sets MessageId.

You can change MessageId property in evClientSubmitSm and evClientSubmitMulti event handlers

private void ServerOnClientSubmitSm(object sender, SmppServerClient client, SubmitSm data)
{
    data.Response.MessageId = Guid.NewGuid().ToString().Substring(0, 8);
}