I have a web application and I would like to enable real time SMS notifications to the users of the applications.
Note: I currently cannot use the Twitter API because I live in West Africa, and Twitter doesn't send SMS to my country.
Also email2sms is not an option because the mobile operators don't allow that in my country.
There are a couple of options.
Get some kind of SMS modem or connectivity and use your own cell phone using smslib. I am sorry I don't provide python interfaces but my experience is Java. The downside is that you will pay the full consumer rate. And you will have to put a cell phone on your data center.
Connect to SMPP gateway. You will have to talk to the mobile operator in order to make this work. There is a library called jsmpp here. Again, I am sorry it is not python.
If it is too much of a hassle you could use an intermediary, which provides HTTP-SMS gateways, like this one. That's easy because you don't need to use SMPP and your system administrators wont bark at you for putting cell phones in the datacenter.
What about using a proper sms gateway. These guys got APIs for several languages:
http://www.clickatell.com/developers/php.php
There is an unofficial Python API too
http://www.arnebrodowski.de/projects/clickatell/
Another SMS gateway with a Python interface is TextMagic. Their Python API is available from the Google Code project textmagic-sms-api-python. They have libraries available for other languages as well; all wrapping a simple HTTPS API.
Code samples from the project website:
How to send an SMS:
import textmagic.client
client = textmagic.client.TextMagicClient('your_username', 'your_api_password')
result = client.send("Hello, World!", "1234567890")
message_id = result['message_id'].keys()[0]
And retrieve its delivery status:
response = client.message_status(message_id)
status = response[message_id]['status']
(Full disclosure: I am the author of the Python wrapper library)
The easiest way to accomplish this is by using a third party API. Some I know that work well are:
restSms.me
Twilio.com
Clicatell.com
I have used all of them and they easiest/cheapest one to implement was restSms.me
Hope that helps.
I don't have any knowledge in this area. But I think you'll have to talk to the mobile operators, and see if they have any API for sending SMS messages.
You'll probably have to pay them, or have some scheme for customers to pay them. Alternatively there might be some 3rd party that implements this functionality.
Warning: extremely elegant solution ahead! (Android app)
If you want to send SMS to any number in as simple of a manner as sending an e-mail:
mail('configuredEMail#configuredDomain', '0981122334', 'SMS message'); // PHP
or even:
echo 'SMS message' | mail -s '0981234567' configuredEMail#configuredDomain.com
or even from a GUI mail client, then read on.
To skip explanations google Evorion SMS Gateway.
What does it do? It forwards e-mail to SMS with a built-in battery saver.
In order to send an SMS you simply send an email to 'configuredEMail#configuredDomain.com' with Subject 'phoneNumberToForwardTo'.
Code contributions welcome.
If your country is in this list, Twilio is an extremely easy API to use :)
Related
Does anyone know what would go into sending text messages with Python WITHOUT the need for a 3rd party API? What knowledge do I need to have to achieve such a thing? I've only been coding for a few months, so I still consider myself fairly new and there's a lot I don't know about networking. I know there are services like Twilio that offer a python library for sending text messages, but if I wanted to type out my own script, from scratch, what would need to go into it. I'm willing to read some documentation if that's necessary as long as it's not hundreds of pages long. Being as detailed as possible in your response is greatly appreciated. Thanks!
This can be done by sending an email via SMTP to the SMS gateway of the carrier of the recipient phone number. Each carrier has a unique email address usually in the form of {number}#{host}. Within Python, you can use the builtin smptlib (or aiosmtplib) library to send the email. I wrote an example script here to send using GMail.
Please tell me if I did not understand your question correctly, then I will try to improve it or I'll delete it.
Sending an SMS requires something, that can send an SMS. Which is normally not your laptop / PC, except it has a SIM card and a mobile phone modem. So you need a mobile phone or a service, that offers sending SMS if you subscribe / pay.
Most professional available services allow to send an SMS with simple HTTP GET or POST requests, so you don't need a third party python module, but you must connect to a third party web API in most cases the python code is really simple, but first you need an SMS service provider
Some services also allow sending SMS via SMTP (sending emails) which
#acamso adresses in his response
If you have an Android device you could install shellms on it ( https://f-droid.org/en/packages/com.android.shellms/ ) connect it via USB to your PC and use adb to send SMS, which will be billed on your phone's bill / contract.
I am not aware of any SMS service, that is for free, so if you subscribe to an SMS provider it will provide you with an API, that can normally very easily be handled from python.
This might seem a lame question, but would be great if someone can help. I wrote a small python script which returns some output based on a command sent to it via slack's custom bot. Python script uses RTM API. Whenever someone in slack mentions the bot and passes a command (ex: #slackcustombot foobar), it returns a custom message(ex: Hi foobar) from the script. Now the issue is at the security side. My script resides at a server which is not open to internet. And as Slack uses dynamic IP, there's no possibility of white-listing the slack ip's.
So basically, all I wanted to know is, when someone in slack channel mentions the bots, and when the bot at slack server sends the command to my python script residing at my server, does it send as GET method or as POST method? cuz if it's a GET method, I might not have to worry about the security issue. but if it sends as POST method, what alternative I could use in this scenario? Any help is appreciated. Please correct me if I am wrong somewhere, still learning. :)
Regards,
Junaid.
Neither. It uses the WebSocket protocoll. If you rather want to use a HTTP-based protocol I would recommend looking into the Slack's Event API. It uses HTTPS POST to transfer messages to your bot.
The Events API is not providing all event types that are available with the RTM API, but its much easier to handle and should be sufficient for a chat bot. Check here for a documentation of which event types are available to the both RTM API and Events API.
You will however need to find a way to expose the url of your bot to the Internet, so that Slack can use it. If you need to access internal company applications through your Slack bot, the best approach in my opinion is to have the Slack bot on a webserver in the DMZ of your company.
A more small scale approach is to use a forwarding provider that is connecting to your local webserver through a VPN tunnel and exposing your internal webserver through a special public URL. That would work if you want Slack to talk to your webserver on a local network behind a router / firewall. One example is ngrok, but they are other providers too.
So I'm kind of stuck. I'm trying to implement Twilio ip messaging for our app and I'm not sure I'm finding what I need in the docs.
From what I see as examples - the only things that the backend is responsible for is the credential generation - something I have done.
Should the backend also not somehow facilitate the message sending and conversation generation?
Any useful information/documentation links/tutorial links would be much appreciated.
Twilio developer evangelist here.
The message sending and conversation generation can all be done through the client libraries, either the JavaScript or iOS (or, coming soon, Android) SDKs. That way, other than the credential generation as you pointed out, your servers don't need to be responsible for the rest of the chat application.
You can, if you choose, send messages from your own server too. Check out the documentation on the IP Messaging REST API.
If you want your server to interact with messages sent by the client libraries you can also subscribe to webhooks for IP Messaging too.
Let me know if this helps at all.
Is there an API which allows me to send a notification to Google Hangout? Or is there even a python module which encapsulates the Hangout API?
I would like to send system notification (e.g. hard disk failure reports) to a certain hangout account. Any ideas, suggestions?
Hangouts does not currently have a public API.
That said, messages delivered to the Google Talk XMPP server (talk.google.com:5222) are still being delivered to users via Hangouts. This support is only extended to one-on-one conversations, so the notification can't be delivered to a group of users. The messages will need to be supplied through an authenticated Google account in order to be delivered.
There is pre-alpha library for sending hangouts messages on python:
https://pypi.python.org/pypi/hangups/0.1
The API have been reverse engineered and is not published (as someone posted in comments). Thus it might change a Google's will.
Also, messages sent using XMPP ceased to be delivered to Hangouts users. I guess this is another cut (of the thousand scheduled).
I send alarms and other notifications with a python script (failures on database server, partitions without free space, etc), using hangouts. It's easy. Look at http://www.administracion-linux.com/2014/07/enviar-mensajes-por-hangout-desde.html to send hangouts.
I have to develop an application where I need to send SMS to the users on a particular action by the users.
I have heard of kannel with PHP, is there some help for the same in Python as well or is there any other better open source sms gateway which I can use with my application?
Please suggest.
Thanks in advance.
Typically you would use normal HTTP GET or POST requests against an SMS Gateway, such as Clickatell and many many others.
Twilio (where I work) has an OSS Python helper library which makes working with their SMS service really easy.
I was struggling with this for some time and really liked the Twilio option. But then I dug deeper and found that there is a Google Voice API called pygooglevoice that works. Clean, easy... No carrier lookup... For example, set up a virtualenv and install with pip:
pip install pygooglevoice
Then use something like this:
from googlevoice import Voice
from googlevoice.util import input
def send(number, message):
user = 'user#gmail.com'
password = 'password'
voice = Voice()
voice.login(user, password)
#number = input('Number to send message to: ') # use these for command method
#message = input('Message text: ')
voice.send_sms(number, message)
Please note that I have done limited testing with this so I'm not sure all the pros and cons. It's quite possible that there are limitations I haven't discovered yet. But in the time I've played around with it, I've been happy.
[Update] Since the email based solution won't work for you, check out Twilio. Clean APIs, and I hear good things about them.
If you know the carrier the user is on it might be easiest to use the email-to-sms services provided by just about all of the mobile carriers. Here's an article on addresses for many providers.
If that works for you (eg. if you know the number/carrier beforehand or you can ask the user for the carrier as well as their number), then all you have to do is send email to the appropriate address and it'll be sent as an SMS to the user.
Take a look at django-smsgate (BSD licensed) application for working with SMS through SMS gateways.
I just wrote a basic Twilio demo app using Django, which sends SMS messages to users and also processes the SMS responses. I posted the code to github and wrote some explanatory blog posts.
The top level post is here but you can just grab all the code from GitHub. Note that my particular example uses LinkedIn for authentication, but the second and third blog posts cover twilio specific methods. That way you can see if this is an option that'll work for you.
Hope this helps :-)