mirror of
https://github.com/EvolutionAPI/evolution-api.git
synced 2025-07-16 04:02:54 -06:00
feat: Add support for splitMessages and timePerChar in Integrations
This commit is contained in:
parent
29e2cfaf96
commit
d50da79f22
@ -5,6 +5,7 @@
|
|||||||
* Fake Call function
|
* Fake Call function
|
||||||
* Added unreadMessages to chats
|
* Added unreadMessages to chats
|
||||||
* Pusher event integration
|
* Pusher event integration
|
||||||
|
* Add support for splitMessages and timePerChar in Integrations
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
|
@ -413,6 +413,8 @@ model OpenaiBot {
|
|||||||
keepOpen Boolean? @default(false)
|
keepOpen Boolean? @default(false)
|
||||||
debounceTime Int? @db.Int
|
debounceTime Int? @db.Int
|
||||||
ignoreJids Json?
|
ignoreJids Json?
|
||||||
|
splitMessages Boolean? @default(false)
|
||||||
|
timePerChar Int? @default(50) @db.Int
|
||||||
triggerType TriggerType?
|
triggerType TriggerType?
|
||||||
triggerOperator TriggerOperator?
|
triggerOperator TriggerOperator?
|
||||||
triggerValue String?
|
triggerValue String?
|
||||||
@ -436,6 +438,8 @@ model OpenaiSetting {
|
|||||||
keepOpen Boolean? @default(false)
|
keepOpen Boolean? @default(false)
|
||||||
debounceTime Int? @db.Int
|
debounceTime Int? @db.Int
|
||||||
ignoreJids Json?
|
ignoreJids Json?
|
||||||
|
splitMessages Boolean? @default(false)
|
||||||
|
timePerChar Int? @default(50) @db.Int
|
||||||
speechToText Boolean? @default(false)
|
speechToText Boolean? @default(false)
|
||||||
createdAt DateTime? @default(dbgenerated("CURRENT_TIMESTAMP")) @db.Timestamp
|
createdAt DateTime? @default(dbgenerated("CURRENT_TIMESTAMP")) @db.Timestamp
|
||||||
updatedAt DateTime @updatedAt @db.Timestamp
|
updatedAt DateTime @updatedAt @db.Timestamp
|
||||||
@ -475,6 +479,8 @@ model Dify {
|
|||||||
keepOpen Boolean? @default(false)
|
keepOpen Boolean? @default(false)
|
||||||
debounceTime Int? @db.Int
|
debounceTime Int? @db.Int
|
||||||
ignoreJids Json?
|
ignoreJids Json?
|
||||||
|
splitMessages Boolean? @default(false)
|
||||||
|
timePerChar Int? @default(50) @db.Int
|
||||||
triggerType TriggerType?
|
triggerType TriggerType?
|
||||||
triggerOperator TriggerOperator?
|
triggerOperator TriggerOperator?
|
||||||
triggerValue String?
|
triggerValue String?
|
||||||
@ -496,6 +502,8 @@ model DifySetting {
|
|||||||
keepOpen Boolean? @default(false)
|
keepOpen Boolean? @default(false)
|
||||||
debounceTime Int? @db.Int
|
debounceTime Int? @db.Int
|
||||||
ignoreJids Json?
|
ignoreJids Json?
|
||||||
|
splitMessages Boolean? @default(false)
|
||||||
|
timePerChar Int? @default(50) @db.Int
|
||||||
createdAt DateTime? @default(dbgenerated("CURRENT_TIMESTAMP")) @db.Timestamp
|
createdAt DateTime? @default(dbgenerated("CURRENT_TIMESTAMP")) @db.Timestamp
|
||||||
updatedAt DateTime @updatedAt @db.Timestamp
|
updatedAt DateTime @updatedAt @db.Timestamp
|
||||||
Fallback Dify? @relation(fields: [difyIdFallback], references: [id])
|
Fallback Dify? @relation(fields: [difyIdFallback], references: [id])
|
||||||
@ -519,6 +527,8 @@ model EvolutionBot {
|
|||||||
keepOpen Boolean? @default(false)
|
keepOpen Boolean? @default(false)
|
||||||
debounceTime Int? @db.Int
|
debounceTime Int? @db.Int
|
||||||
ignoreJids Json?
|
ignoreJids Json?
|
||||||
|
splitMessages Boolean? @default(false)
|
||||||
|
timePerChar Int? @default(50) @db.Int
|
||||||
triggerType TriggerType?
|
triggerType TriggerType?
|
||||||
triggerOperator TriggerOperator?
|
triggerOperator TriggerOperator?
|
||||||
triggerValue String?
|
triggerValue String?
|
||||||
@ -540,6 +550,8 @@ model EvolutionBotSetting {
|
|||||||
keepOpen Boolean? @default(false)
|
keepOpen Boolean? @default(false)
|
||||||
debounceTime Int? @db.Int
|
debounceTime Int? @db.Int
|
||||||
ignoreJids Json?
|
ignoreJids Json?
|
||||||
|
splitMessages Boolean? @default(false)
|
||||||
|
timePerChar Int? @default(50) @db.Int
|
||||||
createdAt DateTime? @default(dbgenerated("CURRENT_TIMESTAMP")) @db.Timestamp
|
createdAt DateTime? @default(dbgenerated("CURRENT_TIMESTAMP")) @db.Timestamp
|
||||||
updatedAt DateTime @updatedAt @db.Timestamp
|
updatedAt DateTime @updatedAt @db.Timestamp
|
||||||
Fallback EvolutionBot? @relation(fields: [botIdFallback], references: [id])
|
Fallback EvolutionBot? @relation(fields: [botIdFallback], references: [id])
|
||||||
@ -563,6 +575,8 @@ model Flowise {
|
|||||||
keepOpen Boolean? @default(false)
|
keepOpen Boolean? @default(false)
|
||||||
debounceTime Int? @db.Int
|
debounceTime Int? @db.Int
|
||||||
ignoreJids Json?
|
ignoreJids Json?
|
||||||
|
splitMessages Boolean? @default(false)
|
||||||
|
timePerChar Int? @default(50) @db.Int
|
||||||
triggerType TriggerType?
|
triggerType TriggerType?
|
||||||
triggerOperator TriggerOperator?
|
triggerOperator TriggerOperator?
|
||||||
triggerValue String?
|
triggerValue String?
|
||||||
@ -584,6 +598,8 @@ model FlowiseSetting {
|
|||||||
keepOpen Boolean? @default(false)
|
keepOpen Boolean? @default(false)
|
||||||
debounceTime Int? @db.Int
|
debounceTime Int? @db.Int
|
||||||
ignoreJids Json?
|
ignoreJids Json?
|
||||||
|
splitMessages Boolean? @default(false)
|
||||||
|
timePerChar Int? @default(50) @db.Int
|
||||||
createdAt DateTime? @default(dbgenerated("CURRENT_TIMESTAMP")) @db.Timestamp
|
createdAt DateTime? @default(dbgenerated("CURRENT_TIMESTAMP")) @db.Timestamp
|
||||||
updatedAt DateTime @updatedAt @db.Timestamp
|
updatedAt DateTime @updatedAt @db.Timestamp
|
||||||
Fallback Flowise? @relation(fields: [flowiseIdFallback], references: [id])
|
Fallback Flowise? @relation(fields: [flowiseIdFallback], references: [id])
|
||||||
|
@ -395,6 +395,8 @@ model OpenaiBot {
|
|||||||
stopBotFromMe Boolean? @default(false) @db.Boolean
|
stopBotFromMe Boolean? @default(false) @db.Boolean
|
||||||
keepOpen Boolean? @default(false) @db.Boolean
|
keepOpen Boolean? @default(false) @db.Boolean
|
||||||
debounceTime Int? @db.Integer
|
debounceTime Int? @db.Integer
|
||||||
|
splitMessages Boolean? @default(false) @db.Boolean
|
||||||
|
timePerChar Int? @default(50) @db.Integer
|
||||||
ignoreJids Json?
|
ignoreJids Json?
|
||||||
triggerType TriggerType?
|
triggerType TriggerType?
|
||||||
triggerOperator TriggerOperator?
|
triggerOperator TriggerOperator?
|
||||||
@ -438,6 +440,8 @@ model OpenaiSetting {
|
|||||||
keepOpen Boolean? @default(false) @db.Boolean
|
keepOpen Boolean? @default(false) @db.Boolean
|
||||||
debounceTime Int? @db.Integer
|
debounceTime Int? @db.Integer
|
||||||
ignoreJids Json?
|
ignoreJids Json?
|
||||||
|
splitMessages Boolean? @default(false) @db.Boolean
|
||||||
|
timePerChar Int? @default(50) @db.Integer
|
||||||
speechToText Boolean? @default(false) @db.Boolean
|
speechToText Boolean? @default(false) @db.Boolean
|
||||||
createdAt DateTime? @default(now()) @db.Timestamp
|
createdAt DateTime? @default(now()) @db.Timestamp
|
||||||
updatedAt DateTime @updatedAt @db.Timestamp
|
updatedAt DateTime @updatedAt @db.Timestamp
|
||||||
@ -477,6 +481,8 @@ model Dify {
|
|||||||
keepOpen Boolean? @default(false) @db.Boolean
|
keepOpen Boolean? @default(false) @db.Boolean
|
||||||
debounceTime Int? @db.Integer
|
debounceTime Int? @db.Integer
|
||||||
ignoreJids Json?
|
ignoreJids Json?
|
||||||
|
splitMessages Boolean? @default(false) @db.Boolean
|
||||||
|
timePerChar Int? @default(50) @db.Integer
|
||||||
triggerType TriggerType?
|
triggerType TriggerType?
|
||||||
triggerOperator TriggerOperator?
|
triggerOperator TriggerOperator?
|
||||||
triggerValue String?
|
triggerValue String?
|
||||||
@ -498,6 +504,8 @@ model DifySetting {
|
|||||||
keepOpen Boolean? @default(false) @db.Boolean
|
keepOpen Boolean? @default(false) @db.Boolean
|
||||||
debounceTime Int? @db.Integer
|
debounceTime Int? @db.Integer
|
||||||
ignoreJids Json?
|
ignoreJids Json?
|
||||||
|
splitMessages Boolean? @default(false) @db.Boolean
|
||||||
|
timePerChar Int? @default(50) @db.Integer
|
||||||
createdAt DateTime? @default(now()) @db.Timestamp
|
createdAt DateTime? @default(now()) @db.Timestamp
|
||||||
updatedAt DateTime @updatedAt @db.Timestamp
|
updatedAt DateTime @updatedAt @db.Timestamp
|
||||||
Fallback Dify? @relation(fields: [difyIdFallback], references: [id])
|
Fallback Dify? @relation(fields: [difyIdFallback], references: [id])
|
||||||
@ -521,6 +529,8 @@ model EvolutionBot {
|
|||||||
keepOpen Boolean? @default(false) @db.Boolean
|
keepOpen Boolean? @default(false) @db.Boolean
|
||||||
debounceTime Int? @db.Integer
|
debounceTime Int? @db.Integer
|
||||||
ignoreJids Json?
|
ignoreJids Json?
|
||||||
|
splitMessages Boolean? @default(false) @db.Boolean
|
||||||
|
timePerChar Int? @default(50) @db.Integer
|
||||||
triggerType TriggerType?
|
triggerType TriggerType?
|
||||||
triggerOperator TriggerOperator?
|
triggerOperator TriggerOperator?
|
||||||
triggerValue String?
|
triggerValue String?
|
||||||
@ -542,6 +552,8 @@ model EvolutionBotSetting {
|
|||||||
keepOpen Boolean? @default(false) @db.Boolean
|
keepOpen Boolean? @default(false) @db.Boolean
|
||||||
debounceTime Int? @db.Integer
|
debounceTime Int? @db.Integer
|
||||||
ignoreJids Json?
|
ignoreJids Json?
|
||||||
|
splitMessages Boolean? @default(false) @db.Boolean
|
||||||
|
timePerChar Int? @default(50) @db.Integer
|
||||||
createdAt DateTime? @default(now()) @db.Timestamp
|
createdAt DateTime? @default(now()) @db.Timestamp
|
||||||
updatedAt DateTime @updatedAt @db.Timestamp
|
updatedAt DateTime @updatedAt @db.Timestamp
|
||||||
Fallback EvolutionBot? @relation(fields: [botIdFallback], references: [id])
|
Fallback EvolutionBot? @relation(fields: [botIdFallback], references: [id])
|
||||||
@ -565,6 +577,8 @@ model Flowise {
|
|||||||
keepOpen Boolean? @default(false) @db.Boolean
|
keepOpen Boolean? @default(false) @db.Boolean
|
||||||
debounceTime Int? @db.Integer
|
debounceTime Int? @db.Integer
|
||||||
ignoreJids Json?
|
ignoreJids Json?
|
||||||
|
splitMessages Boolean? @default(false) @db.Boolean
|
||||||
|
timePerChar Int? @default(50) @db.Integer
|
||||||
triggerType TriggerType?
|
triggerType TriggerType?
|
||||||
triggerOperator TriggerOperator?
|
triggerOperator TriggerOperator?
|
||||||
triggerValue String?
|
triggerValue String?
|
||||||
@ -586,6 +600,8 @@ model FlowiseSetting {
|
|||||||
keepOpen Boolean? @default(false) @db.Boolean
|
keepOpen Boolean? @default(false) @db.Boolean
|
||||||
debounceTime Int? @db.Integer
|
debounceTime Int? @db.Integer
|
||||||
ignoreJids Json?
|
ignoreJids Json?
|
||||||
|
splitMessages Boolean? @default(false) @db.Boolean
|
||||||
|
timePerChar Int? @default(50) @db.Integer
|
||||||
createdAt DateTime? @default(now()) @db.Timestamp
|
createdAt DateTime? @default(now()) @db.Timestamp
|
||||||
updatedAt DateTime @updatedAt @db.Timestamp
|
updatedAt DateTime @updatedAt @db.Timestamp
|
||||||
Fallback Flowise? @relation(fields: [flowiseIdFallback], references: [id])
|
Fallback Flowise? @relation(fields: [flowiseIdFallback], references: [id])
|
||||||
|
@ -54,7 +54,9 @@ export class DifyController extends ChatbotController implements ChatbotControll
|
|||||||
!data.stopBotFromMe ||
|
!data.stopBotFromMe ||
|
||||||
!data.keepOpen ||
|
!data.keepOpen ||
|
||||||
!data.debounceTime ||
|
!data.debounceTime ||
|
||||||
!data.ignoreJids
|
!data.ignoreJids ||
|
||||||
|
!data.splitMessages ||
|
||||||
|
!data.timePerChar
|
||||||
) {
|
) {
|
||||||
const defaultSettingCheck = await this.settingsRepository.findFirst({
|
const defaultSettingCheck = await this.settingsRepository.findFirst({
|
||||||
where: {
|
where: {
|
||||||
@ -71,6 +73,8 @@ export class DifyController extends ChatbotController implements ChatbotControll
|
|||||||
if (!data.keepOpen) data.keepOpen = defaultSettingCheck?.keepOpen || false;
|
if (!data.keepOpen) data.keepOpen = defaultSettingCheck?.keepOpen || false;
|
||||||
if (!data.debounceTime) data.debounceTime = defaultSettingCheck?.debounceTime || 0;
|
if (!data.debounceTime) data.debounceTime = defaultSettingCheck?.debounceTime || 0;
|
||||||
if (!data.ignoreJids) data.ignoreJids = defaultSettingCheck?.ignoreJids || [];
|
if (!data.ignoreJids) data.ignoreJids = defaultSettingCheck?.ignoreJids || [];
|
||||||
|
if (!data.splitMessages) data.splitMessages = defaultSettingCheck?.splitMessages || false;
|
||||||
|
if (!data.timePerChar) data.timePerChar = defaultSettingCheck?.timePerChar || 0;
|
||||||
|
|
||||||
if (!defaultSettingCheck) {
|
if (!defaultSettingCheck) {
|
||||||
await this.settings(instance, {
|
await this.settings(instance, {
|
||||||
@ -83,6 +87,8 @@ export class DifyController extends ChatbotController implements ChatbotControll
|
|||||||
keepOpen: data.keepOpen,
|
keepOpen: data.keepOpen,
|
||||||
debounceTime: data.debounceTime,
|
debounceTime: data.debounceTime,
|
||||||
ignoreJids: data.ignoreJids,
|
ignoreJids: data.ignoreJids,
|
||||||
|
splitMessages: data.splitMessages,
|
||||||
|
timePerChar: data.timePerChar,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -168,6 +174,8 @@ export class DifyController extends ChatbotController implements ChatbotControll
|
|||||||
triggerOperator: data.triggerOperator,
|
triggerOperator: data.triggerOperator,
|
||||||
triggerValue: data.triggerValue,
|
triggerValue: data.triggerValue,
|
||||||
ignoreJids: data.ignoreJids,
|
ignoreJids: data.ignoreJids,
|
||||||
|
splitMessages: data.splitMessages,
|
||||||
|
timePerChar: data.timePerChar,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -349,6 +357,8 @@ export class DifyController extends ChatbotController implements ChatbotControll
|
|||||||
triggerOperator: data.triggerOperator,
|
triggerOperator: data.triggerOperator,
|
||||||
triggerValue: data.triggerValue,
|
triggerValue: data.triggerValue,
|
||||||
ignoreJids: data.ignoreJids,
|
ignoreJids: data.ignoreJids,
|
||||||
|
splitMessages: data.splitMessages,
|
||||||
|
timePerChar: data.timePerChar,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -438,6 +448,8 @@ export class DifyController extends ChatbotController implements ChatbotControll
|
|||||||
debounceTime: data.debounceTime,
|
debounceTime: data.debounceTime,
|
||||||
difyIdFallback: data.difyIdFallback,
|
difyIdFallback: data.difyIdFallback,
|
||||||
ignoreJids: data.ignoreJids,
|
ignoreJids: data.ignoreJids,
|
||||||
|
splitMessages: data.splitMessages,
|
||||||
|
timePerChar: data.timePerChar,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -452,6 +464,8 @@ export class DifyController extends ChatbotController implements ChatbotControll
|
|||||||
debounceTime: updateSettings.debounceTime,
|
debounceTime: updateSettings.debounceTime,
|
||||||
difyIdFallback: updateSettings.difyIdFallback,
|
difyIdFallback: updateSettings.difyIdFallback,
|
||||||
ignoreJids: updateSettings.ignoreJids,
|
ignoreJids: updateSettings.ignoreJids,
|
||||||
|
splitMessages: updateSettings.splitMessages,
|
||||||
|
timePerChar: updateSettings.timePerChar,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -468,6 +482,8 @@ export class DifyController extends ChatbotController implements ChatbotControll
|
|||||||
difyIdFallback: data.difyIdFallback,
|
difyIdFallback: data.difyIdFallback,
|
||||||
ignoreJids: data.ignoreJids,
|
ignoreJids: data.ignoreJids,
|
||||||
instanceId: instanceId,
|
instanceId: instanceId,
|
||||||
|
splitMessages: data.splitMessages,
|
||||||
|
timePerChar: data.timePerChar,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -482,6 +498,8 @@ export class DifyController extends ChatbotController implements ChatbotControll
|
|||||||
debounceTime: newSetttings.debounceTime,
|
debounceTime: newSetttings.debounceTime,
|
||||||
difyIdFallback: newSetttings.difyIdFallback,
|
difyIdFallback: newSetttings.difyIdFallback,
|
||||||
ignoreJids: newSetttings.ignoreJids,
|
ignoreJids: newSetttings.ignoreJids,
|
||||||
|
splitMessages: newSetttings.splitMessages,
|
||||||
|
timePerChar: newSetttings.timePerChar,
|
||||||
};
|
};
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
this.logger.error(error);
|
this.logger.error(error);
|
||||||
@ -520,6 +538,8 @@ export class DifyController extends ChatbotController implements ChatbotControll
|
|||||||
stopBotFromMe: false,
|
stopBotFromMe: false,
|
||||||
keepOpen: false,
|
keepOpen: false,
|
||||||
ignoreJids: [],
|
ignoreJids: [],
|
||||||
|
splitMessages: false,
|
||||||
|
timePerChar: 0,
|
||||||
difyIdFallback: '',
|
difyIdFallback: '',
|
||||||
fallback: null,
|
fallback: null,
|
||||||
};
|
};
|
||||||
@ -534,6 +554,8 @@ export class DifyController extends ChatbotController implements ChatbotControll
|
|||||||
stopBotFromMe: settings.stopBotFromMe,
|
stopBotFromMe: settings.stopBotFromMe,
|
||||||
keepOpen: settings.keepOpen,
|
keepOpen: settings.keepOpen,
|
||||||
ignoreJids: settings.ignoreJids,
|
ignoreJids: settings.ignoreJids,
|
||||||
|
splitMessages: settings.splitMessages,
|
||||||
|
timePerChar: settings.timePerChar,
|
||||||
difyIdFallback: settings.difyIdFallback,
|
difyIdFallback: settings.difyIdFallback,
|
||||||
fallback: settings.Fallback,
|
fallback: settings.Fallback,
|
||||||
};
|
};
|
||||||
@ -763,6 +785,8 @@ export class DifyController extends ChatbotController implements ChatbotControll
|
|||||||
let keepOpen = findBot?.keepOpen;
|
let keepOpen = findBot?.keepOpen;
|
||||||
let debounceTime = findBot?.debounceTime;
|
let debounceTime = findBot?.debounceTime;
|
||||||
let ignoreJids = findBot?.ignoreJids;
|
let ignoreJids = findBot?.ignoreJids;
|
||||||
|
let splitMessages = findBot?.splitMessages;
|
||||||
|
let timePerChar = findBot?.timePerChar;
|
||||||
|
|
||||||
if (!expire) expire = settings.expire;
|
if (!expire) expire = settings.expire;
|
||||||
if (!keywordFinish) keywordFinish = settings.keywordFinish;
|
if (!keywordFinish) keywordFinish = settings.keywordFinish;
|
||||||
@ -771,8 +795,10 @@ export class DifyController extends ChatbotController implements ChatbotControll
|
|||||||
if (!listeningFromMe) listeningFromMe = settings.listeningFromMe;
|
if (!listeningFromMe) listeningFromMe = settings.listeningFromMe;
|
||||||
if (!stopBotFromMe) stopBotFromMe = settings.stopBotFromMe;
|
if (!stopBotFromMe) stopBotFromMe = settings.stopBotFromMe;
|
||||||
if (!keepOpen) keepOpen = settings.keepOpen;
|
if (!keepOpen) keepOpen = settings.keepOpen;
|
||||||
if (!debounceTime) debounceTime = settings.debounceTime;
|
if (debounceTime === undefined || debounceTime === null) debounceTime = settings.debounceTime;
|
||||||
if (!ignoreJids) ignoreJids = settings.ignoreJids;
|
if (!ignoreJids) ignoreJids = settings.ignoreJids;
|
||||||
|
if (splitMessages === undefined || splitMessages === null) splitMessages = settings?.splitMessages ?? false;
|
||||||
|
if (timePerChar === undefined || timePerChar === null) timePerChar = settings?.timePerChar ?? 0;
|
||||||
|
|
||||||
const key = msg.key as {
|
const key = msg.key as {
|
||||||
id: string;
|
id: string;
|
||||||
@ -819,6 +845,8 @@ export class DifyController extends ChatbotController implements ChatbotControll
|
|||||||
keepOpen,
|
keepOpen,
|
||||||
debounceTime,
|
debounceTime,
|
||||||
ignoreJids,
|
ignoreJids,
|
||||||
|
splitMessages,
|
||||||
|
timePerChar,
|
||||||
},
|
},
|
||||||
debouncedContent,
|
debouncedContent,
|
||||||
msg?.pushName,
|
msg?.pushName,
|
||||||
@ -841,6 +869,8 @@ export class DifyController extends ChatbotController implements ChatbotControll
|
|||||||
keepOpen,
|
keepOpen,
|
||||||
debounceTime,
|
debounceTime,
|
||||||
ignoreJids,
|
ignoreJids,
|
||||||
|
splitMessages,
|
||||||
|
timePerChar,
|
||||||
},
|
},
|
||||||
content,
|
content,
|
||||||
msg?.pushName,
|
msg?.pushName,
|
||||||
|
@ -18,6 +18,8 @@ export class DifyDto {
|
|||||||
triggerOperator?: TriggerOperator;
|
triggerOperator?: TriggerOperator;
|
||||||
triggerValue?: string;
|
triggerValue?: string;
|
||||||
ignoreJids?: any;
|
ignoreJids?: any;
|
||||||
|
splitMessages?: boolean;
|
||||||
|
timePerChar?: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
export class DifySettingDto {
|
export class DifySettingDto {
|
||||||
@ -31,4 +33,6 @@ export class DifySettingDto {
|
|||||||
debounceTime?: number;
|
debounceTime?: number;
|
||||||
difyIdFallback?: string;
|
difyIdFallback?: string;
|
||||||
ignoreJids?: any;
|
ignoreJids?: any;
|
||||||
|
splitMessages?: boolean;
|
||||||
|
timePerChar?: number;
|
||||||
}
|
}
|
||||||
|
@ -382,16 +382,54 @@ export class DifyService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (mediaType) {
|
if (mediaType) {
|
||||||
|
const splitMessages = settings.splitMessages ?? false;
|
||||||
|
const timePerChar = settings.timePerChar ?? 0;
|
||||||
|
const minDelay = 1000;
|
||||||
|
const maxDelay = 20000;
|
||||||
|
|
||||||
if (textBuffer.trim()) {
|
if (textBuffer.trim()) {
|
||||||
await instance.textMessage(
|
if (splitMessages) {
|
||||||
{
|
const multipleMessages = textBuffer.trim().split('\n\n');
|
||||||
number: remoteJid.split('@')[0],
|
|
||||||
delay: settings?.delayMessage || 1000,
|
for (let index = 0; index < multipleMessages.length; index++) {
|
||||||
text: textBuffer.trim(),
|
const message = multipleMessages[index];
|
||||||
},
|
|
||||||
false,
|
const delay = Math.min(Math.max(message.length * timePerChar, minDelay), maxDelay);
|
||||||
);
|
|
||||||
textBuffer = '';
|
if (instance.integration === Integration.WHATSAPP_BAILEYS) {
|
||||||
|
await instance.client.presenceSubscribe(remoteJid);
|
||||||
|
await instance.client.sendPresenceUpdate('composing', remoteJid);
|
||||||
|
}
|
||||||
|
|
||||||
|
await new Promise<void>((resolve) => {
|
||||||
|
setTimeout(async () => {
|
||||||
|
await instance.textMessage(
|
||||||
|
{
|
||||||
|
number: remoteJid.split('@')[0],
|
||||||
|
delay: settings?.delayMessage || 1000,
|
||||||
|
text: message,
|
||||||
|
},
|
||||||
|
false,
|
||||||
|
);
|
||||||
|
resolve();
|
||||||
|
}, delay);
|
||||||
|
});
|
||||||
|
|
||||||
|
if (instance.integration === Integration.WHATSAPP_BAILEYS) {
|
||||||
|
await instance.client.sendPresenceUpdate('paused', remoteJid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
await instance.textMessage(
|
||||||
|
{
|
||||||
|
number: remoteJid.split('@')[0],
|
||||||
|
delay: settings?.delayMessage || 1000,
|
||||||
|
text: textBuffer.trim(),
|
||||||
|
},
|
||||||
|
false,
|
||||||
|
);
|
||||||
|
textBuffer = '';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mediaType === 'audio') {
|
if (mediaType === 'audio') {
|
||||||
@ -428,15 +466,53 @@ export class DifyService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const splitMessages = settings.splitMessages ?? false;
|
||||||
|
const timePerChar = settings.timePerChar ?? 0;
|
||||||
|
const minDelay = 1000;
|
||||||
|
const maxDelay = 20000;
|
||||||
|
|
||||||
if (textBuffer.trim()) {
|
if (textBuffer.trim()) {
|
||||||
await instance.textMessage(
|
if (splitMessages) {
|
||||||
{
|
const multipleMessages = textBuffer.trim().split('\n\n');
|
||||||
number: remoteJid.split('@')[0],
|
|
||||||
delay: settings?.delayMessage || 1000,
|
for (let index = 0; index < multipleMessages.length; index++) {
|
||||||
text: textBuffer.trim(),
|
const message = multipleMessages[index];
|
||||||
},
|
|
||||||
false,
|
const delay = Math.min(Math.max(message.length * timePerChar, minDelay), maxDelay);
|
||||||
);
|
|
||||||
|
if (instance.integration === Integration.WHATSAPP_BAILEYS) {
|
||||||
|
await instance.client.presenceSubscribe(remoteJid);
|
||||||
|
await instance.client.sendPresenceUpdate('composing', remoteJid);
|
||||||
|
}
|
||||||
|
|
||||||
|
await new Promise<void>((resolve) => {
|
||||||
|
setTimeout(async () => {
|
||||||
|
await instance.textMessage(
|
||||||
|
{
|
||||||
|
number: remoteJid.split('@')[0],
|
||||||
|
delay: settings?.delayMessage || 1000,
|
||||||
|
text: message,
|
||||||
|
},
|
||||||
|
false,
|
||||||
|
);
|
||||||
|
resolve();
|
||||||
|
}, delay);
|
||||||
|
});
|
||||||
|
|
||||||
|
if (instance.integration === Integration.WHATSAPP_BAILEYS) {
|
||||||
|
await instance.client.sendPresenceUpdate('paused', remoteJid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
await instance.textMessage(
|
||||||
|
{
|
||||||
|
number: remoteJid.split('@')[0],
|
||||||
|
delay: settings?.delayMessage || 1000,
|
||||||
|
text: textBuffer.trim(),
|
||||||
|
},
|
||||||
|
false,
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sendTelemetry('/message/sendText');
|
sendTelemetry('/message/sendText');
|
||||||
|
@ -41,6 +41,8 @@ export const difySchema: JSONSchema7 = {
|
|||||||
keepOpen: { type: 'boolean' },
|
keepOpen: { type: 'boolean' },
|
||||||
debounceTime: { type: 'integer' },
|
debounceTime: { type: 'integer' },
|
||||||
ignoreJids: { type: 'array', items: { type: 'string' } },
|
ignoreJids: { type: 'array', items: { type: 'string' } },
|
||||||
|
splitMessages: { type: 'boolean' },
|
||||||
|
timePerChar: { type: 'integer' },
|
||||||
},
|
},
|
||||||
required: ['enabled', 'botType', 'triggerType'],
|
required: ['enabled', 'botType', 'triggerType'],
|
||||||
...isNotEmpty('enabled', 'botType', 'triggerType'),
|
...isNotEmpty('enabled', 'botType', 'triggerType'),
|
||||||
@ -71,6 +73,8 @@ export const difySettingSchema: JSONSchema7 = {
|
|||||||
debounceTime: { type: 'integer' },
|
debounceTime: { type: 'integer' },
|
||||||
ignoreJids: { type: 'array', items: { type: 'string' } },
|
ignoreJids: { type: 'array', items: { type: 'string' } },
|
||||||
difyIdFallback: { type: 'string' },
|
difyIdFallback: { type: 'string' },
|
||||||
|
splitMessages: { type: 'boolean' },
|
||||||
|
timePerChar: { type: 'integer' },
|
||||||
},
|
},
|
||||||
required: [
|
required: [
|
||||||
'expire',
|
'expire',
|
||||||
@ -82,6 +86,8 @@ export const difySettingSchema: JSONSchema7 = {
|
|||||||
'keepOpen',
|
'keepOpen',
|
||||||
'debounceTime',
|
'debounceTime',
|
||||||
'ignoreJids',
|
'ignoreJids',
|
||||||
|
'splitMessages',
|
||||||
|
'timePerChar',
|
||||||
],
|
],
|
||||||
...isNotEmpty(
|
...isNotEmpty(
|
||||||
'expire',
|
'expire',
|
||||||
@ -93,6 +99,8 @@ export const difySettingSchema: JSONSchema7 = {
|
|||||||
'keepOpen',
|
'keepOpen',
|
||||||
'debounceTime',
|
'debounceTime',
|
||||||
'ignoreJids',
|
'ignoreJids',
|
||||||
|
'splitMessages',
|
||||||
|
'timePerChar',
|
||||||
),
|
),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -50,7 +50,9 @@ export class EvolutionBotController extends ChatbotController implements Chatbot
|
|||||||
!data.stopBotFromMe ||
|
!data.stopBotFromMe ||
|
||||||
!data.keepOpen ||
|
!data.keepOpen ||
|
||||||
!data.debounceTime ||
|
!data.debounceTime ||
|
||||||
!data.ignoreJids
|
!data.ignoreJids ||
|
||||||
|
!data.splitMessages ||
|
||||||
|
!data.timePerChar
|
||||||
) {
|
) {
|
||||||
const defaultSettingCheck = await this.settingsRepository.findFirst({
|
const defaultSettingCheck = await this.settingsRepository.findFirst({
|
||||||
where: {
|
where: {
|
||||||
@ -67,6 +69,8 @@ export class EvolutionBotController extends ChatbotController implements Chatbot
|
|||||||
if (!data.keepOpen) data.keepOpen = defaultSettingCheck?.keepOpen || false;
|
if (!data.keepOpen) data.keepOpen = defaultSettingCheck?.keepOpen || false;
|
||||||
if (!data.debounceTime) data.debounceTime = defaultSettingCheck?.debounceTime || 0;
|
if (!data.debounceTime) data.debounceTime = defaultSettingCheck?.debounceTime || 0;
|
||||||
if (!data.ignoreJids) data.ignoreJids = defaultSettingCheck?.ignoreJids || [];
|
if (!data.ignoreJids) data.ignoreJids = defaultSettingCheck?.ignoreJids || [];
|
||||||
|
if (!data.splitMessages) data.splitMessages = defaultSettingCheck?.splitMessages || false;
|
||||||
|
if (!data.timePerChar) data.timePerChar = defaultSettingCheck?.timePerChar || 0;
|
||||||
|
|
||||||
if (!defaultSettingCheck) {
|
if (!defaultSettingCheck) {
|
||||||
await this.settings(instance, {
|
await this.settings(instance, {
|
||||||
@ -79,6 +83,8 @@ export class EvolutionBotController extends ChatbotController implements Chatbot
|
|||||||
keepOpen: data.keepOpen,
|
keepOpen: data.keepOpen,
|
||||||
debounceTime: data.debounceTime,
|
debounceTime: data.debounceTime,
|
||||||
ignoreJids: data.ignoreJids,
|
ignoreJids: data.ignoreJids,
|
||||||
|
splitMessages: data.splitMessages,
|
||||||
|
timePerChar: data.timePerChar,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -162,6 +168,8 @@ export class EvolutionBotController extends ChatbotController implements Chatbot
|
|||||||
triggerOperator: data.triggerOperator,
|
triggerOperator: data.triggerOperator,
|
||||||
triggerValue: data.triggerValue,
|
triggerValue: data.triggerValue,
|
||||||
ignoreJids: data.ignoreJids,
|
ignoreJids: data.ignoreJids,
|
||||||
|
splitMessages: data.splitMessages,
|
||||||
|
timePerChar: data.timePerChar,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -335,6 +343,8 @@ export class EvolutionBotController extends ChatbotController implements Chatbot
|
|||||||
triggerOperator: data.triggerOperator,
|
triggerOperator: data.triggerOperator,
|
||||||
triggerValue: data.triggerValue,
|
triggerValue: data.triggerValue,
|
||||||
ignoreJids: data.ignoreJids,
|
ignoreJids: data.ignoreJids,
|
||||||
|
splitMessages: data.splitMessages,
|
||||||
|
timePerChar: data.timePerChar,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -420,6 +430,8 @@ export class EvolutionBotController extends ChatbotController implements Chatbot
|
|||||||
debounceTime: data.debounceTime,
|
debounceTime: data.debounceTime,
|
||||||
botIdFallback: data.botIdFallback,
|
botIdFallback: data.botIdFallback,
|
||||||
ignoreJids: data.ignoreJids,
|
ignoreJids: data.ignoreJids,
|
||||||
|
splitMessages: data.splitMessages,
|
||||||
|
timePerChar: data.timePerChar,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -434,6 +446,8 @@ export class EvolutionBotController extends ChatbotController implements Chatbot
|
|||||||
debounceTime: updateSettings.debounceTime,
|
debounceTime: updateSettings.debounceTime,
|
||||||
botIdFallback: updateSettings.botIdFallback,
|
botIdFallback: updateSettings.botIdFallback,
|
||||||
ignoreJids: updateSettings.ignoreJids,
|
ignoreJids: updateSettings.ignoreJids,
|
||||||
|
splitMessages: updateSettings.splitMessages,
|
||||||
|
timePerChar: updateSettings.timePerChar,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -449,6 +463,8 @@ export class EvolutionBotController extends ChatbotController implements Chatbot
|
|||||||
debounceTime: data.debounceTime,
|
debounceTime: data.debounceTime,
|
||||||
botIdFallback: data.botIdFallback,
|
botIdFallback: data.botIdFallback,
|
||||||
ignoreJids: data.ignoreJids,
|
ignoreJids: data.ignoreJids,
|
||||||
|
splitMessages: data.splitMessages,
|
||||||
|
timePerChar: data.timePerChar,
|
||||||
instanceId: instanceId,
|
instanceId: instanceId,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
@ -464,6 +480,8 @@ export class EvolutionBotController extends ChatbotController implements Chatbot
|
|||||||
debounceTime: newSetttings.debounceTime,
|
debounceTime: newSetttings.debounceTime,
|
||||||
botIdFallback: newSetttings.botIdFallback,
|
botIdFallback: newSetttings.botIdFallback,
|
||||||
ignoreJids: newSetttings.ignoreJids,
|
ignoreJids: newSetttings.ignoreJids,
|
||||||
|
splitMessages: newSetttings.splitMessages,
|
||||||
|
timePerChar: newSetttings.timePerChar,
|
||||||
};
|
};
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
this.logger.error(error);
|
this.logger.error(error);
|
||||||
@ -500,6 +518,8 @@ export class EvolutionBotController extends ChatbotController implements Chatbot
|
|||||||
stopBotFromMe: false,
|
stopBotFromMe: false,
|
||||||
keepOpen: false,
|
keepOpen: false,
|
||||||
ignoreJids: [],
|
ignoreJids: [],
|
||||||
|
splitMessages: false,
|
||||||
|
timePerChar: 0,
|
||||||
botIdFallback: '',
|
botIdFallback: '',
|
||||||
fallback: null,
|
fallback: null,
|
||||||
};
|
};
|
||||||
@ -514,6 +534,8 @@ export class EvolutionBotController extends ChatbotController implements Chatbot
|
|||||||
stopBotFromMe: settings.stopBotFromMe,
|
stopBotFromMe: settings.stopBotFromMe,
|
||||||
keepOpen: settings.keepOpen,
|
keepOpen: settings.keepOpen,
|
||||||
ignoreJids: settings.ignoreJids,
|
ignoreJids: settings.ignoreJids,
|
||||||
|
splitMessages: settings.splitMessages,
|
||||||
|
timePerChar: settings.timePerChar,
|
||||||
botIdFallback: settings.botIdFallback,
|
botIdFallback: settings.botIdFallback,
|
||||||
fallback: settings.Fallback,
|
fallback: settings.Fallback,
|
||||||
};
|
};
|
||||||
@ -735,6 +757,8 @@ export class EvolutionBotController extends ChatbotController implements Chatbot
|
|||||||
let keepOpen = findBot?.keepOpen;
|
let keepOpen = findBot?.keepOpen;
|
||||||
let debounceTime = findBot?.debounceTime;
|
let debounceTime = findBot?.debounceTime;
|
||||||
let ignoreJids = findBot?.ignoreJids;
|
let ignoreJids = findBot?.ignoreJids;
|
||||||
|
let splitMessages = findBot?.splitMessages;
|
||||||
|
let timePerChar = findBot?.timePerChar;
|
||||||
|
|
||||||
if (!expire) expire = settings.expire;
|
if (!expire) expire = settings.expire;
|
||||||
if (!keywordFinish) keywordFinish = settings.keywordFinish;
|
if (!keywordFinish) keywordFinish = settings.keywordFinish;
|
||||||
@ -745,6 +769,8 @@ export class EvolutionBotController extends ChatbotController implements Chatbot
|
|||||||
if (!keepOpen) keepOpen = settings.keepOpen;
|
if (!keepOpen) keepOpen = settings.keepOpen;
|
||||||
if (!debounceTime) debounceTime = settings.debounceTime;
|
if (!debounceTime) debounceTime = settings.debounceTime;
|
||||||
if (!ignoreJids) ignoreJids = settings.ignoreJids;
|
if (!ignoreJids) ignoreJids = settings.ignoreJids;
|
||||||
|
if (splitMessages === undefined || splitMessages === null) splitMessages = settings?.splitMessages ?? false;
|
||||||
|
if (timePerChar === undefined || timePerChar === null) timePerChar = settings?.timePerChar ?? 0;
|
||||||
|
|
||||||
const key = msg.key as {
|
const key = msg.key as {
|
||||||
id: string;
|
id: string;
|
||||||
@ -791,6 +817,8 @@ export class EvolutionBotController extends ChatbotController implements Chatbot
|
|||||||
keepOpen,
|
keepOpen,
|
||||||
debounceTime,
|
debounceTime,
|
||||||
ignoreJids,
|
ignoreJids,
|
||||||
|
splitMessages,
|
||||||
|
timePerChar,
|
||||||
},
|
},
|
||||||
debouncedContent,
|
debouncedContent,
|
||||||
msg?.pushName,
|
msg?.pushName,
|
||||||
@ -813,6 +841,8 @@ export class EvolutionBotController extends ChatbotController implements Chatbot
|
|||||||
keepOpen,
|
keepOpen,
|
||||||
debounceTime,
|
debounceTime,
|
||||||
ignoreJids,
|
ignoreJids,
|
||||||
|
splitMessages,
|
||||||
|
timePerChar,
|
||||||
},
|
},
|
||||||
content,
|
content,
|
||||||
msg?.pushName,
|
msg?.pushName,
|
||||||
|
@ -17,6 +17,8 @@ export class EvolutionBotDto {
|
|||||||
triggerOperator?: TriggerOperator;
|
triggerOperator?: TriggerOperator;
|
||||||
triggerValue?: string;
|
triggerValue?: string;
|
||||||
ignoreJids?: any;
|
ignoreJids?: any;
|
||||||
|
splitMessages?: boolean;
|
||||||
|
timePerChar?: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
export class EvolutionBotSettingDto {
|
export class EvolutionBotSettingDto {
|
||||||
@ -30,4 +32,6 @@ export class EvolutionBotSettingDto {
|
|||||||
debounceTime?: number;
|
debounceTime?: number;
|
||||||
botIdFallback?: string;
|
botIdFallback?: string;
|
||||||
ignoreJids?: any;
|
ignoreJids?: any;
|
||||||
|
splitMessages?: boolean;
|
||||||
|
timePerChar?: number;
|
||||||
}
|
}
|
||||||
|
@ -143,16 +143,54 @@ export class EvolutionBotService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (mediaType) {
|
if (mediaType) {
|
||||||
|
const splitMessages = settings.splitMessages ?? false;
|
||||||
|
const timePerChar = settings.timePerChar ?? 0;
|
||||||
|
const minDelay = 1000;
|
||||||
|
const maxDelay = 20000;
|
||||||
|
|
||||||
if (textBuffer.trim()) {
|
if (textBuffer.trim()) {
|
||||||
await instance.textMessage(
|
if (splitMessages) {
|
||||||
{
|
const multipleMessages = textBuffer.trim().split('\n\n');
|
||||||
number: remoteJid.split('@')[0],
|
|
||||||
delay: settings?.delayMessage || 1000,
|
for (let index = 0; index < multipleMessages.length; index++) {
|
||||||
text: textBuffer.trim(),
|
const message = multipleMessages[index];
|
||||||
},
|
|
||||||
false,
|
const delay = Math.min(Math.max(message.length * timePerChar, minDelay), maxDelay);
|
||||||
);
|
|
||||||
textBuffer = '';
|
if (instance.integration === Integration.WHATSAPP_BAILEYS) {
|
||||||
|
await instance.client.presenceSubscribe(remoteJid);
|
||||||
|
await instance.client.sendPresenceUpdate('composing', remoteJid);
|
||||||
|
}
|
||||||
|
|
||||||
|
await new Promise<void>((resolve) => {
|
||||||
|
setTimeout(async () => {
|
||||||
|
await instance.textMessage(
|
||||||
|
{
|
||||||
|
number: remoteJid.split('@')[0],
|
||||||
|
delay: settings?.delayMessage || 1000,
|
||||||
|
text: message,
|
||||||
|
},
|
||||||
|
false,
|
||||||
|
);
|
||||||
|
resolve();
|
||||||
|
}, delay);
|
||||||
|
});
|
||||||
|
|
||||||
|
if (instance.integration === Integration.WHATSAPP_BAILEYS) {
|
||||||
|
await instance.client.sendPresenceUpdate('paused', remoteJid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
await instance.textMessage(
|
||||||
|
{
|
||||||
|
number: remoteJid.split('@')[0],
|
||||||
|
delay: settings?.delayMessage || 1000,
|
||||||
|
text: textBuffer.trim(),
|
||||||
|
},
|
||||||
|
false,
|
||||||
|
);
|
||||||
|
textBuffer = '';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mediaType === 'audio') {
|
if (mediaType === 'audio') {
|
||||||
@ -189,15 +227,54 @@ export class EvolutionBotService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const splitMessages = settings.splitMessages ?? false;
|
||||||
|
const timePerChar = settings.timePerChar ?? 0;
|
||||||
|
const minDelay = 1000;
|
||||||
|
const maxDelay = 20000;
|
||||||
|
|
||||||
if (textBuffer.trim()) {
|
if (textBuffer.trim()) {
|
||||||
await instance.textMessage(
|
if (splitMessages) {
|
||||||
{
|
const multipleMessages = textBuffer.trim().split('\n\n');
|
||||||
number: remoteJid.split('@')[0],
|
|
||||||
delay: settings?.delayMessage || 1000,
|
for (let index = 0; index < multipleMessages.length; index++) {
|
||||||
text: textBuffer.trim(),
|
const message = multipleMessages[index];
|
||||||
},
|
|
||||||
false,
|
const delay = Math.min(Math.max(message.length * timePerChar, minDelay), maxDelay);
|
||||||
);
|
|
||||||
|
if (instance.integration === Integration.WHATSAPP_BAILEYS) {
|
||||||
|
await instance.client.presenceSubscribe(remoteJid);
|
||||||
|
await instance.client.sendPresenceUpdate('composing', remoteJid);
|
||||||
|
}
|
||||||
|
|
||||||
|
await new Promise<void>((resolve) => {
|
||||||
|
setTimeout(async () => {
|
||||||
|
await instance.textMessage(
|
||||||
|
{
|
||||||
|
number: remoteJid.split('@')[0],
|
||||||
|
delay: settings?.delayMessage || 1000,
|
||||||
|
text: message,
|
||||||
|
},
|
||||||
|
false,
|
||||||
|
);
|
||||||
|
resolve();
|
||||||
|
}, delay);
|
||||||
|
});
|
||||||
|
|
||||||
|
if (instance.integration === Integration.WHATSAPP_BAILEYS) {
|
||||||
|
await instance.client.sendPresenceUpdate('paused', remoteJid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
await instance.textMessage(
|
||||||
|
{
|
||||||
|
number: remoteJid.split('@')[0],
|
||||||
|
delay: settings?.delayMessage || 1000,
|
||||||
|
text: textBuffer.trim(),
|
||||||
|
},
|
||||||
|
false,
|
||||||
|
);
|
||||||
|
textBuffer = '';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sendTelemetry('/message/sendText');
|
sendTelemetry('/message/sendText');
|
||||||
|
@ -40,6 +40,8 @@ export const evolutionBotSchema: JSONSchema7 = {
|
|||||||
keepOpen: { type: 'boolean' },
|
keepOpen: { type: 'boolean' },
|
||||||
debounceTime: { type: 'integer' },
|
debounceTime: { type: 'integer' },
|
||||||
ignoreJids: { type: 'array', items: { type: 'string' } },
|
ignoreJids: { type: 'array', items: { type: 'string' } },
|
||||||
|
splitMessages: { type: 'boolean' },
|
||||||
|
timePerChar: { type: 'integer' },
|
||||||
},
|
},
|
||||||
required: ['enabled', 'apiUrl', 'triggerType'],
|
required: ['enabled', 'apiUrl', 'triggerType'],
|
||||||
...isNotEmpty('enabled', 'apiUrl', 'triggerType'),
|
...isNotEmpty('enabled', 'apiUrl', 'triggerType'),
|
||||||
@ -70,6 +72,8 @@ export const evolutionBotSettingSchema: JSONSchema7 = {
|
|||||||
debounceTime: { type: 'integer' },
|
debounceTime: { type: 'integer' },
|
||||||
ignoreJids: { type: 'array', items: { type: 'string' } },
|
ignoreJids: { type: 'array', items: { type: 'string' } },
|
||||||
botIdFallback: { type: 'string' },
|
botIdFallback: { type: 'string' },
|
||||||
|
splitMessages: { type: 'boolean' },
|
||||||
|
timePerChar: { type: 'integer' },
|
||||||
},
|
},
|
||||||
required: [
|
required: [
|
||||||
'expire',
|
'expire',
|
||||||
@ -81,6 +85,8 @@ export const evolutionBotSettingSchema: JSONSchema7 = {
|
|||||||
'keepOpen',
|
'keepOpen',
|
||||||
'debounceTime',
|
'debounceTime',
|
||||||
'ignoreJids',
|
'ignoreJids',
|
||||||
|
'splitMessages',
|
||||||
|
'timePerChar',
|
||||||
],
|
],
|
||||||
...isNotEmpty(
|
...isNotEmpty(
|
||||||
'expire',
|
'expire',
|
||||||
@ -92,6 +98,8 @@ export const evolutionBotSettingSchema: JSONSchema7 = {
|
|||||||
'keepOpen',
|
'keepOpen',
|
||||||
'debounceTime',
|
'debounceTime',
|
||||||
'ignoreJids',
|
'ignoreJids',
|
||||||
|
'splitMessages',
|
||||||
|
'timePerChar',
|
||||||
),
|
),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -50,7 +50,9 @@ export class FlowiseController extends ChatbotController implements ChatbotContr
|
|||||||
!data.stopBotFromMe ||
|
!data.stopBotFromMe ||
|
||||||
!data.keepOpen ||
|
!data.keepOpen ||
|
||||||
!data.debounceTime ||
|
!data.debounceTime ||
|
||||||
!data.ignoreJids
|
!data.ignoreJids ||
|
||||||
|
!data.splitMessages ||
|
||||||
|
!data.timePerChar
|
||||||
) {
|
) {
|
||||||
const defaultSettingCheck = await this.settingsRepository.findFirst({
|
const defaultSettingCheck = await this.settingsRepository.findFirst({
|
||||||
where: {
|
where: {
|
||||||
@ -67,6 +69,8 @@ export class FlowiseController extends ChatbotController implements ChatbotContr
|
|||||||
if (!data.keepOpen) data.keepOpen = defaultSettingCheck?.keepOpen || false;
|
if (!data.keepOpen) data.keepOpen = defaultSettingCheck?.keepOpen || false;
|
||||||
if (!data.debounceTime) data.debounceTime = defaultSettingCheck?.debounceTime || 0;
|
if (!data.debounceTime) data.debounceTime = defaultSettingCheck?.debounceTime || 0;
|
||||||
if (!data.ignoreJids) data.ignoreJids = defaultSettingCheck?.ignoreJids || [];
|
if (!data.ignoreJids) data.ignoreJids = defaultSettingCheck?.ignoreJids || [];
|
||||||
|
if (!data.splitMessages) data.splitMessages = defaultSettingCheck?.splitMessages || false;
|
||||||
|
if (!data.timePerChar) data.timePerChar = defaultSettingCheck?.timePerChar || 0;
|
||||||
|
|
||||||
if (!defaultSettingCheck) {
|
if (!defaultSettingCheck) {
|
||||||
await this.settings(instance, {
|
await this.settings(instance, {
|
||||||
@ -79,6 +83,8 @@ export class FlowiseController extends ChatbotController implements ChatbotContr
|
|||||||
keepOpen: data.keepOpen,
|
keepOpen: data.keepOpen,
|
||||||
debounceTime: data.debounceTime,
|
debounceTime: data.debounceTime,
|
||||||
ignoreJids: data.ignoreJids,
|
ignoreJids: data.ignoreJids,
|
||||||
|
splitMessages: data.splitMessages,
|
||||||
|
timePerChar: data.timePerChar,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -162,6 +168,8 @@ export class FlowiseController extends ChatbotController implements ChatbotContr
|
|||||||
triggerOperator: data.triggerOperator,
|
triggerOperator: data.triggerOperator,
|
||||||
triggerValue: data.triggerValue,
|
triggerValue: data.triggerValue,
|
||||||
ignoreJids: data.ignoreJids,
|
ignoreJids: data.ignoreJids,
|
||||||
|
splitMessages: data.splitMessages,
|
||||||
|
timePerChar: data.timePerChar,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -335,6 +343,8 @@ export class FlowiseController extends ChatbotController implements ChatbotContr
|
|||||||
triggerOperator: data.triggerOperator,
|
triggerOperator: data.triggerOperator,
|
||||||
triggerValue: data.triggerValue,
|
triggerValue: data.triggerValue,
|
||||||
ignoreJids: data.ignoreJids,
|
ignoreJids: data.ignoreJids,
|
||||||
|
splitMessages: data.splitMessages,
|
||||||
|
timePerChar: data.timePerChar,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -420,6 +430,8 @@ export class FlowiseController extends ChatbotController implements ChatbotContr
|
|||||||
debounceTime: data.debounceTime,
|
debounceTime: data.debounceTime,
|
||||||
flowiseIdFallback: data.flowiseIdFallback,
|
flowiseIdFallback: data.flowiseIdFallback,
|
||||||
ignoreJids: data.ignoreJids,
|
ignoreJids: data.ignoreJids,
|
||||||
|
splitMessages: data.splitMessages,
|
||||||
|
timePerChar: data.timePerChar,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -434,6 +446,8 @@ export class FlowiseController extends ChatbotController implements ChatbotContr
|
|||||||
debounceTime: updateSettings.debounceTime,
|
debounceTime: updateSettings.debounceTime,
|
||||||
flowiseIdFallback: updateSettings.flowiseIdFallback,
|
flowiseIdFallback: updateSettings.flowiseIdFallback,
|
||||||
ignoreJids: updateSettings.ignoreJids,
|
ignoreJids: updateSettings.ignoreJids,
|
||||||
|
splitMessages: updateSettings.splitMessages,
|
||||||
|
timePerChar: updateSettings.timePerChar,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -450,6 +464,8 @@ export class FlowiseController extends ChatbotController implements ChatbotContr
|
|||||||
flowiseIdFallback: data.flowiseIdFallback,
|
flowiseIdFallback: data.flowiseIdFallback,
|
||||||
ignoreJids: data.ignoreJids,
|
ignoreJids: data.ignoreJids,
|
||||||
instanceId: instanceId,
|
instanceId: instanceId,
|
||||||
|
splitMessages: data.splitMessages,
|
||||||
|
timePerChar: data.timePerChar,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -464,6 +480,8 @@ export class FlowiseController extends ChatbotController implements ChatbotContr
|
|||||||
debounceTime: newSetttings.debounceTime,
|
debounceTime: newSetttings.debounceTime,
|
||||||
flowiseIdFallback: newSetttings.flowiseIdFallback,
|
flowiseIdFallback: newSetttings.flowiseIdFallback,
|
||||||
ignoreJids: newSetttings.ignoreJids,
|
ignoreJids: newSetttings.ignoreJids,
|
||||||
|
splitMessages: newSetttings.splitMessages,
|
||||||
|
timePerChar: newSetttings.timePerChar,
|
||||||
};
|
};
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
this.logger.error(error);
|
this.logger.error(error);
|
||||||
@ -500,6 +518,8 @@ export class FlowiseController extends ChatbotController implements ChatbotContr
|
|||||||
stopBotFromMe: false,
|
stopBotFromMe: false,
|
||||||
keepOpen: false,
|
keepOpen: false,
|
||||||
ignoreJids: [],
|
ignoreJids: [],
|
||||||
|
splitMessages: false,
|
||||||
|
timePerChar: 0,
|
||||||
flowiseIdFallback: '',
|
flowiseIdFallback: '',
|
||||||
fallback: null,
|
fallback: null,
|
||||||
};
|
};
|
||||||
@ -514,6 +534,8 @@ export class FlowiseController extends ChatbotController implements ChatbotContr
|
|||||||
stopBotFromMe: settings.stopBotFromMe,
|
stopBotFromMe: settings.stopBotFromMe,
|
||||||
keepOpen: settings.keepOpen,
|
keepOpen: settings.keepOpen,
|
||||||
ignoreJids: settings.ignoreJids,
|
ignoreJids: settings.ignoreJids,
|
||||||
|
splitMessages: settings.splitMessages,
|
||||||
|
timePerChar: settings.timePerChar,
|
||||||
flowiseIdFallback: settings.flowiseIdFallback,
|
flowiseIdFallback: settings.flowiseIdFallback,
|
||||||
fallback: settings.Fallback,
|
fallback: settings.Fallback,
|
||||||
};
|
};
|
||||||
@ -735,6 +757,8 @@ export class FlowiseController extends ChatbotController implements ChatbotContr
|
|||||||
let keepOpen = findBot?.keepOpen;
|
let keepOpen = findBot?.keepOpen;
|
||||||
let debounceTime = findBot?.debounceTime;
|
let debounceTime = findBot?.debounceTime;
|
||||||
let ignoreJids = findBot?.ignoreJids;
|
let ignoreJids = findBot?.ignoreJids;
|
||||||
|
let splitMessages = findBot?.splitMessages;
|
||||||
|
let timePerChar = findBot?.timePerChar;
|
||||||
|
|
||||||
if (!expire) expire = settings.expire;
|
if (!expire) expire = settings.expire;
|
||||||
if (!keywordFinish) keywordFinish = settings.keywordFinish;
|
if (!keywordFinish) keywordFinish = settings.keywordFinish;
|
||||||
@ -745,6 +769,8 @@ export class FlowiseController extends ChatbotController implements ChatbotContr
|
|||||||
if (!keepOpen) keepOpen = settings.keepOpen;
|
if (!keepOpen) keepOpen = settings.keepOpen;
|
||||||
if (!debounceTime) debounceTime = settings.debounceTime;
|
if (!debounceTime) debounceTime = settings.debounceTime;
|
||||||
if (!ignoreJids) ignoreJids = settings.ignoreJids;
|
if (!ignoreJids) ignoreJids = settings.ignoreJids;
|
||||||
|
if (splitMessages === undefined || splitMessages === null) splitMessages = settings?.splitMessages ?? false;
|
||||||
|
if (timePerChar === undefined || timePerChar === null) timePerChar = settings?.timePerChar ?? 0;
|
||||||
|
|
||||||
const key = msg.key as {
|
const key = msg.key as {
|
||||||
id: string;
|
id: string;
|
||||||
@ -791,6 +817,8 @@ export class FlowiseController extends ChatbotController implements ChatbotContr
|
|||||||
keepOpen,
|
keepOpen,
|
||||||
debounceTime,
|
debounceTime,
|
||||||
ignoreJids,
|
ignoreJids,
|
||||||
|
splitMessages,
|
||||||
|
timePerChar,
|
||||||
},
|
},
|
||||||
debouncedContent,
|
debouncedContent,
|
||||||
msg?.pushName,
|
msg?.pushName,
|
||||||
@ -813,6 +841,8 @@ export class FlowiseController extends ChatbotController implements ChatbotContr
|
|||||||
keepOpen,
|
keepOpen,
|
||||||
debounceTime,
|
debounceTime,
|
||||||
ignoreJids,
|
ignoreJids,
|
||||||
|
splitMessages,
|
||||||
|
timePerChar,
|
||||||
},
|
},
|
||||||
content,
|
content,
|
||||||
msg?.pushName,
|
msg?.pushName,
|
||||||
|
@ -17,6 +17,8 @@ export class FlowiseDto {
|
|||||||
triggerOperator?: TriggerOperator;
|
triggerOperator?: TriggerOperator;
|
||||||
triggerValue?: string;
|
triggerValue?: string;
|
||||||
ignoreJids?: any;
|
ignoreJids?: any;
|
||||||
|
splitMessages?: boolean;
|
||||||
|
timePerChar?: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
export class FlowiseSettingDto {
|
export class FlowiseSettingDto {
|
||||||
@ -30,4 +32,6 @@ export class FlowiseSettingDto {
|
|||||||
debounceTime?: number;
|
debounceTime?: number;
|
||||||
flowiseIdFallback?: string;
|
flowiseIdFallback?: string;
|
||||||
ignoreJids?: any;
|
ignoreJids?: any;
|
||||||
|
splitMessages?: boolean;
|
||||||
|
timePerChar?: number;
|
||||||
}
|
}
|
||||||
|
@ -143,16 +143,54 @@ export class FlowiseService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (mediaType) {
|
if (mediaType) {
|
||||||
|
const splitMessages = settings.splitMessages ?? false;
|
||||||
|
const timePerChar = settings.timePerChar ?? 0;
|
||||||
|
const minDelay = 1000;
|
||||||
|
const maxDelay = 20000;
|
||||||
|
|
||||||
if (textBuffer.trim()) {
|
if (textBuffer.trim()) {
|
||||||
await instance.textMessage(
|
if (splitMessages) {
|
||||||
{
|
const multipleMessages = textBuffer.trim().split('\n\n');
|
||||||
number: remoteJid.split('@')[0],
|
|
||||||
delay: settings?.delayMessage || 1000,
|
for (let index = 0; index < multipleMessages.length; index++) {
|
||||||
text: textBuffer.trim(),
|
const message = multipleMessages[index];
|
||||||
},
|
|
||||||
false,
|
const delay = Math.min(Math.max(message.length * timePerChar, minDelay), maxDelay);
|
||||||
);
|
|
||||||
textBuffer = '';
|
if (instance.integration === Integration.WHATSAPP_BAILEYS) {
|
||||||
|
await instance.client.presenceSubscribe(remoteJid);
|
||||||
|
await instance.client.sendPresenceUpdate('composing', remoteJid);
|
||||||
|
}
|
||||||
|
|
||||||
|
await new Promise<void>((resolve) => {
|
||||||
|
setTimeout(async () => {
|
||||||
|
await instance.textMessage(
|
||||||
|
{
|
||||||
|
number: remoteJid.split('@')[0],
|
||||||
|
delay: settings?.delayMessage || 1000,
|
||||||
|
text: message,
|
||||||
|
},
|
||||||
|
false,
|
||||||
|
);
|
||||||
|
resolve();
|
||||||
|
}, delay);
|
||||||
|
});
|
||||||
|
|
||||||
|
if (instance.integration === Integration.WHATSAPP_BAILEYS) {
|
||||||
|
await instance.client.sendPresenceUpdate('paused', remoteJid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
await instance.textMessage(
|
||||||
|
{
|
||||||
|
number: remoteJid.split('@')[0],
|
||||||
|
delay: settings?.delayMessage || 1000,
|
||||||
|
text: textBuffer.trim(),
|
||||||
|
},
|
||||||
|
false,
|
||||||
|
);
|
||||||
|
textBuffer = '';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mediaType === 'audio') {
|
if (mediaType === 'audio') {
|
||||||
@ -189,15 +227,54 @@ export class FlowiseService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const splitMessages = settings.splitMessages ?? false;
|
||||||
|
const timePerChar = settings.timePerChar ?? 0;
|
||||||
|
const minDelay = 1000;
|
||||||
|
const maxDelay = 20000;
|
||||||
|
|
||||||
if (textBuffer.trim()) {
|
if (textBuffer.trim()) {
|
||||||
await instance.textMessage(
|
if (splitMessages) {
|
||||||
{
|
const multipleMessages = textBuffer.trim().split('\n\n');
|
||||||
number: remoteJid.split('@')[0],
|
|
||||||
delay: settings?.delayMessage || 1000,
|
for (let index = 0; index < multipleMessages.length; index++) {
|
||||||
text: textBuffer.trim(),
|
const message = multipleMessages[index];
|
||||||
},
|
|
||||||
false,
|
const delay = Math.min(Math.max(message.length * timePerChar, minDelay), maxDelay);
|
||||||
);
|
|
||||||
|
if (instance.integration === Integration.WHATSAPP_BAILEYS) {
|
||||||
|
await instance.client.presenceSubscribe(remoteJid);
|
||||||
|
await instance.client.sendPresenceUpdate('composing', remoteJid);
|
||||||
|
}
|
||||||
|
|
||||||
|
await new Promise<void>((resolve) => {
|
||||||
|
setTimeout(async () => {
|
||||||
|
await instance.textMessage(
|
||||||
|
{
|
||||||
|
number: remoteJid.split('@')[0],
|
||||||
|
delay: settings?.delayMessage || 1000,
|
||||||
|
text: message,
|
||||||
|
},
|
||||||
|
false,
|
||||||
|
);
|
||||||
|
resolve();
|
||||||
|
}, delay);
|
||||||
|
});
|
||||||
|
|
||||||
|
if (instance.integration === Integration.WHATSAPP_BAILEYS) {
|
||||||
|
await instance.client.sendPresenceUpdate('paused', remoteJid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
await instance.textMessage(
|
||||||
|
{
|
||||||
|
number: remoteJid.split('@')[0],
|
||||||
|
delay: settings?.delayMessage || 1000,
|
||||||
|
text: textBuffer.trim(),
|
||||||
|
},
|
||||||
|
false,
|
||||||
|
);
|
||||||
|
textBuffer = '';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sendTelemetry('/message/sendText');
|
sendTelemetry('/message/sendText');
|
||||||
|
@ -191,7 +191,9 @@ export class OpenaiController extends ChatbotController implements ChatbotContro
|
|||||||
!data.stopBotFromMe ||
|
!data.stopBotFromMe ||
|
||||||
!data.keepOpen ||
|
!data.keepOpen ||
|
||||||
!data.debounceTime ||
|
!data.debounceTime ||
|
||||||
!data.ignoreJids
|
!data.ignoreJids ||
|
||||||
|
!data.splitMessages ||
|
||||||
|
!data.timePerChar
|
||||||
) {
|
) {
|
||||||
const defaultSettingCheck = await this.settingsRepository.findFirst({
|
const defaultSettingCheck = await this.settingsRepository.findFirst({
|
||||||
where: {
|
where: {
|
||||||
@ -209,6 +211,8 @@ export class OpenaiController extends ChatbotController implements ChatbotContro
|
|||||||
if (!data.keepOpen) data.keepOpen = defaultSettingCheck?.keepOpen || false;
|
if (!data.keepOpen) data.keepOpen = defaultSettingCheck?.keepOpen || false;
|
||||||
if (!data.debounceTime) data.debounceTime = defaultSettingCheck?.debounceTime || 0;
|
if (!data.debounceTime) data.debounceTime = defaultSettingCheck?.debounceTime || 0;
|
||||||
if (!data.ignoreJids) data.ignoreJids = defaultSettingCheck?.ignoreJids || [];
|
if (!data.ignoreJids) data.ignoreJids = defaultSettingCheck?.ignoreJids || [];
|
||||||
|
if (!data.splitMessages) data.splitMessages = defaultSettingCheck?.splitMessages || false;
|
||||||
|
if (!data.timePerChar) data.timePerChar = defaultSettingCheck?.timePerChar || 0;
|
||||||
|
|
||||||
if (!data.openaiCredsId) {
|
if (!data.openaiCredsId) {
|
||||||
throw new Error('Openai Creds Id is required');
|
throw new Error('Openai Creds Id is required');
|
||||||
@ -226,6 +230,8 @@ export class OpenaiController extends ChatbotController implements ChatbotContro
|
|||||||
keepOpen: data.keepOpen,
|
keepOpen: data.keepOpen,
|
||||||
debounceTime: data.debounceTime,
|
debounceTime: data.debounceTime,
|
||||||
ignoreJids: data.ignoreJids,
|
ignoreJids: data.ignoreJids,
|
||||||
|
splitMessages: data.splitMessages,
|
||||||
|
timePerChar: data.timePerChar,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -338,6 +344,8 @@ export class OpenaiController extends ChatbotController implements ChatbotContro
|
|||||||
triggerOperator: data.triggerOperator,
|
triggerOperator: data.triggerOperator,
|
||||||
triggerValue: data.triggerValue,
|
triggerValue: data.triggerValue,
|
||||||
ignoreJids: data.ignoreJids,
|
ignoreJids: data.ignoreJids,
|
||||||
|
splitMessages: data.splitMessages,
|
||||||
|
timePerChar: data.timePerChar,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -546,6 +554,8 @@ export class OpenaiController extends ChatbotController implements ChatbotContro
|
|||||||
triggerOperator: data.triggerOperator,
|
triggerOperator: data.triggerOperator,
|
||||||
triggerValue: data.triggerValue,
|
triggerValue: data.triggerValue,
|
||||||
ignoreJids: data.ignoreJids,
|
ignoreJids: data.ignoreJids,
|
||||||
|
splitMessages: data.splitMessages,
|
||||||
|
timePerChar: data.timePerChar,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -637,6 +647,8 @@ export class OpenaiController extends ChatbotController implements ChatbotContro
|
|||||||
speechToText: data.speechToText,
|
speechToText: data.speechToText,
|
||||||
openaiIdFallback: data.openaiIdFallback,
|
openaiIdFallback: data.openaiIdFallback,
|
||||||
ignoreJids: data.ignoreJids,
|
ignoreJids: data.ignoreJids,
|
||||||
|
splitMessages: data.splitMessages,
|
||||||
|
timePerChar: data.timePerChar,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -653,6 +665,8 @@ export class OpenaiController extends ChatbotController implements ChatbotContro
|
|||||||
speechToText: updateSettings.speechToText,
|
speechToText: updateSettings.speechToText,
|
||||||
openaiIdFallback: updateSettings.openaiIdFallback,
|
openaiIdFallback: updateSettings.openaiIdFallback,
|
||||||
ignoreJids: updateSettings.ignoreJids,
|
ignoreJids: updateSettings.ignoreJids,
|
||||||
|
splitMessages: updateSettings.splitMessages,
|
||||||
|
timePerChar: updateSettings.timePerChar,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -671,6 +685,8 @@ export class OpenaiController extends ChatbotController implements ChatbotContro
|
|||||||
ignoreJids: data.ignoreJids,
|
ignoreJids: data.ignoreJids,
|
||||||
speechToText: data.speechToText,
|
speechToText: data.speechToText,
|
||||||
instanceId: instanceId,
|
instanceId: instanceId,
|
||||||
|
splitMessages: data.splitMessages,
|
||||||
|
timePerChar: data.timePerChar,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -686,6 +702,9 @@ export class OpenaiController extends ChatbotController implements ChatbotContro
|
|||||||
debounceTime: newSetttings.debounceTime,
|
debounceTime: newSetttings.debounceTime,
|
||||||
openaiIdFallback: newSetttings.openaiIdFallback,
|
openaiIdFallback: newSetttings.openaiIdFallback,
|
||||||
ignoreJids: newSetttings.ignoreJids,
|
ignoreJids: newSetttings.ignoreJids,
|
||||||
|
speechToText: newSetttings.speechToText,
|
||||||
|
splitMessages: newSetttings.splitMessages,
|
||||||
|
timePerChar: newSetttings.timePerChar,
|
||||||
};
|
};
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
this.logger.error(error);
|
this.logger.error(error);
|
||||||
@ -726,6 +745,8 @@ export class OpenaiController extends ChatbotController implements ChatbotContro
|
|||||||
stopBotFromMe: false,
|
stopBotFromMe: false,
|
||||||
keepOpen: false,
|
keepOpen: false,
|
||||||
ignoreJids: [],
|
ignoreJids: [],
|
||||||
|
splitMessages: false,
|
||||||
|
timePerChar: 0,
|
||||||
openaiIdFallback: null,
|
openaiIdFallback: null,
|
||||||
speechToText: false,
|
speechToText: false,
|
||||||
fallback: null,
|
fallback: null,
|
||||||
@ -742,6 +763,8 @@ export class OpenaiController extends ChatbotController implements ChatbotContro
|
|||||||
stopBotFromMe: settings.stopBotFromMe,
|
stopBotFromMe: settings.stopBotFromMe,
|
||||||
keepOpen: settings.keepOpen,
|
keepOpen: settings.keepOpen,
|
||||||
ignoreJids: settings.ignoreJids,
|
ignoreJids: settings.ignoreJids,
|
||||||
|
splitMessages: settings.splitMessages,
|
||||||
|
timePerChar: settings.timePerChar,
|
||||||
openaiIdFallback: settings.openaiIdFallback,
|
openaiIdFallback: settings.openaiIdFallback,
|
||||||
speechToText: settings.speechToText,
|
speechToText: settings.speechToText,
|
||||||
fallback: settings.Fallback,
|
fallback: settings.Fallback,
|
||||||
@ -972,6 +995,8 @@ export class OpenaiController extends ChatbotController implements ChatbotContro
|
|||||||
let keepOpen = findBot?.keepOpen;
|
let keepOpen = findBot?.keepOpen;
|
||||||
let debounceTime = findBot?.debounceTime;
|
let debounceTime = findBot?.debounceTime;
|
||||||
let ignoreJids = findBot?.ignoreJids;
|
let ignoreJids = findBot?.ignoreJids;
|
||||||
|
let splitMessages = findBot?.splitMessages;
|
||||||
|
let timePerChar = findBot?.timePerChar;
|
||||||
|
|
||||||
if (!expire) expire = settings.expire;
|
if (!expire) expire = settings.expire;
|
||||||
if (!keywordFinish) keywordFinish = settings.keywordFinish;
|
if (!keywordFinish) keywordFinish = settings.keywordFinish;
|
||||||
@ -982,6 +1007,8 @@ export class OpenaiController extends ChatbotController implements ChatbotContro
|
|||||||
if (!keepOpen) keepOpen = settings.keepOpen;
|
if (!keepOpen) keepOpen = settings.keepOpen;
|
||||||
if (!debounceTime) debounceTime = settings.debounceTime;
|
if (!debounceTime) debounceTime = settings.debounceTime;
|
||||||
if (!ignoreJids) ignoreJids = settings.ignoreJids;
|
if (!ignoreJids) ignoreJids = settings.ignoreJids;
|
||||||
|
if (splitMessages === undefined || splitMessages === null) splitMessages = settings?.splitMessages ?? false;
|
||||||
|
if (timePerChar === undefined || timePerChar === null) timePerChar = settings?.timePerChar ?? 0;
|
||||||
|
|
||||||
const key = msg.key as {
|
const key = msg.key as {
|
||||||
id: string;
|
id: string;
|
||||||
@ -1030,6 +1057,8 @@ export class OpenaiController extends ChatbotController implements ChatbotContro
|
|||||||
keepOpen,
|
keepOpen,
|
||||||
debounceTime,
|
debounceTime,
|
||||||
ignoreJids,
|
ignoreJids,
|
||||||
|
splitMessages,
|
||||||
|
timePerChar,
|
||||||
},
|
},
|
||||||
debouncedContent,
|
debouncedContent,
|
||||||
);
|
);
|
||||||
@ -1053,6 +1082,8 @@ export class OpenaiController extends ChatbotController implements ChatbotContro
|
|||||||
keepOpen,
|
keepOpen,
|
||||||
debounceTime,
|
debounceTime,
|
||||||
ignoreJids,
|
ignoreJids,
|
||||||
|
splitMessages,
|
||||||
|
timePerChar,
|
||||||
},
|
},
|
||||||
debouncedContent,
|
debouncedContent,
|
||||||
);
|
);
|
||||||
|
@ -29,6 +29,8 @@ export class OpenaiDto {
|
|||||||
triggerOperator?: TriggerOperator;
|
triggerOperator?: TriggerOperator;
|
||||||
triggerValue?: string;
|
triggerValue?: string;
|
||||||
ignoreJids?: any;
|
ignoreJids?: any;
|
||||||
|
splitMessages?: boolean;
|
||||||
|
timePerChar?: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
export class OpenaiSettingDto {
|
export class OpenaiSettingDto {
|
||||||
@ -44,4 +46,6 @@ export class OpenaiSettingDto {
|
|||||||
openaiIdFallback?: string;
|
openaiIdFallback?: string;
|
||||||
ignoreJids?: any;
|
ignoreJids?: any;
|
||||||
speechToText?: boolean;
|
speechToText?: boolean;
|
||||||
|
splitMessages?: boolean;
|
||||||
|
timePerChar?: number;
|
||||||
}
|
}
|
||||||
|
@ -188,16 +188,54 @@ export class OpenaiService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (mediaType) {
|
if (mediaType) {
|
||||||
|
const splitMessages = settings.splitMessages ?? false;
|
||||||
|
const timePerChar = settings.timePerChar ?? 0;
|
||||||
|
const minDelay = 1000;
|
||||||
|
const maxDelay = 20000;
|
||||||
|
|
||||||
if (textBuffer.trim()) {
|
if (textBuffer.trim()) {
|
||||||
await instance.textMessage(
|
if (splitMessages) {
|
||||||
{
|
const multipleMessages = textBuffer.trim().split('\n\n');
|
||||||
number: remoteJid.split('@')[0],
|
|
||||||
delay: settings?.delayMessage || 1000,
|
for (let index = 0; index < multipleMessages.length; index++) {
|
||||||
text: textBuffer.trim(),
|
const message = multipleMessages[index];
|
||||||
},
|
|
||||||
false,
|
const delay = Math.min(Math.max(message.length * timePerChar, minDelay), maxDelay);
|
||||||
);
|
|
||||||
textBuffer = '';
|
if (instance.integration === Integration.WHATSAPP_BAILEYS) {
|
||||||
|
await instance.client.presenceSubscribe(remoteJid);
|
||||||
|
await instance.client.sendPresenceUpdate('composing', remoteJid);
|
||||||
|
}
|
||||||
|
|
||||||
|
await new Promise<void>((resolve) => {
|
||||||
|
setTimeout(async () => {
|
||||||
|
await instance.textMessage(
|
||||||
|
{
|
||||||
|
number: remoteJid.split('@')[0],
|
||||||
|
delay: settings?.delayMessage || 1000,
|
||||||
|
text: message,
|
||||||
|
},
|
||||||
|
false,
|
||||||
|
);
|
||||||
|
resolve();
|
||||||
|
}, delay);
|
||||||
|
});
|
||||||
|
|
||||||
|
if (instance.integration === Integration.WHATSAPP_BAILEYS) {
|
||||||
|
await instance.client.sendPresenceUpdate('paused', remoteJid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
await instance.textMessage(
|
||||||
|
{
|
||||||
|
number: remoteJid.split('@')[0],
|
||||||
|
delay: settings?.delayMessage || 1000,
|
||||||
|
text: textBuffer.trim(),
|
||||||
|
},
|
||||||
|
false,
|
||||||
|
);
|
||||||
|
textBuffer = '';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mediaType === 'audio') {
|
if (mediaType === 'audio') {
|
||||||
@ -234,15 +272,54 @@ export class OpenaiService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const splitMessages = settings.splitMessages ?? false;
|
||||||
|
const timePerChar = settings.timePerChar ?? 0;
|
||||||
|
const minDelay = 1000;
|
||||||
|
const maxDelay = 20000;
|
||||||
|
|
||||||
if (textBuffer.trim()) {
|
if (textBuffer.trim()) {
|
||||||
await instance.textMessage(
|
if (splitMessages) {
|
||||||
{
|
const multipleMessages = textBuffer.trim().split('\n\n');
|
||||||
number: remoteJid.split('@')[0],
|
|
||||||
delay: settings?.delayMessage || 1000,
|
for (let index = 0; index < multipleMessages.length; index++) {
|
||||||
text: textBuffer.trim(),
|
const message = multipleMessages[index];
|
||||||
},
|
|
||||||
false,
|
const delay = Math.min(Math.max(message.length * timePerChar, minDelay), maxDelay);
|
||||||
);
|
|
||||||
|
if (instance.integration === Integration.WHATSAPP_BAILEYS) {
|
||||||
|
await instance.client.presenceSubscribe(remoteJid);
|
||||||
|
await instance.client.sendPresenceUpdate('composing', remoteJid);
|
||||||
|
}
|
||||||
|
|
||||||
|
await new Promise<void>((resolve) => {
|
||||||
|
setTimeout(async () => {
|
||||||
|
await instance.textMessage(
|
||||||
|
{
|
||||||
|
number: remoteJid.split('@')[0],
|
||||||
|
delay: settings?.delayMessage || 1000,
|
||||||
|
text: message,
|
||||||
|
},
|
||||||
|
false,
|
||||||
|
);
|
||||||
|
resolve();
|
||||||
|
}, delay);
|
||||||
|
});
|
||||||
|
|
||||||
|
if (instance.integration === Integration.WHATSAPP_BAILEYS) {
|
||||||
|
await instance.client.sendPresenceUpdate('paused', remoteJid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
await instance.textMessage(
|
||||||
|
{
|
||||||
|
number: remoteJid.split('@')[0],
|
||||||
|
delay: settings?.delayMessage || 1000,
|
||||||
|
text: textBuffer.trim(),
|
||||||
|
},
|
||||||
|
false,
|
||||||
|
);
|
||||||
|
textBuffer = '';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sendTelemetry('/message/sendText');
|
sendTelemetry('/message/sendText');
|
||||||
|
Loading…
Reference in New Issue
Block a user