SMPP 发送消息在 PDU 中收到不同的结果 - 结果混淆
SMPP send Message received different result in PDU - Confuse In Results
在 Nodejs 中实现
使用 node-smpp library and Selenium SMPPSim Simulator
const smpp = require('smpp');
const session = new smpp.Session({host: 'localhost', port: 1234});
session.on('connect', () => {
isConnected = true;
session.bind_transceiver({
system_id: "SYSTEMID",
password: "PASSWORD",
}, (pdu) => {
if (pdu.command_status == 0) {
console.log('smpp connected !')
}
})
})
//**all pdu listener**
session.on('pdu', (pdu)=>{
console.log(pdu)
})
function sendMessage(from, to, text){
from = `+${from}`
to = `+${to}`
session.submit_sm({
source_addr: from,
destination_addr: to,
short_message: text
}, function(pdu) {
console.log(pdu)
if (pdu.command_status == 0) {
console.log(pdu.message_id);
}
});
}
sendMessage("1111", "2222", "Hello World!")
sendMessage()方法调用时的输出:
PDU {
command_length: 18,
command_id: 2147483652,
command_status: 0,
sequence_number: 2,
command: 'submit_sm_resp',
message_id: '3' }
这里我使用的是 SMPPSim MO 注射表格
输出:当 消息发送到 selenium 模拟器时 :
PDU {
command_length: 63,
command_id: 5,
command_status: 0,
sequence_number: 8,
command: 'deliver_sm',
service_type: '',
source_addr_ton: 1,
source_addr_npi: 1,
source_addr: '111111',
dest_addr_ton: 1,
dest_addr_npi: 1,
destination_addr: '222222',
esm_class: 0,
protocol_id: 0,
priority_flag: 0,
schedule_delivery_time: '',
validity_period: '',
registered_delivery: 0,
replace_if_present_flag: 0,
data_coding: 0,
sm_default_msg_id: 0,
short_message: { message: 'Hello from SMPPSim' } }
混淆了两种结果,如果使用 sendMessage() 方法发送消息,那么为什么它只返回 submit_sm_resp,是因为本地机器吗?或者是其他东西 ??
需要帮助来理解这种行为。
我不熟悉 node-smpp 或 Selenium SMPPSim 模拟器,但它们仍然使用 SMPP 协议。
来自 "sendMessage()" 的第一个输出是 submit_sm_resp,这是调用 submit_sm 时预期的结果。
但是您提供的第二个回复似乎并不常见。根据 SMPP 协议发现 here 我没有看到任何响应类型 return 您列出的所有字段。
Selenium 可能会将一些参数作为 TLV(标记长度值)参数发送,或者他们只是 return 你在他们这边建立了一些扩展数据集。他们的文档或源代码可能会提供更多信息(如果有的话)。
附带说明一下,不要指望第 3 方提供商 (ESME) 或短消息服务中心 (SMSC) 的 SMPP 协议的一致性。即使当我直接集成到 4 个蜂窝服务提供商时,它们之间也存在需要定制开发的小差异。
你说的是 2 个不同的命令。
您的 sendMessage() 方法发送一个 SMPP submit_sm ... 您从模拟器收到一个 submit_sm_resp。
从模拟器中注入 MO 转化为从模拟器发送到您的应用程序的 deliver_sm。
submit_sm 仅从 smpp 客户端(您)发送到服务器(smsc/simulator)
deliver_sm 仅从 smpp 服务器(smsc/simulator)发送到客户端(您)
sumbit_sm_resp 仅包含这些参数是完全正常的。对于你的submit_sm,它只是一个ACK/NACK。
同样,当 SMSC 向您发送 deliver_sm 时,您将回复 deliver_sm_resp.
在 Nodejs 中实现 使用 node-smpp library and Selenium SMPPSim Simulator
const smpp = require('smpp');
const session = new smpp.Session({host: 'localhost', port: 1234});
session.on('connect', () => {
isConnected = true;
session.bind_transceiver({
system_id: "SYSTEMID",
password: "PASSWORD",
}, (pdu) => {
if (pdu.command_status == 0) {
console.log('smpp connected !')
}
})
})
//**all pdu listener**
session.on('pdu', (pdu)=>{
console.log(pdu)
})
function sendMessage(from, to, text){
from = `+${from}`
to = `+${to}`
session.submit_sm({
source_addr: from,
destination_addr: to,
short_message: text
}, function(pdu) {
console.log(pdu)
if (pdu.command_status == 0) {
console.log(pdu.message_id);
}
});
}
sendMessage("1111", "2222", "Hello World!")
sendMessage()方法调用时的输出:
PDU {
command_length: 18,
command_id: 2147483652,
command_status: 0,
sequence_number: 2,
command: 'submit_sm_resp',
message_id: '3' }
这里我使用的是 SMPPSim MO 注射表格 输出:当 消息发送到 selenium 模拟器时 :
PDU {
command_length: 63,
command_id: 5,
command_status: 0,
sequence_number: 8,
command: 'deliver_sm',
service_type: '',
source_addr_ton: 1,
source_addr_npi: 1,
source_addr: '111111',
dest_addr_ton: 1,
dest_addr_npi: 1,
destination_addr: '222222',
esm_class: 0,
protocol_id: 0,
priority_flag: 0,
schedule_delivery_time: '',
validity_period: '',
registered_delivery: 0,
replace_if_present_flag: 0,
data_coding: 0,
sm_default_msg_id: 0,
short_message: { message: 'Hello from SMPPSim' } }
混淆了两种结果,如果使用 sendMessage() 方法发送消息,那么为什么它只返回 submit_sm_resp,是因为本地机器吗?或者是其他东西 ?? 需要帮助来理解这种行为。
我不熟悉 node-smpp 或 Selenium SMPPSim 模拟器,但它们仍然使用 SMPP 协议。
来自 "sendMessage()" 的第一个输出是 submit_sm_resp,这是调用 submit_sm 时预期的结果。
但是您提供的第二个回复似乎并不常见。根据 SMPP 协议发现 here 我没有看到任何响应类型 return 您列出的所有字段。
Selenium 可能会将一些参数作为 TLV(标记长度值)参数发送,或者他们只是 return 你在他们这边建立了一些扩展数据集。他们的文档或源代码可能会提供更多信息(如果有的话)。
附带说明一下,不要指望第 3 方提供商 (ESME) 或短消息服务中心 (SMSC) 的 SMPP 协议的一致性。即使当我直接集成到 4 个蜂窝服务提供商时,它们之间也存在需要定制开发的小差异。
你说的是 2 个不同的命令。
您的 sendMessage() 方法发送一个 SMPP submit_sm ... 您从模拟器收到一个 submit_sm_resp。
从模拟器中注入 MO 转化为从模拟器发送到您的应用程序的 deliver_sm。
submit_sm 仅从 smpp 客户端(您)发送到服务器(smsc/simulator) deliver_sm 仅从 smpp 服务器(smsc/simulator)发送到客户端(您)
sumbit_sm_resp 仅包含这些参数是完全正常的。对于你的submit_sm,它只是一个ACK/NACK。 同样,当 SMSC 向您发送 deliver_sm 时,您将回复 deliver_sm_resp.