donmarkus/chatbot

此软件包使您能够轻松地用PHP开始构建聊天机器人

v1.0 2017-03-02 16:24 UTC

This package is not auto-updated.

Last update: 2024-09-18 20:49:45 UTC


README

此软件包使您能够轻松地用PHP开始构建聊天机器人。

Software License GitHub version

如果您想用PHP开始构建聊天机器人,那么这个模板是一个完美的起点。它包括您需要知道的一切,以将您的应用程序连接到消息平台。您将找到简单的示例来回复聊天消息。(目前仅支持Facebook Messenger)

此外,此模板还支持如 api.aiwit.ai 这样的聊天机器人平台。这将帮助您处理和理解用户的意图。

此软件包使用 PSR-1PSR-2,如果您注意到合规性疏忽,请通过拉取请求发送补丁。

要求

  • = PHP 7

  • Composer

支持的聊天平台

  • Facebook Messenger
  • 更多即将到来

涵盖

  • 创建FB聊天应用
  • 创建FB页面
  • 设置Chatbot PHP模板
  • 创建webhook
  • 将Facebook应用连接到Facebook页面

未涵盖

  • 如何使用api.ai
  • 如何使用wit.ai

安装

创建FB页面

首先登录Facebook,并在创建Facebook页面。页面不需要是公开的。选择最适合您的聊天机器人的设置,但测试时并不重要。

创建FB聊天应用

转到开发者应用页面。点击“添加新应用”并填写基本应用字段。

Image of Facebook app creation

在“产品设置”页面选择聊天机器人并点击“开始”。

Image of the app product setup

现在我们需要创建一个令牌,以便我们的应用能够访问我们的Facebook页面。选择创建的页面,授予权限并复制生成的令牌。我们稍后会用到它。

Image of the token creation

设置Chatbot PHP模板

首先克隆仓库并删除现有的git文件夹。

git clone https://github.com/donmarkus/chatbot-php-boilerplate.git chatbot-boilerplate
cd chatbot-boilerplate
rm -rf .git

现在我们需要安装Composer依赖项

composer install

此模板使用.env文件(环境)。所有敏感数据,如密钥,都存储在此处。此文件应列入您的.gitignore文件。这是因为这些数据不应包含在您的存储库中。此外,您能够在不同的环境中使用不同的密钥。(例如,在本地环境中使用测试聊天机器人平台帐户)

在此模板中包含了一个名为.env.example的示例文件。将其重命名以使用它。

mv .env.example .env

接下来查看此文件。目前有两个值需要考虑。第一个是WEBHOOK_VERIFY_TOKEN,这是一个您可以在此处定义的令牌。现在填写一些内容,我们稍后会用到它。第二个值是PAGE_ACCESS_TOKEN,这是我们之前从聊天机器人应用中获得的。在此处填写它。完美!

为聊天机器人应用创建webhook

在我们的PHP应用程序中,我们需要有一个webhook。这意味着一个公开的URL,Facebook可以与之通信。每次用户在FB聊天中写入消息时,FB都会将其发送到该URL,这是进入我们PHP应用程序的入口点。在此模板中,它是index.php文件。

因此,我们需要指向index.php文件的公开URL,这里有两个选项供您选择。

使其生效(独立)

如果您有服务器,可以将代码推送到那里,您将拥有对它的公共访问权限。URL可能看起来像这样:https://yourserver.com/chatbot/examples/index.php

本地执行

测试时,如果您不需要将每个更改推送到实时服务器以进行测试,那就简单多了。这就是我为什么使用本地公共URL的原因。现在有多个服务可以生成指向您本地服务器的公共URL。请查看ngrok,或者使用Laravel Valet Sharing,这是我的选择,因为我已经在使用Valet。 (Laravel Valet也是在底层使用ngrok)

无论您如何操作,只需确保有一个指向index.php文件的公共安全URL。 (https!) 这是我的URL:https://7def2gH4.ngrok.io/examples/index.php

将Facebook应用连接到您的应用程序

现在我们需要设置webhook。回到您的Facebook应用设置,在Webhooks部分点击设置Webhooks

Image of Facebook app webhook setup

填写公共URL,从.env文件中的WEBHOOK_VERIFY_TOKEN,勾选所有订阅字段,然后点击验证并保存

Image of Facebook app webhook infos

如果您一切操作正确,那么现在您已经有了正在运行的webhook。如果不正确,您将在webhook URL字段看到错误图标。这通常是因为URL或令牌不正确。

将Facebook应用连接到Facebook页面

现在,安装的最后一步将确保我们的Facebook应用已连接到Facebook页面。为此,您的Webhooks设置页面中有一个下拉菜单。在这里选择您的页面,然后点击订阅

Image of Facebook app webhook select page to subscribe to

测试它

所以我们最终可以测试整个设置。转到您的Facebook页面,点击消息按钮以发送消息。键入Hi并按回车键。现在您应该看到这个回答:Define your own logic to reply to this message: Hi

Image showing your first chatbot response

如果您看到这个,那么恭喜您。您成功了!您已成功安装了Chatbot PHP样板,并收到了您的第一条回复。

如果您没有收到回复,那么可能出了点问题 =( 检查您服务器的日志文件以获取更多信息。此外,您还可以使用内置的Monolog Logger来调试应用程序。

用法

示例1:静态消息

在您的index.php文件中,您会找到这样一行代码

$replyMessage = $chatbotHelper->getAnswer($message);

在这里,用户的消息被用来获取一个答案。在这种情况下,消息在ChatbotAi方法的getAnswer中进行分析。它只是返回带有原始消息的静态文本。如以下所述,您可以定义自己的逻辑来响应消息。也常用PHP的preg_match函数在消息中查找单词。在这个例子中,如果消息包含hiheyhello,该方法将返回一些问候文本。

示例2:外汇汇率

这里使用公共API向用户返回外汇汇率。用户可以输入货币如EURUSDCHF等。这是一个简单的例子,但可以看到如何处理外部API。

Image showing the rates example

示例3:使用机器人平台

机器人平台可以帮助您分析用户消息的意图。目前仅支持api.aiwit.ai

API.ai

要使用api.ai,您只需将参数apiapi添加到getAnswer方法中。在您的index.php文件中也有一个示例。

// Example 3: If you want to use a bot platform like api.ai try
// Don't forget to provide your api.ai token in the .env file
$replyMessage = $chatbotHelper->getAnswer($message, 'apiai');

Wit.ai

要使用wit.ai,您只需将参数witai添加到getAnswer方法中。在您的index.php文件中也有一个示例。

// Example 4: If you want to use a bot platform like wit.ai
// Don't forget to place your Wit.ai Client access token in the .env file (WITAI_TOKEN)
$replyMessage = $chatbotHelper->getAnswer($message, 'witai');

Wit.ai将分析用户的消息。此示例实现将仅发送用户的意图。

完整示例 examples/index.php

<?php

use DonMarkus\ChatbotHelper;

require_once __DIR__ . '/../vendor/autoload.php';

// Create the chatbot helper instance
$chatbotHelper = new ChatbotHelper();

// Facebook webhook verification
$chatbotHelper->verifyWebhook($_REQUEST);

// Get the fb users data

$senderId = $chatbotHelper->getSenderId();

if ($senderId && $chatbotHelper->isMessage()) {

    // Get the user's message
    $message = $chatbotHelper->getMessage();

    // Example 1: Get a static message back
    $replyMessage = $chatbotHelper->getAnswer($message);

    // Example 2: Get foreign exchange rates
//     $replyMessage = $chatbotHelper->getAnswer($message, 'rates');

    // Example 3: If you want to use a bot platform like api.ai
    // Don't forget to place your Api.ai Client access token in the .env file
//     $replyMessage = $chatbotHelper->getAnswer($message, 'apiai');

    // Example 4: If you want to use a bot platform like wit.ai
    // Don't forget to place your Wit.ai Client access token in the .env file (WITAI_TOKEN)
    // $replyMessage = $chatbotHelper->getAnswer($message, 'witai');

    // Send the answer back to the Facebook chat
    $chatbotHelper->send($senderId, $replyMessage);

}

Image showing the response with wit.ai

当然,您需要在Wit.ai应用程序中添加一个故事,如下所示

Image showing the story of wit.ai

包含的包

特别感谢

许可证

MIT许可证(MIT)。