redai-automation-web-sdk
Version:
TypeScript SDK for RedAI Automation Web API - Zalo Personal automation, messaging, advanced sticker search, and bulk operations. 100% compatible with automation-web backend. v1.8.1: Updated GroupInfo interface to match backend controller with complete gro
370 lines • 8.68 kB
TypeScript
/**
* Webhook management service
*/
import { HttpClient } from '../../utils/http.utils';
import { AutomationWebResponse } from '../../types/common.types';
import { Message, Typing, Reaction, SeenMessage, DeliveredMessage, FriendEvent, GroupEvent, Undo } from '../../types/webhook';
/**
* Webhook listener options
*/
export interface WebhookListenerOptions {
/**
* Enable self listen for own messages
* @default false
*/
selfListen?: boolean;
/**
* Enable debug logging
* @default false
*/
logging?: boolean;
/**
* Auto reconnect on disconnect
* @default true
*/
autoReconnect?: boolean;
/**
* Reconnect delay in milliseconds
* @default 5000
*/
reconnectDelay?: number;
}
/**
* Start webhook listener request
*/
export interface StartWebhookListenerRequest {
/**
* Session ID
*/
sessionId: string;
/**
* Webhook listener options
*/
options?: WebhookListenerOptions;
}
/**
* Stop webhook listener request
*/
export interface StopWebhookListenerRequest {
/**
* Session ID
*/
sessionId: string;
}
/**
* Webhook listener status
*/
export type WebhookListenerStatus = 'active' | 'inactive' | 'error' | 'connecting';
/**
* Webhook listener status response
*/
export interface WebhookListenerStatusResponse {
/**
* Session ID
*/
sessionId: string;
/**
* Current status
*/
status: WebhookListenerStatus;
/**
* Error message if status is error
*/
error?: string;
/**
* Timestamp when connected
*/
connectedAt?: number;
/**
* Timestamp of last event
*/
lastEventAt?: number;
/**
* Total event count
*/
eventCount?: number;
}
/**
* Webhook statistics
*/
export interface WebhookStatistics {
/**
* Session ID
*/
sessionId: string;
/**
* Total events processed
*/
totalEvents: number;
/**
* Events processed today
*/
eventsToday: number;
/**
* Last event timestamp
*/
lastEventTimestamp: number;
/**
* Events count by type
*/
eventsByType: Record<string, number>;
/**
* Queue statistics
*/
queueStats: {
waiting: number;
active: number;
completed: number;
failed: number;
};
}
/**
* Webhook event response
*/
export interface WebhookEventResponse {
/**
* Event ID
*/
eventId: string;
/**
* Session ID
*/
sessionId: string;
/**
* Event type
*/
eventType: string;
/**
* Event timestamp
*/
timestamp: number;
/**
* Processing status
*/
status: 'queued' | 'processing' | 'completed' | 'failed';
/**
* Job ID for tracking
*/
jobId?: string;
/**
* Error message if failed
*/
error?: string;
}
/**
* Response DTO cho validate session
*/
export interface ValidateSessionResponse {
sessionId: string;
isValid: boolean;
status: string;
lastActivity?: number;
errors?: string[];
}
/**
* Response DTO cho validate all sessions
*/
export interface ValidateAllSessionsResponse {
totalSessions: number;
validSessions: number;
invalidSessions: number;
results: ValidateSessionResponse[];
}
/**
* Response DTO cho cleanup expired sessions
*/
export interface CleanupExpiredSessionsResponse {
cleanupCount: number;
expiredSessions: string[];
message: string;
}
/**
* Request old messages request
*/
export interface RequestOldMessagesRequest {
/**
* Session ID
*/
sessionId: string;
/**
* Thread type ('user' or 'group')
* @default 'user'
*/
threadType?: 'user' | 'group';
/**
* Last message ID to get older messages
* If null, get from latest messages
* @default null
*/
lastMsgId?: string | null;
}
/**
* Request old messages response
*/
export interface RequestOldMessagesResponse {
/**
* Session ID
*/
sessionId: string;
/**
* Thread type
*/
threadType: 'user' | 'group';
/**
* Last message ID used in request
*/
lastMsgId: string | null;
}
/**
* Webhook Event Handlers
*/
export interface WebhookEventHandlers {
/**
* Message received handler
*/
onMessage?: (event: Message) => void;
/**
* Typing event handler
*/
onTyping?: (event: Typing) => void;
/**
* Reaction event handler
*/
onReaction?: (event: Reaction) => void;
/**
* Message seen handler
*/
onMessageSeen?: (event: SeenMessage) => void;
/**
* Message delivered handler
*/
onMessageDelivered?: (event: DeliveredMessage) => void;
/**
* Friend event handler
*/
onFriendEvent?: (event: FriendEvent) => void;
/**
* Group event handler
*/
onGroupEvent?: (event: GroupEvent) => void;
/**
* Message undo handler
*/
onUndo?: (event: Undo) => void;
/**
* Generic event handler for unknown events
*/
onUnknownEvent?: (eventType: string, data: any) => void;
/**
* Error handler
*/
onError?: (error: Error) => void;
/**
* Connection status handler
*/
onConnectionChange?: (status: 'connected' | 'disconnected' | 'reconnecting') => void;
}
/**
* Webhook management service class
*/
export declare class WebhookService {
private httpClient;
constructor(httpClient: HttpClient);
/**
* Start webhook listener for a session
*/
startWebhookListener(request: StartWebhookListenerRequest): Promise<WebhookListenerStatusResponse>;
/**
* Stop webhook listener for a session
*/
stopWebhookListener(request: StopWebhookListenerRequest): Promise<WebhookListenerStatusResponse>;
/**
* Get webhook listener status for a session
*/
getWebhookListenerStatus(sessionId: string): Promise<WebhookListenerStatusResponse>;
/**
* Get webhook statistics for a session
*/
getWebhookStatistics(sessionId: string): Promise<WebhookStatistics>;
/**
* Get all active webhook listeners
*/
getActiveWebhookListeners(): Promise<{
activeListeners: string[];
count: number;
}>;
/**
* Restart webhook listener for a session
*/
restartWebhookListener(sessionId: string, options?: WebhookListenerOptions): Promise<WebhookListenerStatusResponse>;
/**
* Check if webhook listener is active
*/
isWebhookListenerActive(sessionId: string): Promise<boolean>;
/**
* Get webhook health status
*/
getWebhookHealth(): Promise<{
status: 'healthy' | 'unhealthy';
activeListeners: number;
totalEvents: number;
queueHealth: {
waiting: number;
active: number;
failed: number;
};
}>;
/**
* Stop all webhook listeners
*/
stopAllWebhookListeners(): Promise<{
stoppedListeners: string[];
count: number;
}>;
/**
* Validate session
* GET /webhook/validate/:sessionId
*/
validateSession(sessionId: string): Promise<AutomationWebResponse<ValidateSessionResponse>>;
/**
* Validate all sessions
* POST /webhook/validate-all
*/
validateAllSessions(): Promise<AutomationWebResponse<ValidateAllSessionsResponse>>;
/**
* Cleanup expired sessions
* DELETE /webhook/cleanup-expired
*/
cleanupExpiredSessions(): Promise<AutomationWebResponse<CleanupExpiredSessionsResponse>>;
/**
* Request old messages from a thread
* Pattern: Request-Response via WebSocket
*
* How it works:
* 1. Call this API to SEND REQUEST
* 2. Server processes and SENDS RESPONSE via 'old_messages' event
* 3. Results will be received via webhook event handler
*
* @param request - Request old messages parameters
* @returns Response with request confirmation
*
* @example
* ```typescript
* // Request latest messages for a user thread
* await webhookService.requestOldMessages({
* sessionId: 'your-session-id',
* threadType: 'user',
* lastMsgId: null
* });
*
* // Request older messages using last message ID
* await webhookService.requestOldMessages({
* sessionId: 'your-session-id',
* threadType: 'group',
* lastMsgId: 'msg-id-123'
* });
* ```
*/
requestOldMessages(request: RequestOldMessagesRequest): Promise<AutomationWebResponse<RequestOldMessagesResponse>>;
}
//# sourceMappingURL=webhook.service.d.ts.map