Inbound SMS to virtual mobile numbers API

Variables

The following variables will be sent to your script via HTTP POST or GET upon a message being delivered to you. If you can design your script to listen out for the variables below:

Name Description
gwNumber The destination number
originator The sender’s number
message The message body
smsTime Time when the sms was sent. Format: YYYY-MM-DD HH:MM:SS
timeZone An integer, indicating time zone (eg: if timeZone is 1 then it means smsTime is GMT + 1)
network Name of the originating network.
Will be replaced with an SMSC reference number if the network is not recognised.
id A unique identifier for the message
time Time the message received by aql (UK time). Format: YYYY-MM-DD HH:MM:SS
coding Message coding 7 (normal), 8 (binary) or 16 (unicode)
status 0 – Normal Message
1 – Concatenated message, sent unconcatenated
2 – Indecipherable UDH (possibly corrupt message)

Please note that we expect the originator ID to be in a numeric format, rather than alphanumeric, however this should not affect the majority of senders.


Technical

Verification with variable

You can set a verification variable to protect your script from spamming.
You can use this to check whether the inbound data was sent to your virtual mobile number.

Our example script assumes that you have set a variable verify=aql in your destination URL, e.g. your virtual mobile number points to http://192.168.1.100/script.php?verify=aql

Failover with multiple destinations

You can set multiple destinations to your virtual mobile number.
This can be used to failover and ensure the inbound data will reach your script.

For example, if you have set two destinations http://192.168.1.100/script1.php and http://192.168.200/script2.php our system will first try to HTTP POST/GET request to script1.php and failing that the data will be delivered to script2.php

Placeholders

If no GET variables are specified we will pass the following:

Variable Placeholder Format
status %stat  
gwNumber %dest  
originator %orig  
message %msg  
time %time  
smsTime %smsTime  
timeZone %smsTimeZone  
network %netw  
coding %code  
id %id  

OR can pass some of the above and those below to your own parameter names depending on your requirements.

Placeholder Format
%unixRcvTime  
%smscTime YYYY-MM-DD HH:MM:SS
%smscTimeZone  
%origTon  
%origNpi  
%destTon  
%destNpi  
%smscRef  
%pid  
%addInfo  
%udh  
%dcs  

e.g. http://192.168.1.100/script.php?originator=%orig&timezone=%smsTimeZone

Relay IP addresses

MO messages will be relayed from one of the following subnets. If your application is behind a firewall, we would recommend to whitelist all of the following subnets to avoid any issue. Raising a support case without whitelisting these subnets may lead to delays whilst diagnosing any issues that you are facing.

  • 141.170.8.0/24

  • 141.170.55.0/24

  • 109.239.102.0/24

  • 109.239.103.0/24

  • 194.145.189.0/24

Example code

PHP

//include the database handling class include("mysqlclass.php");

//Assign POSTED variables

$destination = $_POST['gwNumber'];
$originator = $_POST['originator'];
$message = $_POST['message'];
$smsTime = $_POST['smsTime'];
$timeZone = $_POST['timeZone'];
$network = $_POST['network'];
$id = $_POST['id'];
$status = $_POST['status'];

//Create a new instance of the mysql class and write data to database $mysql = New mysql(0);

$sql = "
INSERT INTO
  inbound
  (varOriginator, varDestination, varMessage, dtTime, varUnixTime, varUDH, intId)
  VALUES
  ('$originator', '$destination', '$message', '$time', '$unixTime', '$udh', '$id')";

  $mysql->query($sql);

ASP




$destination = $_POST['gwNumber'];
$originator = $_POST['originator'];

<%
Dim dest, org, msg, time, timezone, network, id, status

  dest = Request.QueryString("gwNumber");
  org = Request.QueryString("originator");
  msg = Request.QueryString("message");
  time = Request.QueryString("smsTime");
  timezone = Request.QueryString("timeZone");
  network = Request.QueryString("network");
  id = Request.QueryString("id");
  status = Request.QueryString("status");

  Response.Write ("Destination: " & dest & "<br />");
  Response.Write ("Originator: " & org & "<br />");
  Response.Write ("Message: " & msg & "<br />");
  Response.Write ("Time: " & time & "<br />");
  Response.Write ("Time Zone: " & timezone & "<br />");
  Response.Write ("Network: " & network & "<br />");
  Response.Write ("ID: " & id & "<br />");
  Response.Write ("Status: " & status & "<br />");

%>