REST API và hàm PHP
Hai cách để hệ thống khác nhờ plugin gửi tin Zalo: REST API khi gọi từ bên ngoài website, và hàm PHP khi bạn đang viết plugin trên chính website đó.
Tài liệu có sẵn trong plugin
Vào Zalo cá nhân → Rest API. Tab này là tài liệu sống: nó hiện đúng địa chỉ gốc của website bạn và API Key thật, kèm nút chép nhanh cho từng đoạn mã.
- Tab Rest API — gần cuối thanh tab.
REST API
Địa chỉ gốc: https://website-cua-ban.com/wp-json/zalo-ca-nhan/v1
Mọi yêu cầu phải kèm tiêu đề X-API-Key lấy từ chính tab này. Khoá này khác Khóa API của dịch vụ Zalo — đây là khoá để gọi vào website bạn.
| Cách | Đường dẫn | Làm gì |
|---|---|---|
POST | /send-message | Gửi tin tới một số điện thoại. |
POST | /friend-request | Gửi lời mời kết bạn tới một số điện thoại. |
GET | /groups | Lấy danh sách nhóm Zalo đã đồng bộ. |
POST | /send-message-group | Gửi tin vào một nhóm Zalo. |
Ai có khoá này là nhắn được cho bất kỳ số nào bằng tài khoản Zalo của bạn. Đừng để trong mã nguồn frontend, đừng đưa vào ứng dụng di động, đừng dán vào ảnh chụp màn hình khi nhờ hỗ trợ.
Gọi trực tiếp bằng PHP
Nếu bạn viết một plugin khác trên cùng website, gọi thẳng hàm sẽ nhanh hơn — không qua HTTP, không cần API Key, dùng chung cơ sở dữ liệu và bộ nhớ đệm của plugin.
| Hàm | Làm gì |
|---|---|
DevVN_Zalo_Queue::instance()->process_send_message_to_phone( $phone, $message, $ownerID = '', $friend_request = false, $allow_retry = true ) | Tự tra UID từ số điện thoại rồi gửi tin. Đây là hàm dùng nhiều nhất. |
DevVN_Zalo_Queue::instance()->enqueue( $action, $args = [], $unique = false, $delay = 0 ) | Đưa việc vào hàng đợi chạy nền, không chờ kết quả. |
DevVN_Zalo_Queue::instance()->process_friend_request_by_phone( $phone, $ownerID = '', $message = '' ) | Gửi lời mời kết bạn. Lời mời tối đa 150 ký tự. |
DevVN_Zalo_Queue::instance()->process_send_message_group( $group_id, $message, $owner_id, $allow_retry = true ) | Gửi tin vào nhóm. Cần biết trước mã nhóm và tài khoản gửi. |
DevVN_Zalo_Queue::instance()->get_uid( $phone, $owner_id ) | Lấy UID đã lưu của một số. Chưa có thì trả về null. |
DevVN_Zalo_Groups_DB::instance()->get_groups( $per_page = 20, $page = 1, $orderby = 'last_update_time', $order = 'DESC', $own_id = '' ) | Đọc danh sách nhóm đã đồng bộ từ cơ sở dữ liệu. |
Tham số $message nhận chuỗi cho tin chữ trơn, hoặc mảng dạng ['msg' => …, 'styles' => [...]] cho tin có định dạng.
Ví dụ
if ( class_exists( 'DevVN_Zalo_Queue' ) ) {
try {
DevVN_Zalo_Queue::instance()->process_send_message_to_phone(
'0912345678',
'Đơn hàng của bạn đã được đóng gói.'
);
} catch ( Exception $e ) {
error_log( 'Gửi Zalo lỗi: ' . $e->getMessage() );
}
}
Luôn bọc trong class_exists() — không có thì website chết trắng vào ngày ai đó tắt plugin. Luôn bọc try/catch vì mọi hàm đều có thể ném ngoại lệ. Và plugin của bạn phải nạp sau plugin này: đặt tên thư mục xếp sau theo bảng chữ cái, hoặc chạy trong hook plugins_loaded với độ ưu tiên lớn hơn 10.
Nên dùng cách nào
| Tình huống | Cách nên dùng |
|---|---|
| Hệ thống khác, máy chủ khác | REST API. |
| Công cụ tự động hoá (n8n, Make, Zapier) | REST API. |
| Plugin hoặc theme trên cùng website | Hàm PHP — nhanh hơn và không phải quản lý khoá. |
| Chỉ cần thêm biến hoặc đổi hành vi có sẵn | Không cần cả hai, dùng hook. |
Xem thêm Hook action và filter để can thiệp vào luồng xử lý sẵn có.