up
This commit is contained in:
+38
-12
@@ -108,6 +108,18 @@ class WhatsAppWebhook {
|
||||
return;
|
||||
}
|
||||
|
||||
// Extraer nombres de contactos del payload (contacts[].profile.name)
|
||||
$contactNames = [];
|
||||
if (isset($value['contacts']) && is_array($value['contacts'])) {
|
||||
foreach ($value['contacts'] as $contact) {
|
||||
$waId = $contact['wa_id'] ?? null;
|
||||
$name = $contact['profile']['name'] ?? null;
|
||||
if ($waId && $name) {
|
||||
$contactNames[$waId] = $name;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($items as $message) {
|
||||
// En algunos payloads la estructura key es 'from' y 'id' (mensajes), en otros puede venir distinta; normalizamos
|
||||
$phoneNumber = $message['from'] ?? ($message['wa_id'] ?? null);
|
||||
@@ -131,9 +143,29 @@ class WhatsAppWebhook {
|
||||
|
||||
// Obtener o crear usuario
|
||||
$user = $this->getUserByPhone($phoneNumber);
|
||||
$contactName = $contactNames[$phoneNumber] ?? null;
|
||||
if (!$user) {
|
||||
$userId = $this->createUser($phoneNumber);
|
||||
$user = $this->getUserById($userId);
|
||||
// Guardar nombre del contacto de WhatsApp al crear usuario
|
||||
if ($contactName && $userId) {
|
||||
try {
|
||||
$this->db->update('users', ['name' => $contactName], 'id = ? AND (name IS NULL OR name = ?)', [$userId, '']);
|
||||
$user['name'] = $contactName;
|
||||
} catch (Exception $e) {
|
||||
error_log('[webhook] Error guardando nombre contacto: ' . $e->getMessage());
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Actualizar nombre si el usuario no tiene uno guardado
|
||||
if ($contactName && (empty($user['name']))) {
|
||||
try {
|
||||
$this->db->update('users', ['name' => $contactName], 'id = ? AND (name IS NULL OR name = ?)', [$user['id'], '']);
|
||||
$user['name'] = $contactName;
|
||||
} catch (Exception $e) {
|
||||
error_log('[webhook] Error actualizando nombre contacto: ' . $e->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Procesar diferentes tipos de mensaje
|
||||
@@ -178,40 +210,34 @@ class WhatsAppWebhook {
|
||||
} elseif (isset($message['image'])) {
|
||||
$messageText = $message['image']['caption'] ?? '';
|
||||
$messageType = 'image';
|
||||
// Preferir URL directo si viene en el webhook (evita resolver media_id)
|
||||
$mediaUrl = $message['image']['url'] ?? ($message['image']['id'] ?? null);
|
||||
// Preferir media ID (estable) sobre URL (expira en minutos)
|
||||
$mediaUrl = $message['image']['id'] ?? ($message['image']['url'] ?? null);
|
||||
$mimeType = $message['image']['mime_type'] ?? null;
|
||||
$filename = $message['image']['filename'] ?? null;
|
||||
|
||||
|
||||
|
||||
} elseif (isset($message['audio'])) {
|
||||
$messageType = 'audio';
|
||||
$mediaUrl = $message['audio']['url'] ?? ($message['audio']['id'] ?? null);
|
||||
$mediaUrl = $message['audio']['id'] ?? ($message['audio']['url'] ?? null);
|
||||
$mimeType = $message['audio']['mime_type'] ?? null;
|
||||
$filename = $message['audio']['filename'] ?? null;
|
||||
|
||||
|
||||
|
||||
} elseif (isset($message['video'])) {
|
||||
$messageText = $message['video']['caption'] ?? '';
|
||||
$messageType = 'video';
|
||||
$mediaUrl = $message['video']['url'] ?? ($message['video']['id'] ?? null);
|
||||
$mediaUrl = $message['video']['id'] ?? ($message['video']['url'] ?? null);
|
||||
$mimeType = $message['video']['mime_type'] ?? null;
|
||||
$filename = $message['video']['filename'] ?? null;
|
||||
|
||||
|
||||
|
||||
} elseif (isset($message['document'])) {
|
||||
$messageText = $message['document']['filename'] ?? '';
|
||||
$messageType = 'document';
|
||||
$mediaUrl = $message['document']['url'] ?? ($message['document']['id'] ?? null);
|
||||
$mediaUrl = $message['document']['id'] ?? ($message['document']['url'] ?? null);
|
||||
$mimeType = $message['document']['mime_type'] ?? null;
|
||||
$filename = $message['document']['filename'] ?? null;
|
||||
|
||||
} elseif (isset($message['sticker'])) {
|
||||
$messageType = 'sticker';
|
||||
$mediaUrl = $message['sticker']['url'] ?? ($message['sticker']['id'] ?? null);
|
||||
$mediaUrl = $message['sticker']['id'] ?? ($message['sticker']['url'] ?? null);
|
||||
$mimeType = $message['sticker']['mime_type'] ?? null;
|
||||
$filename = $message['sticker']['filename'] ?? null;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user