Ozeki NG SMS Gateway logo OZEKI NG SMS Gateway
"The World's most reliable SMS gateway software!"
info@ozekisms.com
Tel.: +36 1 371 0150
SMS Gateway to send SMS via GSM modem or IP SMS connection Overview SMS Gateway to send SMS via GSM modem or IP SMS connection SMS Gateway to send SMS via GSM modem or IP SMS connection Quick start SMS Gateway to send SMS via GSM modem or IP SMS connection SMS Gateway to send SMS via GSM modem or IP SMS connection Download SMS Gateway to send SMS via GSM modem or IP SMS connection SMS Gateway to send SMS via GSM modem or IP SMS connection Manual SMS Gateway to send SMS via GSM modem or IP SMS connection SMS Gateway to send SMS via GSM modem or IP SMS connection How to buy SMS Gateway to send SMS via GSM modem or IP SMS connection SMS Gateway to send SMS via GSM modem or IP SMS connection FAQ SMS Gateway to send SMS via GSM modem or IP SMS connection SMS Gateway to send SMS via GSM modem or IP SMS connection Contact Us SMS Gateway to send SMS via GSM modem or IP SMS connection
OZEKI NG SMS Gateway - Product Guide

E-mail about outgoing SMS messages Contents | SearchEmail to SMS feature

Home > Product Manual > Examples and Solutions > SMS Information Menu

SMS Gateway SMS Gateway Home

  Product Manual
  Introduction
  SMS technology
  Installation Guide
  User Guide
  Developers Guide
  Examples and Solutions
  Telephone networks
  SMS Pin game
  E-mail to SMS alert
  2 way SMS to Email gateway
  SMS Order System
  Least Cost Routing
  SMS Load Balancing
  Asterisk PBX SMS
  SQL SMS Gateway
  SMS Service Provider
  Service Provider
  SMS PIN code query
  SMS Counter game
  SMS newsgroup
  Distributed SMS
  SMS Menu
  Google maps
  Forwarding
  Birthday greeting - SQL Express
  Birthday greeting - MySQL
  Birthday greeting - Oracle
  Instant brochure - MMS autoreply
  Alphabet letter game
  SMS sport betting service
  E-mail about outgoing SMS messages
  SMS Information Menu
  Email to SMS feature
  Reminder example
  Bulk SMS Client
  Bulk SMS to a given phone number range
  Filtering phone numbers
  Ozeki Phone Sytem PBX SMS
  Autoreply voucher example
  Appendix
  FAQ
  Feature list
  Commercial Information
  Search
  Cookie policy
 


Automated phone calls?
Ozeki Phone System XE VoIP PBX software is an advanced PBX built for automated voice calls and 2 way SMS messaging. It has outstanding APIs for software developers. It can be used for:

Phone calls from SQL
Phone calls from HTTP
Voice and SMS applications

Callcenter developers
If you are working on telephone solutions, please check out the Ozeki VoIP SIP SDK.
It can be used to create VoIP client and server software.

Contact Us!
If you wish to get further information, do not hesitate to contact us!

E-mail: info@ozekisms.com

If you have a technical question, please submit a support request on-line.

Information service menu via SMS

This example shows you how you can use Ozeki NG SMS Gateway to create an SMS information menu. The SMS information menu is based on an automatic response system and works similarly as games and other service menus. It works very simply, the mobile users send messages including certain characters (numbers or letters) to a specified phone number and the system replies automatically. The mobile user can select a menu item by sending in another character. In this guide, you can read about the neccessary configuration to start your own SMS information menu.

Download: SMS_information_menu.zip (2 KB)

Video: SMS information menu (part 1/1, configure your system)

Introduction

This solution is a simple, fast and automatized way to share information with customers. The character sent by the customer generates a constant reply which contains the needed information. All you have to do is to provide the characters or words the customer can select from and to configure your system.

How to configure your system

To launch SMS information menu via SMS text messages you need to build your own SMS system. To do so download and install Ozeki NG SMS Gateway to your computer. This software product will ensure SMS functionality and operate your SMS system. After the installation you can start to receive SMS messages from mobiles to your PC and send response messages from PC to mobiles. The SMS Gateway forwards SMS messages to the mobile network in two possible ways. One of the possibilities is GSM modem connection, it means that one or more GSM modems are attached to the PC with a datacable and the gateway operates them. Or the SMS gateway connects directly to the SMS center of a mobile service provider over the Internet. It is called IP SMS connection.

Description of the solution

If a customer sends a message containing the chosen menu number to a predefined phone number, he will receive a welcome response message containing the description of the SMS information menu. In the response message two letters "i" and "e" are mentioned from which the customer can choose. Further information and options belong to each letter, from which the customer send back the one, he wants to get response message of. The guide below provides a detailed description of the system.

System architecture

After you built your SMS system it will work as follows: A customer sends an empty message to you. Ozeki NG SMS Gateway processes this message and its ASP user will check the phone number and its state in the database. The response to the message is determined by the state of the mobile phone. Figure 1 demonstrates this process.


Figure 1 - SMS Information Menu

1. Configuration

Step 1, MySQL

First you need to download and extracted sms_information_menu.zip file to your computer.

Open MySQL Command Line Client, log in with your password and create a table using the below script for sms information. Select the contents of the below and copy it into the MySQL Command Line Client. (Figure 2)

Create table script for MySQL
CREATE TABLE `numbers` (
  `id` int(11) NOT NULL auto_increment,
  `phonenum` varchar(50) NOT NULL,
  `state` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
)  DEFAULT CHARSET=utf8;
 



Figure 2 - MySQL Command Line


Step 2, Setup Ozeki NG

The downloaded "sms_information_menu.zip" file contains an ASPX file named "sms_information_menu.aspx". Open this file and search the line containing the connection string and customize it. Below you can see an example of customized connection string.
Connection string
Driver={MySQL ODBC 5.1 Driver};Server=127.0.0.1;
Database=MyInformation;User=root;Password=qwe123;Option=4;



Below you can see the source code of the "sms_information_menu.aspx" file.

<%@ Page Language="C#"%>
<%@ Import Namespace="System" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.Collections" %>
<%@ Import Namespace="System.Collections.Generic" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<%@ Import Namespace="System.Data.Odbc" %>

<%

//************************************************************
//copy the properties of the incoming SMS into local variables
//************************************************************

string sender = Request.QueryString["sender"];
string receiver = Request.QueryString["receiver"];
string messagedata = Request.QueryString["messagedata"];
string messageid = Request.QueryString["messageid"];
string messagetype = Request.QueryString["messagetype"];
string senttime = Request.QueryString["senttime"];
string receivedtime = Request.QueryString["receivedtime"];
string serviceprovider = Request.QueryString["operatornames"];

string respmsg = "";

//************************************************************
//Create the responses for the messages
//************************************************************    

    //response message for the empty messagedata
        string RespForEmpty = "Welcome to the SMS information menu. If you want to receive 
information about the import possibilities, send the character 'i', if you want to receive 
information about export possibilities, send character 'e'"
;
    
        //response messages for letter 'i'
        Dictionary<stringstring> RespForI =
                new Dictionary<stringstring>();
        RespForI.Add("i""1.public import \0x0D\0x0A2.cargo \0x0D\0x0A3.manifest \0x0D\0x0A
4.temp import \0x0D\0x0A5.warehouse \0x0D\0x0A6.re-import"
);
    
        RespForI.Add("i1""1.public import1 \0x0D\0x0A2.public import2 \0x0D\0x0A
3.public import3 \0x0D\0x0A4.public import4 \0x0D\0x0A5.public import5  \0x0D\0x0A
6.public import6 \0x0D\0x0A"
);
        RespForI.Add("i2""2.cargo1 \0x0D\0x0A3.cargo2 \0x0D\0x0A4.cargo3 \0x0D\0x0A
4.cargo4 \0x0D\0x0A5.cargo5 \0x0D\0x0A6.cargo6 \0x0D\0x0A"
);
        RespForI.Add("i3""1.manifest1 \0x0D\0x0A2.manifest2 \0x0D\0x0A
3.manifest3 \0x0D\0x0A4.manifest4 \0x0D\0x0A5.manifest5 \0x0D\0x0A6.manifest6 \0x0D\0x0A"
);
        RespForI.Add("i4""1.temp import1 \0x0D\0x0A2.temp import2 \0x0D\0x0A
3.temp import3 \0x0D\0x0A4.temp import4 \0x0D\0x0A5.temp import5 
\0x0D\0x0A6.temp import6 \0x0D\0x0A"
);
        RespForI.Add("i5""1.warehouse1 \0x0D\0x0A2.warehouse2 \0x0D\0x0A
3.warehouse3 \0x0D\0x0A
4.warehouse4 \0x0D\0x0A5.warehouse5 \0x0D\0x0A6.warehouse6 \0x0D\0x0A"
);
        RespForI.Add("i6""1.re-import1 \0x0D\0x0A2.re-import2 \0x0D\0x0A3.re-import3 \0x0D\0x0A
4.re-import4 \0x0D\0x0A5.re-import5 \0x0D\0x0A6.re-import6 \0x0D\0x0A"
);

        //response messages for letter 'e'
        Dictionary<stringstring> RespForE =
                new Dictionary<stringstring>();
        RespForE.Add("e""1.public export. \0x0D\0x0A2.cargo \0x0D\0x0A3.re-export \0x0D\0x0A4.temp re-export \0x0D\0x0A5.export manifest 
\0x0D\0x0A6.countries"
);
    
        RespForE.Add("e1""1.public export1 \0x0D\0x0A2.public export2 \0x0D
\0x0A3.public export3 \0x0D\0x0A4.public export4 \0x0D
\0x0A5.public export5 \0x0D\0x0A6.public 
export6 \0x0D\0x0A"
);
        RespForE.Add("e2""1.cargo1 \0x0D\0x0A2.cargo2 \0x0D\0x0A3.cargo3 \0x0D
\0x0A4.cargo4 \0x0D\0x0A5.cargo5 \0x0D\0x0A.6cargo6 \0x0D\0x0A"
);
        RespForE.Add("e3""1.re-export1 \0x0D\0x0A2.re-export2 \0x0D\0x0A3.re-export3 
\0x0D\0x0A4.re-export4 \0x0D\0x0A5.re-export5 \0x0D\0x0A6.re-export6 \0x0D\0x0A"
);
        RespForE.Add("e4""1.temp re-export1 \0x0D\0x0A2.temp re-export2 \0x0D
\0x0A3.temp re-export3 \0x0D\0x0A4.temp re-export4 \0x0D
\0x0A5.temp re-export5 \0x0D\0x0A6.temp 
re-export6 \0x0D\0x0A"
);
        RespForE.Add("e5""1.export manifest1 \0x0D\0x0A2.export manifest2 \0x0D
\0x0A3.export manifest3 \0x0D\0x0A4.export manifest4 \0x0D\0x0A
5.export manifest5 \0x0D\0x0A6.export manifest6 \0x0D\0x0A"
);
        RespForE.Add("e6""1.countries1 \0x0D\0x0A2.countries2 \0x0D\0x0A3.countries3 
\0x0D\0x0A4.countries4 \0x0D\0x0A5.countries5 \0x0D\0x0A6.countries6 \0x0D\0x0A"
);

        
//************************************************************
//Respond to the messages
//************************************************************    
        if (messagedata.Equals(""))
        {
            Response.Write("{SMS:TEXT:FORMATTED}{}{}{" + sender + "}
{"
 + RespForEmpty + "}");
            
        }
        else
        {
            string phonestate = messagedata.Trim().ToLowerInvariant();
            string getPhoneState = "select `state` from 
`numbers` where `phonenum` = '"
 + sender + "'";
            
            try
            {
                string connectionString = "Driver={MySQL ODBC 5.1 Driver};Server=127.0.0.1;
Database=MyInformation;User=root;Password=qwe123;Option=4;"
;
                OdbcConnection oc = new OdbcConnection(connectionString);
                oc.Open();
                try
                {

                    try
                    {
                        string sqlresp = "";
                        OdbcCommand command = new OdbcCommand(getPhoneState, oc);
                        OdbcDataReader reader = command.ExecuteReader();
                        while (reader.Read())
                        {
                            sqlresp = reader.GetString(0);
                        }
                        reader.Close();

                        //if the phone number is not yet stored, 
inserting it into the database

                        if (sqlresp == "")
                        {
                            string insertSQL = 
"insert into `numbers` (`phonenum`, `state`) values  ('"
 + sender + "','" + phonestate + "');";
                            OdbcCommand storephonenum = new OdbcCommand(insertSQL, oc);
                            storephonenum.ExecuteNonQuery();
                        }
                            //if the phone number is stored 
in the datbase, modifying its phone state to  according the current messagedata

                            //and updating the corresponding record in the database
                        else 
                        {
                            if (!(phonestate.EndsWith("i")
 || phonestate.EndsWith("e")))
                            {
                                phonestate = sqlresp + phonestate;
                                string updateSQL = 
"update `numbers` set `state`= '"
  + phonestate + "' where `phonenum` = '" + sender + "';";
                                OdbcCommand updatephonestate = new OdbcCommand(updateSQL, oc);
                                updatephonestate.ExecuteNonQuery();
                            }
                            else
                            {
                                string updateSQL = 
"update `numbers` set `state`= '"
  + phonestate + "' where `phonenum` = '" + sender + "';";
                                OdbcCommand updatephonestate = new OdbcCommand(updateSQL, oc);
                                updatephonestate.ExecuteNonQuery();
                            }
                            
                        }
                        
                        oc.Close();
                    }
                    catch (Exception z)
                    {
                        string errCode = z.Message;
                        Response.Write(errCode);
                    }

                }
                catch (Exception z)
                {
                    string errCode = z.Message;
                    Response.Write(errCode);
                }
            }
            catch (Exception z)
            {
                string errCode = z.Message;
                Response.Write(errCode);
            }
            
            //setting up the response messages for the recipient
            if (phonestate.StartsWith("i"))
            {
                respmsg = RespForI[phonestate];
            }

            if (phonestate.StartsWith("e"))
            {
                respmsg = RespForE[phonestate];
            }
            string respsms = "{SMS:TEXT:FORMATTED}{}{}{" + sender + "}
{"
 + respmsg + "}";
            Response.Write(respsms);
        }
        
%>


You can customize the responses by modifying the following variables:

  • RespForEmpty: this variable contains the response message for an empty message. In this example it is a description for the menu.
  • RespForI: this variable contains the response message for a message containing the letter "i".
  • RespForE: this variable contains the response message for a message containing the letter "e".

The "RespForI" and "RespForE" variables determines response messages for the chosen sub-menus (for example: "e4"). You can customize these response messages as well or you can add further sub-menus (for example: "e41").


After you customized the ASPX file, start Ozeki NG SMS Gateway and login with your username and password and create an ASP user. To do so click on "Add users and applications" and select "ASP" user in the list and click on "Install". Give the access path of sms_information_menu.aspx file in the ASP user's configuration form as in Figure 3.


Figure 3 - ASP script file


After configuration, your system is ready to use the SMS Information Menu.

2. Testing the system

First time I simulate an incoming message which message data is empty. You can see the response message to the empty message in Figure 4, as described in the "RespForEmpty" variable.



Figure 4 - Response to empty SMS


In Figure 5 you can see the response message for letter "i", as described in the "RespForI" variable's "i" keyword:


Figure 5 - Response to "i"


If I send the number "3" I will get the response for number "3" at the "i" menu, as described in the "RespForI" variable's "i3" keyword:


Figure 6 - Response to "i3"


In Figure 7 you can see the response message for letter "e", as described in the "RespForE" variable's "e" keyword:


Figure 7 - Response to "e"


If I send the number "4" I will get the response for number "4" at the "e" menu, as described in the "RespForE" variable's "e4" keyword:


Figure 8 -Response to "e4"

Dig deeper!
People who read this also read...





Next page: Email to SMS feature
Copyright © 2000 - 2017 Ozeki Informatics Ltd.
All rights reserved

Software PBX for Windows | VoIP SDK   |   Legal information   |   Privacy policy   |   Terms of use
Please, address your inquiries to info@ozekisms.com