Skip to content

Commit 3edef87

Browse files
Merge pull request #409 from judsonjuniorr/feat/labels
Feat/labels
2 parents c04b5cb + a2622cb commit 3edef87

26 files changed

+531
-1
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
* Join in Group by Invite Code
88
* Read messages from whatsapp in chatwoot
99
* Add support to use use redis in cacheservice
10+
* Add support for labels
1011

1112
### Fixed
1213

Docker/.env.example

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,8 @@ WEBHOOK_EVENTS_GROUPS_UPSERT=true
8484
WEBHOOK_EVENTS_GROUPS_UPDATE=true
8585
WEBHOOK_EVENTS_GROUP_PARTICIPANTS_UPDATE=true
8686
WEBHOOK_EVENTS_CONNECTION_UPDATE=true
87+
WEBHOOK_EVENTS_LABELS_EDIT=true
88+
WEBHOOK_EVENTS_LABELS_ASSOCIATION=true
8789
WEBHOOK_EVENTS_CALL=true
8890
# This event fires every time a new token is requested via the refresh route
8991
WEBHOOK_EVENTS_NEW_JWT_TOKEN=false

Docker/evolution-api-all-services/.env.example

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@ WEBHOOK_EVENTS_GROUPS_UPSERT=true
7373
WEBHOOK_EVENTS_GROUPS_UPDATE=true
7474
WEBHOOK_EVENTS_GROUP_PARTICIPANTS_UPDATE=true
7575
WEBHOOK_EVENTS_CONNECTION_UPDATE=true
76+
WEBHOOK_EVENTS_LABELS_EDIT=true
77+
WEBHOOK_EVENTS_LABELS_ASSOCIATION=true
7678
# This event fires every time a new token is requested via the refresh route
7779
WEBHOOK_EVENTS_NEW_JWT_TOKEN=false
7880

Dockerfile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,8 @@ ENV WEBHOOK_EVENTS_GROUPS_UPSERT=true
9898
ENV WEBHOOK_EVENTS_GROUPS_UPDATE=true
9999
ENV WEBHOOK_EVENTS_GROUP_PARTICIPANTS_UPDATE=true
100100
ENV WEBHOOK_EVENTS_CONNECTION_UPDATE=true
101+
ENV WEBHOOK_EVENTS_LABELS_EDIT=true
102+
ENV WEBHOOK_EVENTS_LABELS_ASSOCIATION=true
101103
ENV WEBHOOK_EVENTS_CALL=true
102104

103105
ENV WEBHOOK_EVENTS_NEW_JWT_TOKEN=false

src/config/env.config.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,15 @@ export type SaveData = {
3434
MESSAGE_UPDATE: boolean;
3535
CONTACTS: boolean;
3636
CHATS: boolean;
37+
LABELS: boolean;
3738
};
3839

3940
export type StoreConf = {
4041
MESSAGES: boolean;
4142
MESSAGE_UP: boolean;
4243
CONTACTS: boolean;
4344
CHATS: boolean;
45+
LABELS: boolean;
4446
};
4547

4648
export type CleanStoreConf = {
@@ -103,6 +105,8 @@ export type EventsWebhook = {
103105
CHATS_DELETE: boolean;
104106
CHATS_UPSERT: boolean;
105107
CONNECTION_UPDATE: boolean;
108+
LABELS_EDIT: boolean;
109+
LABELS_ASSOCIATION: boolean;
106110
GROUPS_UPSERT: boolean;
107111
GROUP_UPDATE: boolean;
108112
GROUP_PARTICIPANTS_UPDATE: boolean;
@@ -237,6 +241,7 @@ export class ConfigService {
237241
MESSAGE_UP: process.env?.STORE_MESSAGE_UP === 'true',
238242
CONTACTS: process.env?.STORE_CONTACTS === 'true',
239243
CHATS: process.env?.STORE_CHATS === 'true',
244+
LABELS: process.env?.STORE_LABELS === 'true',
240245
},
241246
CLEAN_STORE: {
242247
CLEANING_INTERVAL: Number.isInteger(process.env?.CLEAN_STORE_CLEANING_TERMINAL)
@@ -259,6 +264,7 @@ export class ConfigService {
259264
MESSAGE_UPDATE: process.env?.DATABASE_SAVE_MESSAGE_UPDATE === 'true',
260265
CONTACTS: process.env?.DATABASE_SAVE_DATA_CONTACTS === 'true',
261266
CHATS: process.env?.DATABASE_SAVE_DATA_CHATS === 'true',
267+
LABELS: process.env?.DATABASE_SAVE_DATA_LABELS === 'true',
262268
},
263269
},
264270
REDIS: {
@@ -323,6 +329,8 @@ export class ConfigService {
323329
CHATS_UPSERT: process.env?.WEBHOOK_EVENTS_CHATS_UPSERT === 'true',
324330
CHATS_DELETE: process.env?.WEBHOOK_EVENTS_CHATS_DELETE === 'true',
325331
CONNECTION_UPDATE: process.env?.WEBHOOK_EVENTS_CONNECTION_UPDATE === 'true',
332+
LABELS_EDIT: process.env?.WEBHOOK_EVENTS_LABELS_EDIT === 'true',
333+
LABELS_ASSOCIATION: process.env?.WEBHOOK_EVENTS_LABELS_ASSOCIATION === 'true',
326334
GROUPS_UPSERT: process.env?.WEBHOOK_EVENTS_GROUPS_UPSERT === 'true',
327335
GROUP_UPDATE: process.env?.WEBHOOK_EVENTS_GROUPS_UPDATE === 'true',
328336
GROUP_PARTICIPANTS_UPDATE: process.env?.WEBHOOK_EVENTS_GROUP_PARTICIPANTS_UPDATE === 'true',

src/dev-env.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,8 @@ WEBHOOK:
127127
GROUP_UPDATE: true
128128
GROUP_PARTICIPANTS_UPDATE: true
129129
CONNECTION_UPDATE: true
130+
LABELS_EDIT: true
131+
LABELS_ASSOCIATION: true
130132
CALL: true
131133
# This event fires every time a new token is requested via the refresh route
132134
NEW_JWT_TOKEN: false

src/docs/swagger.yaml

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ tags:
5151
- name: Send Message Controller
5252
- name: Chat Controller
5353
- name: Group Controller
54+
- name: Label Controller
5455
- name: Profile Settings
5556
- name: JWT
5657
- name: Settings
@@ -1856,6 +1857,8 @@ paths:
18561857
"GROUP_UPDATE",
18571858
"GROUP_PARTICIPANTS_UPDATE",
18581859
"CONNECTION_UPDATE",
1860+
"LABELS_EDIT",
1861+
"LABELS_ASSOCIATION",
18591862
"CALL",
18601863
"NEW_JWT_TOKEN",
18611864
]
@@ -1932,6 +1935,8 @@ paths:
19321935
"GROUP_UPDATE",
19331936
"GROUP_PARTICIPANTS_UPDATE",
19341937
"CONNECTION_UPDATE",
1938+
"LABELS_EDIT",
1939+
"LABELS_ASSOCIATION",
19351940
"CALL",
19361941
"NEW_JWT_TOKEN",
19371942
]
@@ -2008,6 +2013,8 @@ paths:
20082013
"GROUP_UPDATE",
20092014
"GROUP_PARTICIPANTS_UPDATE",
20102015
"CONNECTION_UPDATE",
2016+
"LABELS_EDIT",
2017+
"LABELS_ASSOCIATION",
20112018
"CALL",
20122019
"NEW_JWT_TOKEN",
20132020
]
@@ -2046,6 +2053,97 @@ paths:
20462053
content:
20472054
application/json: {}
20482055

2056+
/label/findLabels/{instanceName}:
2057+
get:
2058+
tags:
2059+
- Label Controller
2060+
summary: List all labels for an instance.
2061+
parameters:
2062+
- name: instanceName
2063+
in: path
2064+
schema:
2065+
type: string
2066+
required: true
2067+
description: "- required"
2068+
example: "evolution"
2069+
responses:
2070+
"200":
2071+
description: Successful response
2072+
content:
2073+
application/json:
2074+
schema:
2075+
type: array
2076+
items:
2077+
type: object
2078+
properties:
2079+
color:
2080+
type: integer
2081+
name:
2082+
type: string
2083+
id:
2084+
type: string
2085+
predefinedId:
2086+
type: string
2087+
required:
2088+
- color
2089+
- name
2090+
- id
2091+
/label/handleLabel/{instanceName}:
2092+
put:
2093+
tags:
2094+
- Label Controller
2095+
summary: Change the label (add or remove) for an specific chat.
2096+
parameters:
2097+
- name: instanceName
2098+
in: path
2099+
schema:
2100+
type: string
2101+
required: true
2102+
description: "- required"
2103+
example: "evolution"
2104+
requestBody:
2105+
content:
2106+
application/json:
2107+
schema:
2108+
type: object
2109+
properties:
2110+
number:
2111+
type: string
2112+
labelId:
2113+
type: string
2114+
action:
2115+
type: string
2116+
enum:
2117+
- add
2118+
- remove
2119+
required:
2120+
- number
2121+
- labelId
2122+
- action
2123+
example:
2124+
number: '553499999999'
2125+
labelId: '1'
2126+
action: add
2127+
responses:
2128+
"200":
2129+
description: Successful response
2130+
content:
2131+
application/json:
2132+
schema:
2133+
type: object
2134+
properties:
2135+
numberJid:
2136+
type: string
2137+
labelId:
2138+
type: string
2139+
remove:
2140+
type: boolean
2141+
add:
2142+
type: boolean
2143+
required:
2144+
- numberJid
2145+
- labelId
2146+
20492147
/settings/set/{instanceName}:
20502148
post:
20512149
tags:

src/validate/validate.schema.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ export const instanceNameSchema: JSONSchema7 = {
5353
'GROUP_UPDATE',
5454
'GROUP_PARTICIPANTS_UPDATE',
5555
'CONNECTION_UPDATE',
56+
'LABELS_EDIT',
57+
'LABELS_ASSOCIATION',
5658
'CALL',
5759
'NEW_JWT_TOKEN',
5860
'TYPEBOT_START',
@@ -897,6 +899,8 @@ export const webhookSchema: JSONSchema7 = {
897899
'GROUP_UPDATE',
898900
'GROUP_PARTICIPANTS_UPDATE',
899901
'CONNECTION_UPDATE',
902+
'LABELS_EDIT',
903+
'LABELS_ASSOCIATION',
900904
'CALL',
901905
'NEW_JWT_TOKEN',
902906
'TYPEBOT_START',
@@ -977,6 +981,8 @@ export const websocketSchema: JSONSchema7 = {
977981
'GROUP_UPDATE',
978982
'GROUP_PARTICIPANTS_UPDATE',
979983
'CONNECTION_UPDATE',
984+
'LABELS_EDIT',
985+
'LABELS_ASSOCIATION',
980986
'CALL',
981987
'NEW_JWT_TOKEN',
982988
'TYPEBOT_START',
@@ -1020,6 +1026,8 @@ export const rabbitmqSchema: JSONSchema7 = {
10201026
'GROUP_UPDATE',
10211027
'GROUP_PARTICIPANTS_UPDATE',
10221028
'CONNECTION_UPDATE',
1029+
'LABELS_EDIT',
1030+
'LABELS_ASSOCIATION',
10231031
'CALL',
10241032
'NEW_JWT_TOKEN',
10251033
'TYPEBOT_START',
@@ -1063,6 +1071,8 @@ export const sqsSchema: JSONSchema7 = {
10631071
'GROUP_UPDATE',
10641072
'GROUP_PARTICIPANTS_UPDATE',
10651073
'CONNECTION_UPDATE',
1074+
'LABELS_EDIT',
1075+
'LABELS_ASSOCIATION',
10661076
'CALL',
10671077
'NEW_JWT_TOKEN',
10681078
'TYPEBOT_START',
@@ -1150,3 +1160,14 @@ export const chamaaiSchema: JSONSchema7 = {
11501160
required: ['enabled', 'url', 'token', 'waNumber', 'answerByAudio'],
11511161
...isNotEmpty('enabled', 'url', 'token', 'waNumber', 'answerByAudio'),
11521162
};
1163+
1164+
export const handleLabelSchema: JSONSchema7 = {
1165+
$id: v4(),
1166+
type: 'object',
1167+
properties: {
1168+
number: { ...numberDefinition },
1169+
labelId: { type: 'string' },
1170+
action: { type: 'string', enum: ['add', 'remove'] },
1171+
},
1172+
required: ['number', 'labelId', 'action'],
1173+
};

src/whatsapp/controllers/instance.controller.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,8 @@ export class InstanceController {
151151
'GROUP_UPDATE',
152152
'GROUP_PARTICIPANTS_UPDATE',
153153
'CONNECTION_UPDATE',
154+
'LABELS_EDIT',
155+
'LABELS_ASSOCIATION',
154156
'CALL',
155157
'NEW_JWT_TOKEN',
156158
'TYPEBOT_START',
@@ -201,6 +203,8 @@ export class InstanceController {
201203
'GROUP_UPDATE',
202204
'GROUP_PARTICIPANTS_UPDATE',
203205
'CONNECTION_UPDATE',
206+
'LABELS_EDIT',
207+
'LABELS_ASSOCIATION',
204208
'CALL',
205209
'NEW_JWT_TOKEN',
206210
'TYPEBOT_START',
@@ -248,6 +252,8 @@ export class InstanceController {
248252
'GROUP_UPDATE',
249253
'GROUP_PARTICIPANTS_UPDATE',
250254
'CONNECTION_UPDATE',
255+
'LABELS_EDIT',
256+
'LABELS_ASSOCIATION',
251257
'CALL',
252258
'NEW_JWT_TOKEN',
253259
'TYPEBOT_START',
@@ -295,6 +301,8 @@ export class InstanceController {
295301
'GROUP_UPDATE',
296302
'GROUP_PARTICIPANTS_UPDATE',
297303
'CONNECTION_UPDATE',
304+
'LABELS_EDIT',
305+
'LABELS_ASSOCIATION',
298306
'CALL',
299307
'NEW_JWT_TOKEN',
300308
'TYPEBOT_START',
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { Logger } from '../../config/logger.config';
2+
import { InstanceDto } from '../dto/instance.dto';
3+
import { HandleLabelDto } from '../dto/label.dto';
4+
import { WAMonitoringService } from '../services/monitor.service';
5+
6+
const logger = new Logger('LabelController');
7+
8+
export class LabelController {
9+
constructor(private readonly waMonitor: WAMonitoringService) {}
10+
11+
public async fetchLabels({ instanceName }: InstanceDto) {
12+
logger.verbose('requested fetchLabels from ' + instanceName + ' instance');
13+
return await this.waMonitor.waInstances[instanceName].fetchLabels();
14+
}
15+
16+
public async handleLabel({ instanceName }: InstanceDto, data: HandleLabelDto) {
17+
logger.verbose('requested chat label change from ' + instanceName + ' instance');
18+
return await this.waMonitor.waInstances[instanceName].handleLabel(data);
19+
}
20+
}

0 commit comments

Comments
 (0)