# Table of Contents - [Sử dụng Proxy | zca-js](#s-d-ng-proxy-zca-js) - [Giới thiệu | zca-js](#gi-i-thi-u-zca-js) - [Đăng nhập nhiều tài khoản | zca-js](#-ng-nh-p-nhi-u-t-i-kho-n-zca-js) - [changeGroupOwner | zca-js](#changegroupowner-zca-js) - [Đăng nhập với QRCode | zca-js](#-ng-nh-p-v-i-qrcode-zca-js) - [Ví dụ | zca-js](#v-d-zca-js) - [disperseGroup | zca-js](#dispersegroup-zca-js) - [createNote | zca-js](#createnote-zca-js) - [Bot chào mừng thành viên | zca-js](#bot-ch-o-m-ng-th-nh-vi-n-zca-js) - [Bot nhại lại người dùng | zca-js](#bot-nh-i-l-i-ng-i-d-ng-zca-js) - [acceptFriendRequest | zca-js](#acceptfriendrequest-zca-js) - [changeGroupAvatar | zca-js](#changegroupavatar-zca-js) - [changeGroupName | zca-js](#changegroupname-zca-js) - [deleteMessage | zca-js](#deletemessage-zca-js) - [createPoll | zca-js](#createpoll-zca-js) - [findUser | zca-js](#finduser-zca-js) - [editNote | zca-js](#editnote-zca-js) - [Đăng nhập với Cookie | zca-js](#-ng-nh-p-v-i-cookie-zca-js) - [createGroup | zca-js](#creategroup-zca-js) - [addReaction | zca-js](#addreaction-zca-js) - [blockUser | zca-js](#blockuser-zca-js) - [getAllFriends | zca-js](#getallfriends-zca-js) - [addGroupDeputy | zca-js](#addgroupdeputy-zca-js) - [changeFriendAlias | zca-js](#changefriendalias-zca-js) - [fetchAccountInfo | zca-js](#fetchaccountinfo-zca-js) - [addUserToGroup | zca-js](#addusertogroup-zca-js) - [getAllGroups | zca-js](#getallgroups-zca-js) - [getStickers | zca-js](#getstickers-zca-js) - [getCookie | zca-js](#getcookie-zca-js) - [sendFriendRequest | zca-js](#sendfriendrequest-zca-js) - [removeUserFromGroup | zca-js](#removeuserfromgroup-zca-js) - [getGroupInfo | zca-js](#getgroupinfo-zca-js) - [sendVoice | zca-js](#sendvoice-zca-js) - [getUserInfo | zca-js](#getuserinfo-zca-js) - [reaction | zca-js](#reaction-zca-js) - [getStickersDetail | zca-js](#getstickersdetail-zca-js) - [Giới thiệu | zca-js](#gi-i-thi-u-zca-js) - [sendSticker | zca-js](#sendsticker-zca-js) - [Đăng nhập với Cookie | zca-js](#-ng-nh-p-v-i-cookie-zca-js) - [sendCard | zca-js](#sendcard-zca-js) - [removeGroupDeputy | zca-js](#removegroupdeputy-zca-js) - [sendReport | zca-js](#sendreport-zca-js) - [undo | zca-js](#undo-zca-js) --- # Sử dụng Proxy | zca-js * * * ### [](#doi-voi-bun) Đối với Bun Copy const zalo = new Zalo({ agent: "http(s)://user:pass@host:port", }); ### [](#doi-voi-nodejs) Đối với NodeJS Vì native fetch của NodeJS không hỗ trợ proxy nên phải thay thế nó bằng [node-fetch](https://www.npmjs.com/package/node-fetch) Copy import { Zalo } from "zca-js"; import { HttpProxyAgent } from "http-proxy-agent"; import nodefetch from "node-fetch"; const zalo = new Zalo({ agent: new HttpProxyAgent("http(s)://user:pass@host:port"), // @ts-ignore polyfill: nodefetch }); [PreviousĐăng nhập nhiều tài khoản](/dang-nhap/dang-nhap-nhieu-tai-khoan) [NextacceptFriendRequest](/api/acceptfriendrequest) Last updated 1 month ago 🔑 * [Đối với Bun](#doi-voi-bun) * [Đối với NodeJS](#doi-voi-nodejs) --- # Giới thiệu | zca-js [](#zca-js) ZCA-JS ----------------------- Là một thư viện cung cấp các API (unofficial) hỗ trợ bạn xây dựng 1 bot chat Zalo bằng chính tài khoản cá nhân của bạn. **Lưu ý:** việc sử dụng thư viện này đồng nghĩa với việc bạn đang làm trái với chính sách của Zalo và nó có thể khiến cho tài khoản của bạn bị vô hiệu hóa. Chúng tôi sẽ không chịu trách nhiệm nếu điều đó xảy ra, vậy nên hãy cân nhắc trước khi sử dụng. ### [](#cac-tinh-nang) Các tính năng * Đăng nhập * [Cookie](/dang-nhap/dang-nhap-voi-cookie) * [QRCode](/dang-nhap/dang-nhap-voi-qrcode) * [Sử dụng nhiều tài khoản](/dang-nhap/dang-nhap-nhieu-tai-khoan) * [Sử dụng Proxy](/dang-nhap/su-dung-proxy) * Lắng nghe các sự kiện: * [message](/listener/message) * [reaction](/listener/reaction) * [undo](/listener/undo) * [group\_event](/listener/group_event) * Các **API** giúp tương tác với **Zalo**: * [acceptFriendRequest](/api/acceptfriendrequest) * [addGroupDeputy](/api/addgroupdeputy) * [addReaction](/api/addreaction) * [addUserToGroup](/api/addusertogroup) * [blockUser](/api/blockuser) * [changeFriendAlias](/api/changefriendalias) * [changeGroupAvatar](/api/changegroupavatar) * [changeGroupName](/api/changegroupname) * [changeGroupOwner](/api/changegroupowner) * [createGroup](/api/creategroup) * [createNote](/api/createnote) * [createPoll](/api/createpoll) * [deleteMessage](/api/deletemessage) * [disperseGroup](/api/dispersegroup) * [editNote](/api/editnote) * [fetchAccountInfo](/api/fetchaccountinfo) * [findUser](/api/finduser) * [getAllFriends](/api/getallfriends) * [getAllGroups](/api/getallgroups) * [getContext](/api/getcontext) * [getCookie](/api/getcookie) * [getGroupInfo](/api/getgroupinfo) * [getOwnId](/api/getownid) * [getQR](/api/getqr) * [getStickers](/api/getstickers) * [getStickersDetail](/api/getstickersdetail) * [getUserInfo](/api/getuserinfo) * [lockPoll](/api/lockpoll) * [pinConversations](/api/pinconversations) * [removeGroupDeputy](/api/removegroupdeputy) * [removeUserFromGroup](/api/removeuserfromgroup) * [sendCard](/api/sendcard) * [sendFriendRequest](/api/sendfriendrequest) * [sendMessage](/api/sendmessage) * [sendReport](/api/sendreport) * [sendSticker](/api/sendsticker) * [sendVoice](/api/sendvoice) * [unblockUser](/api/unblockuser) * [undo](/api/undo) ### [](#cai-dat) Cài đặt Với **Bun**: Copy bun install zca-js Với **NPM**: Copy npm install zca-js [NextVí dụ](/bat-dau/vi-du) Last updated 1 month ago * * * --- # Đăng nhập nhiều tài khoản | zca-js ### [](#dang-nhap) Đăng nhập Đăng nhập 2 tài khoản đồng thời với loginQR. Dưới chỉ mẫu cho **loginQR**, **login** với **cookie** vẫn hỗ trợ nhiều tài khoản đồng thời index.js Copy import { Zalo } from "zca-js"; // Cấu hình chung const zalo = new Zalo({ selfListen: false, // mặc định false, lắng nghe sự kiện của bản thân checkUpdate: true, // mặc định true, kiểm tra update logging: false // mặc định true, bật/tắt log mặc định của thư viện }); async function app() { const api = await zalo.loginQR({}, (qrPath) => { // đã lưu mã qr console.log(`Quét mã tại ${qrPath} để đăng nhập`) }); api.listener.start(); // bắt đầu lắng nghe sự kiện console.log(`Đã đăng nhập vào tài khoản ${api.getOwnId()}`) } // đăng nhập 2 tài khoản đồng thời for (let i = 0; i < 2; i ++) { await app(); } [PreviousĐăng nhập với QRCode](/dang-nhap/dang-nhap-voi-qrcode) [NextSử dụng Proxy](/dang-nhap/su-dung-proxy) Last updated 1 month ago * * * --- # changeGroupOwner | zca-js [](#api.changegroupowner-memberid-groupid) api.changeGroupOwner(memberId, groupId) --------------------------------------------------------------------------------------- ### [](#parameters) Parameters * memberId `string` * groupId `string` ### [](#return) Return `Promise` ### [](#examples) Examples Thay chủ nhóm Copy const memberId = "0000000000000000001"; const groupId = "0000000000000000000"; api .changeGroupOwner(memberId, groupId) .then(console.log).catch(console.error); [PreviouschangeGroupName](/api/changegroupname) [NextcreateGroup](/api/creategroup) Last updated 1 month ago * * * --- # Đăng nhập với QRCode | zca-js ### [](#dang-nhap) Đăng nhập index.js Copy import { Zalo } from "zca-js"; const zalo = new Zalo({ selfListen: false, // mặc định false, lắng nghe sự kiện của bản thân checkUpdate: true, // mặc định true, kiểm tra update logging: true // mặc định true, bật/tắt log mặc định của thư viện }); const api = await zalo.loginQR({ userAgent: "", // không bắt buộc qrPath: "" // đường dẫn lưu QR, mặc định ./qr.png }, (qrPath) => { // đã lưu mã qr }); api.listener.start(); // bắt đầu lắng nghe sự kiện [PreviousĐăng nhập với Cookie](/dang-nhap/dang-nhap-voi-cookie) [NextĐăng nhập nhiều tài khoản](/dang-nhap/dang-nhap-nhieu-tai-khoan) Last updated 1 month ago * * * --- # Ví dụ | zca-js 1. [Bot nhại lại người dùng](/bat-dau/vi-du/bot-nhai-lai-nguoi-dung) 2. [Bot chào mừng thành viên](/bat-dau/vi-du/bot-chao-mung-thanh-vien) [PreviousGiới thiệu](/) [NextBot nhại lại người dùng](/bat-dau/vi-du/bot-nhai-lai-nguoi-dung) Last updated 1 month ago * * * --- # disperseGroup | zca-js [](#api.dispersegroup-groupid) api.disperseGroup(groupId) -------------------------------------------------------------- ### [](#parameters) Parameters * groupId `string` ### [](#return) Return `Promise` ### [](#examples) Examples Copy const groupId = "0000000000000000000"; api.disperseGroup(groupId) .then(console.log) .catch(console.error); [PreviousdeleteMessage](/api/deletemessage) [NexteditNote](/api/editnote) Last updated 1 month ago * * * --- # createNote | zca-js [](#api.createnote-options-groupid) api.createNote(options, groupId) ------------------------------------------------------------------------- ### [](#parameters) Parameters * options * title `string` * pinAct `boolean?` * Ghim ghi chú, mặc định false * groupId `string` ### [](#return) Return `Promise` #### [](#createnoteresponse) CreateNoteResponse * id `string` * type `number` * color `number` * emoji `string` * startTime `number` * duration `number` * params * title `string` * creatorId `string` * editorId `string` * createTime `number` * editTime `number` * repeat `number` ### [](#examples) Examples Tạp ghi chú mới Copy const groupId = "0000000000000000000"; api.createNote( { title: "ghi chú mới", pinAct: true }, groupId, ) .then(console.log) .catch(console.error); [PreviouscreateGroup](/api/creategroup) [NextcreatePoll](/api/createpoll) Last updated 1 month ago * * * --- # Bot chào mừng thành viên | zca-js ### [](#code-mau) Code mẫu index.js Copy import { GroupEventType, ThreadType, Zalo } from "zca-js"; import path from "path"; const zalo = new Zalo(); const api = await zalo.loginQR(); const { listener } = api; listener.on("group_event", (event) => { if (event.type == GroupEventType.JOIN && !event.isSelf) { const { updateMembers } = event.data; if (updateMembers.length == 1) { api.sendMessage( { msg: `Chào mừng @${updateMembers[0].dName} đến với nhóm!`, mentions: [\ {\ pos: 10,\ uid: updateMembers[0].id,\ len: updateMembers[0].dName.length + 1, // +1 vì có dấu @ ở đầu\ },\ ], attachments: [path.resolve("./welcome.jpg")], }, event.threadId, ThreadType.Group, ).catch(console.error); } else { api.sendMessage( { msg: "Chào mừng các bạn mới đến với nhóm!", attachments: [path.resolve("./welcome.jpg")], }, event.threadId, ThreadType.Group, ).catch(console.error); } } }); listener.start(); ### [](#ket-qua) Kết quả: [PreviousBot nhại lại người dùng](/bat-dau/vi-du/bot-nhai-lai-nguoi-dung) [NextĐăng nhập với Cookie](/dang-nhap/dang-nhap-voi-cookie) Last updated 1 month ago * * * ![](https://zca.tdung.co/~gitbook/image?url=https%3A%2F%2F619615896-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FZvWhwad1MwQp6Kj6fbRe%252Fuploads%252FlMwGwzTrSfKF9UzLbGw0%252Fz5749932573369_6f75997b73af7df7b96d6dad86d21b31.jpg%3Falt%3Dmedia%26token%3Da5ade0e6-2f57-4614-997e-05215e574184&width=768&dpr=4&quality=100&sign=6c97a158&sv=2) --- # Bot nhại lại người dùng | zca-js ### [](#code-mau) Code mẫu index.js Copy import { Zalo } from "zca-js"; const zalo = new Zalo({ selfListen: false, }); const api = await zalo.loginQR(); const { listener } = api; listener.on("message", (msg) => { if (typeof msg.data.content == "string") { api .sendMessage(msg.data.content, msg.threadId, msg.type) .catch(console.error); } }); listener.start(); ### [](#ket-qua) Kết quả: [PreviousVí dụ](/bat-dau/vi-du) [NextBot chào mừng thành viên](/bat-dau/vi-du/bot-chao-mung-thanh-vien) Last updated 1 month ago * * * bot nhại lại người dùng ![](https://zca.tdung.co/~gitbook/image?url=https%3A%2F%2F619615896-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FZvWhwad1MwQp6Kj6fbRe%252Fuploads%252FW7LsdiXq6sWUpl5opVK6%252Fz5749824661063_0be879e8718ded634a176baa102ca19b.jpg%3Falt%3Dmedia%26token%3Db0fb6ca7-b43c-4fc0-bc65-18250487b0f3&width=768&dpr=4&quality=100&sign=c531e7ee&sv=2) --- # acceptFriendRequest | zca-js [](#api.acceptfriendrequest-userid) api.acceptFriendRequest(userId) ------------------------------------------------------------------------ ### [](#parameters) Parameters * userId `string` ### [](#return) Return `Promise` ### [](#examples) Examples Copy const userId = "0000000000000000001"; await api.acceptFriendRequest(userId); [PreviousSử dụng Proxy](/dang-nhap/su-dung-proxy) [NextaddGroupDeputy](/api/addgroupdeputy) Last updated 1 month ago * * * --- # changeGroupAvatar | zca-js [](#api.changegroupavatar-avatarpath-groupid) api.changeGroupAvatar(avatarPath, groupId) --------------------------------------------------------------------------------------------- ### [](#parameters) Parameters * avatarPath `string` * Đường dẫn đến file ảnh avatar mới * groupId `string` ### [](#return) Return `Promise` ### [](#examples) Examples Cập nhật ảnh nhóm Copy api .changeGroupAvatar("./avatar.jpg", "0000000000000000000") .then(console.log).catch(console.error); [PreviouschangeFriendAlias](/api/changefriendalias) [NextchangeGroupName](/api/changegroupname) Last updated 1 month ago * * * --- # changeGroupName | zca-js [](#api.changegroupname-name-groupid) api.changeGroupName(name, groupId) ----------------------------------------------------------------------------- ### [](#parameters) Parameters * name `string` * groupId `string` ### [](#return) Return `Promise` ### [](#examples) Examples Cập nhật tên nhóm Copy api .changeGroupName("Tên Mới", "0000000000000000000") .then(console.log).catch(console.error); [PreviouschangeGroupAvatar](/api/changegroupavatar) [NextchangeGroupOwner](/api/changegroupowner) Last updated 1 month ago * * * --- # deleteMessage | zca-js [](#api.deletemessage-message-onlyme) api.deleteMessage(message\[, onlyMe\]) --------------------------------------------------------------------------------- ### [](#parameters) Parameters * message `Message` * onlyMe `boolean?` * true nếu chỉ xóa phía bản thân, false để xóa cho cả nhóm, mặc định true ### [](#return) Return `Promise` ### [](#examples) Examples Xóa tin nhắn bản thân sau 5s Copy // xóa tin nhắn của bản thân sau 5s nếu nội dung là "test" api.listener.on("message", (message) => { const { content } = message.data; const isTextMessage = typeof content == "string"; const shouldDelete = isTextMessage && content == "test"; if (message.isSelf && shouldDelete) { setTimeout(() => { api.deleteMessage(message, true) .then(console.log) .catch(console.error); }, 5_000); } }); [PreviouscreatePoll](/api/createpoll) [NextdisperseGroup](/api/dispersegroup) Last updated 1 month ago * * * --- # createPoll | zca-js [](#api.createpoll-options-groupid) api.createPoll(options, groupId) ------------------------------------------------------------------------- ### [](#parameters) Parameters * options `CreatePollOptions` * groupId `string` #### [](#createpolloptions) CreatePollOptions * question `string` * options `string[]` * expiredTime `number?` * Thời hạn của cuộc bình chọn, đơn vị mili giây, mặc định 0 (vô hạn) * pinAct `boolean?` * Ghim cuộc bình chọn, mặc định false * allowMultiChoices `boolean?` * Cho phép chọn nhiều lựa chọn, mặc định false * allowAddNewOption `boolean?` * Cho phép thành viên thêm lựa chọn, mặc định false * hideVotePreview `boolean?` * Ẩn kết quả cho đến khi người dùng bình chọn, mặc định false * isAnonymous `boolean?` * Ẩn danh sách người bình chọn, mặc định false ### [](#return) Return `Promise` #### [](#createpollresponse) CreatePollResponse * creator `string` * question `string` * options `string[]` * joined `boolean` * closed `boolean` * poll\_id `string` * allow\_multi\_choices `boolean` * allow\_add\_new\_option `boolean` * is\_anonymous `boolean` * poll\_type `number` * created\_time `number` * updated\_time `number` * expiried\_time `number` * is\_hide\_vote\_preview `boolean` * num\_vote `number` ### [](#examples) Examples Tạp cuộc bình chọn mới * Javascript Copy const groupId = "0000000000000000000"; const options = { question: "Cuộc bình chọn mới!", options: [\ "Lựa chọn 1",\ "Lựa chọn 2",\ "Lựa chọn 3"\ ] } api.createPoll(options, groupId) .then(console.log) .catch(console.error); * Typescript Copy import type { CreatePollOptions } from "zca-js"; const groupId = "0000000000000000000"; const options: CreatePollOptions = { question: "Cuộc bình chọn mới!", options: [\ "Lựa chọn 1",\ "Lựa chọn 2",\ "Lựa chọn 3"\ ] } api.createPoll(options, groupId) .then(console.log) .catch(console.error); [PreviouscreateNote](/api/createnote) [NextdeleteMessage](/api/deletemessage) Last updated 1 month ago * * * --- # findUser | zca-js * * * [](#api.finduser-phonenumber) api.findUser(phoneNumber) ------------------------------------------------------------ ### [](#parameters) Parameters * phoneNumber `string` ### [](#return) Return `Promise` #### [](#finduserresponse) FindUserResponse * avatar `string` * cover `string` * status `string` * gender `number` * dob `number` * sdob `string` * globalId `string` * uid `string` * zalo\_name `string` * display\_name `string` ### [](#examples) Examples Lấy thông tin người dùng qua số điện thoại `0909090909` Copy await api.findUser("0909090909") .then(console.log) .catch(console.error); [PreviousfetchAccountInfo](/api/fetchaccountinfo) [NextgetAllFriends](/api/getallfriends) Last updated 1 month ago 🛠️ * [api.findUser(phoneNumber)](#api.finduser-phonenumber) * [Parameters](#parameters) * [Return](#return) * [Examples](#examples) --- # editNote | zca-js [](#api.editnote-title-topicid-groupid) api.editNote(title, topicId, groupId) ---------------------------------------------------------------------------------- ### [](#parameters) Parameters * title `string` * topicId `string` * groupId `string` ### [](#return) Return `Promise` * id `string` * type `number` * color `number` * emoji `string` * startTime `number` * duration `number` * params * title `string` * extra `string` * creatorId `string` * editorId `string` * createTime `number` * editTime `number` * repeat `number` ### [](#examples) Examples Copy const groupId = "0000000000000000000"; const topicId = ""; const newTitle = "Tiêu đề mới" api.editNote(newTitle, topicId, groupId) .then(console.log) .catch(console.error); [PreviousdisperseGroup](/api/dispersegroup) [NextfetchAccountInfo](/api/fetchaccountinfo) Last updated 1 month ago * * * --- # Đăng nhập với Cookie | zca-js * * * ### [](#chuan-bi) Chuẩn bị **UPDATE:** giờ đây bạn có thể sử dụng tiện ích [ZaloDataExtractor](https://github.com/JustKemForFun/ZaloDataExtractor) để lấy các thông tin cần thiết để đăng nhập như: IMEI, userAgent và Cookies 1. Đăng nhập vào [Zalo](https://chat.zalo.me/) trên trình duyệt 2. Mở **DevTools** trên trình duyệt, bấm `F12` hoặc tổ hợp `CTRL + SHIFT + C` 3. Vào **console** của **DevTools** lấy `imei` bằng 1 trong 2 mã sau: 1. `localStorage.getItem('z_uuid')` 2. `localStorage.getItem('sh_z_uuid')` 4. Cũng tại **console**, gõ `navigator.userAgent` để lấy `userAgent` 5. Lấy Cookie thông qua các tiện ích như [J2TEAM Cookies](https://chromewebstore.google.com/detail/j2team-cookies/okpidcojinmlaakglciglbpcpajaibco) , [Cookie-Editor](https://chromewebstore.google.com/detail/cookie-editor/hlkenndednhfkekhgcdicdfddnkalmdm) hoặc [ZaloDataExtractor](https://github.com/JustKemForFun/ZaloDataExtractor/) ### [](#dang-nhap-voi-cookie) Đăng nhập với Cookie index.js Copy import { Zalo } from "zca-js"; import fs from "fs"; const zalo = new Zalo({ selfListen: false, // mặc định false, lắng nghe sự kiện của bản thân checkUpdate: true, // mặc định true, kiểm tra update logging: true // mặc định true, bật/tắt log mặc định của thư viện }); // đọc cookie đã lưu ở bước 5 const cookie = JSON.parse(fs.readFileSync("./cookie.json", "utf-8")); const api = await zalo.login({ cookie: cookie, imei: "điền_vào_đây", // điền giá trị đã lấy ở bước 3 userAgent: "điền_vào_đây", // điền giá trị đã lấy ở bước 4 }); api.listener.start(); // bắt đầu lắng nghe sự kiện [PreviousBot chào mừng thành viên](/bat-dau/vi-du/bot-chao-mung-thanh-vien) [NextĐăng nhập với QRCode](/dang-nhap/dang-nhap-voi-qrcode) Last updated 1 month ago 🔑 * [Chuẩn bị](#chuan-bi) * [Đăng nhập với Cookie](#dang-nhap-voi-cookie) --- # createGroup | zca-js * * * [](#api.creategroup-options) api.createGroup(options) ---------------------------------------------------------- ### [](#parameters) Parameters * options `CreateGroupOptions` #### [](#creategroupoptions) CreateGroupOptions * members `string[]` * id của các thành viên khác trừ bản thân * name `string?` * Tên nhóm * avatarPath `string?` * Đường dẫn đến ảnh nhóm ### [](#return) Return `Promise` #### [](#creategroupresponse) CreateGroupResponse * groupType `number` * sucessMembers `string[]` * groupId `string` * errorMembers `string[]` * error\_data `Record` ### [](#examples) Examples Tạp nhóm mới Copy // Tạo nhóm mới cùng 2 người dùng khác api.createGroup({ members: ["0000000000000000002", "0000000000000000003"], name: "Nhóm Mới", avatarPath: "./avatar.jpg", }) .then(console.log) .catch(console.error); [PreviouschangeGroupOwner](/api/changegroupowner) [NextcreateNote](/api/createnote) Last updated 1 month ago 🛠️ * [api.createGroup(options)](#api.creategroup-options) * [Parameters](#parameters) * [Return](#return) * [Examples](#examples) --- # addReaction | zca-js [](#api.addreaction-icon-message) api.addReaction(icon, message) --------------------------------------------------------------------- ### [](#parameters) Parameters * icon `Reactions` * message `Message` #### [](#reactions-enum) Reactions (enum) `HEART`, `LIKE`, `HAHA`, `WOW`, `CRY`, `ANGRY`, `NONE`, ... Dùng `NONE` để loại bỏ biểu cảm ### [](#return) Return `Promise` ### [](#examples) Examples Thả cảm xúc vào tin nhắn Copy import { Reactions } from "zca-js"; // thả cảm xúc HAHA vào tất cả tin nhắn văn bản gửi đến có chứa ":)" api.listener.on("message", (message) => { const { content } = message.data; const isTextMessage = typeof content == "string"; const shouldReact = isTextMessage && content.includes(":)"); if (!message.isSelf && shouldReact) { api .addReaction(Reactions.HAHA, message) .then(console.log).catch(console.error); } }); [PreviousaddGroupDeputy](/api/addgroupdeputy) [NextaddUserToGroup](/api/addusertogroup) Last updated 1 month ago * * * --- # blockUser | zca-js * * * [](#api.blockuser-userid) api.blockUser(userId) ---------------------------------------------------- ### [](#parameters) Parameters * userId `string` ### [](#return) Return `Promise` ### [](#examples) Examples Copy const userId = "0000000000000000001"; api .blockUser(userId) .then(console.log).catch(console.error); [PreviousaddUserToGroup](/api/addusertogroup) [NextchangeFriendAlias](/api/changefriendalias) Last updated 1 month ago 🛠️ * [api.blockUser(userId)](#api.blockuser-userid) * [Parameters](#parameters) * [Return](#return) * [Examples](#examples) --- # getAllFriends | zca-js [](#api.getallfriends) api.getAllFriends() ----------------------------------------------- ### [](#parameters) Parameters ### [](#return) Return `Promise` #### [](#getallfriendsresponse) GetAllFriendsResponse * userId `string` * username `string` * displayName `string` * zaloName `string` * avatar `string` * bgavatar `string` * cover `string` * gender `number` * dob `number` * sdob `string` * status `string` * phoneNumber `string` * isFr `number` * isBlocked `number` * lastActionTime `number` * lastUpdateTime `number` * isActive `number` * key `number` * type `number` * isActivePC `number` * isActiveWeb `number` * isValid `number` * userKey `string` * accountStatus `number` * oaInfo `any` * user\_mode `number` * globalId `string` * bizPkg * label `any` * pkgId `number` * createdTs `number` * oa\_status `any` ### [](#examples) Examples Copy await api.getAllFriends() .then(console.log) .catch(console.error); [PreviousfindUser](/api/finduser) [NextgetAllGroups](/api/getallgroups) Last updated 1 month ago * * * --- # addGroupDeputy | zca-js [](#api.addgroupdeputy-memberid-groupid) api.addGroupDeputy(memberId, groupId) ----------------------------------------------------------------------------------- ### [](#parameters) Parameters * memberId `string` | `string[]` * groupId `string` ### [](#return) Return `Promise` ### [](#examples) Examples Copy const memberId = "0000000000000000001"; const groupId = "0000000000000000000"; await api.addGroupDeputy(memberId, groupId); [PreviousacceptFriendRequest](/api/acceptfriendrequest) [NextaddReaction](/api/addreaction) Last updated 1 month ago * * * --- # changeFriendAlias | zca-js [](#api.changefriendalias-alias-friendid) api.changeFriendAlias(alias, friendId) ------------------------------------------------------------------------------------- ### [](#parameters) Parameters * alias `string` * friendId `string` ### [](#return) Return `Promise` ### [](#examples) Examples Copy const alias = "Tên gợi nhớ"; const friendId = "0000000000000000001"; api .changeFriendAlias(alias, friendId) .then(console.log).catch(console.error); [PreviousblockUser](/api/blockuser) [NextchangeGroupAvatar](/api/changegroupavatar) Last updated 1 month ago * * * --- # fetchAccountInfo | zca-js [](#api.fetchaccountinfo) api.fetchAccountInfo() ----------------------------------------------------- ### [](#parameters) Parameters ### [](#return) Return * userId `string` * username `string` * displayName `string` * zaloName `string` * avatar `string` * bgavatar `string` * cover `string` * gender `number` * dob `number` * sdob `string` * status `string` * phoneNumber `string` * isFr `number` * isBlocked `number` * lastActionTime `number` * lastUpdateTime `number` * isActive `number` * key `number` * type `number` * isActivePC `number` * isActiveWeb `number` * isValid `number` * userKey `string` * accountStatus `number` * oaInfo `any` * user\_mode `number` * globalId `string` * bizPkg * label `any` * pkgId `number` * createdTs `number` * oa\_status `any` ### [](#examples) Examples Copy await api.fetchAccountInfo() .then(console.log) .catch(console.error); [PreviouseditNote](/api/editnote) [NextfindUser](/api/finduser) Last updated 1 month ago * * * --- # addUserToGroup | zca-js [](#api.addusertogroup-memberid-groupid) api.addUserToGroup(memberId, groupId) ----------------------------------------------------------------------------------- ### [](#parameters) Parameters * groupId `string` * memberId `string` | `string[]` ### [](#return) Return `Promise` #### [](#addusertogroupresponse) AddUserToGroupResponse * errorMembers `string[]` * error\_data `Record` ### [](#examples) Examples Thêm người dùng vào nhóm Copy const groupId = "0000000000000000000"; // thêm 1 thành viên const memberId = "0000000000000000001"; api .addUserToGroup(memberId, groupId) .then(console.log).catch(console.error); // thêm nhiều thành viên const memberIds = [\ "0000000000000000001",\ "0000000000000000002"\ ]; api .addUserToGroup(memberIds, groupId) .then(console.log).catch(console.error); [PreviousaddReaction](/api/addreaction) [NextblockUser](/api/blockuser) Last updated 1 month ago * * * --- # getAllGroups | zca-js [](#api.getallgroups) api.getAllGroups() --------------------------------------------- ### [](#parameters) Parameters ### [](#return) Return `Promise` #### [](#getallgroupsresponse) GetAllGroupsResponse * version `string` * gridInfoMap `Record` ### [](#examples) Examples Copy await api.getAllGroups() .then(console.log) .catch(console.error); [PreviousgetAllFriends](/api/getallfriends) [NextgetContext](/api/getcontext) Last updated 1 month ago * * * --- # getStickers | zca-js [](#api.getstickers-keyword) api.getStickers(keyword) ---------------------------------------------------------- ### [](#parameters) Parameters * keyword `string` * từ khóa tìm kiếm ### [](#return) Return `Promise` id của các sticker tìm thấy ### [](#examples) Examples Lấy sticker với từ khóa `"xin chào"` Copy try { const keyword = "xin chào"; const stickerIds = await api.getStickers(keyword); console.log(stickerIds); } catch(e) { console.error(e); } [PreviousgetQR](/api/getqr) [NextgetStickersDetail](/api/getstickersdetail) Last updated 1 month ago * * * --- # getCookie | zca-js [](#api.getcookie) api.getCookie() --------------------------------------- ### [](#return) Return `CookieJar` ### [](#examples) Examples Copy console.log(api.getCookie()) [PreviousgetContext](/api/getcontext) [NextgetGroupInfo](/api/getgroupinfo) Last updated 1 month ago * * * --- # sendFriendRequest | zca-js * * * [](#api.sendfriendrequest-msg-userid) api.sendFriendRequest(msg, userId) ----------------------------------------------------------------------------- ### [](#parameters) Parameters * msg `string` * userId `string` ### [](#return) Return `Promise` ### [](#examples) Examples Gửi lời mời kết bạn với id người dùng Copy const userId = "000000000000000001"; const msg = "Xin chào, hãy kết bạn với tôi!"; api.sendFriendRequest(msg, userId) .then(console.log) .catch(console.error); Gửi lời mời kết bạn với số điện thoại Copy const phoneNumber = "0999999999"; const userInfo = await api.findUser(phoneNumber); const userId = userInfo.uid; const msg = "Xin chào, hãy kết bạn với tôi!"; api.sendFriendRequest(msg, userId) .then(console.log) .catch(console.error); [](#references) References ------------------------------- ### [](#apis) APIs * [findUser](/api/finduser) [PrevioussendCard](/api/sendcard) [NextsendMessage](/api/sendmessage) Last updated 1 month ago 🛠️ * [api.sendFriendRequest(msg, userId)](#api.sendfriendrequest-msg-userid) * [Parameters](#parameters) * [Return](#return) * [Examples](#examples) * [References](#references) * [APIs](#apis) --- # removeUserFromGroup | zca-js [](#api.removeuserfromgroup-memberid-groupid) api.removeUserFromGroup(memberId, groupId) --------------------------------------------------------------------------------------------- ### [](#parameters) Parameters * memberId `string` | `string[]` * groupId `string` ### [](#return) Return `Promise` #### [](#removeuserfromgroupresponse) RemoveUserFromGroupResponse * errorMembers `string[]` ### [](#examples) Examples Xóa thành viên khỏi nhóm Copy const groupId = "0000000000000000000"; // xóa 1 thành viên const memberId = "0000000000000000001"; api .removeUserFromGroup(memberId, groupId) .then(console.log).catch(console.error); // xóa nhiều thành viên const memberIds = ["0000000000000000001", "0000000000000000002"]; api .removeUserFromGroup(memberIds, groupId) .then(console.log).catch(console.error); [PreviousremoveGroupDeputy](/api/removegroupdeputy) [NextsendCard](/api/sendcard) Last updated 1 month ago * * * --- # getGroupInfo | zca-js [](#api.getgroupinfo-groupid) api.getGroupInfo(groupId) ------------------------------------------------------------ ### [](#parameters) Parameters * groupId `string` | `string[]` ### [](#return) Return `Promise` #### [](#groupinforesponse) GroupInfoResponse * removedsGroup `string[]` * unchangedsGroup `string[]` * gridInfoMap * \[groupId `string`\] info `GroupInfo` #### [](#groupinfo) GroupInfo * groupId `string` * name `string` * desc `string` * type `number` * creatorId `string` * version `string` * avt `string` * fullAvt `string` * memberIds `any[]` * adminIds `string[]` * currentMems `any[]` * updateMems `any[]` * memVerList `string[]` * admins `any[]` * hasMoreMember `number` * subType `number` * totalMember `number` * maxMember `number` * setting `GroupSetting` * createdTime `number` * visibility `number` * globalId `string` * e2ee `number` * pendingApprove * time `number` * uids `null` | `string[]` * extraInfo * `Record` * enable\_media\_store `number` #### [](#groupsetting) GroupSetting * blockName `number` * signAdminMsg `number` * addMemberOnly `number` * setTopicOnly `number` * enableMsgHistory `number` * joinAppr `number` * lockCreatePost `number` * lockCreatePoll `number` * lockSendMsg `number` * lockViewMember `number` * bannFeature `number` * dirtyMedia `number` * banDuration `number` ### [](#examples) Examples Lấy thông tin của nhóm Copy const groupId = "0000000000000000000"; api.getGroupInfo(groupId) .then(console.log) .catch(console.error); [PreviousgetCookie](/api/getcookie) [NextgetOwnId](/api/getownid) Last updated 1 month ago * * * --- # sendVoice | zca-js [](#api.sendvoice-options-threadid-type) api.sendVoice(options, threadId\[, type\]) ---------------------------------------------------------------------------------------- ### [](#parameters) Parameters * options * voiceUrl `string` * ttl `number?` * thời gian tồn tại danh thiếp, mặc định là 0 (vô hạn) * threadId `string` * type `ThreadType?` * loại thread, mặc định là người dùng ### [](#return) Return `Promise` #### [](#sendvoiceresponse) SendVoiceResponse * msgId `string` ### [](#examples) Examples Gửi đoạn hội thoại Copy const userId = "0000000000000001" api.sendVoice( { voiceUrl: "https://example.com/voice.mp3" }, userId ) .then(console.log) .catch(console.error); [PrevioussendSticker](/api/sendsticker) [NextunblockUser](/api/unblockuser) Last updated 1 month ago * * * --- # getUserInfo | zca-js [](#api.getuserinfo-userid) api.getUserInfo(userId) -------------------------------------------------------- ### [](#parameters) Parameters * userId `string` ### [](#return) Return `Promise` #### [](#userinforesponse) UserInfoResponse * unchanged\_profiles `Record` * phonebook\_version `number` * changed\_profiles `Record` #### [](#profileinfo) ProfileInfo * userId `string` * username `string` * displayName `string` * zaloName `string` * avatar `string` * bgavatar `string` * cover `string` * gender `number` * dob `number` * sdob `string` * status `string` * phoneNumber `string` * isFr `number` * isBlocked `number` * lastActionTime `number` * lastUpdateTime `number` * isActive `number` * key `number` * type `number` * isActivePC `number` * isActiveWeb `number` * isValid `number` * userKey `string` * accountStatus `number` * oaInfo `any` * user\_mode `number` * globalId `string` * bizPkg * label `any` * pkgId `number` * createdTs `number` * oa\_status `any` ### [](#examples) Examples Lấy thông tin của người dùng Copy const userId = "0000000000000000001"; api.getUserInfo(userId) .then(console.log) .catch(console.error); [PreviousgetStickersDetail](/api/getstickersdetail) [NextlockPoll](/api/lockpoll) Last updated 1 month ago * * * --- # reaction | zca-js [](#api.listener.on-reaction-callback) api.listener.on("reaction", callback) --------------------------------------------------------------------------------- ### [](#callback-parameters) Callback Parameters * reaction `Reaction` #### [](#reaction) Reaction * data `TReaction` * dữ liệu của sự kiện * threadId `string` * id người dùng/nhóm của sự kiện * isSelf `boolean` * true nếu sự kiện đó bắt nguồn từ tải khoản đang sử dụng * isGroup `boolean` * true nếu sự kiện đó xảy ra ở nhóm ### [](#examples) Examples Lắng nghe và in ra dữ liệu của tin nhắn Copy api.listener.on("reaction", (reaction) => { console.log(reaction); }); api.listener.start(); [Previousmessage](/listener/message) [Nextundo](/listener/undo) Last updated 1 month ago * * * --- # getStickersDetail | zca-js [](#api.getstickersdetail-stickerids) api.getStickersDetail(stickerIds) ---------------------------------------------------------------------------- ### [](#parameters) Parameters * stickerIds `number` | `number[]` * mảng hoặc 1 id sticker cần lấy thông tin ### [](#return) Return `Promise` #### [](#stickerdetailresponse) StickerDetailResponse * id `number` * cateId `number` * type `number` * stickerUrl `string` * stickerSpriteUrl `string` * stickerWebpUrl `string` | `null` ### [](#examples) Examples Lấy sticker với từ khóa `"xin chào"` Copy // lấy thông tin của 5 sticker đầu tiên tìm thấy với từ khóa try { const keyword = "xin chào"; const stickerIds = await api.getStickers(keyword); const stickersDetail = await api.getStickersDetail(stickerIds.slice(0, 5)); console.log(stickersDetail); } catch(e) { console.error(e); } [PreviousgetStickers](/api/getstickers) [NextgetUserInfo](/api/getuserinfo) Last updated 1 month ago * * * --- # Giới thiệu | zca-js * * * --- # sendSticker | zca-js [](#api.sendsticker-sticker-threadid-type) api.sendSticker(sticker, threadId\[, type\]) -------------------------------------------------------------------------------------------- ### [](#parameters) Parameters * sticker `Sticker` * threadId `string` * id của người/nhóm cần gửi * type `ThreadType?` * loại thread: người dùng/nhóm, mặc định là người dùng ### [](#return) Return `Promise` ### [](#code-mau) Code mẫu Gửi sticker `"xin chào"` Copy import { ThreadType } from "zca-js" // tìm sticker "hello", lấy và gửi sticker đầu tiên tìm thấy api.getStickers("hello") .then(async (stickerIds) => { const stickersDetail = await api.getStickersDetail(stickerIds[0]); api.sendSticker(stickersDetail[0], "0000000000000001", ThreadType.User) .then(console.log) .catch(console.error); }) .catch(console.error); [](#references) References ------------------------------- ### [](#apis) APIs * [getStickers](/api/getstickers) * [getStickersDetail](/api/getstickersdetail) ### [](#objects) Objects * [Sticker](/api/getstickersdetail#stickerdetailresponse) [PrevioussendReport](/api/sendreport) [NextsendVoice](/api/sendvoice) Last updated 1 month ago * * * --- # Đăng nhập với Cookie | zca-js * * * --- # sendCard | zca-js [](#api.sendcard-options-threadid-type) api.sendCard(options, threadId\[, type\]) -------------------------------------------------------------------------------------- ### [](#parameters) Parameters * options * userId `string` * phoneNumber `string?` * ttl `number?` * thời gian tồn tại danh thiếp, mặc định là 0 (vô hạn) * threadId `string` * id của người dùng hoặc nhóm * type `ThreadType?` * loại thread: người dùng/nhóm, mặc định là người dùng ### [](#return) Return `Promise` #### [](#sendcardresponse) SendCardResponse * msgId `number` ### [](#examples) Examples Gửi danh thiếp của tài khoản đã đăng nhập tới 1 nhóm Copy import { ThreadType } from "zca-js"; const threadId = "0000000000000000000"; const loggedInId = api.getOwnId(); const phoneNumber = "0900000000"; api.sendCard( { userId: loggedInId, phoneNumber: phoneNumber, }, threadId, ThreadType.Group ) .then(console.log) .catch(console.error); [PreviousremoveUserFromGroup](/api/removeuserfromgroup) [NextsendFriendRequest](/api/sendfriendrequest) Last updated 1 month ago * * * --- # removeGroupDeputy | zca-js [](#api.removegroupdeputy-memberid-groupid) api.removeGroupDeputy(memberId, groupId) ----------------------------------------------------------------------------------------- ### [](#parameters) Parameters * memberId `string` | `string[]` * groupId `string` ### [](#return) Return `Promise` ### [](#examples) Examples Copy const groupId = "0000000000000000000"; const memberId = "0000000000000000001"; await api.removeGroupDeputy(memberId, groupId); [PreviouspinConversations](/api/pinconversations) [NextremoveUserFromGroup](/api/removeuserfromgroup) Last updated 1 month ago * * * --- # sendReport | zca-js [](#api.sendreport-options-threadid-type) api.sendReport(options, threadId\[, type\]) ------------------------------------------------------------------------------------------ ### [](#parameters) Parameters * options * reason `ReportReason` * content `string?` * Nội dung báo xấu, chỉ cần nếu reason là `ReportReason.Other` * threadId `string` * type `ThreadType?` * loại thread, mặc định là người dùng #### [](#reportreason) ReportReason `Sensitive`, `Annoy`, `Fraud`, `Other` ### [](#return) Return `Promise` #### [](#sendreportresponse) SendReportResponse * reportId `string` ### [](#examples) Examples Báo xấu người dùng Copy import { ReportReason } from "zca-js"; const userId = "0000000000000001" api.sendReport( { reason: ReportReason.Fraud }, userId ) .then(console.log) .catch(console.error); [PrevioussendMessage](/api/sendmessage) [NextsendSticker](/api/sendsticker) Last updated 1 month ago * * * --- # undo | zca-js [](#api.undo-message) api.undo(message) -------------------------------------------- ### [](#parameters) Parameters * message `Message` ### [](#return) Return `Promise` ### [](#examples) Examples Copy // Thu hồi tin nhắn của bản thân nếu nó có chứa từ undo api.listener.on("message", (message) => { const { content } = message.data; const isTextMessage = typeof content == "string"; const shouldUndo = isTextMessage && content.includes("undo"); if (message.isSelf && shouldUndo) { api.undo(message).then(console.log).catch(console.error); } }); [PreviousunblockUser](/api/unblockuser) [Nextmessage](/listener/message) Last updated 1 month ago * * * ---