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 đó.

Nâng cao Dành cho lập trình viên Cập nhật 06.09.2026

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 với địa chỉ gốc, ô API Key và danh sách các đường dẫn send-message, friend-request, groups, send-message-group
Tab Rest API. API Key trong ảnh đã được che. Bấm vào ảnh để phóng to.
  1. 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ẫnLàm gì
POST/send-messageGửi tin tới một số điện thoại.
POST/friend-requestGửi lời mời kết bạn tới một số điện thoại.
GET/groupsLấy danh sách nhóm Zalo đã đồng bộ.
POST/send-message-groupGửi tin vào một nhóm Zalo.
API Key cho phép gửi tin dưới danh nghĩa của bạn

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àmLà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ụ

PHP
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() );
    }
}
Ba quy tắc bắt buộc khi gọi hàm trực tiếp

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ốngCách nên dùng
Hệ thống khác, máy chủ khácREST API.
Công cụ tự động hoá (n8n, Make, Zapier)REST API.
Plugin hoặc theme trên cùng websiteHà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ẵnKhô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ó.

Hỗ trợ Zalo