false, 'error' => 'Parámetros faltantes: message_id, emoji']); exit; } try { $db = Database::getInstance(); // Buscar mensaje objetivo para obtener user_id $stmt = $db->query("SELECT id, user_id, message_id, direction FROM conversations WHERE message_id = ? OR id = ? LIMIT 1", [$message_id, $message_id]); $target = $stmt->fetch(); if (!$target) { http_response_code(404); echo json_encode(['success' => false, 'error' => 'Mensaje objetivo no encontrado']); exit; } // Obtener teléfono del usuario $user = $db->query("SELECT phone_number FROM users WHERE id = ? LIMIT 1", [$target['user_id']])->fetch(); if (!$user || empty($user['phone_number'])) { http_response_code(500); echo json_encode(['success' => false, 'error' => 'No se pudo determinar el teléfono del usuario']); exit; } // Enviar reacción a través de WhatsAppService $wa = new WhatsAppService(); $to = $user['phone_number']; $resp = null; try { $resp = $wa->sendReaction($to, $message_id, $emoji, false); } catch (Exception $e) { // fallar la operación de envío pero seguir guardando registro con status "failed" error_log('sendReaction failed: ' . $e->getMessage()); } // Registrar la reacción como mensaje saliente en la BD $msgData = [ 'user_id' => $target['user_id'], 'direction' => 'outgoing', 'message_type' => 'reaction', 'content' => $emoji, 'reaction_to_message_id' => $message_id, 'reaction_emoji' => $emoji, 'status' => ($resp ? 'sent' : 'failed'), 'created_at' => date('Y-m-d H:i:s') ]; // If we got an id from WhatsApp response, save it if (is_array($resp) && isset($resp['conversations'][0]['id'])) { $msgData['message_id'] = $resp['conversations'][0]['id']; } $db->insert('conversations', $msgData); echo json_encode(['success' => true, 'message' => 'Reacción enviada', 'saved' => $msgData]); } catch (Exception $e) { http_response_code(500); echo json_encode(['success' => false, 'error' => $e->getMessage()]); }