Files
whatsapp/api/react_message.php
T
2026-01-24 01:09:00 -05:00

74 lines
2.6 KiB
PHP

<?php
require_once __DIR__ . '/../config/config.php';
require_once __DIR__ . '/../services/WhatsAppService.php';
header('Content-Type: application/json; charset=utf-8');
if (function_exists('requireAuthentication')) requireAuthentication();
$input = json_decode(file_get_contents('php://input'), true) ?: $_POST;
$message_id = $input['message_id'] ?? null;
$emoji = $input['emoji'] ?? null;
if (!$message_id || !$emoji) {
http_response_code(400);
echo json_encode(['success' => 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()]);
}