gpt4 book ai didi

perl - Perl 中的 Net::SMPP,如何从我的 ESME 向 SMSC 发送确认

转载 作者:行者123 更新时间:2023-12-01 05:35:58 25 4
gpt4 key购买 nike

我正在编写一个 Perl 脚本,使用 Net::SMPP 作为接收器和发送器。当移动用户向短代码(比如 123)发送消息时,它会到达我的 SMPP 帐户,我的 SMPP 应用程序会读取消息并回复用户确认,比如“谢谢你发送消息”。我完全可以收到用户发送到我的 SMPP 应用程序的消息。问题是向 SMSC 发回确认 (delivery_sm_resp),以便它从流中删除该消息,以便可以收集其他用户发送的下一条消息。我尝试使用该功能,但我无法弄清楚从 SMSC 收到的消息到我的 ESME 的消息中获取 message_id 的位置。

我的代码是。

my $transmitter = Net::SMPP->new_transmitter($host,port=> $port,system_id => '123',password  => '',) or die;

$receiver = Net::SMPP->new_receiver($host,system_id => '123',password => '',port => $port,)
or die "Can't create server: $!";

while (1) {
warn "Waiting for PDU";
$pdu = $receiver->read_pdu() or die "$$: PDU not read. Closing connection";
print "Received #$pdu->{seq} $pdu->{cmd}:". Net::SMPP::pdu_tab->{$pdu->{cmd}}{cmd} ."\n";
warn Dumper($pdu);

print "\n\n ** Hello ** " . $pdu->{message_id} . "\n ** now printing ** " . $pdu->{sm_default_msg_id};
$transmitter->deliver_sm_resp( message_id => $pdu->{sm_default_msg_id}, seq => $pdu->{seq});
$resp_pdu = $transmitter->submit_sm(
destination_addr => $pdu->{source_addr},
short_message => "you sent a message with text " . $pdu->{short_message}
) or die "Response indicated error: " . $resp_pdu->explain_status();

}

我从 SMSC 接收到我的 ESME 的消息显示如下。请帮助我从中找到 message_id,它可用于确认 SMSC,以便它从流中删除该消息,并且可以接受其他用户发送的下一条消息。否则我会收到相同的 PDU 3 次,直到超时才能接收下一条消息。

Waiting for PDU at s.pl line 23.
Received #2 5:deliver_sm
$VAR1 = bless( {
'source_addr_ton' => 1,
'known_pdu' => 1,
'schedule_delivery_time' => '',
'protocol_id' => 0,
'status' => 0,
'short_message' => 'A',
'dest_addr_npi' => 0,
'source_addr' => '44702601843',
'validity_period' => '',
'registered_delivery' => 0,
'dest_addr_ton' => 0,
'seq' => 2,
'data_coding' => 1,
'service_type' => '',
'replace_if_present_flag' => 0,
'cmd' => 5,
'priority_flag' => 0,
'data' => '44702601843420A',
'destination_addr' => '420',
'esm_class' => 0,
'sm_default_msg_id' => 0,
'source_addr_npi' => 0,
'reserved' => undef
}, 'Net::SMPP::PDU' );

最佳答案

回答:我对此进行了更多检查,发现要从 ESME 发送确认响应 --> SMSC,代码中应使用以下命令。我希望它能在某个时候帮助某人。 :)

$receiver->data_sm_resp(message_id => $pdu->{sm_default_msg_id}, seq => $pdu->{seq});

关于perl - Perl 中的 Net::SMPP,如何从我的 ESME 向 SMSC 发送确认,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14107934/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com