LIMATEC commited on
Commit
a579e08
·
verified ·
1 Parent(s): 4092c11

Add 3 files

Browse files
Files changed (3) hide show
  1. README.md +6 -4
  2. index.html +511 -19
  3. prompts.txt +1 -0
README.md CHANGED
@@ -1,10 +1,12 @@
1
  ---
2
- title: Pulsedesk Atendimentocrm2
3
- emoji: 💻
4
  colorFrom: gray
5
- colorTo: purple
6
  sdk: static
7
  pinned: false
 
 
8
  ---
9
 
10
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
1
  ---
2
+ title: pulsedesk-atendimentocrm2
3
+ emoji: 🐳
4
  colorFrom: gray
5
+ colorTo: green
6
  sdk: static
7
  pinned: false
8
+ tags:
9
+ - deepsite
10
  ---
11
 
12
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
index.html CHANGED
@@ -1,19 +1,511 @@
1
- <!doctype html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width" />
6
- <title>My static Space</title>
7
- <link rel="stylesheet" href="style.css" />
8
- </head>
9
- <body>
10
- <div class="card">
11
- <h1>Welcome to your static Space!</h1>
12
- <p>You can modify this app directly by editing <i>index.html</i> in the Files and versions tab.</p>
13
- <p>
14
- Also don't forget to check the
15
- <a href="https://huggingface.co/docs/hub/spaces" target="_blank">Spaces documentation</a>.
16
- </p>
17
- </div>
18
- </body>
19
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="pt-BR">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>PulseDesk - Abertura de Chamados</title>
7
+ <script src="https://cdn.tailwindcss.com"></script>
8
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
9
+ <style>
10
+ .fade-in {
11
+ animation: fadeIn 0.5s ease-in-out;
12
+ }
13
+
14
+ @keyframes fadeIn {
15
+ from { opacity: 0; transform: translateY(10px); }
16
+ to { opacity: 1; transform: translateY(0); }
17
+ }
18
+
19
+ .pulse {
20
+ animation: pulse 2s infinite;
21
+ }
22
+
23
+ @keyframes pulse {
24
+ 0% { transform: scale(1); }
25
+ 50% { transform: scale(1.05); }
26
+ 100% { transform: scale(1); }
27
+ }
28
+
29
+ .typing-indicator::after {
30
+ content: "...";
31
+ animation: typing 1.5s infinite;
32
+ }
33
+
34
+ @keyframes typing {
35
+ 0% { content: "."; }
36
+ 33% { content: ".."; }
37
+ 66% { content: "..."; }
38
+ }
39
+ </style>
40
+ </head>
41
+ <body class="bg-gray-100 font-sans">
42
+ <div class="container mx-auto max-w-4xl p-4">
43
+ <!-- Header -->
44
+ <header class="bg-indigo-600 text-white rounded-t-xl p-6 shadow-lg">
45
+ <div class="flex items-center justify-between">
46
+ <div class="flex items-center space-x-3">
47
+ <i class="fas fa-headset text-3xl"></i>
48
+ <div>
49
+ <h1 class="text-2xl font-bold">PulseDesk CRM</h1>
50
+ <p class="text-indigo-100">Sistema de Abertura de Chamados</p>
51
+ </div>
52
+ </div>
53
+ <div class="bg-white text-indigo-600 px-4 py-2 rounded-full font-semibold flex items-center">
54
+ <i class="fas fa-user-circle mr-2"></i>
55
+ <span>Janette</span>
56
+ </div>
57
+ </div>
58
+ </header>
59
+
60
+ <!-- Main Content -->
61
+ <main class="bg-white rounded-b-xl shadow-lg overflow-hidden">
62
+ <!-- Chat Container -->
63
+ <div class="h-96 overflow-y-auto p-4 space-y-4" id="chatContainer">
64
+ <!-- Initial greeting will be added here by JavaScript -->
65
+ </div>
66
+
67
+ <!-- Form Container -->
68
+ <div class="border-t border-gray-200 p-4 bg-gray-50" id="formContainer">
69
+ <form id="ticketForm" class="space-y-4">
70
+ <!-- Step 1: Customer Identification -->
71
+ <div id="step1" class="fade-in">
72
+ <div class="flex items-center mb-2">
73
+ <div class="w-8 h-8 bg-indigo-600 text-white rounded-full flex items-center justify-center font-bold">1</div>
74
+ <h3 class="ml-2 font-semibold text-gray-700">Identificação do Cliente</h3>
75
+ </div>
76
+ <div class="pl-10">
77
+ <div class="mb-4">
78
+ <label class="block text-gray-700 mb-2" for="customerName">Nome do Cliente</label>
79
+ <input type="text" id="customerName" class="w-full px-4 py-2 border rounded-lg focus:ring-2 focus:ring-indigo-500 focus:border-indigo-500" placeholder="Digite o nome completo">
80
+ </div>
81
+ <div class="grid grid-cols-1 md:grid-cols-2 gap-4">
82
+ <div>
83
+ <label class="block text-gray-700 mb-2" for="customerCPF">CPF/CNPJ</label>
84
+ <input type="text" id="customerCPF" class="w-full px-4 py-2 border rounded-lg focus:ring-2 focus:ring-indigo-500 focus:border-indigo-500" placeholder="000.000.000-00">
85
+ </div>
86
+ <div>
87
+ <label class="block text-gray-700 mb-2" for="customerPhone">Telefone</label>
88
+ <input type="tel" id="customerPhone" class="w-full px-4 py-2 border rounded-lg focus:ring-2 focus:ring-indigo-500 focus:border-indigo-500" placeholder="(00) 00000-0000">
89
+ </div>
90
+ </div>
91
+ <div class="mt-4">
92
+ <label class="block text-gray-700 mb-2" for="customerEmail">E-mail</label>
93
+ <input type="email" id="customerEmail" class="w-full px-4 py-2 border rounded-lg focus:ring-2 focus:ring-indigo-500 focus:border-indigo-500" placeholder="seu@email.com">
94
+ </div>
95
+ <div class="mt-6 flex justify-end">
96
+ <button type="button" onclick="nextStep(1)" class="bg-indigo-600 text-white px-6 py-2 rounded-lg hover:bg-indigo-700 transition flex items-center">
97
+ Próximo <i class="fas fa-arrow-right ml-2"></i>
98
+ </button>
99
+ </div>
100
+ </div>
101
+ </div>
102
+
103
+ <!-- Step 2: Issue Description -->
104
+ <div id="step2" class="hidden fade-in">
105
+ <div class="flex items-center mb-2">
106
+ <div class="w-8 h-8 bg-indigo-600 text-white rounded-full flex items-center justify-center font-bold">2</div>
107
+ <h3 class="ml-2 font-semibold text-gray-700">Descrição do Problema</h3>
108
+ </div>
109
+ <div class="pl-10">
110
+ <div class="mb-4">
111
+ <label class="block text-gray-700 mb-2" for="issueDescription">Por favor, descreva com detalhes o problema ou solicitação</label>
112
+ <textarea id="issueDescription" rows="4" class="w-full px-4 py-2 border rounded-lg focus:ring-2 focus:ring-indigo-500 focus:border-indigo-500" placeholder="Descreva aqui o que está acontecendo..."></textarea>
113
+ </div>
114
+ <div class="mb-4">
115
+ <label class="block text-gray-700 mb-2">Anexos (opcional)</label>
116
+ <div class="border-2 border-dashed border-gray-300 rounded-lg p-4 text-center">
117
+ <i class="fas fa-cloud-upload-alt text-3xl text-gray-400 mb-2"></i>
118
+ <p class="text-gray-500">Arraste arquivos aqui ou clique para selecionar</p>
119
+ <input type="file" id="fileUpload" class="hidden" multiple>
120
+ <button type="button" onclick="document.getElementById('fileUpload').click()" class="mt-2 bg-gray-200 text-gray-700 px-4 py-1 rounded hover:bg-gray-300 transition">
121
+ Selecionar Arquivos
122
+ </button>
123
+ </div>
124
+ <div id="fileList" class="mt-2 text-sm text-gray-600"></div>
125
+ </div>
126
+ <div class="mt-6 flex justify-between">
127
+ <button type="button" onclick="prevStep(2)" class="bg-gray-200 text-gray-700 px-6 py-2 rounded-lg hover:bg-gray-300 transition flex items-center">
128
+ <i class="fas fa-arrow-left mr-2"></i> Voltar
129
+ </button>
130
+ <button type="button" onclick="nextStep(2)" class="bg-indigo-600 text-white px-6 py-2 rounded-lg hover:bg-indigo-700 transition flex items-center">
131
+ Próximo <i class="fas fa-arrow-right ml-2"></i>
132
+ </button>
133
+ </div>
134
+ </div>
135
+ </div>
136
+
137
+ <!-- Step 3: Ticket Classification -->
138
+ <div id="step3" class="hidden fade-in">
139
+ <div class="flex items-center mb-2">
140
+ <div class="w-8 h-8 bg-indigo-600 text-white rounded-full flex items-center justify-center font-bold">3</div>
141
+ <h3 class="ml-2 font-semibold text-gray-700">Classificação do Chamado</h3>
142
+ </div>
143
+ <div class="pl-10">
144
+ <div class="mb-4">
145
+ <label class="block text-gray-700 mb-2">Tipo de Chamado</label>
146
+ <div class="grid grid-cols-1 md:grid-cols-3 gap-3">
147
+ <label class="flex items-center space-x-2 p-3 border rounded-lg cursor-pointer hover:bg-gray-50">
148
+ <input type="radio" name="ticketType" value="Suporte Técnico" class="text-indigo-600">
149
+ <span>Suporte Técnico</span>
150
+ </label>
151
+ <label class="flex items-center space-x-2 p-3 border rounded-lg cursor-pointer hover:bg-gray-50">
152
+ <input type="radio" name="ticketType" value="Dúvida/Informação" class="text-indigo-600">
153
+ <span>Dúvida/Informação</span>
154
+ </label>
155
+ <label class="flex items-center space-x-2 p-3 border rounded-lg cursor-pointer hover:bg-gray-50">
156
+ <input type="radio" name="ticketType" value="Requisição de Serviço" class="text-indigo-600">
157
+ <span>Requisição de Serviço</span>
158
+ </label>
159
+ <label class="flex items-center space-x-2 p-3 border rounded-lg cursor-pointer hover:bg-gray-50">
160
+ <input type="radio" name="ticketType" value="Reclamação" class="text-indigo-600">
161
+ <span>Reclamação</span>
162
+ </label>
163
+ <label class="flex items-center space-x-2 p-3 border rounded-lg cursor-pointer hover:bg-gray-50">
164
+ <input type="radio" name="ticketType" value="Sugestão" class="text-indigo-600">
165
+ <span>Sugestão</span>
166
+ </label>
167
+ </div>
168
+ </div>
169
+
170
+ <div class="mb-4">
171
+ <label class="block text-gray-700 mb-2">Nível de Urgência</label>
172
+ <div class="grid grid-cols-1 md:grid-cols-3 gap-3">
173
+ <label class="flex items-center space-x-2 p-3 border rounded-lg cursor-pointer hover:bg-gray-50">
174
+ <input type="radio" name="urgency" value="Baixa" class="text-indigo-600">
175
+ <div>
176
+ <span class="font-medium">Baixa</span>
177
+ <p class="text-xs text-gray-500">Não afeta diretamente o uso</p>
178
+ </div>
179
+ </label>
180
+ <label class="flex items-center space-x-2 p-3 border rounded-lg cursor-pointer hover:bg-gray-50">
181
+ <input type="radio" name="urgency" value="Média" class="text-indigo-600">
182
+ <div>
183
+ <span class="font-medium">Média</span>
184
+ <p class="text-xs text-gray-500">Impacta parcialmente</p>
185
+ </div>
186
+ </label>
187
+ <label class="flex items-center space-x-2 p-3 border rounded-lg cursor-pointer hover:bg-gray-50">
188
+ <input type="radio" name="urgency" value="Alta" class="text-indigo-600">
189
+ <div>
190
+ <span class="font-medium">Alta</span>
191
+ <p class="text-xs text-gray-500">Impede totalmente o uso</p>
192
+ </div>
193
+ </label>
194
+ </div>
195
+ </div>
196
+
197
+ <div class="mb-4">
198
+ <label class="block text-gray-700 mb-2">Canal de Origem</label>
199
+ <div class="grid grid-cols-2 md:grid-cols-4 gap-3">
200
+ <label class="flex items-center space-x-2 p-3 border rounded-lg cursor-pointer hover:bg-gray-50">
201
+ <input type="radio" name="channel" value="Telefone" class="text-indigo-600">
202
+ <i class="fas fa-phone text-indigo-600"></i>
203
+ <span>Telefone</span>
204
+ </label>
205
+ <label class="flex items-center space-x-2 p-3 border rounded-lg cursor-pointer hover:bg-gray-50">
206
+ <input type="radio" name="channel" value="Chat" class="text-indigo-600">
207
+ <i class="fas fa-comments text-indigo-600"></i>
208
+ <span>Chat</span>
209
+ </label>
210
+ <label class="flex items-center space-x-2 p-3 border rounded-lg cursor-pointer hover:bg-gray-50">
211
+ <input type="radio" name="channel" value="E-mail" class="text-indigo-600">
212
+ <i class="fas fa-envelope text-indigo-600"></i>
213
+ <span>E-mail</span>
214
+ </label>
215
+ <label class="flex items-center space-x-2 p-3 border rounded-lg cursor-pointer hover:bg-gray-50">
216
+ <input type="radio" name="channel" value="WhatsApp" class="text-indigo-600">
217
+ <i class="fab fa-whatsapp text-indigo-600"></i>
218
+ <span>WhatsApp</span>
219
+ </label>
220
+ <label class="flex items-center space-x-2 p-3 border rounded-lg cursor-pointer hover:bg-gray-50">
221
+ <input type="radio" name="channel" value="Presencial" class="text-indigo-600">
222
+ <i class="fas fa-user text-indigo-600"></i>
223
+ <span>Presencial</span>
224
+ </label>
225
+ </div>
226
+ </div>
227
+
228
+ <div class="mt-6 flex justify-between">
229
+ <button type="button" onclick="prevStep(3)" class="bg-gray-200 text-gray-700 px-6 py-2 rounded-lg hover:bg-gray-300 transition flex items-center">
230
+ <i class="fas fa-arrow-left mr-2"></i> Voltar
231
+ </button>
232
+ <button type="button" onclick="nextStep(3)" class="bg-indigo-600 text-white px-6 py-2 rounded-lg hover:bg-indigo-700 transition flex items-center">
233
+ Próximo <i class="fas fa-arrow-right ml-2"></i>
234
+ </button>
235
+ </div>
236
+ </div>
237
+ </div>
238
+
239
+ <!-- Step 4: Review and Submit -->
240
+ <div id="step4" class="hidden fade-in">
241
+ <div class="flex items-center mb-2">
242
+ <div class="w-8 h-8 bg-indigo-600 text-white rounded-full flex items-center justify-center font-bold">4</div>
243
+ <h3 class="ml-2 font-semibold text-gray-700">Revisão e Confirmação</h3>
244
+ </div>
245
+ <div class="pl-10">
246
+ <div class="bg-gray-50 p-4 rounded-lg mb-4">
247
+ <h4 class="font-medium text-gray-700 mb-3">Dados do Cliente</h4>
248
+ <div class="grid grid-cols-1 md:grid-cols-2 gap-3 text-sm">
249
+ <div>
250
+ <span class="text-gray-500">Nome:</span>
251
+ <p id="reviewName" class="font-medium">-</p>
252
+ </div>
253
+ <div>
254
+ <span class="text-gray-500">CPF/CNPJ:</span>
255
+ <p id="reviewCPF" class="font-medium">-</p>
256
+ </div>
257
+ <div>
258
+ <span class="text-gray-500">Telefone:</span>
259
+ <p id="reviewPhone" class="font-medium">-</p>
260
+ </div>
261
+ <div>
262
+ <span class="text-gray-500">E-mail:</span>
263
+ <p id="reviewEmail" class="font-medium">-</p>
264
+ </div>
265
+ </div>
266
+ </div>
267
+
268
+ <div class="bg-gray-50 p-4 rounded-lg mb-4">
269
+ <h4 class="font-medium text-gray-700 mb-3">Detalhes do Chamado</h4>
270
+ <div class="grid grid-cols-1 md:grid-cols-2 gap-3 text-sm">
271
+ <div>
272
+ <span class="text-gray-500">Descrição:</span>
273
+ <p id="reviewDescription" class="font-medium">-</p>
274
+ </div>
275
+ <div>
276
+ <span class="text-gray-500">Tipo:</span>
277
+ <p id="reviewType" class="font-medium">-</p>
278
+ </div>
279
+ <div>
280
+ <span class="text-gray-500">Urgência:</span>
281
+ <p id="reviewUrgency" class="font-medium">-</p>
282
+ </div>
283
+ <div>
284
+ <span class="text-gray-500">Canal:</span>
285
+ <p id="reviewChannel" class="font-medium">-</p>
286
+ </div>
287
+ </div>
288
+ </div>
289
+
290
+ <div class="mt-6 flex justify-between">
291
+ <button type="button" onclick="prevStep(4)" class="bg-gray-200 text-gray-700 px-6 py-2 rounded-lg hover:bg-gray-300 transition flex items-center">
292
+ <i class="fas fa-arrow-left mr-2"></i> Voltar
293
+ </button>
294
+ <button type="button" onclick="submitTicket()" class="bg-green-600 text-white px-6 py-2 rounded-lg hover:bg-green-700 transition flex items-center pulse">
295
+ <i class="fas fa-check-circle mr-2"></i> Confirmar e Enviar
296
+ </button>
297
+ </div>
298
+ </div>
299
+ </div>
300
+
301
+ <!-- Step 5: Confirmation -->
302
+ <div id="step5" class="hidden fade-in text-center py-8">
303
+ <div class="bg-green-100 text-green-800 p-4 rounded-full inline-block mb-4">
304
+ <i class="fas fa-check-circle text-4xl"></i>
305
+ </div>
306
+ <h3 class="text-xl font-bold text-gray-800 mb-2">Chamado registrado com sucesso!</h3>
307
+ <p class="text-gray-600 mb-4">O número do protocolo é:</p>
308
+ <div class="bg-indigo-600 text-white text-2xl font-bold py-3 px-6 rounded-lg inline-block mb-6" id="ticketNumber">#000000</div>
309
+ <div class="bg-blue-50 p-4 rounded-lg max-w-md mx-auto">
310
+ <p class="text-gray-700 mb-2">Nossa equipe responsável analisará o caso e retornará em até <span class="font-bold">24 horas úteis</span>.</p>
311
+ <p class="text-gray-700">Você será notificado por <span id="contactMethod" class="font-bold">e-mail</span>.</p>
312
+ </div>
313
+ <button type="button" onclick="startNewTicket()" class="mt-6 bg-indigo-600 text-white px-6 py-2 rounded-lg hover:bg-indigo-700 transition flex items-center mx-auto">
314
+ <i class="fas fa-plus-circle mr-2"></i> Abrir Novo Chamado
315
+ </button>
316
+ </div>
317
+ </form>
318
+ </div>
319
+ </main>
320
+ </div>
321
+
322
+ <script>
323
+ // Initialize chat with greeting
324
+ document.addEventListener('DOMContentLoaded', function() {
325
+ addChatMessage('PulseDesk', 'Olá, meu nome é Janette, seja bem-vindo ao atendimento da PulseDesk. Com quem eu falo, por favor?', 'left');
326
+
327
+ // Handle file upload display
328
+ document.getElementById('fileUpload').addEventListener('change', function(e) {
329
+ const fileList = document.getElementById('fileList');
330
+ fileList.innerHTML = '';
331
+
332
+ if (this.files.length > 0) {
333
+ for (let i = 0; i < this.files.length; i++) {
334
+ const fileItem = document.createElement('div');
335
+ fileItem.className = 'flex items-center justify-between p-2 bg-gray-100 rounded mb-1';
336
+ fileItem.innerHTML = `
337
+ <div class="flex items-center">
338
+ <i class="fas fa-file-alt text-gray-500 mr-2"></i>
339
+ <span class="text-sm truncate max-w-xs">${this.files[i].name}</span>
340
+ </div>
341
+ <button type="button" onclick="removeFile(${i})" class="text-red-500 hover:text-red-700">
342
+ <i class="fas fa-times"></i>
343
+ </button>
344
+ `;
345
+ fileList.appendChild(fileItem);
346
+ }
347
+ }
348
+ });
349
+ });
350
+
351
+ // Chat functions
352
+ function addChatMessage(sender, message, align) {
353
+ const chatContainer = document.getElementById('chatContainer');
354
+ const messageDiv = document.createElement('div');
355
+
356
+ if (align === 'left') {
357
+ messageDiv.className = 'flex items-start';
358
+ messageDiv.innerHTML = `
359
+ <div class="bg-indigo-100 text-indigo-800 p-3 rounded-xl max-w-xs md:max-w-md">
360
+ <p class="font-semibold">${sender}</p>
361
+ <p>${message}</p>
362
+ </div>
363
+ `;
364
+ } else {
365
+ messageDiv.className = 'flex items-start justify-end';
366
+ messageDiv.innerHTML = `
367
+ <div class="bg-gray-200 text-gray-800 p-3 rounded-xl max-w-xs md:max-w-md">
368
+ <p class="font-semibold">${sender}</p>
369
+ <p>${message}</p>
370
+ </div>
371
+ `;
372
+ }
373
+
374
+ chatContainer.appendChild(messageDiv);
375
+ chatContainer.scrollTop = chatContainer.scrollHeight;
376
+ }
377
+
378
+ // Form navigation
379
+ function nextStep(currentStep) {
380
+ // Validate current step before proceeding
381
+ if (currentStep === 1) {
382
+ const name = document.getElementById('customerName').value.trim();
383
+ if (!name) {
384
+ alert('Por favor, informe o nome do cliente.');
385
+ return;
386
+ }
387
+
388
+ // Add customer response to chat
389
+ addChatMessage(name, 'Olá Janette, estou precisando de ajuda com um problema.', 'right');
390
+ addChatMessage('PulseDesk', 'Entendido. Vamos registrar seu chamado. Por favor, me informe alguns dados para continuarmos.', 'left');
391
+ } else if (currentStep === 2) {
392
+ const description = document.getElementById('issueDescription').value.trim();
393
+ if (!description) {
394
+ alert('Por favor, descreva o problema ou solicitação.');
395
+ return;
396
+ }
397
+
398
+ // Add issue description to chat
399
+ addChatMessage('PulseDesk', 'Obrigado pela descrição. Agora vamos classificar seu chamado.', 'left');
400
+ } else if (currentStep === 3) {
401
+ const ticketType = document.querySelector('input[name="ticketType"]:checked');
402
+ const urgency = document.querySelector('input[name="urgency"]:checked');
403
+ const channel = document.querySelector('input[name="channel"]:checked');
404
+
405
+ if (!ticketType || !urgency || !channel) {
406
+ alert('Por favor, complete todas as classificações do chamado.');
407
+ return;
408
+ }
409
+
410
+ // Update review section
411
+ updateReviewSection();
412
+ }
413
+
414
+ // Hide current step and show next
415
+ document.getElementById(`step${currentStep}`).classList.add('hidden');
416
+ document.getElementById(`step${currentStep + 1}`).classList.remove('hidden');
417
+
418
+ // Add smooth scroll to top of form
419
+ document.getElementById('formContainer').scrollIntoView({ behavior: 'smooth' });
420
+ }
421
+
422
+ function prevStep(currentStep) {
423
+ document.getElementById(`step${currentStep}`).classList.add('hidden');
424
+ document.getElementById(`step${currentStep - 1}`).classList.remove('hidden');
425
+ }
426
+
427
+ // Update review section with form data
428
+ function updateReviewSection() {
429
+ document.getElementById('reviewName').textContent = document.getElementById('customerName').value;
430
+ document.getElementById('reviewCPF').textContent = document.getElementById('customerCPF').value || '-';
431
+ document.getElementById('reviewPhone').textContent = document.getElementById('customerPhone').value || '-';
432
+ document.getElementById('reviewEmail').textContent = document.getElementById('customerEmail').value || '-';
433
+ document.getElementById('reviewDescription').textContent = document.getElementById('issueDescription').value;
434
+
435
+ const ticketType = document.querySelector('input[name="ticketType"]:checked');
436
+ document.getElementById('reviewType').textContent = ticketType ? ticketType.value : '-';
437
+
438
+ const urgency = document.querySelector('input[name="urgency"]:checked');
439
+ document.getElementById('reviewUrgency').textContent = urgency ? urgency.value : '-';
440
+
441
+ const channel = document.querySelector('input[name="channel"]:checked');
442
+ document.getElementById('reviewChannel').textContent = channel ? channel.value : '-';
443
+
444
+ // Set contact method based on channel
445
+ if (channel) {
446
+ const contactMethod = document.getElementById('contactMethod');
447
+ if (channel.value === 'Telefone' || channel.value === 'WhatsApp') {
448
+ contactMethod.textContent = 'telefone';
449
+ } else if (channel.value === 'E-mail') {
450
+ contactMethod.textContent = 'e-mail';
451
+ } else {
452
+ contactMethod.textContent = 'este mesmo canal';
453
+ }
454
+ }
455
+ }
456
+
457
+ // Remove file from upload list
458
+ function removeFile(index) {
459
+ const fileInput = document.getElementById('fileUpload');
460
+ const files = Array.from(fileInput.files);
461
+ files.splice(index, 1);
462
+
463
+ // Create new DataTransfer to update files
464
+ const dataTransfer = new DataTransfer();
465
+ files.forEach(file => dataTransfer.items.add(file));
466
+ fileInput.files = dataTransfer.files;
467
+
468
+ // Trigger change event to update display
469
+ const event = new Event('change');
470
+ fileInput.dispatchEvent(event);
471
+ }
472
+
473
+ // Submit ticket
474
+ function submitTicket() {
475
+ // Generate random ticket number
476
+ const ticketNumber = '#' + Math.floor(100000 + Math.random() * 900000);
477
+ document.getElementById('ticketNumber').textContent = ticketNumber;
478
+
479
+ // Show confirmation step
480
+ document.getElementById('step4').classList.add('hidden');
481
+ document.getElementById('step5').classList.remove('hidden');
482
+
483
+ // Add final message to chat
484
+ addChatMessage('PulseDesk', `Seu chamado foi registrado com sucesso! O número do protocolo é ${ticketNumber}. Nossa equipe entrará em contato em breve.`, 'left');
485
+ addChatMessage('PulseDesk', 'Posso te ajudar em mais alguma coisa no momento?', 'left');
486
+
487
+ // Scroll to top of form
488
+ document.getElementById('formContainer').scrollIntoView({ behavior: 'smooth' });
489
+ }
490
+
491
+ // Start new ticket
492
+ function startNewTicket() {
493
+ // Reset form
494
+ document.getElementById('ticketForm').reset();
495
+ document.getElementById('fileList').innerHTML = '';
496
+
497
+ // Hide all steps except first
498
+ document.querySelectorAll('[id^="step"]').forEach(step => {
499
+ step.classList.add('hidden');
500
+ });
501
+ document.getElementById('step1').classList.remove('hidden');
502
+
503
+ // Add new greeting to chat
504
+ addChatMessage('PulseDesk', 'Ótimo! Vamos iniciar um novo atendimento. Com quem eu falo, por favor?', 'left');
505
+
506
+ // Scroll to top of chat
507
+ document.getElementById('chatContainer').scrollIntoView({ behavior: 'smooth' });
508
+ }
509
+ </script>
510
+ <p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=LIMATEC/pulsedesk-atendimentocrm2" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
511
+ </html>
prompts.txt ADDED
@@ -0,0 +1 @@
 
 
1
+ Script Profissional de Abertura de Chamados - CRM ✅ 1. Saudação e Identificação Inicial “Olá, meu nome é [JANETTE], seja bem-vindo ao atendimento da [PULSEDESK]. Com quem eu falo, por favor?” Se o cliente já for identificado pelo sistema: “Olá, [JANETTE], tudo bem? Como posso te ajudar hoje?” ✅ 2. Confirmação de Dados Cadastrais (se necessário) “Antes de seguirmos, preciso confirmar algumas informações para garantir a segurança do atendimento. Pode me confirmar, por favor: Seu CPF ou CNPJ? Um telefone para contato? E o e-mail principal do cadastro?” ✅ 3. Entendimento do Problema ou Solicitação “Perfeito. Agora, por favor, me descreva com detalhes o que está acontecendo ou qual é sua solicitação.” Ou, se preferir uma pergunta mais objetiva: “Você poderia me informar se está enfrentando algum erro, lentidão, dúvida ou se trata de uma solicitação específica?” ✅ 4. Classificação do Chamado Com base na descrição do cliente, classifique o chamado de acordo com as categorias abaixo: Tipo: Suporte Técnico Dúvida/Informação Requisição de Serviço Reclamação Sugestão Urgência: Baixa (não afeta diretamente o uso) Média (impacta parcialmente) Alta (impede totalmente o uso) Canal de origem: Telefone Chat E-mail WhatsApp Presencial ✅ 5. Registro do Chamado “Vou registrar seu chamado agora. Só um momento, por favor.” Informações que devem constar no chamado: Nome completo do cliente CPF ou CNPJ Contato (telefone e e-mail) Descrição completa do problema ou solicitação Prints ou arquivos enviados (se houver) Classificação (tipo, urgência, canal) Data e hora do atendimento Nome do atendente ✅ 6. Número do Protocolo e Previsão de Retorno “Seu chamado foi registrado com sucesso. O número do protocolo é [#123456].” “Nossa equipe responsável analisará o caso e retornará em até [prazo definido pela empresa]. Você será notificado por [método de contato preferencial].” ✅ 7. Encerramento Cordial “Posso te ajudar em mais alguma coisa no momento?” Se não: “Agradeço o seu contato, [NOME DO CLIENTE]. Conte sempre com a [PULSEDESK]. Tenha um excelente dia!” 📝 Observações Adicionais: Empatia é essencial. Mantenha sempre um tom cordial e acolhedor, mesmo em casos de insatisfação. Evite termos técnicos se o cliente não demonstrar familiaridade. Sempre registre tudo com clareza no sistema, pois o histórico será importante para o acompanhamento. Caso o atendente não consiga resolver no primeiro contato, escalar para o setor responsável conforme a política da empresa.