"; exit; } $pdo = db(); $stmt = $pdo->prepare("SELECT id FROM twilio_numbers WHERE from_number = :to LIMIT 1"); $stmt->bindValue(':to', $to); $stmt->execute(); $twilioId = (int)($stmt->fetchColumn() ?: 0); if ($twilioId === 0) { echo ""; exit; } $pdo->beginTransaction(); try { $stmt = $pdo->prepare("SELECT id FROM contacts WHERE phone = :phone"); $stmt->bindValue(':phone', $from); $stmt->execute(); $contactId = (int)($stmt->fetchColumn() ?: 0); if ($contactId === 0) { $stmt = $pdo->prepare("INSERT INTO contacts (phone) VALUES (:phone)"); $stmt->bindValue(':phone', $from); $stmt->execute(); $contactId = (int)$pdo->lastInsertId(); } $stmt = $pdo->prepare("SELECT id FROM conversations WHERE contact_id = :cid AND twilio_number_id = :tid"); $stmt->bindValue(':cid', $contactId, PDO::PARAM_INT); $stmt->bindValue(':tid', $twilioId, PDO::PARAM_INT); $stmt->execute(); $conversationId = (int)($stmt->fetchColumn() ?: 0); if ($conversationId === 0) { $stmt = $pdo->prepare("INSERT INTO conversations (contact_id, twilio_number_id) VALUES (:cid, :tid)"); $stmt->bindValue(':cid', $contactId, PDO::PARAM_INT); $stmt->bindValue(':tid', $twilioId, PDO::PARAM_INT); $stmt->execute(); $conversationId = (int)$pdo->lastInsertId(); } $stmt = $pdo->prepare("INSERT INTO messages (conversation_id, direction, body, status) VALUES (:cid, 'inbound', :body, 'received')"); $stmt->bindValue(':cid', $conversationId, PDO::PARAM_INT); $stmt->bindValue(':body', $body); $stmt->execute(); $stmt = $pdo->prepare("UPDATE conversations SET last_message_at = NOW() WHERE id = :cid"); $stmt->bindValue(':cid', $conversationId, PDO::PARAM_INT); $stmt->execute(); $pdo->commit(); } catch (Throwable $e) { $pdo->rollBack(); } echo "";