vrann / fbchatbot
PHP创建Facebook Messenger机器人的框架
Requires
- monolog/monolog: 1.*
Requires (Dev)
- phpunit/phpunit: 5.5.*
This package is not auto-updated.
Last update: 2024-09-14 19:53:02 UTC
README
这是在PHP上创建Facebook Messenger机器人的框架。它提供了注册消息处理器的接口,并允许构建复杂结构的响应消息。它具有HTTP传输适配器,可以直接与Facebook API通信。提供了一个示例回调,作为创建接收Facebook消息的端点的参考。
安装
composer require vrann/fbchatbot
编写消息处理器
创建一个实现MessageGenerator接口的新类。它将接收输入消息的数据结构。应根据上下文做出决策,决定发送什么。然后,使用FluentBuilder构建响应。
Fluent Builder
Fluent builder提供了一种通过方法链构造响应消息的数据结构的方法。通常,方法链被视为领域对象的反模式,而builder是它们完美匹配的例子。builder通常是简单的对象,且不关注数据封装。这是对Fluent Interface的Builder模式的实现。
查看测试以获取更多示例
$messageBuilder = new FluentBuilder();
$messageBuilder->setRecipientId("USER_ID")
->attachment()
->template()
->generic()
->addElement()
->setTitle('Welcome to Peter\'s Hats')
->setImageUrl('http://petersapparel.parseapp.com/img/item100-thumb.png')
->setSubTitle('We\'ve got the right hat for everyone.')
->addButton()
->setUrl('http://petersapparel.parseapp.com/img/item100-thumb.png')
->setTitle('View Website')
->end()
->addButton()
->setTitle('Start Chatting')
->setPostBack('USER_DEFINED_PAYLOAD')
->end()
->end()
->end()
->end()
->build();
处理按钮回调
待定
传输
所有传入的消息都将发送到Facebook注册的回调脚本。库提供了一个示例脚本,可以用作回调。它立即对输入消息做出反应,并调用框架生成和发送响应。对于更健壮的情况,最好使用消息队列中间件并将消息写入队列,而不是立即处理。这将允许扩展和分散回调脚本上的负载。
对于响应消息,框架提供了HTTP传输,它使用结构化消息向Facebook API发送POST请求。同样,消息可以先写入队列,以减轻与Facebook API连接的问题。
回调脚本
为了编写简单的回调脚本,它应该能够接收和处理验证令牌,这是在Facebook上注册脚本的第一步。
例如。
if (!empty($_REQUEST)) {
$logger->addDebug(var_export($_REQUEST ,true));
if (
isset($_REQUEST['hub_verify_token']) &&
isset($_REQUEST['hub_challenge']) &&
$_REQUEST['hub_verify_token'] == $PASS_PHRASE)
{
echo $_REQUEST['hub_challenge'];
die();
}
}
此外,它应该能够获取回调被输入消息触发时的输入体。这里是一个示例
$jsonString = file_get_contents('php://input');
最后,它应该能够处理消息并返回响应。这里有一个使用框架编写的简单Bot示例,该Bot会立即返回输入消息。
$client = new Bot(
new \Vrann\FbChatBot\EchoGenerator(), //Responds back with the text of inbound message
new \Vrann\FbChatBot\Transport\Http( //Send message directly to Facebook API
$ACCESS_TOKEN,
$logger
)
);
$client->react(new \Vrann\FbChatBot\Input($jsonString));