There are few interesting parts in the question. Let's look at them one at a time.
Connectivity between entities
You described the following connectivity between entities. I am laying out here now for convenience of discussion.
Your existing customers use the following connectivity flow:
Client <== JSON ==> Kannel <== SMPP ==> MNO SMSC
For your new customer, you are using the following connectivity flow:
Client ESME <== SMPP ==> Nodejs SMPP+JSON SMS Client <== ==> Kannel <== SMPP ==> MNO SMSC
Alternative connectivity 1: Eliminate Kannel
For your new customer, you can also consider this (simplified) flow:
Client ESME <== SMPP ==> Nodejs SMPP/Nodejs ESME <== SMPP ==> MNO SMSC
An important question to ask here - why do you need Kannel in the flow.
Alternative connectivity 2: Why not use JSON
I think the customer is trying to say is:
- JSON is text based protocol and one can easily manipulate it in flight.
- SMPP is binary based and one cannot easily manipulate it in flight.
You can help the customer by offering one/both the following options:
- JSON works over HTTP. You can always connect over HTTPS and that eliminates the possibility of manipulation.
- Connect over a VPN.
I don't know if this flow will solve your other problems, but it simplifies your flow.
Note: VPN should be used even with SMPP.
Can kannel be used as SMPP server
Disclaimer: I do not have experience with Kannel.
A bit googling revealed - Kannel does not support allowing creating SMSC with it. It is a bit dated though.
Mapping of messageId
I did not understand the question completely. Anyway, here is my attempt to answer it:
Where to find messageId?
- messageId field is present on submit_sm and data_sm (sent by ESME) all the time.
- messageId field is present but blank on deliver_sm (sent by SMSC) as per the protocol.
How to map messageId?
As intermediate application provider, you are responsible for mapping messageId received/sent from/to both ends. See this SO question for some relevant discussion - Message ID for SMS submission and delivery not the same.