Chuyển tới nội dung chính

sendMessage

API cho phép Bot của bạn gửi tin nhắn văn bản đến người dùng hoặc các cuộc trò chuyện.

  • URL: https://bot-api.zaloplatforms.com/bot${BOT_TOKEN}/sendMessage
  • Method: POST
  • Response Type: application/json

Sample code

const axios = require('axios');

const entrypoint = `https://bot-api.zaloplatforms.com/bot${BOT_TOKEN}/sendMessage`;
const response = await axios.post(entrypoint, { chat_id: 'abc.xyz', text: 'Hello'});

Parameters

TrườngKiểu dữ liệuBắt buộcMô tả
chat_idStringtrueID của người nhận hoặc cuộc trò chuyện
textStringtrueNội dung văn bản của tin nhắn sẽ được gửi, với độ dài từ 1 đến 2000 ký tự
parse_modeStringfalseCho phép server tự suy ra định dạng từ text. Nhận một trong hai giá trị: markdown hoặc html. Khi dùng parse_mode, các ký tự đánh dấu (markup) sẽ được loại bỏ khỏi nội dung hiển thị
text_stylesArrayfalseDanh sách các đoạn định dạng (style run) áp dụng trực tiếp lên text ở dạng thô. Xem chi tiết bên dưới

Định dạng văn bản (Rich Text)

Bot có thể gửi tin nhắn có định dạng (in đậm, in nghiêng, màu sắc, danh sách...) bằng một trong hai cách: dùng parse_mode để server tự phân tích, hoặc dùng text_styles để chỉ định trực tiếp các đoạn định dạng.

Thứ tự ưu tiên

Nếu cả parse_modetext_styles cùng được gửi, parse_mode sẽ được ưu tiêntext_styles sẽ bị bỏ qua. Hai trường này dùng hệ tọa độ offset khác nhau (parse_mode tính trên văn bản đã loại bỏ markup, còn text_styles tính trên văn bản thô) nên không thể kết hợp đồng thời. Cả hai trường đều tùy chọn và tương thích ngược — nếu không gửi, tin nhắn sẽ được gửi dưới dạng văn bản thuần.

Cách 1: dùng parse_mode

Đặt parse_modemarkdown hoặc html và viết nội dung định dạng trực tiếp trong trường text. Server sẽ phân tích, loại bỏ phần markup và tự sinh định dạng tương ứng.

await axios.post(entrypoint, {
chat_id: 'abc.xyz',
parse_mode: 'markdown',
text: '**Xin chào** _bạn_, đây là ~~tin nhắn~~ tin nhắn có định dạng'
});

Cú pháp Markdown được hỗ trợ:

Cú phápKết quả
**đậm**, __đậm__In đậm
*nghiêng*, _nghiêng_In nghiêng
***đậm nghiêng***In đậm + in nghiêng
~~gạch ngang~~Gạch ngang
`code`Giữ nguyên nội dung (không áp định dạng)
# Tiêu đề#### Tiêu đềIn đậm (riêng # còn tăng cỡ chữ)
- mục, * mục, + mụcDanh sách không thứ tự
1. mụcDanh sách có thứ tự
> trích dẫnThụt lề (mỗi cấp > là một mức)
khoảng trắng đầu dòngThụt lề (2 khoảng trắng = 1 mức)
{red}…{/red}, {orange}…{/orange}, {yellow}…{/yellow}, {green}…{/green}Màu chữ
{big}…{/big}Cỡ chữ lớn
{underline}…{/underline}Gạch chân
\*, \_, …Ký tự thoát (escape) để hiển thị nguyên ký tự đánh dấu

Thẻ HTML được hỗ trợ:

ThẻKết quả
, In đậm
, In nghiêng
``Gạch chân
, , ``Gạch ngang
In đậm (kèm tăng cỡ chữ với h1h4)
<ul>, ``, <li>Danh sách không thứ tự / có thứ tự
, Khối văn bản (xuống dòng)
style="..."font-size, font-weight, font-style, text-decoration, color (chỉ nhận các màu trong bảng màu được hỗ trợ)

Các thẻ HTML không nằm trong danh sách trên sẽ bị loại bỏ nhưng phần nội dung văn bản bên trong vẫn được giữ lại.

Cách 2: dùng text_styles

Gửi danh sách các đoạn định dạng áp trực tiếp lên text. Mỗi phần tử gồm:

TrườngKiểu dữ liệuMô tả
startIntegerVị trí bắt đầu của đoạn, tính theo UTF-16 code unit (chỉ số chuỗi như trong JavaScript/Java)
lenIntegerĐộ dài của đoạn (số UTF-16 code unit)
stArray<String>Danh sách các mã định dạng áp cho đoạn, ví dụ ["b", "c_db342e"]
curl -X POST "https://bot-api.zaloplatforms.com/bot<BOT_TOKEN>/sendMessage" \
-H "Content-Type: application/json" \
-d '{
"chat_id": "abc.xyz",
"text": "Xin chào bạn",
"text_styles": [
{ "start": 0, "len": 7, "st": ["b", "c_db342e"] }
]
}'

Bảng mã định dạng (st) được hỗ trợ:

Ý nghĩa
bIn đậm
iIn nghiêng
uGạch chân
sGạch ngang
f_13, f_15, f_18, f_20Cỡ chữ (nhỏ / thường / lớn / rất lớn)
c_050a19Màu mặc định
c_15a85fMàu xanh lá
c_f7b503Màu vàng
c_f27806Màu cam
c_db342eMàu đỏ
lst_1Danh sách không thứ tự
lst_2Danh sách có thứ tự
ind_1ind_5Mức thụt lề (1 đến 5)

Các mã không nằm trong danh sách trên sẽ bị bỏ qua, vì client chỉ hiển thị được tập mã đóng này. Các offset vượt ngoài phạm vi của text sẽ được tự điều chỉnh hoặc loại bỏ.

Sample response

{
"ok": true,
"result": {
"message_id": "82599fa32f56d00e8941",
"date": 1749632637199
}
}