";
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 "";