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);
}