Hola, chicos,
¡¡Buenas tardes!!

En este post quiero mostraros algo nuevo que logré desarrollar esta semana y que me pareció realmente genial, que es enviar mensajes de texto SMS desde prácticamente cualquier lenguaje de programación actual (C#, VB.NET, Java, PHP, etc.) e incluso desde la base de datos SQL Server usando SQL CLR (también se puede hacer usando xp_cmdshell).

Esto es especialmente útil para crear alertas y monitoreo en entornos de producción, donde en caso de cualquier problema grave, podrás ser notificado, estés donde estés, incluso si no tienes señal 3G o Wi-FI en ese momento.

Esto se puede utilizar para enviar un SMS al departamento comercial de una empresa cuando un cliente envía una solicitud de cotización. Si tienes una tienda online, puedes enviar mensajes de texto a tus clientes con cambios en el estado de un pedido, por ejemplo. ¡Las posibilidades son muchas!

¿Qué es Pushbullet?

pushbullet-640x401
pushbullet-640x401

Pushbullet es una aplicación sencilla con un objetivo principal: transferir cosas desde tu teléfono inteligente a tu computadora y viceversa. Puede enviar archivos y enlaces a su teléfono celular y recibir notificaciones desde cualquier teléfono inteligente asociado con su cuenta de PC, como cuando un amigo se registra en Swarm, cuando alguien lo llama o cuando su calendario le recuerda una cita.

También puedes enviar y recibir SMS y responder a WhatsApp, Facebook Messager, Hangouts y otros mensajes sin tocar tu teléfono inteligente. Es fácil: cuando alguien envía un mensaje a través de WhatsApp, aparecerá una notificación interactiva en tu computadora. Haga clic en Responder, escriba su mensaje y haga clic en Enviar.

Pushbullet también tiene algunos trucos geniales, como sincronizar el portapapeles entre dispositivos, para que puedas cortar texto en tu computadora y pegarlo en tu teléfono inteligente.

¿Cómo funciona esta solución? ¿Cómo se envía el torpedo?

El funcionamiento básico de esta funcionalidad es el siguiente:

  • Utilizando un lenguaje de programación de tu elección enviarás la solicitud a la API Pushbullet, solicitando el envío del SMS e informando el número del destinatario y el mensaje.
  • El servidor Pushbullet recibirá esta solicitud y la dirigirá a la aplicación asociada con el dispositivo solicitado en su solicitud.
  • La aplicación en su teléfono celular seleccionado recibirá la solicitud del servidor y utilizará la función de envío de SMS en su teléfono celular.
  • ¡SMS Torpedo enviado con éxito al destinatario!

¿Cuáles son los requisitos para que esta API funcione?

Como el envío se realiza a través de su teléfono celular, los mensajes enviados a través de la API están disponibles en la pantalla de SMS de su teléfono inteligente. Además, necesitarás tener crédito para enviar el SMS, como cualquier SMS normal, o tener un paquete con tu operador de telefonía móvil que te permita enviar estos mensajes de texto.

En mis pruebas utilicé mi celular, donde tengo un plan de control Vivo de 1 GB y mensajes de texto ilimitados para cualquier operador, en cualquier código de área, por lo que este plan me viene perfecto. Incluso existen algunos paquetes de SMS exclusivos que le permiten enviar mensajes de texto ilimitados por un costo aún menor.

Como habrás notado, para que esta función funcione, el teléfono celular que se encargará de enviar los mensajes de texto deberá estar siempre encendido y tener acceso a Internet.

¿Cuál es el costo de esta solución? ¿Hay un límite de envío?

Un punto importante que debo comentar es que la cuenta Pushbullet Free solo permite enviar 500 solicitudes (pushes) por mes. Para eliminar este límite y convertirlo en envío ilimitado, deberá actualizar su cuenta Pushbullet a la versión PRO (https://www.pushbullet.com/pro), que cuesta $4,99 por mes o $3,33 por mes si opta por el plan anual. Creo que el precio es muy justo y asequible.

Creo que es una solución muy interesante y con costo CERO, para quienes necesitan pocos mensajes al mes y ya tienen un paquete de datos con soporte para mensajes de texto ilimitados en su celular.

Incluso si necesita enviar muchos mensajes de texto SMS y necesita comprar un paquete de datos con mensajes de texto ilimitados + 1 GB de Internet 4G (40 reales por mes) y actualizar su cuenta Pushbullet a la versión PRO (10 reales por mes), el costo mensual de esta solución es muy pequeño (52 reales por mes) y mucho menor que las soluciones comerciales que los operadores y otras empresas ofrecen en el mercado (y con un límite en la cantidad de mensajes de texto enviados).

Hice una búsqueda rápida en Internet y vi que algunas empresas cobran 100 reales por mes para tener derecho a enviar 1.000 mensajes de texto al mes y algunas cobran R$ 0,16 por mensaje de texto (500 mensajes de texto al mes = 80 reales).

Crear su cuenta y agregar dispositivos

Para realizar esta actividad utilizaré la API Pushbullet, que está bien documentada y es fácil de usar (https://docs.pushbullet.com/) para acceder a todas estas funciones utilizando su lenguaje de programación favorito.

El primer paso es crear su cuenta en el sitio web de la aplicación (https://www.pushbullet.com/). Admite la integración con Facebook y Google, lo que permite que el servicio lea sus datos de uno de estos dos servicios y le ahorre tiempo al ingresar los datos de registro.

Una vez registrado, agregue sus dispositivos móviles descargando e instalando la aplicación Pushbullet en ellos. Una vez instalado e iniciado sesión en Pushbullet a través de la aplicación en su teléfono, se agregará a su lista de dispositivos en su cuenta.

Recuperar el token de acceso, la identificación de usuario y la identificación del dispositivo

Una vez que haya creado su cuenta y haya agregado los dispositivos, vaya a la pantalla de Preferencias (Configuración – https://www.pushbullet.com/#settings) y en la sección “Tokens de acceso” haga clic en el botón “Crear tokens de acceso”

pushbullet-api-send-sms-to-smartphone-php-csharp-java-sql-server-clr
pushbullet-api-enviar-sms-a-teléfono inteligente-php-csharp-java-sql-server-clr

Después de hacer clic en el botón, se mostrará un código en su pantalla. Anota este código, ya que será el código de acceso para autenticar las solicitudes que enviaremos.

Ahora que tiene su cuenta Pushbullet y su token de acceso, necesitamos recuperar su ID de usuario y el ID de su dispositivo móvil que se utilizará para enviar los mensajes de texto.

Para recuperar esta información, recomiendo descargar el binario cURL, disponible en este enlace (Windows) o en este enlace (cualquier sistema operativo) o el uso de la extensión Cartero, de Google Chrome (más práctico y mejor visualización de resultados)

Una vez descargado e instalado (en Windows, copie el ejecutable en el directorio C:\Windows), usaremos cURL para recuperar nuestra ID de cuenta, usando el siguiente comando:

curl --header "Access-Token: <seu_access_token>" https://api.pushbullet.com/v2/users/me -k

pushbullet-api-send-sms-to-smartphone-php-csharp-java-sql-server-clr-4
pushbullet-api-enviar-sms-a-teléfono inteligente-php-csharp-java-sql-server-clr-4

o haciendo la misma solicitud con Postman:

pushbullet-api-send-sms-to-smartphone-php-csharp-java-sql-server-clr-3
pushbullet-api-enviar-sms-a-teléfono inteligente-php-csharp-java-sql-server-clr-3

Con esto, anota el código iden devuelto. Esta es su identificación de usuario, ya que puede tener varios usuarios asociados a su cuenta.

Ahora recuperemos el ID de nuestro dispositivo celular, que enviará el SMS, usando el siguiente comando en cURL:

curl --header "Access-Token: <seu_access_token>" https://api.pushbullet.com/v2/devices -k

o vía cartero:

pushbullet-api-send-sms-to-smartphone-php-csharp-java-sql-server-clr-5
pushbullet-api-enviar-sms-a-teléfono inteligente-php-csharp-java-sql-server-clr-5

Tenga en cuenta el código de identificación devuelto por su dispositivo. Esta es la identificación del dispositivo.

Desarrollando una solución de envío de SMS con Pushbullet API

Ahora que tenemos los ID necesarios para enviar el mensaje de texto, podemos iniciar nuestra rutina de envío de SMS.

Solución escrita en el lenguaje de programación C#, para ser utilizada en SQL Server a través del CLR

Ejemplo:

pushbullet-api-send-sms-to-smartphone-php-csharp-java-sql-server-clr-6
pushbullet-api-enviar-sms-a-teléfono inteligente-php-csharp-java-sql-server-clr-6

Código fuente:

using System;
using System.Data.SqlTypes;
using System.IO;
using System.Net;
using System.Text;
using Bibliotecas.Model;

public partial class StoredProcedures
{
    [Microsoft.SqlServer.Server.SqlProcedure]
    public static void stpEnvia_Torpedo(SqlString Nr_Numero, SqlString Ds_Mensagem)
    {


        if (Nr_Numero.IsNull)
            Retorno.Erro("Favor informar o número de telefone que irá receber a mensagem");

        if (Nr_Numero.Value.Length <= 9)
            Retorno.Erro("Favor informar o número de telefone com DDD");

        if (Ds_Mensagem.IsNull)
            Retorno.Erro("Favor informar a mensagem que será enviada");

        if (Ds_Mensagem.Value.Length > 160)
            Retorno.Erro("O tamanho máximo da mensagem a ser enviada por SMS é de 160 caracteres");



        try
        {

            
            const string AccessToken = "seu_access_token"; //https://www.pushbullet.com/#settings
            const string UserIdentity = "token_usuario"; //curl --header "Access-Token: access_token" https://api.pushbullet.com/v2/users/me
            const string DeviceIdentity = "token_do_dispositivo"; //curl--header "Access-Token: access_token" https://api.pushbullet.com/v2/devices


            var dsScript = @"{
    ""push"": {
        ""type"": ""messaging_extension_reply"",
        ""package_name"": ""com.pushbullet.android"",
        ""source_user_iden"": """ + UserIdentity + @""",
        ""target_device_iden"": """ + DeviceIdentity + @""", 
        ""conversation_iden"": """ + ((Nr_Numero.Value.Length <= 11) ? "+55" + Nr_Numero.Value : Nr_Numero.Value) + @""",
        ""message"": """ + Ds_Mensagem.Value.Replace('\\', '/') + @"""
    },""type"": ""push""
}";

            var request = (HttpWebRequest) WebRequest.Create("https://api.pushbullet.com/v2/ephemerals");
            
            request.Method = "POST";
            request.Headers.Add("Access-Token", AccessToken);
            request.UserAgent = "curl/7.37.0";
            request.ContentType = "application/json";

            var buffer = Encoding.GetEncoding("UTF-8").GetBytes(dsScript);
            using (var reqstr = request.GetRequestStream())
            {
                reqstr.Write(buffer, 0, buffer.Length);

                using (var response = request.GetResponse())
                {
                    var dataStream = response.GetResponseStream();

                    var reader = new StreamReader(dataStream);
                    var responseFromServer = reader.ReadToEnd();

                    if (responseFromServer == "{}")
                        Retorno.Mensagem(responseFromServer);
                    else
                        Retorno.Erro(responseFromServer);
                }

            }
            
        }
        catch (Exception e)
        {
            Retorno.Erro("Erro : " + e.Message);
        }
        
    }

}

En este script, utilicé la clase Devolver, que tiene como objetivo enviar mensajes de información y mensajes de error a la base de datos a través del CLR. Su código fuente está disponible en la publicación. SQL Server: cómo enviar advertencias y mensajes de error a la base de datos usando CLR (C#).

Solución escrita en el lenguaje de programación web PHP

Ejemplo:

pushbullet-api-send-sms-to-smartphone-php-csharp-java-sql-server-clr-7
pushbullet-api-enviar-sms-a-teléfono inteligente-php-csharp-java-sql-server-clr-7

Código fuente:

<?php

// Variáveis
$Nr_Numero = "+5527912345678";
$Ds_Mensagem = "Teste da API com o PHP";

$Nr_Numero = (strlen( $Nr_Numero ) <= 11) ? "+55" . $Nr_Numero : $Nr_Numero;
$Ds_Mensagem = str_replace( "\\", "/", $Ds_Mensagem );


// Parâmetros
$strUrl = "https://api.pushbullet.com/v2/ephemerals";
$AccessToken = "seu_access_token";
$UserIdentity = "seu_token_usuario";
$DeviceIdentity = "seu_token_dispositivo";


$requisicao = [
    'type' => 'push',
    'push' => [
        'type' => 'messaging_extension_reply',
        'package_name' => 'com.pushbullet.android',
        'source_user_iden' => $UserIdentity,
        'target_device_iden' => $DeviceIdentity,
        'conversation_iden' => $Nr_Numero,
        'message' => $Ds_Mensagem
    ]
];


$headers = array(
    "Content-type: application/json",
    "Access-Token: " . $AccessToken,
);


$ch = curl_init();


curl_setopt( $ch, CURLOPT_URL, $strUrl );

// Cabeçalhos e configurações
curl_setopt( $ch, CURLOPT_HEADER, 1 );
curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt( $ch, CURLOPT_USERAGENT, "curl/7.37.0" );
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, TRUE );
curl_setopt( $ch, CURLOPT_MAXREDIRS, 2 );

// Desativa a verificaçõo de certificado SSL
curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, 0 );
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, 0 );

// Envia os dados
curl_setopt( $ch, CURLOPT_POST, 1 );
curl_setopt( $ch, CURLOPT_POSTFIELDS, json_encode( $requisicao ) );


$retorno = curl_exec( $ch );
curl_close( $ch );

if ( substr( $retorno, -2 ) == "{}" )
{
    echo "Torpedo enviado com sucesso para o número " . $Nr_Numero;
}
else
{
    echo "Erro: " . $retorno;
}
?>

Solución genérica utilizando el binario cURL.exe
Después de mostrar ejemplos usando dos lenguajes de programación diferentes, demostraré cómo usar cURL.exe, instalado en su PC, para enviar el SMS. Puedes elegir tu lenguaje de programación favorito para enviar tu solicitud, como hice yo en los ejemplos anteriores, o también puedes simplemente ejecutar el binario cURL.exe desde tu lenguaje de programación:

El comando predeterminado para enviar SMS mediante cURL es este:

curl --header "Access-Token: seu_access_token" --header "Content-Type: application/json" --request POST -k --data-binary @"C:\Users\dirceu\Desktop\push_message.json" https://api.pushbullet.com/v2/ephemerals

push_message.json

{
  "push": {
    "conversation_iden": "+5527912345678",
    "message": "Teste de Mensagem com cURL",
    "package_name": "com.pushbullet.android",
    "source_user_iden": "seu_token_usuario",
    "target_device_iden": "seu_token_dispositivo",
    "type": "messaging_extension_reply"
  },
  "type": "push"
}

En el comando cURL utilicé un archivo externo (push_message.json) para almacenar la información sobre la solicitud que voy a enviar. Puede hacer que su lenguaje de programación cree este archivo en tiempo de ejecución, use la ruta del archivo recién creado en el parámetro –data-binary y elimínelo después de la ejecución.

Creo que esta solución a través de cURL es muy genérica y puede ser utilizada por cualquier lenguaje de programación que permita ejecutar archivos binarios en el servidor, ya sea C#, PHP, Java, Ruby, etc.

¡Eso es todo, amigos!
Espero que te haya gustado esta publicación.

Si tienes alguna pregunta ¡déjala aquí en los comentarios!

sql servidor sql enviar texto enviar sms php java c# clr .net csharp ruby ​​​​curl código de línea de comando script fragmento de secuencia de comandos

sql servidor sql enviar texto enviar sms php java c# clr .net csharp ruby ​​​​curl código de línea de comando script fragmento de secuencia de comandos