@warriorteam/redai-zalo-sdk 1.12.0 → 1.12.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ARCHITECTURE.md +265 -0
- package/CHANGELOG.md +0 -57
- package/README.md +1 -33
- package/SERVICES_ADDED.md +540 -0
- package/UPDATE_ARTICLE_STATUS.md +152 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -8
- package/dist/index.js.map +1 -1
- package/dist/types/webhook.d.ts +0 -24
- package/dist/types/webhook.d.ts.map +1 -1
- package/dist/types/webhook.js +0 -110
- package/dist/types/webhook.js.map +1 -1
- package/dist/utils/type-guards.d.ts +92 -0
- package/dist/utils/type-guards.d.ts.map +1 -0
- package/dist/utils/type-guards.js +184 -0
- package/dist/utils/type-guards.js.map +1 -0
- package/docs/ARTICLE_MANAGEMENT.md +395 -395
- package/docs/AUTHENTICATION.md +852 -853
- package/docs/CONSULTATION_SERVICE.md +512 -512
- package/docs/GROUP_MANAGEMENT.md +232 -232
- package/docs/USER_MANAGEMENT.md +481 -481
- package/docs/WEBHOOK_EVENTS.md +858 -858
- package/examples/article-status-update.ts +178 -178
- package/examples/oa-auth-with-pkce.ts +179 -179
- package/examples/user-list-post-example.ts +186 -186
- package/examples/video-upload-combined.example.ts +228 -228
- package/examples/zns-template-edit.example.ts +317 -317
- package/package.json +1 -1
- package/docs/WEBHOOK_MESSAGE_HELPERS.md +0 -230
- package/examples/webhook-message-classification.ts +0 -285
|
@@ -1,230 +0,0 @@
|
|
|
1
|
-
# Webhook Message Helper Functions
|
|
2
|
-
|
|
3
|
-
Tài liệu này mô tả các hàm helper để phân biệt các loại sự kiện tin nhắn trong Zalo webhook.
|
|
4
|
-
|
|
5
|
-
## Tổng quan
|
|
6
|
-
|
|
7
|
-
RedAI Zalo SDK cung cấp các hàm helper để dễ dàng phân biệt các loại sự kiện tin nhắn:
|
|
8
|
-
|
|
9
|
-
1. **Tin nhắn từ người dùng cá nhân** - `isUserMessageEvent()`
|
|
10
|
-
2. **Tin nhắn từ group** - `isGroupMessageEvent()`
|
|
11
|
-
3. **Tin nhắn OA gửi cho cá nhân** - `isOAToUserMessageEvent()`
|
|
12
|
-
4. **Tin nhắn OA gửi tới group** - `isOAToGroupMessageEvent()`
|
|
13
|
-
5. **Xác định hướng và đích của tin nhắn** - `getMessageDirection()`
|
|
14
|
-
|
|
15
|
-
## Import
|
|
16
|
-
|
|
17
|
-
```typescript
|
|
18
|
-
import {
|
|
19
|
-
isUserMessageEvent,
|
|
20
|
-
isGroupMessageEvent,
|
|
21
|
-
isOAToUserMessageEvent,
|
|
22
|
-
isOAToGroupMessageEvent,
|
|
23
|
-
getMessageDirection,
|
|
24
|
-
WebhookEvent,
|
|
25
|
-
} from '@warriorteam/redai-zalo-sdk';
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
## Sử dụng
|
|
29
|
-
|
|
30
|
-
### 1. Phân biệt tin nhắn từ người dùng cá nhân
|
|
31
|
-
|
|
32
|
-
```typescript
|
|
33
|
-
function handleWebhook(event: WebhookEvent) {
|
|
34
|
-
if (isUserMessageEvent(event)) {
|
|
35
|
-
console.log('Nhận được tin nhắn từ người dùng cá nhân');
|
|
36
|
-
console.log('Sender:', event.sender.id);
|
|
37
|
-
console.log('Content:', event.message.text);
|
|
38
|
-
|
|
39
|
-
// Xử lý tin nhắn từ user cá nhân
|
|
40
|
-
handleUserMessage(event);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
### 2. Phân biệt tin nhắn từ group
|
|
46
|
-
|
|
47
|
-
```typescript
|
|
48
|
-
function handleWebhook(event: WebhookEvent) {
|
|
49
|
-
if (isGroupMessageEvent(event)) {
|
|
50
|
-
console.log('Nhận được tin nhắn từ group');
|
|
51
|
-
console.log('Group ID:', event.recipient.id);
|
|
52
|
-
console.log('Sender:', event.sender.id);
|
|
53
|
-
console.log('Content:', event.message.text);
|
|
54
|
-
|
|
55
|
-
// Xử lý tin nhắn từ group
|
|
56
|
-
handleGroupMessage(event);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
### 3. Phân biệt tin nhắn OA gửi cho cá nhân
|
|
62
|
-
|
|
63
|
-
```typescript
|
|
64
|
-
function handleWebhook(event: WebhookEvent) {
|
|
65
|
-
if (isOAToUserMessageEvent(event)) {
|
|
66
|
-
console.log('OA đã gửi tin nhắn cho người dùng cá nhân');
|
|
67
|
-
console.log('Recipient:', event.recipient.id);
|
|
68
|
-
console.log('Content:', event.message.text);
|
|
69
|
-
|
|
70
|
-
// Xử lý tin nhắn OA gửi cho user
|
|
71
|
-
handleOAToUserMessage(event);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
### 4. Phân biệt tin nhắn OA gửi tới group
|
|
77
|
-
|
|
78
|
-
```typescript
|
|
79
|
-
function handleWebhook(event: WebhookEvent) {
|
|
80
|
-
if (isOAToGroupMessageEvent(event)) {
|
|
81
|
-
console.log('OA đã gửi tin nhắn tới group');
|
|
82
|
-
console.log('Group ID:', event.recipient.id);
|
|
83
|
-
console.log('Content:', event.message.text);
|
|
84
|
-
|
|
85
|
-
// Xử lý tin nhắn OA gửi tới group
|
|
86
|
-
handleOAToGroupMessage(event);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
### 5. Xác định hướng và đích của tin nhắn
|
|
92
|
-
|
|
93
|
-
```typescript
|
|
94
|
-
function handleWebhook(event: WebhookEvent) {
|
|
95
|
-
const messageInfo = getMessageDirection(event);
|
|
96
|
-
|
|
97
|
-
console.log('Direction:', messageInfo.direction); // 'incoming' | 'outgoing' | 'unknown'
|
|
98
|
-
console.log('Target:', messageInfo.target); // 'user' | 'group' | 'unknown'
|
|
99
|
-
console.log('Description:', messageInfo.description);
|
|
100
|
-
|
|
101
|
-
// Xử lý dựa trên hướng và đích
|
|
102
|
-
switch (`${messageInfo.direction}-${messageInfo.target}`) {
|
|
103
|
-
case 'incoming-user':
|
|
104
|
-
handleIncomingUserMessage(event);
|
|
105
|
-
break;
|
|
106
|
-
case 'incoming-group':
|
|
107
|
-
handleIncomingGroupMessage(event);
|
|
108
|
-
break;
|
|
109
|
-
case 'outgoing-user':
|
|
110
|
-
handleOutgoingUserMessage(event);
|
|
111
|
-
break;
|
|
112
|
-
case 'outgoing-group':
|
|
113
|
-
handleOutgoingGroupMessage(event);
|
|
114
|
-
break;
|
|
115
|
-
default:
|
|
116
|
-
console.log('Unknown message type');
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
## Ví dụ tổng hợp
|
|
122
|
-
|
|
123
|
-
```typescript
|
|
124
|
-
import {
|
|
125
|
-
isUserMessageEvent,
|
|
126
|
-
isGroupMessageEvent,
|
|
127
|
-
isOAToUserMessageEvent,
|
|
128
|
-
isOAToGroupMessageEvent,
|
|
129
|
-
getMessageDirection,
|
|
130
|
-
WebhookEvent,
|
|
131
|
-
} from '@warriorteam/redai-zalo-sdk';
|
|
132
|
-
|
|
133
|
-
class ZaloWebhookHandler {
|
|
134
|
-
handleWebhook(event: WebhookEvent) {
|
|
135
|
-
// Cách 1: Sử dụng các hàm kiểm tra riêng lẻ
|
|
136
|
-
if (isUserMessageEvent(event)) {
|
|
137
|
-
this.handleUserMessage(event);
|
|
138
|
-
} else if (isGroupMessageEvent(event)) {
|
|
139
|
-
this.handleGroupMessage(event);
|
|
140
|
-
} else if (isOAToUserMessageEvent(event)) {
|
|
141
|
-
this.handleOAToUserMessage(event);
|
|
142
|
-
} else if (isOAToGroupMessageEvent(event)) {
|
|
143
|
-
this.handleOAToGroupMessage(event);
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
// Cách 2: Sử dụng getMessageDirection
|
|
147
|
-
const messageInfo = getMessageDirection(event);
|
|
148
|
-
this.logMessageInfo(messageInfo);
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
private handleUserMessage(event: UserMessageWebhookEvent) {
|
|
152
|
-
console.log('Processing user message:', event.message.text);
|
|
153
|
-
// Logic xử lý tin nhắn từ user cá nhân
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
private handleGroupMessage(event: GroupWebhookEvent) {
|
|
157
|
-
console.log('Processing group message:', event.message.text);
|
|
158
|
-
// Logic xử lý tin nhắn từ group
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
private handleOAToUserMessage(event: OAMessageWebhookEvent) {
|
|
162
|
-
console.log('Processing OA to user message:', event.message.text);
|
|
163
|
-
// Logic xử lý tin nhắn OA gửi cho user
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
private handleOAToGroupMessage(event: GroupWebhookEvent) {
|
|
167
|
-
console.log('Processing OA to group message:', event.message.text);
|
|
168
|
-
// Logic xử lý tin nhắn OA gửi tới group
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
private logMessageInfo(messageInfo: ReturnType<typeof getMessageDirection>) {
|
|
172
|
-
console.log(`Message: ${messageInfo.direction} -> ${messageInfo.target}`);
|
|
173
|
-
console.log(`Description: ${messageInfo.description}`);
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
```
|
|
177
|
-
|
|
178
|
-
## Các loại sự kiện được hỗ trợ
|
|
179
|
-
|
|
180
|
-
### User Message Events (Tin nhắn từ người dùng cá nhân)
|
|
181
|
-
- `user_send_text`
|
|
182
|
-
- `user_send_image`
|
|
183
|
-
- `user_send_location`
|
|
184
|
-
- `user_send_link`
|
|
185
|
-
- `user_send_sticker`
|
|
186
|
-
- `user_send_gif`
|
|
187
|
-
- `user_send_audio`
|
|
188
|
-
- `user_send_video`
|
|
189
|
-
- `user_send_file`
|
|
190
|
-
- `user_received_message`
|
|
191
|
-
- `user_seen_message`
|
|
192
|
-
- `user_send_business_card`
|
|
193
|
-
|
|
194
|
-
### Group Message Events (Tin nhắn từ group)
|
|
195
|
-
- `user_send_group_text`
|
|
196
|
-
- `user_send_group_link`
|
|
197
|
-
- `user_send_group_audio`
|
|
198
|
-
- `user_send_group_location`
|
|
199
|
-
- `user_send_group_video`
|
|
200
|
-
- `user_send_group_business_card`
|
|
201
|
-
- `user_send_group_sticker`
|
|
202
|
-
- `user_send_group_gif`
|
|
203
|
-
- `user_send_group_file`
|
|
204
|
-
|
|
205
|
-
### OA to User Events (OA gửi cho cá nhân)
|
|
206
|
-
- `oa_send_text`
|
|
207
|
-
- `oa_send_image`
|
|
208
|
-
- `oa_send_gif`
|
|
209
|
-
- `oa_send_list`
|
|
210
|
-
- `oa_send_file`
|
|
211
|
-
- `oa_send_sticker`
|
|
212
|
-
- `oa_send_template`
|
|
213
|
-
|
|
214
|
-
### OA to Group Events (OA gửi tới group)
|
|
215
|
-
- `oa_send_group_text`
|
|
216
|
-
- `oa_send_group_image`
|
|
217
|
-
- `oa_send_group_link`
|
|
218
|
-
- `oa_send_group_audio`
|
|
219
|
-
- `oa_send_group_location`
|
|
220
|
-
- `oa_send_group_video`
|
|
221
|
-
- `oa_send_group_business_card`
|
|
222
|
-
- `oa_send_group_sticker`
|
|
223
|
-
- `oa_send_group_gif`
|
|
224
|
-
- `oa_send_group_file`
|
|
225
|
-
|
|
226
|
-
## Lưu ý
|
|
227
|
-
|
|
228
|
-
1. Các hàm helper này chỉ hoạt động với các sự kiện tin nhắn, không áp dụng cho các sự kiện khác như follow/unfollow.
|
|
229
|
-
2. Sử dụng TypeScript để có type safety tốt nhất.
|
|
230
|
-
3. Các hàm này đã được test kỹ lưỡng và an toàn để sử dụng trong production.
|
|
@@ -1,285 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Ví dụ sử dụng các hàm helper để phân loại tin nhắn webhook
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import {
|
|
6
|
-
isUserMessageEvent,
|
|
7
|
-
isGroupMessageEvent,
|
|
8
|
-
isOAToUserMessageEvent,
|
|
9
|
-
isOAToGroupMessageEvent,
|
|
10
|
-
getMessageDirection,
|
|
11
|
-
WebhookEvent,
|
|
12
|
-
UserMessageWebhookEvent,
|
|
13
|
-
GroupWebhookEvent,
|
|
14
|
-
OAMessageWebhookEvent,
|
|
15
|
-
} from '@warriorteam/redai-zalo-sdk';
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Service xử lý webhook với phân loại tin nhắn
|
|
19
|
-
*/
|
|
20
|
-
export class ZaloWebhookMessageHandler {
|
|
21
|
-
/**
|
|
22
|
-
* Xử lý webhook event chính
|
|
23
|
-
*/
|
|
24
|
-
public handleWebhook(event: WebhookEvent): void {
|
|
25
|
-
console.log('=== Webhook Event Received ===');
|
|
26
|
-
console.log('Event Name:', event.event_name);
|
|
27
|
-
console.log('Timestamp:', event.timestamp);
|
|
28
|
-
|
|
29
|
-
// Phương pháp 1: Sử dụng các hàm kiểm tra riêng lẻ
|
|
30
|
-
this.classifyBySpecificChecks(event);
|
|
31
|
-
|
|
32
|
-
// Phương pháp 2: Sử dụng getMessageDirection
|
|
33
|
-
this.classifyByDirection(event);
|
|
34
|
-
|
|
35
|
-
// Xử lý tin nhắn dựa trên loại
|
|
36
|
-
this.processMessage(event);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Phân loại bằng các hàm kiểm tra riêng lẻ
|
|
41
|
-
*/
|
|
42
|
-
private classifyBySpecificChecks(event: WebhookEvent): void {
|
|
43
|
-
console.log('\n--- Classification by Specific Checks ---');
|
|
44
|
-
|
|
45
|
-
if (isUserMessageEvent(event)) {
|
|
46
|
-
console.log('✅ Tin nhắn từ người dùng cá nhân');
|
|
47
|
-
this.logUserMessageDetails(event);
|
|
48
|
-
} else if (isGroupMessageEvent(event)) {
|
|
49
|
-
console.log('✅ Tin nhắn từ group');
|
|
50
|
-
this.logGroupMessageDetails(event);
|
|
51
|
-
} else if (isOAToUserMessageEvent(event)) {
|
|
52
|
-
console.log('✅ OA gửi tin nhắn cho người dùng cá nhân');
|
|
53
|
-
this.logOAToUserDetails(event);
|
|
54
|
-
} else if (isOAToGroupMessageEvent(event)) {
|
|
55
|
-
console.log('✅ OA gửi tin nhắn tới group');
|
|
56
|
-
this.logOAToGroupDetails(event);
|
|
57
|
-
} else {
|
|
58
|
-
console.log('❓ Sự kiện không phải tin nhắn hoặc không xác định');
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* Phân loại bằng getMessageDirection
|
|
64
|
-
*/
|
|
65
|
-
private classifyByDirection(event: WebhookEvent): void {
|
|
66
|
-
console.log('\n--- Classification by Direction ---');
|
|
67
|
-
|
|
68
|
-
const messageInfo = getMessageDirection(event);
|
|
69
|
-
console.log(`Direction: ${messageInfo.direction}`);
|
|
70
|
-
console.log(`Target: ${messageInfo.target}`);
|
|
71
|
-
console.log(`Description: ${messageInfo.description}`);
|
|
72
|
-
|
|
73
|
-
// Xử lý dựa trên direction và target
|
|
74
|
-
const key = `${messageInfo.direction}-${messageInfo.target}`;
|
|
75
|
-
switch (key) {
|
|
76
|
-
case 'incoming-user':
|
|
77
|
-
console.log('🔵 Xử lý tin nhắn đến từ user cá nhân');
|
|
78
|
-
break;
|
|
79
|
-
case 'incoming-group':
|
|
80
|
-
console.log('🟢 Xử lý tin nhắn đến từ group');
|
|
81
|
-
break;
|
|
82
|
-
case 'outgoing-user':
|
|
83
|
-
console.log('🟡 Xử lý tin nhắn OA gửi cho user');
|
|
84
|
-
break;
|
|
85
|
-
case 'outgoing-group':
|
|
86
|
-
console.log('🟠 Xử lý tin nhắn OA gửi tới group');
|
|
87
|
-
break;
|
|
88
|
-
default:
|
|
89
|
-
console.log('⚪ Sự kiện không xác định');
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
/**
|
|
94
|
-
* Xử lý tin nhắn dựa trên loại
|
|
95
|
-
*/
|
|
96
|
-
private processMessage(event: WebhookEvent): void {
|
|
97
|
-
console.log('\n--- Message Processing ---');
|
|
98
|
-
|
|
99
|
-
if (isUserMessageEvent(event)) {
|
|
100
|
-
this.processUserMessage(event);
|
|
101
|
-
} else if (isGroupMessageEvent(event)) {
|
|
102
|
-
this.processGroupMessage(event);
|
|
103
|
-
} else if (isOAToUserMessageEvent(event)) {
|
|
104
|
-
this.processOAToUserMessage(event);
|
|
105
|
-
} else if (isOAToGroupMessageEvent(event)) {
|
|
106
|
-
this.processOAToGroupMessage(event);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
/**
|
|
111
|
-
* Xử lý tin nhắn từ user cá nhân
|
|
112
|
-
*/
|
|
113
|
-
private processUserMessage(event: UserMessageWebhookEvent): void {
|
|
114
|
-
console.log('Processing user message...');
|
|
115
|
-
|
|
116
|
-
// Logic xử lý tin nhắn từ user cá nhân
|
|
117
|
-
// - Lưu vào database
|
|
118
|
-
// - Trigger AI response
|
|
119
|
-
// - Update conversation state
|
|
120
|
-
|
|
121
|
-
console.log('✅ User message processed');
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
/**
|
|
125
|
-
* Xử lý tin nhắn từ group
|
|
126
|
-
*/
|
|
127
|
-
private processGroupMessage(event: GroupWebhookEvent): void {
|
|
128
|
-
console.log('Processing group message...');
|
|
129
|
-
|
|
130
|
-
// Logic xử lý tin nhắn từ group
|
|
131
|
-
// - Check if OA is mentioned
|
|
132
|
-
// - Apply group-specific rules
|
|
133
|
-
// - Handle group moderation
|
|
134
|
-
|
|
135
|
-
console.log('✅ Group message processed');
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
/**
|
|
139
|
-
* Xử lý tin nhắn OA gửi cho user
|
|
140
|
-
*/
|
|
141
|
-
private processOAToUserMessage(event: OAMessageWebhookEvent): void {
|
|
142
|
-
console.log('Processing OA to user message...');
|
|
143
|
-
|
|
144
|
-
// Logic xử lý tin nhắn OA gửi
|
|
145
|
-
// - Log outbound message
|
|
146
|
-
// - Update delivery status
|
|
147
|
-
// - Track engagement metrics
|
|
148
|
-
|
|
149
|
-
console.log('✅ OA to user message processed');
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
/**
|
|
153
|
-
* Xử lý tin nhắn OA gửi tới group
|
|
154
|
-
*/
|
|
155
|
-
private processOAToGroupMessage(event: GroupWebhookEvent): void {
|
|
156
|
-
console.log('Processing OA to group message...');
|
|
157
|
-
|
|
158
|
-
// Logic xử lý tin nhắn OA gửi tới group
|
|
159
|
-
// - Log group broadcast
|
|
160
|
-
// - Track group engagement
|
|
161
|
-
// - Update group statistics
|
|
162
|
-
|
|
163
|
-
console.log('✅ OA to group message processed');
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
/**
|
|
167
|
-
* Log chi tiết tin nhắn user
|
|
168
|
-
*/
|
|
169
|
-
private logUserMessageDetails(event: UserMessageWebhookEvent): void {
|
|
170
|
-
console.log(` - Sender ID: ${event.sender.id}`);
|
|
171
|
-
console.log(` - Recipient ID: ${event.recipient.id}`);
|
|
172
|
-
if ('message' in event && event.message.text) {
|
|
173
|
-
console.log(` - Text: ${event.message.text}`);
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
/**
|
|
178
|
-
* Log chi tiết tin nhắn group
|
|
179
|
-
*/
|
|
180
|
-
private logGroupMessageDetails(event: GroupWebhookEvent): void {
|
|
181
|
-
console.log(` - Sender ID: ${event.sender.id}`);
|
|
182
|
-
console.log(` - Group ID: ${event.recipient.id}`);
|
|
183
|
-
if ('oa_id' in event) {
|
|
184
|
-
console.log(` - OA ID: ${event.oa_id}`);
|
|
185
|
-
}
|
|
186
|
-
if ('message' in event && event.message.text) {
|
|
187
|
-
console.log(` - Text: ${event.message.text}`);
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
/**
|
|
192
|
-
* Log chi tiết OA to user
|
|
193
|
-
*/
|
|
194
|
-
private logOAToUserDetails(event: OAMessageWebhookEvent): void {
|
|
195
|
-
console.log(` - OA ID: ${event.sender.id}`);
|
|
196
|
-
console.log(` - User ID: ${event.recipient.id}`);
|
|
197
|
-
if ('message' in event && event.message.text) {
|
|
198
|
-
console.log(` - Text: ${event.message.text}`);
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
/**
|
|
203
|
-
* Log chi tiết OA to group
|
|
204
|
-
*/
|
|
205
|
-
private logOAToGroupDetails(event: GroupWebhookEvent): void {
|
|
206
|
-
console.log(` - OA ID: ${event.sender.id}`);
|
|
207
|
-
console.log(` - Group ID: ${event.recipient.id}`);
|
|
208
|
-
if ('oa_id' in event) {
|
|
209
|
-
console.log(` - OA ID: ${event.oa_id}`);
|
|
210
|
-
}
|
|
211
|
-
if ('message' in event && event.message.text) {
|
|
212
|
-
console.log(` - Text: ${event.message.text}`);
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
/**
|
|
218
|
-
* Ví dụ sử dụng
|
|
219
|
-
*/
|
|
220
|
-
export function exampleUsage(): void {
|
|
221
|
-
const handler = new ZaloWebhookMessageHandler();
|
|
222
|
-
|
|
223
|
-
// Ví dụ 1: Tin nhắn từ user cá nhân
|
|
224
|
-
const userMessage = {
|
|
225
|
-
app_id: 'test-app',
|
|
226
|
-
user_id_by_app: 'test-user',
|
|
227
|
-
event_name: 'user_send_text',
|
|
228
|
-
timestamp: '1234567890',
|
|
229
|
-
sender: { id: 'user123' },
|
|
230
|
-
recipient: { id: 'oa123' },
|
|
231
|
-
message: { msg_id: 'msg123', text: 'Xin chào!' }
|
|
232
|
-
};
|
|
233
|
-
|
|
234
|
-
console.log('=== Example 1: User Message ===');
|
|
235
|
-
handler.handleWebhook(userMessage as any);
|
|
236
|
-
|
|
237
|
-
// Ví dụ 2: Tin nhắn từ group
|
|
238
|
-
const groupMessage = {
|
|
239
|
-
app_id: 'test-app',
|
|
240
|
-
user_id_by_app: 'test-user',
|
|
241
|
-
event_name: 'user_send_group_text',
|
|
242
|
-
timestamp: '1234567890',
|
|
243
|
-
oa_id: 'oa123',
|
|
244
|
-
sender: { id: 'user456' },
|
|
245
|
-
recipient: { id: 'group789' },
|
|
246
|
-
message: { msg_id: 'msg456', text: 'Hello group!' }
|
|
247
|
-
};
|
|
248
|
-
|
|
249
|
-
console.log('\n=== Example 2: Group Message ===');
|
|
250
|
-
handler.handleWebhook(groupMessage as any);
|
|
251
|
-
|
|
252
|
-
// Ví dụ 3: OA gửi cho user
|
|
253
|
-
const oaToUserMessage = {
|
|
254
|
-
app_id: 'test-app',
|
|
255
|
-
user_id_by_app: 'test-user',
|
|
256
|
-
event_name: 'oa_send_text',
|
|
257
|
-
timestamp: '1234567890',
|
|
258
|
-
sender: { id: 'oa123' },
|
|
259
|
-
recipient: { id: 'user789' },
|
|
260
|
-
message: { msg_id: 'msg789', text: 'Cảm ơn bạn đã liên hệ!' }
|
|
261
|
-
};
|
|
262
|
-
|
|
263
|
-
console.log('\n=== Example 3: OA to User Message ===');
|
|
264
|
-
handler.handleWebhook(oaToUserMessage as any);
|
|
265
|
-
|
|
266
|
-
// Ví dụ 4: OA gửi tới group
|
|
267
|
-
const oaToGroupMessage = {
|
|
268
|
-
app_id: 'test-app',
|
|
269
|
-
user_id_by_app: 'test-user',
|
|
270
|
-
event_name: 'oa_send_group_text',
|
|
271
|
-
timestamp: '1234567890',
|
|
272
|
-
oa_id: 'oa123',
|
|
273
|
-
sender: { id: 'oa123' },
|
|
274
|
-
recipient: { id: 'group456' },
|
|
275
|
-
message: { msg_id: 'msg101', text: 'Thông báo từ OA!' }
|
|
276
|
-
};
|
|
277
|
-
|
|
278
|
-
console.log('\n=== Example 4: OA to Group Message ===');
|
|
279
|
-
handler.handleWebhook(oaToGroupMessage as any);
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
// Chạy ví dụ nếu file được execute trực tiếp
|
|
283
|
-
if (require.main === module) {
|
|
284
|
-
exampleUsage();
|
|
285
|
-
}
|