16 de septiembre de 2024 • 7 min de lectura
Especialista en IA y Automatización
Diseño sistemas de comunicación impulsados por IA. Mi trabajo se centra en agentes de voz, chatbots de WhatsApp, asistentes de IA y automatización de flujos, construidos principalmente sobre Twilio, n8n y LLM modernos como OpenAI y Claude. En los últimos 7 años he entregado más de 30 proyectos de automatización que manejan más de 250 000 interacciones mensuales.
Si te gusta el contenido que hago, puedes suscribirte y recibir información valiosa por correo. No se envía spam, solo novedades sobre publicaciones interesantes o contenido especializado del que hablo.
PHP y Twilio son una combinación potente para mandar SMS. Sirve igual para una webapp, para un webservice o para un script que se dispara cuando pasa algo en un sistema externo. Te ahorrás un montón de trabajo y le delegás lo pesado a un proveedor de SMS como Twilio.
Cuando armás una plataforma con SMS, una de las preocupaciones más grandes es la programación de los mensajes. Puede que necesites mandarlos al instante, apenas se dispara el script. O que tengas que mandar un SMS recordatorio todas las mañanas a las 9 AM. Vamos a cubrir los dos escenarios en los ejemplos de abajo. Vamos a eso.
Si no tenés un proyecto PHP, vamos a crear uno. Primero, asegurate de tener instalados PHP 7.4+ y Composer.
Abrí la terminal y seguí estos pasos:
# Step 1: Create a project directory
mkdir php-twilio-sms
cd php-twilio-sms
# Step 2: Initialize a Composer project
composer init
Te va a pedir algunos datos básicos del proyecto, como el nombre del paquete y la versión. Podés completarlos o dejar los valores por defecto por ahora.
Ahora vamos a instalar el SDK de Twilio con Composer. Ese SDK nos simplifica el trabajo contra la API de Twilio.
Sumá el SDK de Twilio para PHP a tu proyecto y actualizá el archivo composer.json:
composer require twilio/sdkTwilio pide autenticación con tu Account SID y tu Auth Token, que te los dan cuando creás la cuenta. Para no exponerlos, vamos a guardar esos datos en un archivo .env.
Creá un archivo .env en el directorio del proyecto:
touch .env
Después cargá ahí tus credenciales de Twilio. Acordate de reemplazar los valores de ejemplo por los tuyos.
TWILIO_ACCOUNT_SID=your_account_sid_here
TWILIO_AUTH_TOKEN=your_auth_token_here
TWILIO_PHONE_NUMBER=your_twilio_phone_number_here
Con el proyecto ya armado, vamos a escribir un script PHP simple para mandar un SMS. Creá un archivo nuevo llamado send-sms.php:
<?php
// Load Composer's autoload file
require __DIR__ . '/vendor/autoload.php';
// Load environment variables
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();
use Twilio\Rest\Client;
// Your Twilio credentials
$sid = $_ENV['TWILIO_ACCOUNT_SID'];
$token = $_ENV['TWILIO_AUTH_TOKEN'];
// Create a Twilio client
$client = new Client($sid, $token);
// Phone numbers
$from = $_ENV['TWILIO_PHONE_NUMBER']; // Your Twilio number
$to = '+1234567890'; // The recipient's phone number
// Send the SMS
$message = $client->messages->create(
$to,
[
'from' => $from,
'body' => 'Hello! This is a test message from Twilio using PHP.'
]
);
// Display the message SID to confirm it was sent
echo "Message SID: " . $message->sid;
Para mandar el SMS, corré el script en la terminal:
php send-sms.php
Si está todo bien configurado, vas a ver un mensaje de éxito en la terminal, junto con el Message SID que confirma el envío. El destinatario recibe el mensaje en unos segundos.
Ahora veamos las distintas opciones de programación que tenemos.
Para programar el envío de SMS hay dos enfoques principales:
Usar la programación nativa de Twilio: le pasás la hora exacta de envío y Twilio se encarga del resto, con menos trabajo de tu lado.
Este enfoque guarda los mensajes, y sus horarios de envío, en tu base de datos. Después corrés un script PHP cada tanto para ver si la hora actual alcanzó o pasó la hora programada. Veamos el código:
<?php
// Database check (replace this with your database logic)
$scheduledMessages = [
[
'phone_number' => '+1234567890',
'message' => 'Reminder: Your appointment is tomorrow at 9AM.',
'scheduled_time' => '2024-09-18 09:00:00'
],
[
'phone_number' => '+0987654321',
'message' => 'Don’t forget to pick up your package!',
'scheduled_time' => '2024-09-18 15:30:00'
]
];
$currentTime = date('Y-m-d H:i:s');
foreach ($scheduledMessages as $sms) {
if ($currentTime >= $sms['scheduled_time']) {
// Send SMS if the current time has passed the scheduled time
sendSms($sms['phone_number'], $sms['message']);
}
}
// SMS sending function
function sendSms($to, $message)
{
// Include Twilio's PHP SDK
require_once 'vendor/autoload.php';
use Twilio\Rest\Client;
$sid = 'your_twilio_sid';
$token = 'your_twilio_auth_token';
$client = new Client($sid, $token);
$client->messages->create(
$to,
[
'from' => 'your_twilio_number',
'body' => $message
]
);
echo "SMS sent to $to\n";
}
Qué estamos haciendo acá
$currentTime) con la hora programada, y manda el SMS si ya pasó.Twilio tiene una feature para programar los mensajes de su lado. Le mandás el request con la hora de envío que querés, y ellos se encargan del resto.
Así se programa un mensaje con Twilio:
<?php
// Include Twilio's PHP SDK
require_once 'vendor/autoload.php';
use Twilio\Rest\Client;
// Twilio credentials
$sid = 'your_twilio_sid';
$token = 'your_twilio_auth_token';
$client = new Client($sid, $token);
// Schedule message details
$to = '+1234567890';
$message = 'Reminder: Your appointment is tomorrow at 9AM.';
$scheduleTime = (new DateTime('2024-09-18 09:00:00'))->format(DateTime::RFC3339);
// Send the scheduled SMS
$message = $client->messages->create(
$to,
[
'from' => 'your_twilio_number',
'body' => $message,
'scheduleType' => 'fixed', // Fixed scheduling
'sendAt' => $scheduleTime, // Time to send
'messagingServiceSid' => 'your_messaging_service_sid' // Messaging Service SID - can be found at Twilio´s console
]
);
echo "SMS scheduled to be sent at $scheduleTime to $to\n"; // you can return a specific value or store the $message data in your database
Repasemos ese código
scheduleType va en 'fixed', que indica que el mensaje sale a una hora puntual.sendAt define la hora exacta, en formato RFC3339, en la que Twilio tiene que mandar el mensaje.messagingServiceSid de Twilio define qué servicio se encarga del envío.Con este enfoque el SMS sale exactamente a la hora que programaste, sin necesidad de correr scripts PHP periódicos.
Hay distintas formas de mandar SMS con PHP. Usar un servicio de terceros como Twilio o Vonage te ahorra horas de trabajo, porque ya tienen los mecanismos internos resueltos. Más adelante podés sumar webhooks y tener comunicación en los dos sentidos en poco tiempo, justamente por todo lo pesado que Twilio resuelve por vos. Igual, todo depende de los requerimientos de tu proyecto.
¿Te sirvió el post? ¡Compartilo!
-Gonza
Descubre cuánto te está costando tu sistema de comunicaciones.
Obtén la auditoría de comunicaciones