
VoIP , . , . SMS — , .
GoIP Yeastar
, OpenVox, , . Dinstar, , .
GoIP

GSM GoIP , . GoIP 4 DBL, Hybertone, , .
▪ Web
SMS — , Send SMS, , , . , , . GET POST .
→ GET
GET :
http://192.168.1.190/default/en_US/send.html?u=admin&p=admin&l=1&n=89991234567&m=test
u=admin –
p=admin –
l=1 – ,
n=89991234567 – ( «8», «+7» «7» )
m=test –
, : «ERROR, »
, : «Sending, L1 Send SMS to 89991234567; ID:55c489da»
. , : , , , , .
→ POST
POST — , web , , SMS, . POST USSD , .
perl Mojolicious:
use utf8;
use Mojo::UserAgent;
my $ua = Mojo::UserAgent->new;
$ua->post('http://admin:admin@192.168.1.190/default/en_US/sms_info.html?type=sms'
=> {Accept => '*/*'}
=> form => {
line => '1',
smskey => '57867a25',
action => 'SMS',
telnum => '89991234567',
smscontent => '!',
send => 'Send'
});
USSD :
$ua->post('http://admin:admin@192.168.1.190/default/en_US/sms_info.html?type=ussd'
=> {Accept => '*/*'}
=> form => {
line1 => '1',
smskey => '57876006',
action => 'USSD',
telnum => '*100#',
send => 'Send'
});
GET .
→
, , , , . , GoIP USSD , .
:
http://192.168.1.190/default/en_US/send_status.xml?u=admin&p=admin
XML, , GoIP 4, , 8 , 4:
<?xml version="1.0" encoding="utf-8"?>
<send-sms-status>
<id1>57867a25</id1>
<status1>DONE</status1>
<error1></error1>
<id2>57867277</id2>
<status2>ERRORDONE</status2>
<error2>send, but provider not reply.</error2>
<id3>57876006</id3>
<status3>DONE</status3>
<error3> : 57.2 .</error3>
<id4></id4>
<status4>DONE</status4>
<error4></error4>
<id5></id5>
<status5></status5>
<error5></error5>
<id6></id6>
<status6></status6>
<error6></error6>
<id7></id7>
<status7></status7>
<error7></error7>
<id8></id8>
<status8></status8>
<error8></error8>
</send-sms-status>
▪ SMPP
SMPP (Short message peer-to-peer protocol) – , SMS USSD . , , «» . , web , , , .

SMPP . , UTF-16BE
. , , . (data_coding
), , .
, destination_addr
system_id
, GoIP-, . . , . – system_id + 0 +
, , , .
Net::SMPP
:
use utf8;
use strict;
use Net::SMPP;
use Encode;
use feature 'say';
my $smpp = Net::SMPP->new_transceiver('192.168.1.190',
system_id => 'arttel',
password => 'arttel',
port => '7777',
smpp_version=> 0x34
) or die "Can't connect to SMSC: $!";
while (1) {
my $pdu = $smpp->read_pdu();
my $short_message = Encode::decode("UTF-16BE", $pdu->{short_message});
say $short_message;
}
, SMS SIM , id :
use utf8;
use strict;
use Net::SMPP;
my $smpp = Net::SMPP->new_transceiver('192.168.4.107',
system_id => 'arttel01',
password => 'arttel',
port => '7777',
smpp_version=> 0x34
) or die "Can't connect to SMSC: $!";
&send_message('89991234567', '!!!');
sub send_message {
my ($sm_dest_addr, $sm_message) = @_;
my $result = eval {
my $pru = $smpp->submit_sm(
source_addr_ton => 0x05,
source_addr_npi => 0x01,
source_addr => '',
dest_addr_ton => 0x01,
dest_addr_npi => 0x01,
destination_addr => $sm_dest_addr,
data_coding => 0x01,
short_message => $sm_message
) or return 1;
return 0;
};
if ($result == 1){
print "Can't send message: $!";
}
}
$smpp->unbind();
Paramètre | La description | Les valeurs |
---|
source_addr_ton | | 0x00 — (Unknown) 0x01 — (International) 0x02 — (National) 0x03 — (Network Specific) 0x04 — (Subscriber Number) 0x05 — - (Alphanumeric) 0x06 — (Abbreviated) |
source_addr_npi | | 0x00 — Unknown 0x01 — ISDN (E163/E164) 0x02 — Data (X.121) 0x03 — Telex (F.69) 0x04 — Land Mobile (E.212) 0x05 — National 0x06 — Private 0x07 — ERMES 0x08 — Internet (IP) 0x09 — WAP Client Id ( WAP Forum) |
dest_addr_ton | | 0x01 — (International) |
dest_addr_npi | | 0x01 — ISDN (E163/E164) ( ) 0x02 — National ( ) |
data_coding | | 0x01 — IA5(CCITT T.50)/ASCII (ANSI X3.4) 7 1 160 0x07 — Latin/Hebrew(ISO-8859-8) 8 1 140 0x08 — UCS2(ISO/IEC-10646) (, ) 70 |
Yeastar

Yeastar, GoIP – , , , Yeastar , . , . . , , , .
▪ Web
web , , . Yeastar web — «» Inbox
Outbox
. , , GoIP, , . , , , datasheet
.
→ GET
, GET , , . , Yeastar .
SMS USSD . «API Settings», , « AMI» ( ?). , , , , .

SMS USSD :
http://192.168.5.150/cgi/WebCGI?1500101=account=arttel&password=arttel&port=1&destination=89991234567&content=test
Response: Success
Message: Commit successfully!
http://192.168.5.150/cgi/WebCGI?1500102=account=arttel&password=arttel&port=1&content=%2A100%23
Request: 1,*100#
Response: Success
Message: :
36.3 .
:
account=arttel – API Settings
password=arttel – API Settings
port=1 – ,
destination=89991234567 – , SMS
content=test – USSD
GoIP: SMS Yeastar , . USSD , . . . , plain text, : JSON XML.
▪ Asterisk Managment Interface
Yeastar Asterisk ( IP- Digium), SMPP . Asterisk'a AMI, .
:
use utf8;
use strict;
use warnings;
use AnyEvent::Impl::Perl;
use Asterisk::AMI;
use Data::Dumper;
use URI::Escape;
use feature 'say';
my $astman = Asterisk::AMI->new(
PeerAddr => '192.168.5.150',
Username => 'arttel',
Secret => 'arttel',
Events => 'on',
Handlers => {
ReceivedSMS => \&received_sms
},
Keepalive => 60,
on_error => sub { print "Error occured on socket\r\n"; exit; },
on_timeout => sub { print "Connection to asterisk timed out\r\n"; exit; }
);
die "Unable to connect to asterisk" unless ($astman);
sub received_sms {
my ($asterisk, $event) = @_;
say Dumper($event);
say uri_unescape($event->{'Content'}) if ($event->{'Content'});
return 1;
}
AnyEvent::Impl::Perl::loop;
, . , «GsmSpan»
. , 0, 0 1, 2, + 1
, GsmSpan
2.
AMI SMS USSD :
use strict;
use warnings;
use Asterisk::AMI;
use Data::Dumper;
use URI::Escape;
use Encode;
use feature 'say';
my $astman = Asterisk::AMI->new(
PeerAddr => '192.168.5.150',
Username => 'arttel',
Secret => 'arttel',
Timeout => 30,
Keepalive => 60,
on_error => sub { print "Error occured on socket\r\n"; exit; },
on_timeout => sub { print "Connection to asterisk timed out\r\n"; exit; }
);
die "Unable to connect to asterisk" unless ($astman);
my %action = (
Action => 'smscommand',
Command => 'gsm send ussd 2 "*100#"'
);
my $actionid = $astman->send_action(\%action);
my $response = $astman->get_response($actionid);
my @cmd = @{$response->{CMD}};
my $i = 0;
while ($i <= $#cmd) {
if ($cmd[$i] =~ /USSD Message: (.+)/) {
my $decodedHex = pack('H*', $1);
say decode("UCS-2BE", $decodedHex);
}
$i++;
}
%action = (
Action => 'smscommand',
Command => 'gsm send sms 2 89991234567 "" 11111'
);
$actionid = $astman->send_action(\%action);
$response = $astman->get_response($actionid);
USSD , , . SMS : , . , . , , . - :
$VAR1 = {
'ID' => '11111',
'Event' => 'UpdateSMSSend',
'--END SMS EVENT--' => undef,
'Status' => '1',
'Privilege' => 'all,smscommand',
'Smsc' => '+79991234567'
};
Status = 1 , , 0. , UpdateSMSSend
, , SMS.
Yeastar TG400 AMI. , - GoIP. : SMS , GoIP PHP, Apache MySQL, Yeastar – Windows. , - . , . - , .