nhanchaukp / zalo-bot-sdk
Zalo Bot SDK for Laravel - A comprehensive SDK for building Zalo Bots
Requires
- php: ^8.2
- guzzlehttp/guzzle: ^7.8
- illuminate/contracts: ^10.0||^11.0||^12.0
- illuminate/support: ^10.0||^11.0||^12.0
- spatie/laravel-package-tools: ^1.16
Requires (Dev)
- larastan/larastan: ^2.9||^3.0
- laravel/pint: ^1.14
- nunomaduro/collision: ^8.1.1||^7.10.0
- orchestra/testbench: ^10.0.0||^9.0.0||^8.22.0
- pestphp/pest: ^3.0
- pestphp/pest-plugin-arch: ^3.0
- pestphp/pest-plugin-laravel: ^3.0
- phpstan/extension-installer: ^1.3||^2.0
- phpstan/phpstan-deprecation-rules: ^1.1||^2.0
- phpstan/phpstan-phpunit: ^1.3||^2.0
This package is auto-updated.
Last update: 2025-08-28 14:30:03 UTC
README
Một SDK mạnh mẽ và dễ sử dụng để xây dựng Zalo Bot trên Laravel. Package này được thiết kế với cấu trúc tương tự như Telegram Bot SDK, giúp việc phát triển và bảo trì trở nên đơn giản.
Tính năng
- ✅ Hỗ trợ nhiều bot cùng lúc
- ✅ Hệ thống command mạnh mẽ và mở rộng
- ✅ Cấu hình linh hoạt và dễ dàng
- ✅ HTTP Client tùy chỉnh (mặc định sử dụng GuzzlePHP)
- ✅ Laravel Facade hỗ trợ
- ✅ Webhook handling
- ✅ Command groups và shared commands
- ✅ Auto-discovery commands
- ✅ Exception handling
Cài đặt
Bạn có thể cài đặt package qua Composer:
composer require nhanchaukp/zalo-bot-sdk
Publish Config
Publish file config để tùy chỉnh:
php artisan vendor:publish --tag="zalo-bot-config"
Hoặc:
php artisan vendor:publish --provider="NhanChauKP\ZaloBotSdk\ZaloBotServiceProvider" --tag="config"
Cấu hình
Biến môi trường
Thêm các biến sau vào file .env
:
ZALO_BOT_TOKEN=your-zalo-bot-token ZALO_WEBHOOK_URL=https://yourapp.com/webhook/zalo ZALO_BASE_BOT_URL=https://bot-api.zapps.me/bot ZALO_ASYNC_REQUESTS=false
Cấu hình nhiều bot
Trong file config/zalo-bot.php
:
'bots' => [ 'default' => [ 'token' => env('ZALO_BOT_TOKEN'), 'webhook_url' => env('ZALO_WEBHOOK_URL'), 'commands' => [ // App\ZaloBots\Commands\StartCommand::class ], ], 'support_bot' => [ 'token' => env('ZALO_SUPPORT_BOT_TOKEN'), 'webhook_url' => env('ZALO_SUPPORT_WEBHOOK_URL'), 'commands' => [ // App\ZaloBots\Commands\SupportCommand::class ], ], ], 'default' => 'default', // Bot mặc định
Sử dụng cơ bản
Gửi tin nhắn
use NhanChauKP\ZaloBotSdk\Facades\ZaloBot; // Sử dụng bot mặc định ZaloBot::sendMessage('chat_id', 'Xin chào!'); // Sử dụng bot cụ thể ZaloBot::bot('support_bot')->sendMessage('chat_id', 'Chúng tôi có thể giúp gì?');
Gửi hình ảnh
ZaloBot::sendPhoto('chat_id', 'https://example.com/image.jpg', 'Caption cho hình ảnh');
Gửi sticker
// Lấy sticker từ https://stickers.zaloapp.com/ ZaloBot::sendSticker('chat_id', 'sticker_id_from_stickers_zaloapp_com');
Hiển thị trạng thái (sendChatAction)
Tham khảo tài liệu: https://bot.zapps.me/docs/apis/sendChatAction/
use NhanChauKP\ZaloBotSdk\Enums\ChatAction; // Đang soạn tin nhắn ZaloBot::sendChatAction('chat_id', ChatAction::Typing); // Đang tải ảnh (sắp ra mắt) ZaloBot::sendChatAction('chat_id', ChatAction::UploadPhoto);
Webhook
// Set webhook ZaloBot::setWebhook('https://yourapp.com/webhook/zalo'); // Xóa webhook ZaloBot::deleteWebhook(); // Lấy thông tin webhook $webhookInfo = ZaloBot::getWebhookInfo();
Tạo Commands
Tạo Command class
<?php namespace App\ZaloBots\Commands; use NhanChauKP\ZaloBotSdk\Commands\Command; use NhanChauKP\ZaloBotSdk\ZaloBot; class StartCommand extends Command { protected string $name = 'start'; protected string $description = 'Bắt đầu cuộc trò chuyện'; protected array $aliases = ['begin']; public function handle(array $update, ZaloBot $bot): mixed { return $this->reply($update, $bot, 'Xin chào! Chào mừng bạn đến với bot của chúng tôi.'); } }
Đăng ký Commands
Trong config file:
'commands' => [ App\ZaloBots\Commands\StartCommand::class, App\ZaloBots\Commands\HelpCommand::class, ],
Hoặc đăng ký động:
ZaloBot::addCommand(App\ZaloBots\Commands\StartCommand::class); ZaloBot::addCommands([ App\ZaloBots\Commands\StartCommand::class, App\ZaloBots\Commands\HelpCommand::class, ]);
Command Groups
'command_groups' => [ 'admin' => [ App\ZaloBots\Commands\AdminStartCommand::class, App\ZaloBots\Commands\AdminStatsCommand::class, ], 'user' => [ App\ZaloBots\Commands\UserProfileCommand::class, App\ZaloBots\Commands\UserSettingsCommand::class, ], ], // Sử dụng groups trong bot 'bots' => [ 'admin_bot' => [ 'token' => env('ZALO_ADMIN_BOT_TOKEN'), 'commands' => [ 'admin', // Sử dụng command group ], ], ],
Shared Commands
'shared_commands' => [ 'help' => App\ZaloBots\Commands\HelpCommand::class, 'start' => App\ZaloBots\Commands\StartCommand::class, ], // Sử dụng trong bot 'bots' => [ 'default' => [ 'commands' => [ 'help', // Shared command 'start', // Shared command ], ], ],
Xử lý Webhook
Tạo Controller
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use NhanChauKP\ZaloBotSdk\Facades\ZaloBot; class ZaloWebhookController extends Controller { public function handle(Request $request) { $update = $request->all(); try { $result = ZaloBot::processUpdate($update); return response()->json(['status' => 'ok']); } catch (\Exception $e) { \Log::error('Zalo webhook error: ' . $e->getMessage()); return response()->json(['status' => 'error'], 500); } } }
Route
// routes/web.php hoặc routes/api.php Route::post('/webhook/zalo', [ZaloWebhookController::class, 'handle']);
Command nâng cao
Command với tham số
class WeatherCommand extends Command { protected string $name = 'weather'; protected string $description = 'Xem thời tiết của thành phố'; protected array $arguments = [ 'city' => 'Tên thành phố (bắt buộc)', ]; public function handle(array $update, ZaloBot $bot): mixed { $text = $this->getMessageText($update); $args = $this->getCommandArguments($text); if (empty($args)) { return $this->reply($update, $bot, 'Vui lòng nhập tên thành phố. Ví dụ: /weather Hà Nội'); } $city = implode(' ', $args); // Logic lấy thời tiết $weather = $this->getWeather($city); return $this->reply($update, $bot, "Thời tiết tại {$city}: {$weather}"); } private function getWeather(string $city): string { // Implementation logic return "Nhiều mây, 25°C"; } }
Cấu hình nâng cao
Custom HTTP Client
// Trong config 'http_client_handler' => new CustomHttpClient(), // Hoặc bind trong Service Provider $this->app->bind('zalo-bot.http_client', function() { return new CustomHttpClient(); });
Auto-discovery Commands
'commands_paths' => [ base_path('app/ZaloBots/Commands'), base_path('app/CustomCommands'), ],
Testing
composer test
Changelog
Vui lòng xem CHANGELOG để biết thêm thông tin về những thay đổi gần đây.
Contributing
Vui lòng xem CONTRIBUTING để biết chi tiết.
Security Vulnerabilities
Nếu bạn phát hiện lỗ hổng bảo mật, vui lòng gửi email đến nhanchauthai@gmail.com.
Credits
License
MIT License. Vui lòng xem License File để biết thêm thông tin.