Ir al contenido


Foto

[DELPHI] Enviar SMS usando bulksms


  • Por favor identifícate para responder
3 respuestas en este tema

#1 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 08 noviembre 2010 - 03:45

Antes de nada, bulksms cobra por cada mensaje que envías así que si estabas pensando en enviar mensajes gratis, lo siento  :)  Como decía esta compañía tiene un servicio para el envió de mensajes de texto, y dispone de una "API" para poder integrar el envió de mensajes dentro de nuestras aplicaciones.

Enviar un mensaje es muy sencillo, solamente hay que hacer una petición http, usando el método "POST" para pasar los parámetros (número de teléfono, usuario, contraseña, texto del mensaje, etc ...)

El siguiente ejemplo es una aplicación de consola que permite enviar SMS desde la linea de comandos:


delphi
  1. program SendSMS;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. uses
  6.   Windows, SysUtils, Classes, WinInet;
  7.  
  8. function URLEncode(Str: string): string;
  9. var
  10.   i: integer;
  11. begin
  12.   Result:= '';
  13.   for i:= 1 to Length(Str) do
  14.     if Str[i] in ['A'..'Z','a'..'z','0'..'9','-','_','.'] then
  15.       Result:= Result + Str[ i ]
  16.     else
  17.       Result:= Result + '%' + IntToHex(Ord(Str[ i ]),2);
  18. end;
  19.  
  20. function SendRequest(Host, Path: String; Port: Word; Stream: TStream;
  21.   Request: String): String;
  22. var
  23.   hNet: HINTERNET;
  24.   hCon: HINTERNET;
  25.   hReq: HINTERNET;
  26.   Context: DWORD;
  27.   BytesRead: DWORD;
  28.   Success: Boolean;
  29.   Buffer: PChar;
  30. begin
  31.   Context:= 0;
  32.   hNet := InternetOpen('Agente', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  33.   if (hNet <> nil) then
  34.   begin
  35.     hCon:= InternetConnect(hNet,PChar(Host),Port,nil,nil,
  36.       INTERNET_SERVICE_HTTP,0,Context);
  37.     if (hCon <> nil) then
  38.     begin
  39.       hReq:= HttpOpenRequest(hCon,'POST',PChar(Path),nil,nil,nil,
  40.           INTERNET_FLAG_RELOAD,Context);
  41.       if (hReq <> nil) then
  42.       begin
  43.         Success:= HttpSendRequest(hReq,
  44.           'Content-Type: application/x-www-form-urlencoded',Cardinal(-1),
  45.           PChar(Request),Length(Request));
  46.         if Success then
  47.         begin
  48.           GetMem(Buffer,32*1024);
  49.           try
  50.             while (InternetReadFile(hReq,Buffer,32*1024,BytesRead)) do
  51.             begin
  52.               if (BytesRead = 0) then
  53.                 break;
  54.               Stream.Write(Buffer^,BytesRead)
  55.             end;
  56.           finally
  57.             FreeMem(Buffer);
  58.           end;
  59.         end;
  60.         InternetCloseHandle(hReq);
  61.       end;
  62.       InternetCloseHandle(hCon);
  63.     end;
  64.     InternetCloseHandle(hNet);
  65.   end;
  66. end;
  67.  
  68. function SendMsg(Numbers, Text, Username, Password: String): String;
  69. var
  70.   Request: String;
  71.   Stream: TStringStream;
  72. begin
  73.   Result:= EmptyStr;
  74.   Request:= Format('username=%s&password=%s&message=%s&msisdn=%s',[
  75.     UrlEncode(Username),
  76.     UrlEncode(Password),
  77.     UrlEncode(Text),
  78.     UrlEncode(Numbers)]);
  79.   Stream:= TStringStream.Create(EmptyStr);
  80.   try
  81.     SendRequest('bulksms.com.es','/eapi/submission/send_sms/2/2.0',5567,Stream,
  82.       Request);
  83.     Result:= Trim(Stream.DataString);
  84.   finally
  85.     Stream.Free;
  86.   end;
  87. end;
  88.  
  89. procedure Vamos;
  90. var
  91.   i: Integer;
  92.   Numero: int64;
  93.   Mensaje: String;
  94. begin
  95.   if ParamCount > 1 then
  96.     if TryStrToInt64(ParamStr(1),Numero) then
  97.     begin
  98.       Mensaje:= EmptyStr;
  99.       for i:= 2 to ParamCount do
  100.         Mensaje:= Mensaje + ParamStr(i) + #13#10;
  101.       Writeln('Enviando emnsaje ...');
  102.       Writeln(SendMsg(IntToStr(Numero),Trim(Mensaje),'Usuario','Password'));
  103.     end;
  104. end;
  105.  
  106. begin
  107.   Writeln;
  108.   Vamos;
  109.   Writeln;
  110. end.



Donde "Usuario" y "Password" son con los que te diste de alta en la pagina web de bulksms ... los míos mejor no los publico  :p

Un ejemplo de como usarlo:


delphi
  1. SendSMS 34668832843 "Primera Linea" "Segunda Linea de Texto" "Ultima Linea"



Por ultimo remarcar que no tengo nada que ver con esta compañía, y no le estoy haciendo publicidad, auque si alguno le parece mal se borra el mensaje y tan amigos  (y)

PD: Al darse de alta te regalan los 5 primeros mensajes (por si queréis hacer pruebas)
PD2: El numero de teléfono de ejemplo es MI numero de fonyou, por si alguno quiere mandarme un mensaje

  • 0

#2 jorgeu

jorgeu

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 179 mensajes
  • LocationMaracaibo

Escrito 08 noviembre 2010 - 03:48

Yo sí haré publicidad :D

Donde trabajo también enviamos SMS masivo y tenemos más métodos de invocación

http://m-lat.net/sit...rolladores.html
  • 0

#3 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 08 noviembre 2010 - 03:53

Yo sí haré publicidad :D

Donde trabajo también enviamos SMS masivo y tenemos más métodos de invocación

http://m-lat.net/sit...rolladores.html


Eso se avisa antes, ahora ya me compre un paquete de 50 mensajes  :( Sabiendo que te dedicabas a esto hubiera probado tu servicio primero.
  • 0

#4 tomastamm

tomastamm

    Newbie

  • Miembros
  • Pip
  • 1 mensajes

Escrito 19 diciembre 2010 - 02:32

tienes que comprobar 2-way sms gateway
  • 0




IP.Board spam blocked by CleanTalk.