INTERFACE AVEC KANNEL

Il peut arriver très souvent de développer une application avec DJANGO qui interagit avec KANNEL . Imaginer que vous développez une  application DJANGO /PYTHON qui utilise KANNEL comme un GateWay .

* La première chose a faire est de vérifier que KANNEL marche sur un serveur

et fait son travail 😉 (envoi  et reçoit des SMS).

* Ensuite créer un serveur qui relaie les  message a Kannel  et qui attend  une notification

* Enfin retourne la notification au client /Browser

Voici le code source d’une interface légère avec KANNEL GateWay 😉

Ce  backend peut etre telecharge a partir de github  voici

un lien  😉

http://github.com/aliounedia/django-thiaakhs/tree/master/supervisors/kannel/

""" Voici  un backend type Kannel pour RAPIDSMS
  * Le client envoie une requete    HTTP vers un serveur
  * Le serveur parse la requete client  et verifie que la requete contient bien  le format
    pour l'envoi de message ( { GET[sender] = 775526745 , GET["message"] =})
    Hello c'est Alioune Dia
  * Le service WEB repond par un statut exemple pour en envoi de SMS accepte  ( 0: Accepted)
  Kannel Backend RAPIDSMS
  Here is a backend for type Kannel RAPIDSMS
  * The client sends an HTTP request to a server
  * The server parses the client request and verifies that the request contains well format for sending messages (
   GET ([sender] =    775,526,745, GET ["message"] =)Hello Alioune Dia's
  * The web service responds with a status for example by sending SMS accepts (0: Accepted)
"""
import urllib
import cgi
import urlparse
from BaseHTTPServer import  BaseHTTPRequestHandler , HTTPServer
from  SocketServer import ThreadingMixIn
class  KannelHandler (BaseHTTPRequestHandler):
	def do_GET(self):
		def respond  (code , msg_text):
		   self.send_response (code)
		   self.end_headers ()

		   if not msg_text :
			msg_text  =self.responses[0]
		   self.wfile.write (msg_text)
		   self.wfile.close()

		parts = urlparse.urlsplit(self.path)
		query_data = cgi.parse_qs (parts[3])
		if query_data.has_key ("to")\
		   and query_data.has_key ("txt"):
			try:
				#Send to Kannel gateway
				output =self.server.send (query_data["to"] ,query_data["txt"])
			except Exception:
				respond  (400 ,"Kannel is not  running" )
			else :
				# Thank  Kannel for handling the message
				respond (200, output)
		else:
			respond (400,"Please send : http//<host>:<port>/?to=<phone>&txt=<msg>")

class ServerProxy(HTTPServer , ThreadingMixIn):
        def __init__(self , (host , port) , handler):
            HTTPServer.__init__(self , (host , port) , handler)
            self.sender  = KannelSender ()

def start ():
     server  = ServerProxy (("localhost" , 8080) , KannelHandler)
     print "Starting the server"
     server.serve_forever()

class  KannelSender:
      """
      * GateWay to Kannel WEB  Service
      * port  :Kannel server's port
      * host  :Kannel server's host
      * charset : chraset
      * coding :  type encoding
      * password : login  to connet to server
      * username : username
      """
      def __init__ (self , host = "localhost" , port =13013 ,
			username ="alioune",  charset ="utf-8" ,
			  password ="enouila" ,coding =2 ):
	 self.host  = "localhost"
	 self.port  =port
	 self.charset =charset
	 self.coding =coding
	 self.username =username
	 self.password =password
      def send (dest_num , msg_text):
	"""
        * Send message to Kannel gateway
        * Return  Stattu of response
        """
	try:
		res = urllib.urlopen(\
		"http://%s:%d/cgi-bin/sendsms?username=\
		%s&password=%s&charset=%s&coding=%s&to=%s&from=&text=%s"\
		% (self.username,\
 		   self.password,\
		   self.charset,\
	           self.coding, \
		   dest_num, msg_text)
		).read()

	except IOError, error:
	     return False

        return res.startswith("0: Accepted")
if __name__=="__main__":
	# Bad URL  : http://localhost:8080/?to=775526745&msg_text=Hello
	# Good URL : http://localhost:8080/?to=775526745&txt=Hello
	# Running the server
        start()
self.wfile.write (msg_text)
self.wfile.close()parts = urlparse.urlsplit(self.path)
query_data = cgi.parse_qs (parts[3])
if query_data.has_key (« to »)\
and query_data.has_key (« txt »):
try:
#Send to Kannel gateway
output =self.server.send (to , txt)
except Exception:
respond  (400 , »Impossible to Relay message to \
Kannel GatewayDid you have a Kannel server Running » )
else :
# Thank  Kannel for handling the message
respond (200, output)

else:
respond (400, »Message should be somethin like \
http://localhost:8080/?to=775526745&msg_text=Hello
« )

class  KannelGateWay:
«  » »
* GateWay to Kannel WEB  Service
* port  :Kannel server’s port
* host  :Kannel server’s host
* charset : chraset
* coding :  type encoding
* password : login  to connet to server
* username : username
«  » »

def start(self):
self.server  = HTTPServer( (« localhost »,8080) , KannelHandler)
print « Starting lightweigh Kannel Interface »
self.server.serve_forever()

def __init__ (self , host = « localhost » , port =13013 ,
username = »alioune »,  charset = »utf-8″ ,
password = »enouila » ,coding =2 ):
self.host  = « localhost »
self.port  =port
self.charset =charset
self.coding =coding
self.username =username
self.password =password

def send (dest_num , msg_text):
«  » »
* Send message to Kannel gateway
* Return  Stattu of response
«  » »
# Ne faite pas ca  , mais je suis presse
# mettre le serveur et le port dans un settings.py

try:
res = urllib.urlopen(\
« http://%s:%d/cgi-bin/sendsms?username=\
%s&password=%s&charset=%s&coding=%s&to=%s&from=&text=%s »\
% (self.username,\
self.password,\
self.charset,\
self.coding, \
dest_num, msg_text)
).read()
# couldn’t connect to kannel
except IOError, error:
return   « Impossible to connect to Kannel Server ,You should have a kannel server running »

print  error.message
return False
return res.startswith(« 0: Accepted »)

if __name__== »__main__ »:
# Run  my Kannel GateWay Backend
s=  KannelGateWay()
#Waiting  An http Request

# Bad URL  : http://localhost:8080/?to=775526745&msg_text=Hello
# Good URL : http://localhost:8080/?to=775526745&txt=Hello
s.start()

Publicités

0 Responses to “INTERFACE AVEC KANNEL”



  1. Laisser un commentaire

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s





%d blogueurs aiment cette page :