botToken = config('services.telegram.bot_token', env('TELEGRAM_BOT_TOKEN', '')); $this->chatId = config('services.telegram.chat_id', env('TELEGRAM_CHAT_ID', '')); } /** * Kirim pesan ke Telegram Bot */ public function sendMessage(string $text): bool { if (empty($this->botToken) || empty($this->chatId)) { Log::warning('Telegram bot token atau chat ID belum dikonfigurasi.'); return false; } $url = "https://api.telegram.org/bot{$this->botToken}/sendMessage"; try { $response = Http::timeout(15) ->retry(3, 1000) ->post($url, [ 'chat_id' => $this->chatId, 'text' => $text, 'parse_mode' => 'HTML', 'disable_web_page_preview' => true, ]); if ($response->successful()) { Log::info('Telegram alert berhasil dikirim.'); return true; } Log::error('Telegram API error: ' . $response->body()); return false; } catch (\Exception $e) { Log::error('Telegram send failed: ' . $e->getMessage()); return false; } } /** * Kirim hasil kalkulasi sesi sortir yang sudah selesai */ public function sendSessionResult(SortingSession $session): bool { $message = $this->formatSessionMessage($session); return $this->sendMessage($message); } /** * Format pesan hasil sesi sortir */ protected function formatSessionMessage(SortingSession $session): string { $startedAt = Carbon::parse($session->started_at)->timezone(config('app.timezone', 'Asia/Jakarta'))->format('d/m/Y H:i:s'); $endedAt = Carbon::parse($session->ended_at)->timezone(config('app.timezone', 'Asia/Jakarta'))->format('d/m/Y H:i:s'); // Hitung durasi sesi $duration = Carbon::parse($session->started_at)->diff(Carbon::parse($session->ended_at)); $durationStr = ''; if ($duration->h > 0) $durationStr .= "{$duration->h} jam "; if ($duration->i > 0) $durationStr .= "{$duration->i} menit "; $durationStr .= "{$duration->s} detik"; $totalWeight = ($session->total_raw_banana_weight ?? 0) + ($session->total_ripe_banana_weight ?? 0) + ($session->total_raw_orange_weight ?? 0) + ($session->total_ripe_orange_weight ?? 0); $message = "✅ SORTIR SELESAI!\n"; $message .= "━━━━━━━━━━━━━━━━━━━━━\n\n"; $message .= "📅 Waktu Mulai: {$startedAt}\n"; $message .= "🏁 Waktu Selesai: {$endedAt}\n"; $message .= "⏱ Durasi: {$durationStr}\n"; $message .= "📊 Total Data Masuk: {$session->total_records} record\n\n"; $message .= "━━━━━━━━━━━━━━━━━━━━━\n"; $message .= "📋 HASIL KALKULASI\n"; $message .= "━━━━━━━━━━━━━━━━━━━━━\n\n"; $message .= "🍌 Pisang Mentah: " . number_format($session->total_raw_banana_weight ?? 0, 2) . " gram\n"; $message .= "🍌 Pisang Matang: " . number_format($session->total_ripe_banana_weight ?? 0, 2) . " gram\n"; $message .= "🍊 Jeruk Mentah: " . number_format($session->total_raw_orange_weight ?? 0, 2) . " gram\n"; $message .= "🍊 Jeruk Matang: " . number_format($session->total_ripe_orange_weight ?? 0, 2) . " gram\n\n"; $message .= "━━━━━━━━━━━━━━━━━━━━━\n"; $message .= "⚖️ Total Berat: " . number_format($totalWeight, 2) . " gram\n"; $message .= "\n📊 Dashboard: " . config('app.url', 'http://localhost:8000'); return $message; } }