- PHP фреймворк для создания чат-ботов
- Основан на компонентах "The PHP League", "Symfony" и др.
- PHP 7.1 с использованием return types
- Система диалогов
- Асинхронная отправка сообщений
- Драйвера
- Dependency Injection
- Filesystem, Cache, Queue
- Toolbelt
➜ / composer create-project fondbot/fondbot bot
Installing fondbot/fondbot (v1.0.1)
- Installing fondbot/fondbot (v1.0.1): Loading from cache
Created project in bot
> php -r "file_exists('.env') || copy('.env.example', '.env');"
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 63 installs, 0 updates, 0 removals
- Installing ...
Writing lock file
Generating autoload files
- Service Providers
- Environment Variables (.env)
- Все диалоги поделены на "Intent" и "Interaction"
- Intent - желание пользователя и реакция бота на него
- Interaction - взаимодействие с пользователем
➜ bot php bin/toolbelt make:intent Weather
[OK] Intent created.
class WeatherIntent extends Intent
{
public function activators(): array
{
return [
$this->exact('/weather'),
];
}
public function run(ReceivedMessage $message): void
{
// Send reply to user, jump to interaction or do something else...
}
}
class WeatherIntent extends Intent
{
public function activators(): array
{
return [
$this->exact('погода'),
$this->exact('погода на сегодня'),
];
}
public function run(ReceivedMessage $message): void
{
// Получаем данные
$guzzle = new Client;
$response = $guzzle->get('...');
$response = json_decode((string)$response->getBody());
// Отправляем пользователю результат
$this->sendMessage($response->weather->description);
}
}
- Exact - точное совпадение текста
- Contains - содержит одно из значений (слов)
- Pattern - регулярное выражение
- InArray - одно из значений
- WithAttachment - в сообщении есть файл, возможно с заданным типом
➜ bot php bin/toolbelt make:interaction AskCity
[OK] Interaction created.
class AskCityInteraction extends Interaction
{
public function run(ReceivedMessage $message): void
{
// Здесь можно задать вопрос пользователю, показать клавиатуру или сделать что-то еще…
}
public function process(ReceivedMessage $reply): void
{
// Обработать ответ пользователя на то, что было задано в методе “run”.
}
}
public function run(ReceivedMessage $message): void
{
$keyboard = (new Keyboard);
foreach ($this->cities as $city) {
$button = (new Keyboard\ReplyButton)->setLabel($city);
$keyboard->addButton($button);
}
$this->sendMessage(
'В каком городе тебя интересует погода?',
$keyboard
);
}
public function process(ReceivedMessage $reply): void
{
if(!in_array($reply->getText(), $this->cities)) {
$this->sendMessage('Извини, я не знаю погоду в этом городе.');
return;
}
// Получаем данные
$guzzle = new Client;
$response = $guzzle->get('...');
$response = json_decode((string)$response->getBody());
// Отправляем пользователю результат
$this->sendMessage($response->weather->description);
}
- Перезапустить Intent или Interaction
$this->restart();
- “Прыгнуть” в Interaction
$this->jump();
- Сохранить данные в контекст
$this->remember('key', 'value');
- Получить данные из контекста
$this->context('key');
➜ bot php bin/toolbelt driver:list
+----------------+------------------------+----------+
| Name | Package | Official |
+----------------+------------------------+----------+
| telegram | fondbot/telegram | ✅ |
| facebook | fondbot/facebook | ✅ |
| vk-communities | fondbot/vk-communities | ✅ |
+----------------+------------------------+----------+
➜ bot php bin/toolbelt driver:install telegram
Installing driver...
[OK] Driver installed.
class ChannelServiceProvider extends BaseChannelServiceProvider
{
public function channels(): array
{
return [
'telegram' => [
'driver' => 'telegram',
'token' => env('TELEGRAM_TOKEN'),
],
];
}
}
➜ bot php bin/toolbelt channel:list
+----------+----------+--------------------+
| Name | Driver | Route |
+----------+----------+--------------------+
| telegram | telegram | /channels/telegram |
+----------+----------+--------------------+
- Constructor Injection
- Хелпер
resolve
resolve(FondBot\Contracts\Cache::class);
- Файловая система
- Все адаптеры Flysystem (http://flysystem.thephpleague.com)
- Кэш (Cache)
- Filesystem
- Очереди (Queue)
- Синхронные - SyncAdapter
- Beanstalkd - BeanstalkdAdapter
➜ bot php bin/toolbelt
FondBot 1.0.5
Usage:
command [options] [arguments]
Options:
...
Available commands:
log Tail log
channel
channel:list List all channels
driver
driver:install Install driver
driver:list Get list of all available drivers
make
make:intent Create a new intent class
make:interaction Create a new interaction class
queue
queue:worker Run queue worker
——-
- Переработаны драйвера
- PSR-6 (Caching)
- PSR-7 (HTTP Message Interfaces)
- Собственная реализация Asset Discovery
- Slack, Viber
- Система событий (Events)
- Каталог ботов
- Аналитика (Chatbase, Botan.io, FondBot Analytics)
- Конструктор диалогов
- Хелперы для тестов
- Интеграция с фреймворками (Laravel, Symfony и др.)
- Slack: https://fondbot.signup.team
- Email: [email protected]
- Telegram: https://t.me/vladimiryuldashev
- GitHub: https://github.com/fondbot/fondbot
- Сайт: https://fondbot.com
- Документация: https://docs.fondbot.com