Receive SMS faster (SIM800) - sms

Is there a way to receive SMS messages sent to a GSM module (like sim800) as soon as the module boots up?
Usually if the SMS is sent while the receiving module is off, and then boots up the SMS messages take tens of minutes to arrive. However if the module is turned on, the messages arrive almost immediately.
Is there a way to signal the network that we are now connected and request all SMS messages?
I have tried network deregistration/registration (AT+COPS=2 AT+COPS=0) with no results

Not having a lot of experience on this module, I believe this is rather a question about triggering the network provider to send SMS sooner (e.g. as soon as you're registered). This might depend on the network provider you're connecting to.
With a standard phone I've made the experience that triggering some network activity (e.g. calling someone or sending an SMS myself) seems to flush any SMS queues that they have waiting for me. You might try sending an SMS as soon as you're up

Related

Does receiving of sms affects the traffic bandwidth of gsm modem

There is a hardware system that uses a gsm shield to have an access to the internet. The system should be reliable and all ddos attack vectors are taken into account.
We afraid of sms ddos attack, that can be realized via sending too much sms messages (or especially malformed sms/invisible sms/binary sms). The question is does the receiving of sms hampers the traffic sending for gsm shield/modem? What happens with traffic sending at the moment when the sms is received? How many time the shield /modem is out of sending traffic service per each sms?
SMSs are usually transmitted over a control channel, like the SDCCH (Stand-alone Dedicated Control Channel) or the FACCH (Fast Associated Control Channel). These are the same channels which are used to initiate and hold a call. It is possible to receive SMS while a call is in progress by temporarily reallocating part of the data channel to a control channel (e.g. SDCCH) and using this bandwidth to transmitt/receive an SMS.
If DDOS is possible, I think, depends more on the bandwidth allocation policy of the mobile network operator.
Of course, since the free air used for signal transmission is a shared medium for everyone in a cell, it is always possible to generate heavy load by gathering a group of people all sending SMS and making phone calls at the same time in close proximity of e.g. your GSM shield, effectively staging a DDOS attack if it's done on purpose.

Receiving SMS with GSM modem

I read that a GSM modem can only receive up to 30 SMS per minute. What would you do if you need to receive more than that? Is there another technology?
I think you might want something different to those answers listed at What are the best practices for building an SMS server
If you just have one service that is running where you want to receive many SMS then it would be most cost effective (and simplest) to avoid integrating with a mobile network operator and instead use a SMS aggregator. These often call themselves SMS gateways, but they are independent companies and not a mobile network operator's gateway.
An SMS aggregator acts as a middle man between you and the networks - they have agreements with many network operators and this interconnection means you can link with one aggregator and get access to almost every network in the world.
Aggregator's usually advertise for outbound SMS (where you are sending an SMS from your application to a user), but they all offer inbound SMS as well. Depending on your country you could opt for a premium number or free to receive number. A premium number would mean that the person sending the text message would pay extra money to send you a message - you may want this for a commercial service in order to bill the user. A premium number would also mean you receive a share of the money the user paid to send you the text message. A free to receive number would not cost the person sending the text message anything more than it would normally cost for them to send an SMS. Almost all aggregators will charge you a monthly rental for a free to receive inbound telephone number, but no additional charge per message received.
You can expect to integrate with an aggregator using HTTP or SMPP. HTTP is usually the easiest and the aggregator will want to know where to send the HTTP post when a message is received on your telephone number. Therefore you will need some sort of service that is running to receive the HTTP post from the aggregator, and possibly a way to reply to the user by sending another HTTP post back to the aggregator asking them to forward a message to the user confirming receipt of the inbound SMS message.
SMPP is a more robust protocol and is often used for high volume SMS applications - unless you already have SMPP experience or are sending many hundreds of thousands of messages you may want to avoid SMPP as it is difficult to implement until you have a lot of experience with SMS.
Some aggregators will provide their own platform where you don't need to have your own service running. For example you could setup a simple "autoresponder" on an aggregators website, this would receive the inbound message from the user, then autopmatically respond with a "thank you message". All interaction is done by the aggregator and you can log on periodically to download statistics or look at the messages people have sent.
Popular aggregators are:
InfoBip
Silverstreet
mBlox
If you do not have your own platform for managing the SMS interaction then either use the aggregator's own platform of install your own SMSC gateway. Some SMSC's are:
Kannel - Open Source, fairly difficult to install and manage.
NowSMS - Commercial software. Powerful, windows only, easy to use SMPP integration and has a 30 day free version. Allows GSM modems, HTTP and SMPP integration. Most expensive of these options but pricing is based on number of messages you want to send OUT per second / minute so if you're not planning on sending many out and only receiving them maybe this would be a viable option. There's a cheaper version where you can use one GSM modem (mobile phone) connected to a computer with a USB lead but as you will only have one GSM modem and no aggregator's you are limited to the speed at which your device can receive inbound SMS.
Ozeki - Commercial software. Lots of documentation available and the support team are very responsive. You can add local GSM modems or aggregator's using HTTP or SMPP.

Sending an SMS myself

I'm taking shots in the dark here. I'd like to create a web service where eventually I send an SMS by using my own hardware. I'm not sure what I need in order to send an SMS myself. I don't want to use any of the existing SMS send services out there, I need to be able to send these SMS myself.
It looks like there's one opensource project in particular that deals with this, "Kannel":
http://www.kannel.org/
what I don't understand is, do I need to get a GSM modem to be able to send SMS? Do SMS gateways (like Kannel) eventually need to get to a GSM modem to send messages, or is there some other hardware you need to be able to actually send the messages?
Thanks
Just find an online SMS Gateway. These Gateway providers are your best bet since they have handled all the heavy lifting for you. Just utilize their API and you should be able to do whatever you want. Some of these gateways are free and some are not. I've included a short list below.
https://www.clickatell.com/pricing/message_cost.php
http://www.zeepmobile.com/
(Carrier based SMS transit)
http://en.wikipedia.org/wiki/List_of_carriers_providing_SMS_transit
I'm sure there are a ton more, but this will get you started.
You always need a GSM modem to send the SMS unless you use a provider that handles this for you (but they usually want money for this).
If you want to setup your own Hardware infrastructure, you have to get GSM Modem, A Sim card and use it to send SMS.
Other option, which I recommend, is to use SMS getways and use
SMPP protocol
XML or HTTP Apis
In later, you dont have to create any infrastructure and the starting cost will be very low compared to GSM Modem. You can get up and running in a day.
Note : to reduce the SMS costs, you should choose different getways for different countries. In India you can easily find getways who provides SMS at merely 3 paise
You will have to download an API that handles the sending and recieving of messages for you. I once used this in one project where i had my GSM Phone connected to my computer thru one of the COM ports. Configured the API to communicate thru the COM Port to listen to any incoming text messages also send messages thru my GSM Phone. Here is a great link to the resources i used for that project. I hope this will help. http://www.codeproject.com/KB/cs/SMS.aspx

Receive SMS messages by web application

We are building a web app that should be able to receive SMS messages and store the information contained in it in database.
Which methods have you used? Which service providers are out there that can assist?
http://www.clickatell.com/ are massive and it works exactly like it says on the tin. You pay for a phone number and sms messages sent to that end up hitting a URL on your site to deliver them just like someone posting a form.
I'd recommend using a service such as TextMarks. TextMarks is free, and lets you pick a keyword for your service that allows users to route messages to you through TextMarks' shared short code, 41411. The only catch here is that they reserve 20 characters in each message for short advertisements to pay for their services.
If you ever outgrow their ad-sponsored services, you can upgrade to a premium version that doesn't include ads.
Another (cheaper) alternative is to have your users send text messages to an email address like sms#yourapp.com. Then you can have a background thread that's looking at the email account and puts the messages into the database.
I've implemented and tested this approach with major US carriers with everything from smart phones to pay-as-you-go "crappy" phones without a hitch.
When the user sends the SMS to your email address you get the SMS email gateway address (e.g. 8055551234#vtext.net) so you can send response messages.
The only downside is that it's a bit more difficult to find the "send to email address" options on most phones, but it is (basically) free for you. This is especially helpful for reducing costs while testing out workflows. Those ~3 cents for each SMS add up pretty quickly, especially during automated testing.
When you want to support SMS numbers you can configure most SMS gateways to send an email to an address, so you won't have to change your infrastructure to support a "real" SMS messages.
I haven't done it yet, but I guess you could also setup an Asterisk system on your server, then get a regular VOIP acccount (which Asterisk hooks into) and configure the Asterisk server to forward all SMS to your application. This article might help setting up the Asterisk server.
I've had experience using MX Telecom as an SMS Gateway. Essentially they posted data to our web service every time we received an incoming SMS. The application in question was also sending SMS messages as well and we just did an http GET to a web page of theirs.
I can't speak to the business end (i.e. cost), as I was just in charge of implementing the features - but working with an SMS gateway is really very simple from a development perspective.
+1 on sebastian i was jsut writting pretty much the same
if you are working with ruby you might want to have a look at adhearsion
You can use SMS gateway software which will receive SMS messages through a GSM modem or 3G dongle connected to a PC and POST them to your website via HTTP. Eg: this software

How do you handle unsolicited responses (like incoming calls/texts) when handling SMS with a GSM modem?

I've tried to develop a GSM modem library for handling SMS built around system.io.ports.serialport.
It does'nt handle unsolicited responses very well, in particular incoming calls.
I have resorted to sending AT hangup commands for each incoming call, however the unsolicited responses still popup even while you are performing other tasks.
This makes it quite difficult to handle correctly.
You probably want a separate thread that acts as a session handler, with a message queue interface towards the rest of your app. It should wait on inputs from either your application (to initiate a session) or your modem (incoming calls). When it's rebuffing an incoming call, session initiation requests from your application can wait.

Resources