Tikettinumerointi (VVNKKNN) + automaattinen vastaus

Tikettinumero:
- Uudet tiketit saavat juoksevan numeron VVNKKNN-formaatissa
  (vuosi+kuukausi sekoitettu sekvenssiin, esim. 2600301)
- Numero näkyy tikettilistassa ja detail-näkymässä (#-merkillä)
- Sähköpostin aihe muotoa "Tiketti #2600301: Alkuperäinen aihe"
- Vastaukset ketjuuntuvat automaattisesti

Autoreply:
- Postilaatikkokohtainen asetus: checkbox + viestisisältö
- Uusi tiketti lähettää automaattisen vastauksen asiakkaalle
- Autoreply näkyy tiketin viestiketjussa ( Automaattinen vastaus)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-11 00:24:17 +02:00
parent 96a35c7e0b
commit 07e9c63c47
4 changed files with 107 additions and 12 deletions

40
api.php
View File

@@ -2195,9 +2195,15 @@ switch ($action) {
$ticketPriority = 'tärkeä';
}
// Generoi tikettinumero (VVNKKNN)
$ticketNumber = dbNextTicketNumber($companyId);
$originalSubject = $email['subject'] ?: '(Ei aihetta)';
$numberedSubject = "Tiketti #{$ticketNumber}: {$originalSubject}";
$ticket = [
'id' => generateId(),
'subject' => $email['subject'] ?: '(Ei aihetta)',
'ticket_number' => $ticketNumber,
'subject' => $numberedSubject,
'from_email' => $email['from_email'],
'from_name' => $email['from_name'],
'status' => 'uusi',
@@ -2250,6 +2256,36 @@ switch ($action) {
}
dbSaveTicket($companyId, $ticket);
// Autoreply — lähetä automaattinen vastaus asiakkaalle
if (!empty($mailbox['auto_reply_enabled']) && !empty($mailbox['auto_reply_body'])) {
$arSubject = 'Re: ' . $ticket['subject'];
$arBody = $mailbox['auto_reply_body'];
$arSent = sendTicketMail(
$email['from_email'],
$arSubject,
$arBody,
$email['message_id'], // In-Reply-To
$email['message_id'], // References
$mailbox,
'' // ei CC
);
if ($arSent) {
// Tallenna autoreply tiketin viestiksi
$arMsg = [
'id' => generateId(),
'type' => 'auto_reply',
'from' => $mailbox['smtp_from_email'] ?? $mailbox['imap_user'] ?? '',
'from_name' => $mailbox['smtp_from_name'] ?? $mailbox['nimi'] ?? '',
'body' => $arBody,
'timestamp' => date('Y-m-d H:i:s'),
'message_id' => '',
];
$ticket['messages'][] = $arMsg;
dbSaveTicket($companyId, $ticket);
}
}
// Telegram-hälytys tärkeille/urgentille
if ($ticket['priority'] === 'urgent' || $ticket['priority'] === 'tärkeä') {
sendTelegramAlert($companyId, $ticket);
@@ -3145,6 +3181,8 @@ switch ($action) {
'smtp_user' => trim($input['smtp_user'] ?? ''),
'smtp_encryption' => trim($input['smtp_encryption'] ?? 'tls'),
'aktiivinen' => $input['aktiivinen'] ?? true,
'auto_reply_enabled' => !empty($input['auto_reply_enabled']),
'auto_reply_body' => trim($input['auto_reply_body'] ?? ''),
];
// Hae vanha mailbox salasanojen vertailua varten
$existingMb = dbGetMailbox($mb['id']);