70 lines
2.2 KiB
PHP
70 lines
2.2 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
require_once __DIR__ . '/../includes/bootstrap.php';
|
|
|
|
header('Content-Type: text/xml');
|
|
|
|
$from = trim($_POST['From'] ?? '');
|
|
$to = trim($_POST['To'] ?? '');
|
|
$body = trim($_POST['Body'] ?? '');
|
|
|
|
if ($from === '' || $to === '' || $body === '') {
|
|
echo "<Response></Response>";
|
|
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 "<Response></Response>";
|
|
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 "<Response></Response>";
|