Skip to content

Instantly share code, notes, and snippets.

@mattpr
Forked from pklaus/sms.conf
Last active September 8, 2015 10:02
Show Gist options
  • Save mattpr/39a09d626d65045ffe08 to your computer and use it in GitHub Desktop.
Save mattpr/39a09d626d65045ffe08 to your computer and use it in GitHub Desktop.
Command Line Tool to send an SMS via the Sipgate API found on <http://irq0.org/Code?action=AttachFile&do=view&target=sms.py> on 2008-03-16
/sms.conf.prod
[account]
user: user@domain.com
passwd: foobar
sip_local_uri: sip:4940123456789@sipgate.net
#! /usr/bin/python
# -*- coding: utf-8 -*-
import sys,os
import getopt
import re
import xmlrpclib
from ConfigParser import ConfigParser
IDENT={'ClientName': 'd3media.de sms-tool',
'ClientVersion': '20150908'}
PATH=sys.path[0]
def cli():
# parse commandline
try:
opts, args = getopt.getopt(sys.argv[1:], "hn:t:f:a")
except getopt.GetoptError:
# print help information and exit:
printUsage()
sys.exit(23)
caller_id = None
text = None
ask = False
for o, a in opts:
if o == "-h":
printUsage()
sys.exit()
if o == "-n":
caller_id = a
if o == "-t":
text = a
if o == "-f":
text = readFile(a)
if o == "-a":
ask = True
if not caller_id:
caller_id = raw_input("Caller ID: ")
if not text:
text = ""
line = ""
while line != '.':
line = sys.stdin.readline()[:-1]
text += line + "\n"
# input checks
caller_id = caller_id.strip().replace(" ","").replace("-","").replace("/","")
# convert caller_id to sip_uri
sip_uri = ""
if re.compile("^49[1-9][0-9]*$").match(caller_id):
#print "match ^49[1-9][0-9]*$ "
sip_uri = "sip:%s@sipgate.net" % (caller_id)
elif re.compile("^0[1-9][0-9]*$").match(caller_id):
#print "match ^0[1-9][0-9]*$"
sip_uri = "sip:49%s@sipgate.net" % (caller_id[1:])
elif re.compile("^\+49[1-9][0-9]*$").match(caller_id):
#print "match ^+49[1-9][0-9]*$"
sip_uri = "sip:%s@sipgate.net" % (caller_id[1:])
elif re.compile("^00[1-9][0-9]*$").match(caller_id):
#print "match ^00[1-9][0-9]*$"
sip_uri = "sip:%s@sipgate.net" % (caller_id[2:])
else:
print "Invalid destination number. Exiting."
sys.exit(23)
# open config file
config = ConfigParser()
config.read([os.path.join(PATH,'sms.conf')])
user = config.get('account','user')
passwd = config.get('account','passwd')
sip_local_uri = config.get('account','sip_local_uri')
# open connection
print "going to open connection"
sipgate = initConnection(user, passwd)
print "connection open"
if ask:
print "Really send SMS message?"
print "sip uri:", sip_uri
print "text:\n", text
print
confirm = raw_input("(y/n) ")
if str(confirm) == 'n':
sys.exit(0)
sms(sipgate, sip_uri, text, sip_local_uri)
def readFile(filename):
try:
f = file(filename, 'r')
return f.read()
except IOError:
print "error reading file ..exiting"
sys.exit(23)
def printUsage():
print """
sms.py - simple sms tool for sipgate using xmlrpc
author: Marcel Lauhoff <ml@serious-net.org>
usage:
sms.py [OPTIONS]
when called without args caller id and text is read from commandline
-n <caller_id> destination caller id
-t <text> sms text
-f <filename> file containing sms text
-a ask for confirmation before sending
"""
def sms(rpc_conn, sip_uri, text, sip_local_uri):
result = rpc_conn.samurai.SessionInitiate({'LocalUri': sip_local_uri,
'RemoteUri': sip_uri,
'TOS': 'text',
'Content': text})
if result['StatusCode'] == 200:
print "SMS sent :)"
else:
print "SMS send failed :("
sys.exit(23)
def initConnection(user, passwd):
# open connection
#sipgate = xmlrpclib.ServerProxy("https://%s:%s@samurai.sipgate.net/RPC2" % (user, passwd))
sipgate = xmlrpclib.ServerProxy("https://%s:%s@api.sipgate.net/RPC2" % (user, passwd))
# do identify
result = sipgate.samurai.ClientIdentify(IDENT)
if result['StatusCode'] == 200:
# print "Command ClientIdentify successful"
pass
else:
print "Command ClientIdentify failed.. exiting"
sys.exit(23)
return sipgate
if __name__ == '__main__': cli()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment