Məqalələr

Java`da WhatsApp APİ ilə mesaj göndərmək

Java`da WhatsApp API
Written by Mushfiq Mammadov

Araşdırmalardan belə başa düşdüm ki, yazılmış ən yaxşı WhatsApp API PHP`də yazılmış bu api`dir:
https://github.com/venomous0x/WhatsAPI

Bu api`nin java`da yazılmış versiyasını tapdım – https://github.com/sumppen/WhatsApi4J və bütün işlərə onun üzərindən davam etdim. Bu api maven`da yazılmışdı və demək olar ki, tamamilə console app idi, ancaq cmd ilə test etmək mümkün idi. Bunu rahat şəkildə başa düşmək və gələcəkdə jar`ını alıb proyektlərinizin içində rahat istifadə etmək mümkün olsun deyə üzərində bəzi redaktələr edib adi java application`a çevirmişəm. Proqramın son dəyişilmiş halını bu linkə daxil olmaqla; əgər github account`unuz varsa  repository`ni qeyd olunan linkdən fork edərək github proqramı vasitəsilə istədiyiniz folder`ə clone edib rahatlıqla netbeans`də açıb istifadə edə bilərsiniz. Əgər account`unuz yoxdursa, “Download ZIP” butonuna tıklamaqla proqramı komputerinizə yükləyə bilərsiniz. İstifadə olunan jar faylarının hamısı proyekt papkasının içindəki dist\lib altpapkasında mövcuddur. Əgər proyekti clean-build edəcəksinizsə, əvvəlcədən bu jar fayların kopyasını alıb kompyuterinizdəki başqa bir papkada saxlamağınız lazımdır.

İndi cəmi 3 addıma rahat mesaj göndərə biləcəksiniz.

Ancaq aşağıda yazılanları etməzdən əvvəl ən sonda yazılan “Qeyd”i oxumağınız şiddətlə tövsiyə olunur, əks halda nömrəniz WhatsApp tərəfindən servisdənkənar edilə bilər.

Addımlara keçmədən öncə bilməli və daxil etməli olduğunuz parametrlər var. net.sumppen.whatsapi4j.example paketinin ExampleApplication class`ında aşağıdakı dəyişənlərin qiymətləri öncədən təyin edilməlidir.

static String username = "YourPhoneNumber";  // Example: "99470xxx1114"
static String password = "";                 // Generate by WhatsApp, example: "OcsRdOE+ziJdNRljnsOU5Ee6W5c="
static String identity = "IMEI";             // example: "864877021261702"  p.s. type *#06# on your phone screen
static String nickname = "nickname";         // example: "MushfiqMammadov"

usernamebura qeydiyyatdan keçmək istədiyiniz telefon nömrənizi qeyd etməlisiniz. Nömrə ölkə kodu da daxil edilməklə bütöv formada yazılmalıdır, example`də göstərildiyi kimi.
passwordbura WhatsApp`ın özü tərəfindən generate olunmuş password yazılmalıdır. Buranı birinci və ikinci addımda mütləq boş qoymalısınız, əgər proses uğurla davam etsə bu ancaq sizə 3-cü addımda lazım olacaq.
identitybura telefonunuzun IMEI kodu yazılmalıdır. IMEI kodunu öyrənmək üçün telefonun ekranında *#06# yazmaq kifayətdir.
nicknameAdından da görüldüyü kimi nickname yazılır.

Yuxarıda qeyd edilən dəyişənlərə müvafiq dəyərlər mənimsədildikdən sonra artıq addımlara keçə bilərik. Addımlarda bu proseslər icra ediləcək:

  1. request
  2. register
  3. send

1-ci addım:
Proqramı run edirsiz və Netbeans`in konsolunda $ işarəsindən sonra “request”yazırsız və sendRequest metodu işə düşür. Sizin başlanğıcda təyin etdiyiniz parametrlər WhatsApp tərəfindən yoxlanılır və sizə bu parametrlərə uyğun response qaytarılır. Əgər proses uğurla başa çatarsa konsolda aşağıdakı məzmunda yazı print olunacaq və proqram sonlanacaq:

Event code_request: phoneNumber=99470xxx1114
Registration sent: {
 “length”: 6,
 “method”: “sms”,
 “retry_after”: 1805,
 “status”: “sent”
}
$ Done! Logging out

Əgər status=send olarsa, bu o deməkdir ki, artıq qeyd etdiyiniz telefon nömrəsinə WhatsApp tərəfindən 6 rəqəmli kod göndəriləcək və sms`i qəbul etdikdən sonra ikinci addıma keçə bilərsiniz.

request-code-whatsapp

Əgər proses uğurla başa çatmazsa, aşağıdakı məzmunda yazı görəcəksiniz:

Event code_request_failed: phoneNumber=99470xxx1114
Caught exception: There was a problem trying to request the code. Status=fail
Event disconnect: phoneNumber=99470xxx1114

Status=fail olacaq və proqram sonlacaq (Səbəbləri müxtəlif ola bilər).

2-ci addım:
Proqramı run edirsiz və Netbeans`in konsolunda $ işarəsindən sonra “register”yazırsız və sendRegister metodu işə düşür. Konsolda “Code: ” yazısı görəcəksiniz və sizdən kodun daxil edilməsini istəyəcək. Telefonunuza sms`lə gələn həmin 6 rəqəmli kodu (defissiz, ancaq rəqəmlər olmaqla) daxil edəcəksiniz. Əgər proses uğurla başa çatarsa konsolda aşağıdakı məzmunda yazı print olunacaq və proqram sonlanacaq:

$ register
Code: 703082
Event code_register: phoneNumber=99470xxx1114
{
 “cost”: “0.99”,
 “currency”: “USD”,
 “expiration”: 1456419345,
 “kind”: “free”,
 “login”: “99470xxx1114”,
 “price”: “US$0.99”,
 “price_expiration”: 1427558137,
 “pw”: “ieG5MsrFL5Gjo3a4VOvfG644N/U=”,
 “status”: “ok”,
 “type”: “new”
}
$ Done! Logging out

Burada json formatında qayıdan response`da “pw” dəyişəninin dəyəri – “ieG5MsrFL5Gjo3a4VOvfG644N/U=” 3-cü addımda sizə lazım olacaq. Bu dəyişən WhatsApp tərəfindən xüsusi alqoritm vasitəsilə generasiya olunmuş açar sözünü göstərir.

3-cü addım:
Əgər diqqət yetirdinizsə ilkin parametrlərin dəyərlərini mənimsədərkən password dəyişənin dəyərini boş olaraq təyin etmişdik və qeyd etmişdik ki, bu dəyişənin dəyəri 3-cü addımda mənimsədiləcək. Artıq 2-ci addımda əldə etdiyimiz “pw” dəyişəninin dəyərini password`a mənimsədirik:

static String password = "ieG5MsrFL5Gjo3a4VOvfG644N/U=";

Bundan sonra proqram run edilir. Bu dəfə password`un dəyəri boşluq olmadığından əvvəlki addımlardan fərqli olaraq loginWithPassword metodu işə düşür və sistemə qoşulmağa cəhd edilir. Əgər cəhd uğurlu alınarsa, konsolda “loginstatus=CONNECTED_STATUS” yazısını görəcəksiniz və $ işarəsindən sonra “send” yazaraq sendMessage metodunu başlatmış olacaqsınız. sendMessage metodu işə düşər-düşməz konsolda sizdən iki parametr daxil etməyinizi istəyəcək:

  1. To:                 // mesaj göndərmək istədiyiniz nömrə, nümunə: 99470xxx8199
  2. Message:    // mesajın mətni

Bundan sonra artıq proqramın axışını konsoldan izləyə bilərsiniz. Mesajlaşma mexanizmi socket`lə işlədiyindən mütəmadi olaraq WhatsApp`ın serverlərinə qoşulur və operativ olaraq yeni məlumatlar konsolda öz əksini tapır; sizin yazdığınız mesajın server tərəfindən qəbul edilməsi (WhatsApp Messenger`də gördüyünüz bir xətt), mesajı göndərdiyiniz nömrənin onu qəbul etməsi (2 xətt), mesaj göndərdiyiniz nömrənin sizə cavab yazması (typing) və s.

whatsapp-api2

Bu proqramı koddan anlayışı olmayan adi istifadəçilər də istifadə edə bilsin deyə əlavə servis və client app də yazmışdım, hansı ki, burada arxa fonda baş verən bütün proseslər avtomatlaşdırılmış və görsəlləşdirilmişdi, istifadəçiyə ancaq inputa parametrləri daxil edib butona klikləmək qalırdı. Ancaq ikinci nömrəm də WhatsApp tərəfindən servisdənkənar edildiyinə görə həvəsdən düşdüm və əlavə başqa görüləsi işlərim olduğundan prosesi yarımçıq saxladım, ola bilsin gələcəkdə yenidən bu məsələyə bir də qayıdım.

Qeyd: Hazırda telefonunuzda aktiv WhatsApp istifadə etdiyiniz nömrə ilə bu proqram vasitəsilə register ola bilməzsiniz. WhatsApp`ın qaydalarına görə bir nömrə eyni vaxtda ancaq bir qurğuda istifadə oluna bilər, bu proqram vasitəsilə register olmaq istədikdə bu cəhdi artıq əlavə qurğu kimi görür. Əgər bunu etməyə cəhd etsəniz və WhatsApp bu konflikti qeydə alsa, nömrəniz WhatsApp tərəfindən müəyyən müddətlik (bir neçə dəqiqə və ya saat) blok ediləcək. İkinci bir məsələ, yəqin ki, çoxlarınız da mənim kimi eyni vaxtda bir neçə nömrəyə mesaj göndərmək istəyəcək)) Bunu qətiyyən məsləhət görmürəm!  WhatsApp kontaktımda olan 46 nömrə seçib, həmin nömrələri massivə yığıb dövrə salaraq eyni vaxtda mesaj göndərmişdim. 11 nömrəyə mesaj gedib çatdı və sonra nömrəm avtomatik olaraq logout oldu. Ondan sonra dəfələrlə login olmağa cəhd etdim, xeyri olmadı. Yenidən request göndərdim, alınmadı. Telefonumda həmin nömrə ilə WhatsApp proqramının işləyib işləməməsini yoxlamaq istədikdə isə bu bildirişlə rastlaşdım:

whatsapp-block1

Nömrə birdəfəlik olaraq servisdənkənar edilib. Sonradan öyrəndim ki, toplu şəkildə mesaj göndərmək EULA`ya (WhatsApp Legal) ziddir. Bu APİ`ni yazanlar da toplu şəkildə mesaj göndərməyi məsləhət görmürlər. Ona görə də bu məsələlərdə diqqətli olmaq lazımdı, əks halda nömrələriniz WhatsApp tərəfindən blok oluna bilər. Əgər belə APİ `lərdən istifadə etmək istəyirsinizsə, çalışın aktiv istifadə etdiyiniz nömrə ilə register olmayasınız.

26.03.2015

About the author

Mushfiq Mammadov

Leave a Comment


The reCAPTCHA verification period has expired. Please reload the page.

 

This site uses Akismet to reduce spam. Learn how your comment data is processed.