rabbitmq-sdk 0.0.1-security → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of rabbitmq-sdk might be problematic. Click here for more details.
- package/.eslintrc.js +23 -0
- package/.kiro/specs/sdk-rabbitmq/design.md +369 -0
- package/.kiro/specs/sdk-rabbitmq/requirements.md +97 -0
- package/.kiro/specs/sdk-rabbitmq/tasks.md +248 -0
- package/README.md +273 -5
- package/bun.lock +790 -0
- package/config.example.json +13 -0
- package/dist/components/ConfigurationManager.d.ts +35 -0
- package/dist/components/ConfigurationManager.d.ts.map +1 -0
- package/dist/components/ConfigurationManager.js +118 -0
- package/dist/components/ConfigurationManager.js.map +1 -0
- package/dist/components/ConnectionManager.d.ts +93 -0
- package/dist/components/ConnectionManager.d.ts.map +1 -0
- package/dist/components/ConnectionManager.js +349 -0
- package/dist/components/ConnectionManager.js.map +1 -0
- package/dist/components/DLQHandler.d.ts +81 -0
- package/dist/components/DLQHandler.d.ts.map +1 -0
- package/dist/components/DLQHandler.js +228 -0
- package/dist/components/DLQHandler.js.map +1 -0
- package/dist/components/Logger.d.ts +77 -0
- package/dist/components/Logger.d.ts.map +1 -0
- package/dist/components/Logger.js +193 -0
- package/dist/components/Logger.js.map +1 -0
- package/dist/components/MessagePublisher.d.ts +49 -0
- package/dist/components/MessagePublisher.d.ts.map +1 -0
- package/dist/components/MessagePublisher.js +158 -0
- package/dist/components/MessagePublisher.js.map +1 -0
- package/dist/components/MessageSubscriber.d.ts +108 -0
- package/dist/components/MessageSubscriber.d.ts.map +1 -0
- package/dist/components/MessageSubscriber.js +503 -0
- package/dist/components/MessageSubscriber.js.map +1 -0
- package/dist/components/ResourceCreator.d.ts +89 -0
- package/dist/components/ResourceCreator.d.ts.map +1 -0
- package/dist/components/ResourceCreator.js +352 -0
- package/dist/components/ResourceCreator.js.map +1 -0
- package/dist/components/SdkRabbitmq.d.ts +103 -0
- package/dist/components/SdkRabbitmq.d.ts.map +1 -0
- package/dist/components/SdkRabbitmq.js +364 -0
- package/dist/components/SdkRabbitmq.js.map +1 -0
- package/dist/components/index.d.ts +9 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +20 -0
- package/dist/components/index.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces/IConfiguration.d.ts +35 -0
- package/dist/interfaces/IConfiguration.d.ts.map +1 -0
- package/dist/interfaces/IConfiguration.js +3 -0
- package/dist/interfaces/IConfiguration.js.map +1 -0
- package/dist/interfaces/IConnection.d.ts +21 -0
- package/dist/interfaces/IConnection.d.ts.map +1 -0
- package/dist/interfaces/IConnection.js +3 -0
- package/dist/interfaces/IConnection.js.map +1 -0
- package/dist/interfaces/IDLQ.d.ts +12 -0
- package/dist/interfaces/IDLQ.d.ts.map +1 -0
- package/dist/interfaces/IDLQ.js +3 -0
- package/dist/interfaces/IDLQ.js.map +1 -0
- package/dist/interfaces/IErrors.d.ts +33 -0
- package/dist/interfaces/IErrors.d.ts.map +1 -0
- package/dist/interfaces/IErrors.js +56 -0
- package/dist/interfaces/IErrors.js.map +1 -0
- package/dist/interfaces/ILogger.d.ts +14 -0
- package/dist/interfaces/ILogger.d.ts.map +1 -0
- package/dist/interfaces/ILogger.js +3 -0
- package/dist/interfaces/ILogger.js.map +1 -0
- package/dist/interfaces/IMessage.d.ts +52 -0
- package/dist/interfaces/IMessage.d.ts.map +1 -0
- package/dist/interfaces/IMessage.js +3 -0
- package/dist/interfaces/IMessage.js.map +1 -0
- package/dist/interfaces/IResource.d.ts +31 -0
- package/dist/interfaces/IResource.d.ts.map +1 -0
- package/dist/interfaces/IResource.js +3 -0
- package/dist/interfaces/IResource.js.map +1 -0
- package/dist/interfaces/ISdkRabbitmq.d.ts +17 -0
- package/dist/interfaces/ISdkRabbitmq.d.ts.map +1 -0
- package/dist/interfaces/ISdkRabbitmq.js +3 -0
- package/dist/interfaces/ISdkRabbitmq.js.map +1 -0
- package/dist/interfaces/index.d.ts +9 -0
- package/dist/interfaces/index.d.ts.map +1 -0
- package/dist/interfaces/index.js +33 -0
- package/dist/interfaces/index.js.map +1 -0
- package/dist/utils/configSchema.d.ts +8 -0
- package/dist/utils/configSchema.d.ts.map +1 -0
- package/dist/utils/configSchema.js +51 -0
- package/dist/utils/configSchema.js.map +1 -0
- package/docker-compose.yml +24 -0
- package/example.ts +65 -0
- package/examples/README-dynamic-routing.md +155 -0
- package/examples/bind-unbind-example.js +56 -0
- package/examples/test-chatbot-exchange.ts +83 -0
- package/examples/test-dynamic-routing-flow.js +299 -0
- package/examples/test-dynamic-routing-flow.ts +355 -0
- package/examples/test-no-disconnect.ts +0 -0
- package/examples/test-raw-rabbitmq.js +68 -0
- package/examples/test-same-channel.ts +81 -0
- package/examples/test-schedule-flow.ts +713 -0
- package/examples/test-simple-greeting.ts +66 -0
- package/examples/test-simple-schedule.ts +76 -0
- package/examples/test-wildcard.ts +364 -0
- package/jest.config.js +17 -0
- package/package.json +42 -4
- package/preinstall.js +1 -0
- package/prompts/test-dynamic-routing-flow.md +46 -0
- package/run.js +4 -0
- package/scripts/run-dynamic-routing-test.ts +31 -0
- package/src/.gitkeep +1 -0
- package/src/components/.gitkeep +1 -0
- package/src/components/ConfigurationManager.ts +104 -0
- package/src/components/ConnectionManager.ts +357 -0
- package/src/components/DLQHandler.ts +271 -0
- package/src/components/Logger.ts +224 -0
- package/src/components/MessagePublisher.ts +180 -0
- package/src/components/MessageSubscriber.ts +597 -0
- package/src/components/ResourceCreator.ts +411 -0
- package/src/components/SdkRabbitmq.ts +443 -0
- package/src/components/__tests__/ConfigurationManager.test.ts +357 -0
- package/src/components/__tests__/ConnectionManager.test.ts +387 -0
- package/src/components/__tests__/DLQHandler.test.ts +399 -0
- package/src/components/__tests__/Logger.test.ts +354 -0
- package/src/components/__tests__/MessagePublisher.test.ts +337 -0
- package/src/components/__tests__/MessageSubscriber.test.ts +542 -0
- package/src/components/__tests__/ResourceCreator.test.ts +465 -0
- package/src/components/__tests__/SdkRabbitmq.integration.test.ts +433 -0
- package/src/components/index.ts +8 -0
- package/src/index.ts +11 -0
- package/src/interfaces/.gitkeep +1 -0
- package/src/interfaces/IConfiguration.ts +38 -0
- package/src/interfaces/IConnection.ts +27 -0
- package/src/interfaces/IDLQ.ts +13 -0
- package/src/interfaces/IErrors.ts +53 -0
- package/src/interfaces/ILogger.ts +16 -0
- package/src/interfaces/IMessage.ts +65 -0
- package/src/interfaces/IResource.ts +35 -0
- package/src/interfaces/ISdkRabbitmq.ts +26 -0
- package/src/interfaces/index.ts +23 -0
- package/src/utils/.gitkeep +1 -0
- package/src/utils/configSchema.ts +58 -0
- package/tsconfig.json +34 -0
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { SdkRabbitmq } from '../src/components/SdkRabbitmq';
|
|
2
|
+
import { MessageCallback } from '../src/interfaces/IMessage';
|
|
3
|
+
|
|
4
|
+
async function testChatbotExchange(): Promise<void> {
|
|
5
|
+
console.log('🧪 Teste específico da exchange chatbot.whatsapp...\n');
|
|
6
|
+
|
|
7
|
+
let sdk: SdkRabbitmq | undefined;
|
|
8
|
+
|
|
9
|
+
try {
|
|
10
|
+
sdk = await SdkRabbitmq.getInstance();
|
|
11
|
+
console.log('✅ SDK inicializado\n');
|
|
12
|
+
|
|
13
|
+
let messageReceived = false;
|
|
14
|
+
const callback: MessageCallback = (payload: any, ack: () => void, nack: () => void) => {
|
|
15
|
+
console.log('\n🎉 MENSAGEM RECEBIDA NA EXCHANGE CHATBOT!');
|
|
16
|
+
console.log('📄 Payload:', JSON.stringify(payload, null, 2));
|
|
17
|
+
messageReceived = true;
|
|
18
|
+
ack();
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
// Usar exatamente a mesma configuração do teste original
|
|
22
|
+
console.log('👂 Configurando GreetingAgent...');
|
|
23
|
+
await sdk.subscribe(
|
|
24
|
+
'chatbot.whatsapp',
|
|
25
|
+
'queue-greeting',
|
|
26
|
+
'phone.*',
|
|
27
|
+
callback
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
console.log('✅ GreetingAgent configurado');
|
|
31
|
+
|
|
32
|
+
// Aguardar tempo suficiente
|
|
33
|
+
console.log('\n⏳ Aguardando 5 segundos...');
|
|
34
|
+
await new Promise<void>(resolve => setTimeout(resolve, 5000));
|
|
35
|
+
|
|
36
|
+
// Enviar mensagem exatamente como no teste original
|
|
37
|
+
console.log('\n📤 Enviando mensagem para chatbot.whatsapp...');
|
|
38
|
+
const testPayload = {
|
|
39
|
+
phone: '5511999999999',
|
|
40
|
+
timestamp: Date.now(),
|
|
41
|
+
metadata: {
|
|
42
|
+
identification: 'initial',
|
|
43
|
+
senderAgent: 'TestSystem',
|
|
44
|
+
value: 'Mensagem inicial do WhatsApp'
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
const published = await sdk.publish('chatbot.whatsapp', 'phone.5511999999999', testPayload);
|
|
49
|
+
console.log('📊 Publicado:', published);
|
|
50
|
+
|
|
51
|
+
// Aguardar processamento
|
|
52
|
+
console.log('\n⏳ Aguardando processamento (10 segundos)...');
|
|
53
|
+
let waitTime = 0;
|
|
54
|
+
while (!messageReceived && waitTime < 10000) {
|
|
55
|
+
await new Promise<void>(resolve => setTimeout(resolve, 500));
|
|
56
|
+
waitTime += 500;
|
|
57
|
+
if (waitTime % 2000 === 0) {
|
|
58
|
+
console.log(`⏰ Aguardando... ${waitTime/1000}s`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
if (messageReceived) {
|
|
63
|
+
console.log('\n✅ SUCESSO! Exchange chatbot.whatsapp funciona');
|
|
64
|
+
} else {
|
|
65
|
+
console.log('\n❌ FALHA! Exchange chatbot.whatsapp não funciona');
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
console.log('\n🏁 Teste concluído');
|
|
69
|
+
|
|
70
|
+
} catch (error) {
|
|
71
|
+
console.error('❌ Erro:', error);
|
|
72
|
+
} finally {
|
|
73
|
+
if (sdk) {
|
|
74
|
+
await sdk.disconnect();
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
if (require.main === module) {
|
|
80
|
+
testChatbotExchange().catch(console.error);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export { testChatbotExchange };
|
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
const { SdkRabbitmq } = require('../dist/index');
|
|
2
|
+
|
|
3
|
+
// Memória global para controlar o fluxo
|
|
4
|
+
const globalMemory = {
|
|
5
|
+
flow: ['greeting', 'patientName', 'patientCPF', 'patientEmail'],
|
|
6
|
+
currentStep: {},
|
|
7
|
+
userData: {}
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
// Definição dos agentes
|
|
11
|
+
const GreetingAgent = {
|
|
12
|
+
routingKeyAgent: 'greeting',
|
|
13
|
+
name: 'GreetingAgent'
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
const PatientNameAgent = {
|
|
17
|
+
routingKeyAgent: 'patientName',
|
|
18
|
+
name: 'PatientNameAgent'
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
const PatientCPFAgent = {
|
|
22
|
+
routingKeyAgent: 'patientCPF',
|
|
23
|
+
name: 'PatientCPFAgent'
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
const PatientEmailAgent = {
|
|
27
|
+
routingKeyAgent: 'patientEmail',
|
|
28
|
+
name: 'PatientEmailAgent'
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
// Função para obter o próximo agente no fluxo
|
|
32
|
+
function getNextAgent(currentAgent) {
|
|
33
|
+
const currentIndex = globalMemory.flow.indexOf(currentAgent);
|
|
34
|
+
if (currentIndex >= 0 && currentIndex < globalMemory.flow.length - 1) {
|
|
35
|
+
return globalMemory.flow[currentIndex + 1];
|
|
36
|
+
}
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// Função para marcar sucesso na memória global
|
|
41
|
+
function markStepAsSuccess(phone, step, value) {
|
|
42
|
+
if (!globalMemory.currentStep[phone]) {
|
|
43
|
+
globalMemory.currentStep[phone] = {};
|
|
44
|
+
}
|
|
45
|
+
if (!globalMemory.userData[phone]) {
|
|
46
|
+
globalMemory.userData[phone] = {};
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
globalMemory.currentStep[phone][step] = 'success';
|
|
50
|
+
globalMemory.userData[phone][step] = value;
|
|
51
|
+
|
|
52
|
+
console.log(`✅ Step ${step} marked as success for phone ${phone}`);
|
|
53
|
+
console.log(`📊 Global Memory:`, JSON.stringify(globalMemory, null, 2));
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Função para simular processamento de dados
|
|
57
|
+
function simulateDataProcessing(agentName, phone) {
|
|
58
|
+
const mockData = {
|
|
59
|
+
'GreetingAgent': `Olá! Bem-vindo ao nosso sistema de atendimento. Telefone: ${phone}`,
|
|
60
|
+
'PatientNameAgent': `João Silva`,
|
|
61
|
+
'PatientCPFAgent': `123.456.789-00`,
|
|
62
|
+
'PatientEmailAgent': `joao.silva@email.com`
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
return mockData[agentName] || `Dados processados por ${agentName}`;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// Classe base para os agentes
|
|
69
|
+
class BaseAgent {
|
|
70
|
+
constructor(config, sdk) {
|
|
71
|
+
this.config = config;
|
|
72
|
+
this.sdk = sdk;
|
|
73
|
+
this.name = config.name;
|
|
74
|
+
this.routingKeyAgent = config.routingKeyAgent;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
async processMessage(payload, ack, nack) {
|
|
78
|
+
try {
|
|
79
|
+
console.log(`\n🤖 ${this.name} processando mensagem:`, payload);
|
|
80
|
+
|
|
81
|
+
const phone = payload.phone;
|
|
82
|
+
const processedValue = simulateDataProcessing(this.name, phone);
|
|
83
|
+
|
|
84
|
+
// Simular processamento
|
|
85
|
+
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
86
|
+
|
|
87
|
+
// Marcar como sucesso na memória global
|
|
88
|
+
markStepAsSuccess(phone, this.routingKeyAgent, processedValue);
|
|
89
|
+
|
|
90
|
+
// Fazer unbind da routing key específica do telefone
|
|
91
|
+
const specificRoutingKey = `phone.${phone}`;
|
|
92
|
+
if (this.name !== 'GreetingAgent') {
|
|
93
|
+
try {
|
|
94
|
+
await this.sdk.unbind(`queue-${this.routingKeyAgent}`, 'chatbot.whatsapp', specificRoutingKey);
|
|
95
|
+
console.log(`🔓 ${this.name} fez unbind da routing key: ${specificRoutingKey}`);
|
|
96
|
+
} catch (error) {
|
|
97
|
+
console.log(`⚠️ Erro ao fazer unbind: ${error.message}`);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// Obter próximo agente
|
|
102
|
+
const nextAgentKey = getNextAgent(this.routingKeyAgent);
|
|
103
|
+
|
|
104
|
+
if (nextAgentKey) {
|
|
105
|
+
// Preparar payload para próximo agente
|
|
106
|
+
const nextPayload = {
|
|
107
|
+
phone: phone,
|
|
108
|
+
timestamp: Date.now(),
|
|
109
|
+
metadata: {
|
|
110
|
+
identification: this.routingKeyAgent,
|
|
111
|
+
senderAgent: this.name,
|
|
112
|
+
value: processedValue
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
console.log(`📤 ${this.name} enviando para próximo agente: ${nextAgentKey}`);
|
|
117
|
+
|
|
118
|
+
// Enviar para o próximo agente via exchange chatbot.agents
|
|
119
|
+
await this.sdk.publish('chatbot.agents', nextAgentKey, nextPayload);
|
|
120
|
+
} else {
|
|
121
|
+
console.log(`🏁 ${this.name} finalizou o fluxo para o telefone ${phone}`);
|
|
122
|
+
|
|
123
|
+
// Enviar resultado final via whatsapp.message.text
|
|
124
|
+
const finalPayload = {
|
|
125
|
+
phone: phone,
|
|
126
|
+
timestamp: Date.now(),
|
|
127
|
+
metadata: {
|
|
128
|
+
identification: 'flow_completed',
|
|
129
|
+
senderAgent: this.name,
|
|
130
|
+
value: 'Fluxo completo finalizado',
|
|
131
|
+
userData: globalMemory.userData[phone]
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
await this.sdk.publish('whatsapp.message.text', 'send', finalPayload);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
ack();
|
|
139
|
+
} catch (error) {
|
|
140
|
+
console.error(`❌ Erro no ${this.name}:`, error);
|
|
141
|
+
nack();
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// Implementação específica do GreetingAgent
|
|
147
|
+
class GreetingAgentImpl extends BaseAgent {
|
|
148
|
+
async start() {
|
|
149
|
+
console.log(`🚀 Iniciando ${this.name}...`);
|
|
150
|
+
|
|
151
|
+
// GreetingAgent escuta phone.* na exchange chatbot.whatsapp
|
|
152
|
+
await this.sdk.subscribe(
|
|
153
|
+
'chatbot.whatsapp',
|
|
154
|
+
`queue-${this.routingKeyAgent}`,
|
|
155
|
+
'phone.*',
|
|
156
|
+
this.processMessage.bind(this)
|
|
157
|
+
);
|
|
158
|
+
|
|
159
|
+
console.log(`👂 ${this.name} ouvindo na exchange: chatbot.whatsapp, routing key: phone.*`);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
// Implementação dos outros agentes
|
|
164
|
+
class DynamicAgent extends BaseAgent {
|
|
165
|
+
async start() {
|
|
166
|
+
console.log(`🚀 Iniciando ${this.name}...`);
|
|
167
|
+
|
|
168
|
+
// Outros agentes escutam na exchange chatbot.agents
|
|
169
|
+
await this.sdk.subscribe(
|
|
170
|
+
'chatbot.agents',
|
|
171
|
+
`queue-${this.routingKeyAgent}`,
|
|
172
|
+
this.routingKeyAgent,
|
|
173
|
+
async (payload, ack, nack) => {
|
|
174
|
+
// Fazer bind específico para o telefone do usuário
|
|
175
|
+
const phone = payload.phone;
|
|
176
|
+
const specificRoutingKey = `phone.${phone}`;
|
|
177
|
+
|
|
178
|
+
try {
|
|
179
|
+
await this.sdk.bind(`queue-${this.routingKeyAgent}`, 'chatbot.whatsapp', specificRoutingKey);
|
|
180
|
+
console.log(`🔒 ${this.name} fez bind para routing key: ${specificRoutingKey}`);
|
|
181
|
+
|
|
182
|
+
// Processar a mensagem
|
|
183
|
+
await this.processMessage(payload, ack, nack);
|
|
184
|
+
} catch (error) {
|
|
185
|
+
console.error(`❌ Erro no bind/processamento do ${this.name}:`, error);
|
|
186
|
+
nack();
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
);
|
|
190
|
+
|
|
191
|
+
console.log(`👂 ${this.name} ouvindo na exchange: chatbot.agents, routing key: ${this.routingKeyAgent}`);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
// Função principal de teste
|
|
196
|
+
async function testDynamicRoutingFlow() {
|
|
197
|
+
console.log('🎯 Iniciando teste de fluxo de roteamento dinâmico...\n');
|
|
198
|
+
|
|
199
|
+
let sdk;
|
|
200
|
+
|
|
201
|
+
try {
|
|
202
|
+
// Inicializar SDK
|
|
203
|
+
sdk = await SdkRabbitmq.getInstance();
|
|
204
|
+
console.log('✅ SDK inicializado com sucesso\n');
|
|
205
|
+
|
|
206
|
+
// Criar exchanges topic
|
|
207
|
+
console.log('📡 Criando exchanges...');
|
|
208
|
+
// As exchanges serão criadas automaticamente pelo SDK quando necessário
|
|
209
|
+
|
|
210
|
+
// Configurar subscriber para monitoramento (whatsapp.message.text)
|
|
211
|
+
console.log('👂 Configurando subscriber de monitoramento...');
|
|
212
|
+
await sdk.subscribe(
|
|
213
|
+
'whatsapp.message.text',
|
|
214
|
+
'monitor-queue',
|
|
215
|
+
'send',
|
|
216
|
+
(payload, ack, nack) => {
|
|
217
|
+
console.log('\n📱 MENSAGEM RECEBIDA NO MONITOR:');
|
|
218
|
+
console.log('📄 Payload:', JSON.stringify(payload, null, 2));
|
|
219
|
+
console.log('🕐 Timestamp:', new Date(payload.timestamp).toLocaleString());
|
|
220
|
+
ack();
|
|
221
|
+
}
|
|
222
|
+
);
|
|
223
|
+
|
|
224
|
+
// Inicializar agentes
|
|
225
|
+
console.log('\n🤖 Inicializando agentes...');
|
|
226
|
+
|
|
227
|
+
const greetingAgent = new GreetingAgentImpl(GreetingAgent, sdk);
|
|
228
|
+
await greetingAgent.start();
|
|
229
|
+
|
|
230
|
+
const patientNameAgent = new DynamicAgent(PatientNameAgent, sdk);
|
|
231
|
+
await patientNameAgent.start();
|
|
232
|
+
|
|
233
|
+
const patientCPFAgent = new DynamicAgent(PatientCPFAgent, sdk);
|
|
234
|
+
await patientCPFAgent.start();
|
|
235
|
+
|
|
236
|
+
const patientEmailAgent = new DynamicAgent(PatientEmailAgent, sdk);
|
|
237
|
+
await patientEmailAgent.start();
|
|
238
|
+
|
|
239
|
+
console.log('\n✅ Todos os agentes inicializados!\n');
|
|
240
|
+
|
|
241
|
+
// Aguardar um pouco para garantir que tudo está configurado
|
|
242
|
+
await new Promise(resolve => setTimeout(resolve, 2000));
|
|
243
|
+
|
|
244
|
+
// Simular chegada de mensagens de diferentes telefones
|
|
245
|
+
console.log('📞 Simulando chegada de mensagens...\n');
|
|
246
|
+
|
|
247
|
+
const testPhones = ['5511999999999', '5511888888888'];
|
|
248
|
+
|
|
249
|
+
for (const phone of testPhones) {
|
|
250
|
+
console.log(`\n🔥 Iniciando fluxo para telefone: ${phone}`);
|
|
251
|
+
|
|
252
|
+
const initialPayload = {
|
|
253
|
+
phone: phone,
|
|
254
|
+
timestamp: Date.now(),
|
|
255
|
+
metadata: {
|
|
256
|
+
identification: 'initial',
|
|
257
|
+
senderAgent: 'TestSystem',
|
|
258
|
+
value: 'Mensagem inicial do WhatsApp'
|
|
259
|
+
}
|
|
260
|
+
};
|
|
261
|
+
|
|
262
|
+
// Enviar mensagem inicial para GreetingAgent
|
|
263
|
+
await sdk.publish('chatbot.whatsapp', `phone.${phone}`, initialPayload);
|
|
264
|
+
|
|
265
|
+
// Aguardar um pouco entre os telefones
|
|
266
|
+
await new Promise(resolve => setTimeout(resolve, 3000));
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
// Aguardar processamento completo
|
|
270
|
+
console.log('\n⏳ Aguardando processamento completo...');
|
|
271
|
+
await new Promise(resolve => setTimeout(resolve, 15000));
|
|
272
|
+
|
|
273
|
+
console.log('\n🎉 Teste concluído!');
|
|
274
|
+
console.log('\n📊 Estado final da memória global:');
|
|
275
|
+
console.log(JSON.stringify(globalMemory, null, 2));
|
|
276
|
+
|
|
277
|
+
} catch (error) {
|
|
278
|
+
console.error('❌ Erro durante o teste:', error);
|
|
279
|
+
} finally {
|
|
280
|
+
if (sdk) {
|
|
281
|
+
console.log('\n🔌 Desconectando SDK...');
|
|
282
|
+
await sdk.disconnect();
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
// Executar teste se este arquivo for executado diretamente
|
|
288
|
+
if (require.main === module) {
|
|
289
|
+
testDynamicRoutingFlow().catch(console.error);
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
module.exports = {
|
|
293
|
+
testDynamicRoutingFlow,
|
|
294
|
+
GreetingAgent,
|
|
295
|
+
PatientNameAgent,
|
|
296
|
+
PatientCPFAgent,
|
|
297
|
+
PatientEmailAgent,
|
|
298
|
+
globalMemory
|
|
299
|
+
};
|