vrann/fbchatbot

PHP创建Facebook Messenger机器人的框架

dev-master 2016-09-07 11:43 UTC

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 InterfaceBuilder模式的实现。

查看测试以获取更多示例

$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));