Google App Engine でのxmppアプリその2。
今度は、メッセージを受信して、返信する機能を実装してみる。
作ってみたら、アプリ側から送信するよりも、受信してリプライする方が圧倒的に簡単だった。
注意点はapp.yamlにxmpp受信をするための定義が必要になる。それ以外は普通のwebアプリのpostと似たような感じで記述するだけだった。
app.yamlに次のような記述が必要
application: civic-site
version: 1
runtime: python
api_version: 1
handlers:
- url: /_ah/xmpp/message/chat/
script: xmpp-test.py
inbound_services:
- xmpp_message
URLの定義は、普通のwebappと同じような感じだが、URLは専用の/_ah/xmpp/message/chat/になる。(末尾の/を忘れないように)
あと、xmpp受信のための設定として、inbound_servicesという設定が必要になる。
アプリの方はとてもシンプル。前回の送信よりもシンプルだ。
#!-*- coding:utf-8 -*-
import wsgiref.handlers
import logging
from google.appengine.ext import webapp
from google.appengine.api import xmpp
class XmppRecvSend(webapp.RequestHandler):
def post(self):
message = xmpp.Message(self.request.POST)
message.reply("Hello World! - " + message.body)
def main():
application = webapp.WSGIApplication(
[
('/_ah/xmpp/message/chat/', XmppRecvSend)
], debug=True)
wsgiref.handlers.CGIHandler().run(application)
if __name__ == "__main__":
main()
アプリケーションをマッピングするURLを先ほどの/_ah/xmpp/message/chat/とする。
アプリはpostで動作するCGIみたいに書くことができる。
POSTされたデータから、xmlpp.Messageオブジェクトを生成し、あとはそれを解析したり、replyをするだけで返答することができる。簡単。
受信返信アプリは、開発用サーバーでも動作確認することができる。
development consoleにXMPPという機能があるので、ここからbotアカウント宛に送信する。(app-id)@appspot.com。
botアカウントは、(anything)@(app-id).appspotchat.comの形式でいくつも定義することができるが、どこに送っても全部動くようだ。アプリ側で分岐するの?それでいいの?
これで、このbotアカウントに対して話しかけると、メッセージを”Hello World! – ” を付けてオウム返ししてきます。仕組み自体はこれだけです。あとはbotにどんなことをさせるのか、アイデアを出していきましょう。