Das Extensible Messaging and Presence Protocol (XMPP) ist ein Internetstandard für XML-Routing und wird für Instant Messaging genutzt.
XMPP unterstützt Funktionen zur Nachrichtenübermittlung, Konferenzen mit mehreren Benutzern, Anzeige des Online-Status, Dateiübertragung und viele weitere Dienste.
Im Jahre 1999 wurde ein Echtzeit Streaming-Protokoll veröffentlicht, mit dem Namen Jabber, die IETF hat 2004 das Protokoll mit einigen Änderungen und mit der Bezeichnung Extensible Messaging and Presence Protocol als Standard verabschiedet.
Die App Engine ünterstützt das Senden und Empfangen von Instant Message Nachrichten von allen XMPP-kompatiblen Applikationen, wie z.B. Gogle Talk oder Spark.
Auf dem lokalen Development Server werden keine Nachrichten verschickt oder empfangen, wodurch ein testen nur live möglich ist.
Um eine XMPP Message zu verschicken wird die Methode send_message() verwendet. Damit man weiss ob der Kommunikationspartner auch online ist existiert die Methode get_presence(), die True zurück gibt wenn der User online und available ist, False wenn der nicht online oder away ist. Als Parameter erwartet die Methode die JID (Jabber-ID) des Users.
jid = "test@googlemail.com"
if(xmpp.get_presence(jid)):
xmpp.send_message(jid, "Send a message")
Mit der Methode send_invite() sendet eine Einladung an den User der mit der JID als Paramter angegeben ist.
Um den Service für eingehende Nachrichten nutzen zu können muss in der Konfigurationsdatei app.yaml der Inbound Service XMPP-Message aktiviert werden. Ob der Service erfolgreich aktiviert ist, kann man unter den Application Settings innerhalb der Admin Console sehen.
Als Standard ist dieser Service nicht gesetzt.
inbound_services: - xmpp_message
Eingehende Nachrichten greifen wie bei den eingenden E-Mails auf einen bestimmten URL zu der dann mit einem entsprechenden Request Handler versehen, was in app.yaml definiert wird.
- url: /_ah/xmpp/message/chat/ script: inchat.py
Ankommende Nachrichten werden wie gewohnt von einem Request Handler verarbeitet, anders als bei eingehenden E-Mails wird der Request Handler von webapp.RequestHandler abgeleitet.
Eine Message Instanz wird mit dem Parameter self.request.POST erstellt. Mit der Instanz ist es dann möglich auf die ankommende Nachricht zu reagieren. Die Eigenschaft body enthält den Inhalt der Nachricht, die man speichern oder auch nach Schlüsselwörtern durchsuchen könnte.
Mit der Methode reply() antwortet man auf die eingehende Nachricht, indem man die Nachricht als String der Methode als Parameter übergibt.
class XMPPHandler(webapp.RequestHandler):
def post(self):
message = xmpp.Message(self.request.POST)
if message.body[0:5].lower() == 'hello':
message.reply("Greetings!")
elif message.body[0:5].lower() == 'hi':
message.reply("Welcome!")
else:
message.reply("Hi my name is App Engine!")
logging.info("Received a chat message from " + message.sender)
application = webapp.WSGIApplication([('/_ah/xmpp/message/chat/', XMPPHandler)],
debug=True)
Damit hat man Möglichkeiten innerhalb der App Engine mit eingehenden und ausgehenden Instant Messages zu arbeiten. Um einen eigenen Chat oder einen Bot zu schreiben.