知行合一
全部博文(31)
分类: 系统运维
2009-06-11 14:25:23
机器人是wave上面的一个自动化的参与者。它可以读取其加入的wave中的内容,修改wave的内容,添加或删除参与者,并且创建新的blips和新的waves。简而言之,机器人可以做其他任何参与者可以做的事情。
你也可以使用机器人来进行下面的动作:
l 修改wave中的信息
l 与wave中的参与者进行交互
l 与外界进行沟通并将wave中的信息同步到外部或其他的wave
l 访问或修改第三方中的状态(例如数据库)
你能做的事情远远不止列出的这些。随着我们对API能力的扩展,机器人将能够充分利用这些新的特性。
Google wave机器人的开发需要一个合适的客户端库。我们目前有JAVA和Python编程语言的客户端库。
参考此链接你可以获得更多关于其的信息。
机器人(相对于配件来说)可以使用wave wire protocol发送HTTP请求,接收响应来动态的加入wave。你不必详尽地了解这个协议,只需要使用我们提供的java和python客户端库就可以创建和管理你的机器人。
目前,wave支持使用大规模web应用环境Google App Engine来构建机器人。AppEngine使用application.appspot.com web地址来表示web应用程序。当你使用AppEngine创建了机器人,你也就在上定义了一个HTTP接口。当同robot沟通时,wave将使用这个地址(同时这个地址也隐含的定义了一个机器人)。
Java和Python客户端库允许你设计你的机器人而不用担心如何处理和管理个人的HTTP请求。因为这时一个早期的开发版本,代码在将来可能会发生变化。然而,客户端库已经被设计的相当稳定了。如果你希望直接使用wire protocol,那么可以免费使用,但是需要知道的是,这个协议在未来也可能会改变。
使用者(或UI扩展[UI extension])能够像添加任何其他参与者一样将机器人加入wavelet, Engine应用程序ID来作为它的wave参与者地址。例如,如果一个机器人的App Engine应用程序ID是parrotybot,那么这个robot的wave参与者地址就是parrotybot@appspot.com。你可能注意到了,机器人使用类似email地址的方式被添加,但是wave API使用的是HTTP的机制来同robot联系。
Note:对于这个开发前瞻版,所有的wave机器人必须要以google app engine应用程序的方式实现。将来的版本会介绍以任何web host,任何web地址来加入机器人的能力方法。
你可以通过定义你所希望你的机器人被告知的事件来定义它的行为。当这些事件中的某个或某些发生时,wave会去联系机器人,譬如在机器人是其中的参与者的wave中所作的一些变化。机器人在capabilities.xml配置文件中声明其关心的事件,这个文件在机器人第一次添加入wave的时候被wave获取。
一个capabilities.xml文件的例子显示如下:
xml version="1.0"?>
<w:robot xmlns:w="">
<w:capabilities>
<w:capability name="wavelet_participants_changed"/>
w:capabilities>
w:robot>
请注意,这个文件包含了一个由一个或更多的
Capabilities文档不仅仅描述了机器人处理的事件,而且好包含了一些诸如标识机器人为一个wavelet参与者的概括信息,例如它的名字和头像。每一个机器人机器人都要以下面的URL地址来serve它的配置文件。
http://applicationURL/_wave/capabilities.xml
下面的事件是机器人可以订阅的,很重要:
l Wavelet_blip_created 当一个新的wave blip被创建时,该事件发生
l Wavelet_participants_changed 当一个参与者(包含其它的一个机器人)被加入wave或从wave中被删除时,该事件发生
l Wavelet_title_changed 当wavelet标题改变时,该事件发生
l Blip_contributors_changed 当blip的编辑者发生改变时,该事件发生
l Blip_deleted 当一个blip被从wavelet中删除时,该事件发生
l Blip_submitted 当一个blip被提交时,该事件发生。注意:这个事件只有当使用者点击Done或移向另一个blip是才发生。
l Document_changed 在各种间隔中将内容添加进blip时,该事件发生。
除了事件驱动外,机器人还可以通过在配置文件中指定日程来请求wave以有规律的间隔与它进行联系。这些cron事件允许机器人可以不针对wave的改变直接作出响应动作,譬如,由从外部系统带来的新的信息来更新wave这种改变。
注意机器人不恩那个直接的联系wave;它只能对wave相关的时间和cron事件作出响应。
当一个事件发生时,wave使用HTTP的POST方法向机器人应用程序发送HTTP请求(当有人提交一个web表单时使用的也是POST方法)。当联系机器人时,所有的针对wave数据改变的事件要使用下面的URL路径:
http://applicationURL/_wave/robot/jsonrpc
从wave上的该URL发出的每一个请求对于一个单独的wavelet可以封装不止一个的事件。新近的事件可以被一起捆绑。当机器人收到一个事件时,它能够决定是否(怎样)在一个操作中封装响应信息进行响应。
来自wave的web请求包含一个或多个事件的信息。机器人可以携带说明信息来进行响应去更新其属于的任何wave,或是通过wave事件系统中的操作(operations)来创建新的wavelet。
机器人可以在其所在的wavelet上执行操作,也可以创建新的wavelet和wave。被执行的操作不会被机器人报告回那些执行动作的机器人,不过会报告给其他的受到影响的参与者,包括机器人。
操作按照它们被接收的顺序被处理,机器人相对于其他的使用者不会有任何特殊的优先级别。机器人操作被送到wave并且异步地的被执行;不能确保其他的参与者不会在间隔时间执行它们自己的操作。所以,尽量保持你的操作的原子性,并且要理解的是你应用到wave上的操作可能不会立刻被应用。Wave是一个能够记录历史的实体,wave的内容包含它原是的内容加上在数据上发生的累积操作。
Java和Python应用程序客户端库为处理事件和执行操作提供了完整的接口。例如,java事件处理使用web servlet来响应wave请求,将事件数据解析成对象,然后对于每一个事件调用servlet上的一种方法。该方法对代表wave数据模型(wave data model)的对象进行操作产生操作动作(operations)。当方法返回时,servlet将所有的操作动作发送回wave以应用到该数据。
Note:收到的事件数据和发出的操作数据的格式(format)是wave机器人wire protocol的一部分。在本开发前瞻版本的发行期间,wire protocol的细节可能会改变。一旦该协议稳定了,我们将发布详细说明书来描述消息格式。在此期间,你能够使用java和python客户端库来解析事件并产生操作。
机器人还有各种附加到他们上面的元信息。你可以使用下面的HTTP请求向机器人请求信息:
http://applicationURL/_wave/robot/profile
默认的机器人不提供概要信息。为了提供这个信息,在java中,你还必须添加profile servlet到你的应用程序,该程序使用该数据进行响应。在python中,你在机器人初始化时要提供这块的信息。