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:
40
api.php
40
api.php
@@ -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']);
|
||||
|
||||
Reference in New Issue
Block a user