mirror of
https://github.com/EvolutionAPI/evolution-api.git
synced 2025-12-19 20:02:20 -06:00
This commit refines the Evoai integration by updating the service and controller logic for better functionality and maintainability. Key changes include: - Added the `openaiService` as a parameter in the EvoaiService constructor for improved dependency management. - Enhanced the createBot method in EvoaiController to include EvoAI-specific validation and duplicate checks. - Updated EvoaiDto and EvoaiSettingDto to remove unnecessary comments and add a fallback property. - Refined the message processing logic in EvoaiService to handle audio messages more effectively and improve logging clarity. - Adjusted the schema for Evoai settings to rename `evoaiIdFallback` to `botIdFallback` for better clarity. These updates contribute to a more robust and maintainable Evoai integration.
116 lines
3.0 KiB
TypeScript
116 lines
3.0 KiB
TypeScript
import { JSONSchema7 } from 'json-schema';
|
|
import { v4 } from 'uuid';
|
|
|
|
const isNotEmpty = (...propertyNames: string[]): JSONSchema7 => {
|
|
const properties = {};
|
|
propertyNames.forEach(
|
|
(property) =>
|
|
(properties[property] = {
|
|
minLength: 1,
|
|
description: `The "${property}" cannot be empty`,
|
|
}),
|
|
);
|
|
return {
|
|
if: {
|
|
propertyNames: {
|
|
enum: [...propertyNames],
|
|
},
|
|
},
|
|
then: { properties },
|
|
};
|
|
};
|
|
|
|
export const evoaiSchema: JSONSchema7 = {
|
|
$id: v4(),
|
|
type: 'object',
|
|
properties: {
|
|
enabled: { type: 'boolean' },
|
|
description: { type: 'string' },
|
|
agentUrl: { type: 'string' },
|
|
apiKey: { type: 'string' },
|
|
triggerType: { type: 'string', enum: ['all', 'keyword', 'none', 'advanced'] },
|
|
triggerOperator: { type: 'string', enum: ['equals', 'contains', 'startsWith', 'endsWith', 'regex'] },
|
|
triggerValue: { type: 'string' },
|
|
expire: { type: 'integer' },
|
|
keywordFinish: { type: 'string' },
|
|
delayMessage: { type: 'integer' },
|
|
unknownMessage: { type: 'string' },
|
|
listeningFromMe: { type: 'boolean' },
|
|
stopBotFromMe: { type: 'boolean' },
|
|
keepOpen: { type: 'boolean' },
|
|
debounceTime: { type: 'integer' },
|
|
ignoreJids: { type: 'array', items: { type: 'string' } },
|
|
splitMessages: { type: 'boolean' },
|
|
timePerChar: { type: 'integer' },
|
|
},
|
|
required: ['enabled', 'agentUrl', 'triggerType'],
|
|
...isNotEmpty('enabled', 'agentUrl', 'triggerType'),
|
|
};
|
|
|
|
export const evoaiStatusSchema: JSONSchema7 = {
|
|
$id: v4(),
|
|
type: 'object',
|
|
properties: {
|
|
remoteJid: { type: 'string' },
|
|
status: { type: 'string', enum: ['opened', 'closed', 'paused', 'delete'] },
|
|
},
|
|
required: ['remoteJid', 'status'],
|
|
...isNotEmpty('remoteJid', 'status'),
|
|
};
|
|
|
|
export const evoaiSettingSchema: JSONSchema7 = {
|
|
$id: v4(),
|
|
type: 'object',
|
|
properties: {
|
|
expire: { type: 'integer' },
|
|
keywordFinish: { type: 'string' },
|
|
delayMessage: { type: 'integer' },
|
|
unknownMessage: { type: 'string' },
|
|
listeningFromMe: { type: 'boolean' },
|
|
stopBotFromMe: { type: 'boolean' },
|
|
keepOpen: { type: 'boolean' },
|
|
debounceTime: { type: 'integer' },
|
|
ignoreJids: { type: 'array', items: { type: 'string' } },
|
|
botIdFallback: { type: 'string' },
|
|
splitMessages: { type: 'boolean' },
|
|
timePerChar: { type: 'integer' },
|
|
},
|
|
required: [
|
|
'expire',
|
|
'keywordFinish',
|
|
'delayMessage',
|
|
'unknownMessage',
|
|
'listeningFromMe',
|
|
'stopBotFromMe',
|
|
'keepOpen',
|
|
'debounceTime',
|
|
'ignoreJids',
|
|
'splitMessages',
|
|
'timePerChar',
|
|
],
|
|
...isNotEmpty(
|
|
'expire',
|
|
'keywordFinish',
|
|
'delayMessage',
|
|
'unknownMessage',
|
|
'listeningFromMe',
|
|
'stopBotFromMe',
|
|
'keepOpen',
|
|
'debounceTime',
|
|
'ignoreJids',
|
|
'splitMessages',
|
|
'timePerChar',
|
|
),
|
|
};
|
|
|
|
export const evoaiIgnoreJidSchema: JSONSchema7 = {
|
|
$id: v4(),
|
|
type: 'object',
|
|
properties: {
|
|
remoteJid: { type: 'string' },
|
|
action: { type: 'string', enum: ['add', 'remove'] },
|
|
},
|
|
required: ['remoteJid', 'action'],
|
|
...isNotEmpty('remoteJid', 'action'),
|
|
};
|