qiuxiang / webot
This package is abandoned and no longer maintained.
No replacement package was suggested.
wechat robot
v0.1.0
2014-06-19 08:29 UTC
Requires
- php: >=5.3.0
- qiuxiang/wechat: 0.2.*
- symfony/yaml: 2.4.*
Requires (Dev)
- phpunit/phpunit: 4.1.*
This package is not auto-updated.
Last update: 2022-04-02 02:54:45 UTC
README
Webot 旨在提供简单的方式搭建灵活的、易于扩展的微信公众平台,其灵感来自于 weixin-robot。
基本用法
$webot = new Wechat\Webot('token'); // 建立 hello => world 规则 $webot->rules->add('hello', 'world'); // 使用正则表达式 $webot->rules->add('(c|course).*(\d+)', 'some course'); // 如果 handler 是数组,则随机回复一条消息 $webot->rules->add('rand', array('1', '2', '3')); // 订阅事件处理 $webot->on('event.subscribe', function ($depends) { $depends->response->->text('welcome'); }); $webot->run();
添加规则
rules->add(string $pattern, mixed $handler)
回复更多形式的消息
// 回复单图文消息 $webot->rules->add('what', array('news' => array( 'title' => '标题', 'content' => '描述', 'picture' => 'http://example.com/picture.jpg', 'url' => 'http://example.com', ))); // 回复多图文消息 $webot->rules->add('what', array('news' => array( array( 'title' => '标题1', 'picture' => 'http://example.com/picture1.jpg', 'url' => 'http://example.com/1', ), array( 'title' => '标题2', 'picture' => 'http://example.com/picture2.jpg', 'url' => 'http://example.com/2', ), ));
使用函数进行处理
// 回复文本消息 $webot->rules->add('hello', function () { return 'world'; }); // 回复图文消息 $webot->rules->add('what', function () { return array( 'news' => array( 'title' => '标题', 'content' => '描述', 'picture' => 'http://example.com/picture.jpg', 'url' => 'http://example.com', ) ); }); // 当 pattern 为正则表达式时,matchs 会作为函数的参数传入 $webot->rules->add('(1)+(2)', function ($matchs) { return $matchs[1] + $matchs[2]; // 3 });
从 PHP、YAML 或 JSON 文件加载规则
$webot->rules->loadPhp('rules.php'); $webot->rules->loadJson('rules.json'); $webot->rules->loadYaml('rules.yml'); // 同时加载多个文件 $webot->rules->loadJson(array( 'rules1.json', 'rules2.json', )); // glob 表达式 $webot->rules->loadYaml('rules/yaml/*.yml');
rules.php
<?php return array( 'pattern' => 'h1', 'test' => array( 'news' => array( 'title' => 'hello', 'content' => 'world', ), ), 'p(.*)3' => function () { return 'hello'; } );
rules.json
{ "hello": "world", "hi": ["a", "b"] }
rules.yml
c(\d+): h1 good: news: title: 标题 content: 描述 y3: - a - b - c
菜单事件处理
菜单事件的处理方式与文本规则一样,只不过 $pattern
为定值的 EventKey
,并且与 $rules
区分使用 $menus
$webot->$menus->add('新闻', array('news' => array( array( 'title' => '标题1', 'picture' => 'http://example.com/1.jpg', 'url' => 'http://example.com/news/1', ), array( 'title' => '标题2', 'picture' => 'http://example.com/2.jpg', 'url' => 'http://example.com/news/2', ), ))); $webot->$menus->loadPhp('menus.php');
事件处理
on(string $hook, callable $callback)
$callback 会以对象形式传入依赖,其中包含了请求信息(request),和回复函数(reponse)
支持的事件列表:
- init - 初始化时运行
- event - 收到事件消息
- event.click - 菜单点击事件
- event.subscribe - 订阅事件
- event.unsubscribe - 取消订阅事件
- text - 收到文本消息
- image - 收到图片消息
- unknown.message - 未知的消息类型
- unknown.event - 未知的事件类型
$webot->on('event.click', function ($depends) { // $request->eventKey 事件代码 // $request->fromUserName 用户 OpenID $depends->response->text('hello'); });