XMPP应用:用Google App Engine搭建聊天机器人

标签:Google App Engine, Python

今天Google App Engine SDK 1.2.5的发布,带来了XMPP这个好玩的API,于是我立刻拿来尝鲜了。

API其实非常简单,主要是要了解XMPP是什么。但我懒得解释了,感兴趣的就去Google一下或看这几篇XMPP正式RFC标准文档吧。
由于Google Talk是基于这个协议的,而且GAE的XMPP API专门提供了在线查询功能,所以自然就用它了。

懒得过多介绍原理,所以大家自己看文档吧:PythonJava
我只对Python感兴趣,因此下面的代码都是Python环境的。

首先是app.yaml的配置,得加上这行代码来启用XMPP支持:
inbound_services:
- xmpp_message

接着为XMPP的接收添加一个handler:
- url: /_ah/xmpp/message/chat/ # 只要包含这个地址即可,例如/.*也是可以的,但那就必须自己在程序里处理路径了
  script: chat.py # 这个也是自己定义的,你也可以起诸如xmpp.py的文件名

再根据上面的配置,创建一个chat.py:
from google.appengine.api import xmpp
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app

class XMPPHandler(webapp.RequestHandler):
  def post(self):
    message = xmpp.Message(self.request.POST)
    message.reply(message.body)

application = webapp.WSGIApplication([('/_ah/xmpp/message/chat/', XMPPHandler)])

def main():
  run_wsgi_app(application)

if __name__ == "__main__":
  main()
然后将这个应用部署到GAE上去,服务器端就搭建好了。

客户端就更简单了,只需要启动Google Talk,把正确的联系人添加上去,就可以聊天了。
由于我的应用程序id是keakon,所以我把keakon@appspot.com加为好友,便可以开始聊天了:


目前这个应用非常简单,就是你说什么,机器人就回什么。其他功能就自己去开发吧。

顺便介绍一个隐藏的API,因为文档中没有介绍。
这个东西是google.appengine.ext.webapp.xmpp_handlers,它里面有个CommandHandler类,可以替代webapp.RequestHandler。但必须自己改写message_received、text_message等方法。
它的作用就是提供了命令与参数,让你在和聊天机器人对话时,可以使用命令。
详细情况自己看看源码的注释吧,我去给这个应用加点好玩的东东~

7条评论 你不来一发么↓ 顺序排列 倒序排列

    向下滚动可载入更多评论,或者点这里禁止自动加载

    想说点什么呢?