mirror of
https://github.com/EvolutionAPI/evolution-api.git
synced 2025-07-14 09:51:24 -06:00
Added webhooks for typebot events
This commit is contained in:
parent
03637b2d4d
commit
10c7e81e02
@ -3,6 +3,8 @@
|
|||||||
### Feature
|
### Feature
|
||||||
|
|
||||||
* Added listening_from_me option in Set Typebot
|
* Added listening_from_me option in Set Typebot
|
||||||
|
* Added variables options in Start Typebot
|
||||||
|
* Added webhooks for typebot events
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
|
@ -81,6 +81,11 @@ WEBHOOK_EVENTS_CONNECTION_UPDATE=true
|
|||||||
WEBHOOK_EVENTS_CALL=true
|
WEBHOOK_EVENTS_CALL=true
|
||||||
# This event fires every time a new token is requested via the refresh route
|
# This event fires every time a new token is requested via the refresh route
|
||||||
WEBHOOK_EVENTS_NEW_JWT_TOKEN=false
|
WEBHOOK_EVENTS_NEW_JWT_TOKEN=false
|
||||||
|
# This events is used with Typebot
|
||||||
|
WEBHOOK_EVENTS_TYPEBOT_START=false
|
||||||
|
WEBHOOK_EVENTS_TYPEBOT_CHANGE_STATUS=false
|
||||||
|
# This event is used with Chama AI
|
||||||
|
WEBHOOK_EVENTS_CHAMA_AI_ACTION=false
|
||||||
|
|
||||||
# Name that will be displayed on smartphone connection
|
# Name that will be displayed on smartphone connection
|
||||||
CONFIG_SESSION_PHONE_CLIENT=EvolutionAPI
|
CONFIG_SESSION_PHONE_CLIENT=EvolutionAPI
|
||||||
|
@ -84,6 +84,11 @@ ENV WEBHOOK_EVENTS_CALL=true
|
|||||||
|
|
||||||
ENV WEBHOOK_EVENTS_NEW_JWT_TOKEN=false
|
ENV WEBHOOK_EVENTS_NEW_JWT_TOKEN=false
|
||||||
|
|
||||||
|
ENV WEBHOOK_EVENTS_TYPEBOT_START=false
|
||||||
|
ENV WEBHOOK_EVENTS_TYPEBOT_CHANGE_STATUS=false
|
||||||
|
|
||||||
|
ENV WEBHOOK_EVENTS_CHAMA_AI_ACTION=false
|
||||||
|
|
||||||
ENV CONFIG_SESSION_PHONE_CLIENT=EvolutionAPI
|
ENV CONFIG_SESSION_PHONE_CLIENT=EvolutionAPI
|
||||||
ENV CONFIG_SESSION_PHONE_NAME=chrome
|
ENV CONFIG_SESSION_PHONE_NAME=chrome
|
||||||
|
|
||||||
|
@ -92,6 +92,9 @@ export type EventsWebhook = {
|
|||||||
GROUP_PARTICIPANTS_UPDATE: boolean;
|
GROUP_PARTICIPANTS_UPDATE: boolean;
|
||||||
CALL: boolean;
|
CALL: boolean;
|
||||||
NEW_JWT_TOKEN: boolean;
|
NEW_JWT_TOKEN: boolean;
|
||||||
|
TYPEBOT_START: boolean;
|
||||||
|
TYPEBOT_CHANGE_STATUS: boolean;
|
||||||
|
CHAMA_AI_ACTION: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type ApiKey = { KEY: string };
|
export type ApiKey = { KEY: string };
|
||||||
@ -264,6 +267,9 @@ export class ConfigService {
|
|||||||
GROUP_PARTICIPANTS_UPDATE: process.env?.WEBHOOK_EVENTS_GROUP_PARTICIPANTS_UPDATE === 'true',
|
GROUP_PARTICIPANTS_UPDATE: process.env?.WEBHOOK_EVENTS_GROUP_PARTICIPANTS_UPDATE === 'true',
|
||||||
CALL: process.env?.WEBHOOK_EVENTS_CALL === 'true',
|
CALL: process.env?.WEBHOOK_EVENTS_CALL === 'true',
|
||||||
NEW_JWT_TOKEN: process.env?.WEBHOOK_EVENTS_NEW_JWT_TOKEN === 'true',
|
NEW_JWT_TOKEN: process.env?.WEBHOOK_EVENTS_NEW_JWT_TOKEN === 'true',
|
||||||
|
TYPEBOT_START: process.env?.WEBHOOK_EVENTS_TYPEBOT_START === 'true',
|
||||||
|
TYPEBOT_CHANGE_STATUS: process.env?.WEBHOOK_EVENTS_TYPEBOT_CHANGE_STATUS === 'true',
|
||||||
|
CHAMA_AI_ACTION: process.env?.WEBHOOK_EVENTS_CHAMA_AI_ACTION === 'true',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
CONFIG_SESSION_PHONE: {
|
CONFIG_SESSION_PHONE: {
|
||||||
|
@ -83,7 +83,7 @@ RABBITMQ:
|
|||||||
ENABLED: false
|
ENABLED: false
|
||||||
URI: "amqp://guest:guest@localhost:5672"
|
URI: "amqp://guest:guest@localhost:5672"
|
||||||
|
|
||||||
WEBSOCKET:
|
WEBSOCKET:
|
||||||
ENABLED: false
|
ENABLED: false
|
||||||
|
|
||||||
# Global Webhook Settings
|
# Global Webhook Settings
|
||||||
@ -120,6 +120,11 @@ WEBHOOK:
|
|||||||
CALL: true
|
CALL: true
|
||||||
# This event fires every time a new token is requested via the refresh route
|
# This event fires every time a new token is requested via the refresh route
|
||||||
NEW_JWT_TOKEN: false
|
NEW_JWT_TOKEN: false
|
||||||
|
# This events is used with Typebot
|
||||||
|
TYPEBOT_START: false
|
||||||
|
TYPEBOT_CHANGE_STATUS: false
|
||||||
|
# This event is used with Chama AI
|
||||||
|
CHAMA_AI_ACTION: false
|
||||||
|
|
||||||
CONFIG_SESSION_PHONE:
|
CONFIG_SESSION_PHONE:
|
||||||
# Name that will be displayed on smartphone connection
|
# Name that will be displayed on smartphone connection
|
||||||
@ -129,7 +134,7 @@ CONFIG_SESSION_PHONE:
|
|||||||
# Set qrcode display limit
|
# Set qrcode display limit
|
||||||
QRCODE:
|
QRCODE:
|
||||||
LIMIT: 30
|
LIMIT: 30
|
||||||
COLOR: '#198754'
|
COLOR: "#198754"
|
||||||
|
|
||||||
# Defines an authentication type for the api
|
# Defines an authentication type for the api
|
||||||
# We recommend using the apikey because it will allow you to use a custom token,
|
# We recommend using the apikey because it will allow you to use a custom token,
|
||||||
@ -145,4 +150,4 @@ AUTHENTICATION:
|
|||||||
# Set the secret key to encrypt and decrypt your token and its expiration time.
|
# Set the secret key to encrypt and decrypt your token and its expiration time.
|
||||||
JWT:
|
JWT:
|
||||||
EXPIRIN_IN: 0 # seconds - 3600s === 1h | zero (0) - never expires
|
EXPIRIN_IN: 0 # seconds - 3600s === 1h | zero (0) - never expires
|
||||||
SECRET: L=0YWt]b2w[WF>#>:&E`
|
SECRET: L=0YWt]b2w[WF>#>:&E`
|
||||||
|
@ -55,6 +55,9 @@ export const instanceNameSchema: JSONSchema7 = {
|
|||||||
'CONNECTION_UPDATE',
|
'CONNECTION_UPDATE',
|
||||||
'CALL',
|
'CALL',
|
||||||
'NEW_JWT_TOKEN',
|
'NEW_JWT_TOKEN',
|
||||||
|
'TYPEBOT_START',
|
||||||
|
'TYPEBOT_CHANGE_STATUS',
|
||||||
|
'CHAMA_AI_ACTION',
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -856,6 +859,9 @@ export const webhookSchema: JSONSchema7 = {
|
|||||||
'CONNECTION_UPDATE',
|
'CONNECTION_UPDATE',
|
||||||
'CALL',
|
'CALL',
|
||||||
'NEW_JWT_TOKEN',
|
'NEW_JWT_TOKEN',
|
||||||
|
'TYPEBOT_START',
|
||||||
|
'TYPEBOT_CHANGE_STATUS',
|
||||||
|
'CHAMA_AI_ACTION',
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -927,6 +933,9 @@ export const websocketSchema: JSONSchema7 = {
|
|||||||
'CONNECTION_UPDATE',
|
'CONNECTION_UPDATE',
|
||||||
'CALL',
|
'CALL',
|
||||||
'NEW_JWT_TOKEN',
|
'NEW_JWT_TOKEN',
|
||||||
|
'TYPEBOT_START',
|
||||||
|
'TYPEBOT_CHANGE_STATUS',
|
||||||
|
'CHAMA_AI_ACTION',
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -967,6 +976,9 @@ export const rabbitmqSchema: JSONSchema7 = {
|
|||||||
'CONNECTION_UPDATE',
|
'CONNECTION_UPDATE',
|
||||||
'CALL',
|
'CALL',
|
||||||
'NEW_JWT_TOKEN',
|
'NEW_JWT_TOKEN',
|
||||||
|
'TYPEBOT_START',
|
||||||
|
'TYPEBOT_CHANGE_STATUS',
|
||||||
|
'CHAMA_AI_ACTION',
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -127,6 +127,9 @@ export class InstanceController {
|
|||||||
'CONNECTION_UPDATE',
|
'CONNECTION_UPDATE',
|
||||||
'CALL',
|
'CALL',
|
||||||
'NEW_JWT_TOKEN',
|
'NEW_JWT_TOKEN',
|
||||||
|
'TYPEBOT_START',
|
||||||
|
'TYPEBOT_CHANGE_STATUS',
|
||||||
|
'CHAMA_AI_ACTION',
|
||||||
];
|
];
|
||||||
} else {
|
} else {
|
||||||
newEvents = events;
|
newEvents = events;
|
||||||
@ -173,6 +176,9 @@ export class InstanceController {
|
|||||||
'CONNECTION_UPDATE',
|
'CONNECTION_UPDATE',
|
||||||
'CALL',
|
'CALL',
|
||||||
'NEW_JWT_TOKEN',
|
'NEW_JWT_TOKEN',
|
||||||
|
'TYPEBOT_START',
|
||||||
|
'TYPEBOT_CHANGE_STATUS',
|
||||||
|
'CHAMA_AI_ACTION',
|
||||||
];
|
];
|
||||||
} else {
|
} else {
|
||||||
newEvents = events;
|
newEvents = events;
|
||||||
@ -217,6 +223,9 @@ export class InstanceController {
|
|||||||
'CONNECTION_UPDATE',
|
'CONNECTION_UPDATE',
|
||||||
'CALL',
|
'CALL',
|
||||||
'NEW_JWT_TOKEN',
|
'NEW_JWT_TOKEN',
|
||||||
|
'TYPEBOT_START',
|
||||||
|
'TYPEBOT_CHANGE_STATUS',
|
||||||
|
'CHAMA_AI_ACTION',
|
||||||
];
|
];
|
||||||
} else {
|
} else {
|
||||||
newEvents = events;
|
newEvents = events;
|
||||||
|
@ -40,6 +40,9 @@ export class RabbitmqController {
|
|||||||
'CONNECTION_UPDATE',
|
'CONNECTION_UPDATE',
|
||||||
'CALL',
|
'CALL',
|
||||||
'NEW_JWT_TOKEN',
|
'NEW_JWT_TOKEN',
|
||||||
|
'TYPEBOT_START',
|
||||||
|
'TYPEBOT_CHANGE_STATUS',
|
||||||
|
'CHAMA_AI_ACTION',
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -48,6 +48,9 @@ export class WebhookController {
|
|||||||
'CONNECTION_UPDATE',
|
'CONNECTION_UPDATE',
|
||||||
'CALL',
|
'CALL',
|
||||||
'NEW_JWT_TOKEN',
|
'NEW_JWT_TOKEN',
|
||||||
|
'TYPEBOT_START',
|
||||||
|
'TYPEBOT_CHANGE_STATUS',
|
||||||
|
'CHAMA_AI_ACTION',
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -40,6 +40,9 @@ export class WebsocketController {
|
|||||||
'CONNECTION_UPDATE',
|
'CONNECTION_UPDATE',
|
||||||
'CALL',
|
'CALL',
|
||||||
'NEW_JWT_TOKEN',
|
'NEW_JWT_TOKEN',
|
||||||
|
'TYPEBOT_START',
|
||||||
|
'TYPEBOT_CHANGE_STATUS',
|
||||||
|
'CHAMA_AI_ACTION',
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,6 +4,7 @@ import { Logger } from '../../config/logger.config';
|
|||||||
import { InstanceDto } from '../dto/instance.dto';
|
import { InstanceDto } from '../dto/instance.dto';
|
||||||
import { Session, TypebotDto } from '../dto/typebot.dto';
|
import { Session, TypebotDto } from '../dto/typebot.dto';
|
||||||
import { MessageRaw } from '../models';
|
import { MessageRaw } from '../models';
|
||||||
|
import { Events } from '../types/wa.types';
|
||||||
import { WAMonitoringService } from './monitor.service';
|
import { WAMonitoringService } from './monitor.service';
|
||||||
|
|
||||||
export class TypebotService {
|
export class TypebotService {
|
||||||
@ -83,6 +84,14 @@ export class TypebotService {
|
|||||||
|
|
||||||
this.create(instance, typebotData);
|
this.create(instance, typebotData);
|
||||||
|
|
||||||
|
this.waMonitor.waInstances[instance.instanceName].sendDataWebhook(Events.TYPEBOT_CHANGE_STATUS, {
|
||||||
|
remoteJid: remoteJid,
|
||||||
|
status: status,
|
||||||
|
url: findData.url,
|
||||||
|
typebot: findData.typebot,
|
||||||
|
session,
|
||||||
|
});
|
||||||
|
|
||||||
return { typebot: { ...instance, typebot: typebotData } };
|
return { typebot: { ...instance, typebot: typebotData } };
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -90,6 +99,15 @@ export class TypebotService {
|
|||||||
const remoteJid = data.remoteJid;
|
const remoteJid = data.remoteJid;
|
||||||
const url = data.url;
|
const url = data.url;
|
||||||
const typebot = data.typebot;
|
const typebot = data.typebot;
|
||||||
|
const variables = data.variables;
|
||||||
|
|
||||||
|
const prefilledVariables = {
|
||||||
|
remoteJid: remoteJid,
|
||||||
|
};
|
||||||
|
|
||||||
|
variables.forEach((variable) => {
|
||||||
|
prefilledVariables[variable.name] = variable.value;
|
||||||
|
});
|
||||||
|
|
||||||
const id = Math.floor(Math.random() * 10000000000).toString();
|
const id = Math.floor(Math.random() * 10000000000).toString();
|
||||||
|
|
||||||
@ -97,14 +115,9 @@ export class TypebotService {
|
|||||||
sessionId: id,
|
sessionId: id,
|
||||||
startParams: {
|
startParams: {
|
||||||
typebot: data.typebot,
|
typebot: data.typebot,
|
||||||
prefilledVariables: {
|
prefilledVariables: prefilledVariables,
|
||||||
remoteJid: data.remoteJid,
|
|
||||||
pushName: data.pushName,
|
|
||||||
instanceName: instance.instanceName,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
console.log(reqData);
|
|
||||||
|
|
||||||
const request = await axios.post(data.url + '/api/v1/sendMessage', reqData);
|
const request = await axios.post(data.url + '/api/v1/sendMessage', reqData);
|
||||||
|
|
||||||
@ -116,6 +129,14 @@ export class TypebotService {
|
|||||||
request.data.clientSideActions,
|
request.data.clientSideActions,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
this.waMonitor.waInstances[instance.instanceName].sendDataWebhook(Events.TYPEBOT_START, {
|
||||||
|
remoteJid: remoteJid,
|
||||||
|
url: url,
|
||||||
|
typebot: typebot,
|
||||||
|
variables: variables,
|
||||||
|
sessionId: id,
|
||||||
|
});
|
||||||
|
|
||||||
return {
|
return {
|
||||||
typebot: {
|
typebot: {
|
||||||
...instance,
|
...instance,
|
||||||
@ -123,6 +144,7 @@ export class TypebotService {
|
|||||||
url: url,
|
url: url,
|
||||||
remoteJid: remoteJid,
|
remoteJid: remoteJid,
|
||||||
typebot: typebot,
|
typebot: typebot,
|
||||||
|
variables: variables,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
@ -23,6 +23,9 @@ export enum Events {
|
|||||||
GROUPS_UPDATE = 'groups.update',
|
GROUPS_UPDATE = 'groups.update',
|
||||||
GROUP_PARTICIPANTS_UPDATE = 'group-participants.update',
|
GROUP_PARTICIPANTS_UPDATE = 'group-participants.update',
|
||||||
CALL = 'call',
|
CALL = 'call',
|
||||||
|
TYPEBOT_START = 'typebot.start',
|
||||||
|
TYPEBOT_CHANGE_STATUS = 'typebot.change-status',
|
||||||
|
CHAMA_AI_ACTION = 'chama-ai.action',
|
||||||
}
|
}
|
||||||
|
|
||||||
export declare namespace wa {
|
export declare namespace wa {
|
||||||
|
Loading…
Reference in New Issue
Block a user