Cómo enviar SMS con PHP y Twilio: código y programación

16 de septiembre de 2024 • 7 min de lectura

Inicio / Blog / Cómo enviar SMS con PHP y Twilio: código y programación

Sobre el autor

Author

Gonzalo Gomez

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.

Suscríbete a mi newsletter

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.

Cómo enviar SMS con PHP y Twilio: código y programación | Guía para mandar SMS desde PHP con el SDK de Twilio: instalación, credenciales en .env, código de ejemplo y dos formas de programar los envíos.

Introducción

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. 

 

Requisitos

  • PHP 7.4+ instalado
  • Composer como gestor de dependencias
  • Una cuenta de Twilio
  • Tener aprobada una campaña A2P 10DLC si vas a mandar mensajes a números de Estados Unidos (no hace falta en modo dev)

 

Para empezar

 

1. Armar el proyecto PHP

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.

 

2. Instalar el SDK de Twilio para PHP

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/sdk

 

3. Configurar las variables de entorno

Twilio 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

 

4. Ejemplo de código: mandar un SMS con el SDK de Twilio

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;

 

5. Correr el script

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.

 

Programar SMS con PHP y Twilio

Para programar el envío de SMS hay dos enfoques principales:

  1. Chequear en PHP si el mensaje está listo para enviarse, y recién ahí dispararlo: sirve si querés control total sobre la programación y preferís manejar los tiempos desde tu código PHP.
  2. 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.

     

Opción 1: validar con PHP si el mensaje está listo para enviarse

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á

  • El código trae los mensajes con su hora de envío desde un array que simula la base. Podrías usar cualquier estructura: un JSON, un CSV, un TXT o hasta un XML con tu lista de mensajes.
  • Compara la hora actual ($currentTime) con la hora programada, y manda el SMS si ya pasó.
  • Este script puede correr cada tanto con un cron job, digamos cada minuto, para buscar mensajes listos para salir.

 

Opción 2: programar los mensajes con la función nativa de Twilio

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

  • El 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.
  • El 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.

 

Conclusión

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

3949
Twilio,  PHP
Publicado el 16 de septiembre de 2024

Descubre cuánto te está costando tu sistema de comunicaciones.

Obtén la auditoría de comunicaciones

Posts relacionados

Cómo enviar SMS con Laravel y Twilio en producción

5 de abril de 2024
IntroducciónEn un capítulo anterior armé una guía con mis consejos para verificar tu número 10DLC en Twilio. Lo que nunca hice fue la guía de... Leer más

DateTime vs Timestamp en Laravel: cuál usar y por qué

23 de agosto de 2024
IntroducciónLaravel hace fácil el manejo de fechas, pero elegir mal el tipo de columna o la estrategia de timezone te trae problemas de integridad de... Leer más

Eloquent o DB Facade: cuál usar para inserts masivos

1 de mayo de 2024
IntroducciónEn Laravel, cómo resolvés las operaciones de base de datos impacta directo en el rendimiento y en la escalabilidad de la aplicación. Cuando tenés que... Leer más

Automatizar respuestas de WhatsApp con Twilio y Laravel

12 de mayo de 2025
IntroducciónTu equipo responde exactamente las mismas preguntas todos los días, por WhatsApp, mail y DMs: "¿Cuál es la dirección?""¿Abren los feriados?""¿Cuál es la política de devoluciones?""¿Dan... Leer más