[VB] Porteo de la implementacion del api de WhatsApi a VB.Net

16:11 1 Comments A+ a-


En este post no se explicara que es WhatsAPI, aclaro que no se usara WhatsAPI sino WhatsAPI.Net, tampoco se enseñara paso a paso y menos se daran indicaciones sobre el uso del lenguaje VB.Net.

Que vamos a necesitar:
Si es posible el ultimo VisualStudio, sino cualquier otro servira.
WART (descargar el Exe)
WhatsAppAPI.dll (Les dejo la ultima version a la fecha subida a Mediafire, pero intenten bajar una que este actualizada o compilenla del source en github).
Y por ultimo de ser posible una linea de telefono en la que no utilicemos WhatsApp (asi no se nos complican las cosas, el celular de la abuela servirá).

Empezamos:

Abrimos el WART, Colocamos nuestro numero(Sin + y sin ceros al principio, por ejemplo un numero para argentina seria 5492235352914 o 542235352914 [Nunca supe la diferencia entre con nueve y sin nueve]) y apretamos el boton Request Code



Una vez hecho esto te llegara un SMS o una llamada dandote un codigo, Colocalo en Code y presiona Confirm Code, luego nos dara una contraseña. (en caso de perder la contraseña, como ya estan registrados solo tienen que poner el numero y Clickear en Check Existing.)

La contraseña que nos dio la tenemos que copiar y guardar en un archivo de texto llamado "WAPASS.txt" en la carpeta donde se ejecute nuestra aplicacion, para testeos o debug, obviamente sera en "ruta_al_proyecto/bin/debug/WAPASS.txt".

Despues vamos a hacer un proyecto nuevo y vamos a agregar un modulo "mWhatsApp".
Código: vb.net
  1. Module mWhatsApp
  2.     Dim WAPass As String
  3.     Const WANum As String = "5492236685519"
  4.     Dim wa As WhatsApp
  5.     Public Sub InitWA(ByVal NickName As String, Optional ByVal debug As Boolean = False)
  6.         WAPass = File.ReadAllText(My.Application.Info.DirectoryPath & "\WAPASS.txt")
  7.         wa = New WhatsApp(WANum, WAPass, NickName, debug)
  8.         AddHandler wa.OnLoginSuccess, AddressOf wa_OnLoginSuccess
  9.         AddHandler wa.OnLoginFailed, AddressOf wa_OnLoginFailed
  10.         AddHandler wa.OnGetMessage, AddressOf wa_OnGetMessage
  11.         AddHandler wa.OnGetMessageReceivedClient, AddressOf wa_OnGetMessageReceivedClient
  12.         AddHandler wa.OnGetMessageReceivedServer, AddressOf wa_OnGetMessageReceivedServer
  13.         AddHandler wa.OnNotificationPicture, AddressOf wa_OnNotificationPicture
  14.         AddHandler wa.OnGetPresence, AddressOf wa_OnGetPresence
  15.         AddHandler wa.OnGetGroupParticipants, AddressOf wa_OnGetGroupParticipants
  16.         AddHandler wa.OnGetLastSeen, AddressOf wa_OnGetLastSeen
  17.         AddHandler wa.OnGetTyping, AddressOf wa_OnGetTyping
  18.         AddHandler wa.OnGetPaused, AddressOf wa_OnGetPaused
  19.         AddHandler wa.OnGetMessageImage, AddressOf wa_OnGetMessageImage
  20.         AddHandler wa.OnGetMessageAudio, AddressOf wa_OnGetMessageAudio
  21.         AddHandler wa.OnGetMessageVideo, AddressOf wa_OnGetMessageVideo
  22.         AddHandler wa.OnGetMessageLocation, AddressOf wa_OnGetMessageLocation
  23.         AddHandler wa.OnGetMessageVcard, AddressOf wa_OnGetMessageVcard
  24.         AddHandler wa.OnGetPhoto, AddressOf wa_OnGetPhoto
  25.         AddHandler wa.OnGetPhotoPreview, AddressOf wa_OnGetPhotoPreview
  26.         AddHandler wa.OnGetGroups, AddressOf wa_OnGetGroups
  27.         AddHandler wa.OnGetSyncResult, AddressOf wa_OnGetSyncResult
  28.         AddHandler wa.OnGetStatus, AddressOf wa_OnGetStatus
  29.         AddHandler wa.OnGetPrivacySettings, AddressOf wa_OnGetPrivacySettings
  30.         AddHandler WhatsAppApi.Helper.DebugAdapter.Instance.OnPrintDebug, AddressOf Instance_OnPrintDebug
  31.         wa.Connect()
  32.         Dim datFile As String = getDatFileName(WANum)
  33.         Dim nextChallenge() As Byte
  34.         If (File.Exists(datFile)) Then
  35.             Dim foo As String = File.ReadAllText(datFile)
  36.             nextChallenge = Convert.FromBase64String(foo)
  37.         End If
  38.         wa.Login(nextChallenge)
  39.         ProcessChat(wa)
  40.     End Sub
  41.     Public Function SendWA(ByVal MSG As String, Num As String) As Boolean
  42.         Dim usrMan As New WhatsUserManager()
  43.         Dim tmpUser = usrMan.CreateUser(Num, "User")
  44.         wa.SendMessage(Num, MSG)
  45.  
  46.  
  47.         Return True
  48.     End Function
  49.     Public Sub Instance_OnPrintDebug(value As Object)
  50.         Debug.Print(value)
  51.     End Sub
  52.     Public Sub wa_OnGetPrivacySettings(settings As Dictionary(Of WhatsApp.VisibilityCategory, WhatsApp.VisibilitySetting))
  53.  
  54.     End Sub
  55.     Public Sub wa_OnGetStatus(form As String, type As String, name As String, status As String)
  56.  
  57.     End Sub
  58.     Public Function getDatFileName(pn As String) As String
  59.         Dim filename As String = String.Format("{0}.next.dat", pn)
  60.         Return Path.Combine(Directory.GetCurrentDirectory(), filename)
  61.     End Function
  62.     Public Sub wa_OnGetSyncResult(index As Integer, sid As String, existingUsers As Dictionary(Of String, String), failedNumbers As String())
  63.  
  64.     End Sub
  65.     Public Sub wa_OnGetGroups(groups As WaGroupInfo())
  66.  
  67.     End Sub
  68.     Public Sub wa_OnGetPhotoPreview(from As String, id As String, data() As Byte)
  69.         File.WriteAllBytes(String.Format("preview_{0}.jpg", from), data)
  70.     End Sub
  71.     Public Sub wa_OnGetPhoto(from As String, id As String, data() As Byte)
  72.         File.WriteAllBytes(String.Format("{0}.jpg", from), Data)
  73.     End Sub
  74.     Public Sub wa_OnGetMessageVcard(from As String, id As String, name As String, data() As Byte)
  75.         File.WriteAllBytes(String.Format("{0}.vcf", name), Data)
  76.     End Sub
  77.     Public Sub wa_OnGetMessageLocation(from As String, id As String, lon As Double, lat As Double, url As String, name As String, preview() As Byte)
  78.         File.WriteAllBytes(String.Format("{0}{1end sub.jpg", lat, lon), preview)
  79.     End Sub
  80.     Public Sub wa_OnGetMessageVideo(from As String, id As String, filename As String, fileSize As Integer, url As String, preview() As Byte)
  81.         OnGetMedia(filename, url, preview)
  82.     End Sub
  83.     Public Sub OnGetMedia(file As String, url As String, data() As Byte)
  84.         My.Computer.FileSystem.WriteAllBytes(String.Format("preview_{0}.jpg", file), data, False)
  85.         Dim WA_WC As New WebClient
  86.         WA_WC.DownloadFileAsync(New Uri(url), file, 0)
  87.     End Sub
  88.     Public Sub wa_OnGetMessageAudio(from As String, id As String, filename As String, filesize As Integer, url As String, preview() As Byte)
  89.         OnGetMedia(filename, url, preview)
  90.     End Sub
  91.     Public Sub wa_OnGetMessageImage(from As String, id As String, filename As String, size As Integer, url As String, preview() As Byte)
  92.         OnGetMedia(filename, url, preview)
  93.     End Sub
  94.     Public Sub wa_OnGetPaused(from As String)
  95.  
  96.     End Sub
  97.     Public Sub wa_OnGetTyping(from As String)
  98.  
  99.     End Sub
  100.     Public Sub wa_OnGetLastSeen(from As String, lastseen As DateTime)
  101.  
  102.     End Sub
  103.     Public Sub wa_OnGetMessageReceivedServer(from As String, id As String)
  104.  
  105.     End Sub
  106.     Public Sub wa_OnGetMessageReceivedClient(from As String, id As String)
  107.  
  108.     End Sub
  109.     Public Sub wa_OnGetGroupParticipants(gjid As String, jids() As String)
  110.  
  111.     End Sub
  112.     Public Sub wa_OnGetPresence(from As String, type As String)
  113.  
  114.     End Sub
  115.     Public Sub wa_OnNotificationPicture(type As String, jid As String, id As String)
  116.  
  117.     End Sub
  118.     Public Sub wa_OnGetMessage(node As ProtocolTreeNode, from As String, id As String, name As String, message As String, receipt_sent As Boolean)
  119.         Dim Number As String = Split(from, "@")(0)
  120.  
  121.     End Sub
  122.     Private Sub wa_OnLoginFailed(data As String)
  123.         End
  124.     End Sub
  125.     Private Sub wa_OnLoginSuccess(phoneNumber As String, data() As Byte)
  126.         ' next password
  127.         Dim sdata As String = Convert.ToBase64String(data)
  128.         My.Computer.FileSystem.WriteAllText(getDatFileName(WANum), sdata, False)
  129.     End Sub
  130.     Private Sub ProcessChat(wa As WhatsApp)
  131.         Dim thRecv = New Thread(AddressOf ProcessChatT) : thRecv.IsBackground = True
  132.         thRecv.Start()
  133.     End Sub
  134.     Sub ProcessChatT(t)
  135.         Try
  136.             While wa IsNot Nothing
  137.                 wa.PollMessages()
  138.                 Thread.Sleep(100)
  139.                 Continue While
  140.             End While
  141.         Catch generatedExceptionName As ThreadAbortException
  142.         End Try
  143.  
  144.     End Sub
  145. End Module

Una vez agregado este codigo vamos a Agregar codigo al form principal para terminar con este ejemplito. (Mi from se llama Principal, ojo)
Código: vb.net
  1.     Private Sub Principal_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  2.         InitWA("Tutorial By 79137913")
  3.         Call SendWA("Prueba 1", "ACAPONEELNUMEROALQUEQUIERASMANDARELMENSAJE")
  4.     End Sub

En InitWA pones el Nick que quieras y en SendWa pones el mensaje seguido del numero al que quieras enviar un mensaje

Nota: para que no sea spam ambas personas deben estar en sus respectivas listas de contactos, por ende agrega al sistema a tu lista de contactos antes de enviar mensajes para que no se bloquee el usuario.

1 comentarios:

Write comentarios
Unknown
AUTHOR
4 de enero de 2016, 17:38 delete

tengo un problema en estas lineas de codigo
Dim datFile As String = getDatFileName(WANum)
Dim nextChallenge() As Byte
If (File.Exists(datFile)) Then
Dim foo As String = File.ReadAllText(datFile)
nextChallenge = Convert.FromBase64String(foo)
End If
el datfile desde donde lo obtengo??

Reply
avatar