@warriorteam/redai-zalo-sdk
Version:
Comprehensive TypeScript/JavaScript SDK for Zalo APIs - Official Account, ZNS, Consultation Service, Group Messaging, and Social APIs
187 lines (153 loc) • 5.41 kB
text/typescript
/**
* Example: Using POST method to get user list
* Demonstrates the new postUserList method in UserService
*/
import { ZaloSDK, UserListRequest } from "../src/index";
async function demonstratePostUserList() {
// Initialize SDK
const zalo = new ZaloSDK({
appId: "your-app-id",
appSecret: "your-app-secret"
});
const accessToken = "your-access-token";
try {
console.log("=== POST User List Example ===\n");
// Example 1: Basic user list with POST method
console.log("1. Getting user list with POST method:");
const basicRequest: UserListRequest = {
offset: 0,
count: 10
};
const basicResult = await zalo.user.postUserList(accessToken, basicRequest);
console.log("Basic POST result:", {
total: basicResult.total,
userCount: basicResult.users.length,
users: basicResult.users.map(user => ({
user_id: user.user_id,
display_name: user.display_name,
user_is_follower: user.user_is_follower
}))
});
// Example 2: Filtered user list with tag
console.log("\n2. Getting users with specific tag (POST method):");
const taggedRequest: UserListRequest = {
offset: 0,
count: 20,
tag_name: "VIP_CUSTOMER"
};
const taggedResult = await zalo.user.postUserList(accessToken, taggedRequest);
console.log("Tagged users POST result:", {
total: taggedResult.total,
userCount: taggedResult.users.length,
tag_filter: "VIP_CUSTOMER"
});
// Example 3: Followers only with POST method
console.log("\n3. Getting followers only (POST method):");
const followersRequest: UserListRequest = {
offset: 0,
count: 15,
is_follower: true
};
const followersResult = await zalo.user.postUserList(accessToken, followersRequest);
console.log("Followers POST result:", {
total: followersResult.total,
userCount: followersResult.users.length,
followers_only: true
});
// Example 4: Users with recent interaction (POST method)
console.log("\n4. Getting users with recent interaction (POST method):");
const recentRequest: UserListRequest = {
offset: 0,
count: 25,
last_interaction_period: "7d" // Last 7 days
};
const recentResult = await zalo.user.postUserList(accessToken, recentRequest);
console.log("Recent interaction POST result:", {
total: recentResult.total,
userCount: recentResult.users.length,
interaction_period: "7d"
});
// Example 5: Compare GET vs POST methods
console.log("\n5. Comparing GET vs POST methods:");
const compareRequest: UserListRequest = {
offset: 0,
count: 5
};
// GET method
const getResult = await zalo.user.getUserList(accessToken, compareRequest);
console.log("GET method result:", {
total: getResult.total,
userCount: getResult.users.length,
method: "GET"
});
// POST method
const postResult = await zalo.user.postUserList(accessToken, compareRequest);
console.log("POST method result:", {
total: postResult.total,
userCount: postResult.users.length,
method: "POST"
});
console.log("Results should be identical:", {
totals_match: getResult.total === postResult.total,
counts_match: getResult.users.length === postResult.users.length
});
} catch (error) {
console.error("Error in POST user list example:", error);
if (error instanceof Error) {
console.error("Error details:", {
name: error.name,
message: error.message,
stack: error.stack
});
}
}
}
// Example usage with pagination using POST method
async function demonstratePaginationWithPost() {
const zalo = new ZaloSDK({
appId: "your-app-id",
appSecret: "your-app-secret"
});
const accessToken = "your-access-token";
try {
console.log("\n=== POST Method Pagination Example ===\n");
let offset = 0;
const count = 10;
let allUsers: any[] = [];
let totalUsers = 0;
do {
const request: UserListRequest = {
offset,
count
};
const result = await zalo.user.postUserList(accessToken, request);
console.log(`Page ${Math.floor(offset / count) + 1}:`, {
offset,
returned: result.users.length,
total: result.total
});
allUsers.push(...result.users);
totalUsers = result.total;
offset += count;
// Break if we've got all users or no more users returned
if (result.users.length < count || allUsers.length >= totalUsers) {
break;
}
} while (true);
console.log("\nPagination complete:", {
total_users: totalUsers,
fetched_users: allUsers.length,
method: "POST"
});
} catch (error) {
console.error("Error in POST pagination example:", error);
}
}
// Run examples
if (require.main === module) {
demonstratePostUserList()
.then(() => demonstratePaginationWithPost())
.then(() => console.log("\n✅ POST User List examples completed!"))
.catch(error => console.error("❌ Example failed:", error));
}
export { demonstratePostUserList, demonstratePaginationWithPost };