Java ile WhatsApp Botu Geliştirme: Yeni Başlayanlar için Tam Kılavuz
- Whapi.Cloud sağlayıcısı ile WhatsApp API’yi bağlama;
- Gelen mesajları işlemek için webhook’ları yapılandırma;
- Metin ve medya mesajları gönderme;
- Grupları ve mesajlaşma uygulamasının diğer özelliklerini yönetme;
Java ile WhatsApp Botu Geliştirmeye Hazırlık
1. Gerekli araçları yükleyin
2. Çalışma ortamını ayarlayın
mvn archetype:generate -DgroupId=com.example.whatsappbot -DartifactId=whatsapp-bot -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
3. Kod düzenleyicinizi hazırlayın
4. API Token'ını alın
Token alma ve WhatsApp numarasını bağlama
1. Whapi.Cloud'a kayıt olun
2. WhatsApp numaranızı bağlama
- 2) Numara bağlama adımında bir QR kodu göreceksiniz;
- 3) Telefonunuzda WhatsApp → Ayarlar → Bağlı Cihazlar → Cihaz Bağla yolunu takip edin;
- 4) WhatsApp üzerinden sağlanan QR kodunu taratın;
3. API token'ını alma
API ile Çalışma Araçları
- Geliştirici Merkezi: API uç noktalarına yönelik örnek kod parçaları almanıza olanak tanıyan belgeler ve örneklerle dolu özelleştirilmiş bir platform.
- Postman Koleksiyonu: API'yi Postman aracılığıyla test etmek için hazır istekler.
- Swagger Dosyası: Tüm API yöntemlerinin ayrıntılı bir açıklaması ve kanal sayfasında doğrudan test etme imkanı.
Webhook Nedir ve Nasıl Kurulur?
Webhook Nedir?
- Anlık bildirimler. Tüm olaylar neredeyse gerçek zamanlı olarak işlenir.
- Yüksek bant genişliği. Bildirim alma hızı yalnızca sunucunuzun performansı ile sınırlıdır.
- Esneklik. Sadece ihtiyacınız olan olayları alabilirsiniz, örneğin: Özel mesajlar; Grup mesajları; Mesaj durum değişiklikleri; Grup üyeleri değişiklikleri; Cevapsız çağrı bildirimleri; Kanal durumları ve daha fazlası.
Webhook URL'si Nasıl ve Nereden Alınır?
Kanalda Webhook Kurulumu
- Kanal ayarlarına gidin. Kanal sayfasında sağ üst köşedeki ayarlar düğmesine tıklayın.
- Webhook'u yapılandırın. Webhook bölümünde URL'nizi önceden seçilmiş ayarlarla girin. Gerekirse, farklı olaylar için birden fazla webhook ayarlayabilirsiniz. Ayrıca bu ayarları API aracılığıyla değiştirebilirsiniz.
- Değişiklikleri kaydedin. Bundan sonra WhatsApp'taki tüm olaylarla ilgili bildirimler, belirttiğiniz sunucuya gönderilecektir.
Java ile WhatsApp Botunun Temel Yapısını Oluşturma
1. Ortam değişkenlerini ayarlama
- Windows - Komut istemcisini (cmd) açın ve şu komutu çalıştırın: set WHAPI_TOKEN=XXXXXXXXX;
2. Maven ile projeyi derleme
3. Botu çalıştırma
Bu yöntem, token'ı kalıcı bir çevresel değişken olarak eklediyseniz kullanışlıdır;
- 2) Seçenek 2: Token'ı komut satırında iletme. Çevresel değişken kullanmıyorsanız, token'ı uygulamayı başlatırken doğrudan iletebilirsiniz: java -DWHAPI_TOKEN=XXXXXXXXX -jar target/whatsapp-bot-1.0.jar.
Bu seçenek, test çalıştırmaları veya token'ı çevresel değişkenlerde saklamak istemediğiniz durumlar için faydalıdır;
API üzerinden metin mesajı gönderme örneği
// Import necessary libraries
import okhttp3.*; // OkHttp library for HTTP requests
public class SendMessageExample {
public static void main(String[] args) throws Exception {
// Step 1: Create an instance of OkHttpClient to send HTTP requests
OkHttpClient client = new OkHttpClient();
// Step 2: Define the media type for the request body (JSON in this case)
MediaType mediaType = MediaType.parse("application/json");
// Step 3: Create the JSON payload with the recipient's phone number and the message content
/*
* "to" - the recipient's WhatsApp number in international format (e.g., 919984351847)
* "body" - the text message you want to send
*/
RequestBody body = RequestBody.create(mediaType,
"{\"to\":\"919984351847\",\"body\":\"Hello, world!\"}");
// Step 4: Build the HTTP POST request
Request request = new Request.Builder()
.url("https://gate.whapi.cloud/messages/text") // API endpoint for sending text messages
.post(body) // Attach the JSON payload in the request body
.addHeader("accept", "application/json") // Accept JSON responses
.addHeader("content-type", "application/json") // Specify JSON content type
.addHeader("authorization", "Bearer YOUR_TOKEN") // Include your API token for authentication
.build();
// Step 5: Execute the request and receive the response
Response response = client.newCall(request).execute();
// Step 6: Print the response from the API to see the result
/*
* A successful response typically returns a JSON object with message details.
* Use this information to confirm that the message was sent.
*/
System.out.println(response.body().string());
}
}
* "body" — Alıcıya gönderilecek mesajın metni;
* YOUR_TOKEN — Bu değeri, Whapi.Cloud Dashboard'dan aldığınız API token'ınızla değiştirin;
Java ile webhook üzerinden gelen mesajları işleme
public void processMessages(List messages) {
try {
// Going through the list of all incoming messages
for (MessagePayload message : messages) {
// Ignore messages sent by the bot itself
if (message.isFromMe())
continue;
// Get chatId - identifier of the chat from which the message came
String chatId = message.getChatId();
String response;
// Handle text messages only
if (message.getType().equals("text")) {
// Retrieve the message body and convert to lower case for simplified processing
String body = ((String) message.getText().get("body")).toLowerCase();
switch (body) {
// Responding to “help” or “command” commands
case "help", "command" -> {
TextMessage txtMessage =
TextMessage.builder()
.to(chatId)
.body(responseMap.get(body)) // The message is taken from the prepared responseMap
.build();
response = postJson(txtMessage, "messages/text");
}
// Обработка мультимедиа-запросов: "video", "image", "document"
case "video", "image", "document" -> {
try (InputStream stream = getFile(body)) {
// Create the body of the request to send the file
RequestBody fileBody = RequestBody.create(
MediaType.parse(MediaTypeFactory.getMediaType(fileMap.get(body)).toString()),
stream.readAllBytes()
);
// Build a multipart request to send a media file
MultipartBody multipartBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("to", chatId) // Адресат
.addFormDataPart("media", fileMap.get(body), fileBody) // Сам файл
.addFormDataPart("caption", responseMap.get(body)) // Описание к медиа
.build();
response = postMultipart(multipartBody, "messages/" + body);
}
}
// Response to request to send contact card “vcard”
case "vcard" -> {
try (InputStream stream = getFile(body)) {
ContactMessage contactMessage =
ContactMessage.builder()
.name("Whapi test")
.to(chatId)
.vcard(new String(stream.readAllBytes())) // vCard file in text form
.build();
response = postJson(contactMessage, "messages/contact");
}
}
// Handling unknown commands: send default response
default -> {
TextMessage defaultMessage =
TextMessage.builder()
.to(chatId)
.body(responseMap.get("unknown"))
.build();
response = postJson(defaultMessage, "messages/text");
}
}
// Logging a successful response from the API
log.info("Response received [{}]", response);
} else {
// Logging message types that are not yet processed
log.warn("{} type not handled", message.getType());
}
}
} catch (Exception e) {
// Error handling during message processing
log.error("Could not process the message " + e.getMessage());
}
}
2) Metin komutlarını işleme: help ve command önceden hazırlanmış yanıtları gönderir. video, image, document ve vcard medya dosyalarının gönderim isteklerini işler. Bilinmeyen komutlar varsayılan yanıtla işlenir;
3) Günlük kaydı: Gelen mesajlar ve API yanıtları günlüğe kaydedilir;
4) Hatalar: Mesaj alırken hataların oluşmasını önlemek için istisnalar işlenir;
Whapi.Cloud ile entegrasyon için gelişmiş özellikler
- Mesaj gönderme: Metin mesajları, resimler, belgeler, videolar, konum, kişiler ve çıkartmalar gönderin;
- Dinamik etkileşim: Mesajlara tepki (emoji) ekleyin, alıntılayın, okundu olarak işaretleyin ve "yazıyor..." durumunu ayarlayın;
- Grupları yönetme: Otomatik olarak gruplar oluşturun ve silin, katılımcı ekleyin veya çıkarın, yöneticiler atayın ve grup ayarlarını değiştirin;
- Topluluklarla çalışma: Yapılandırılmış grup iletişimi için WhatsApp topluluklarını ayarlayın ve yönetin;
- Durum (hikaye) gönderme: Belirli veya tüm numaralara metin veya medya durumları oluşturun ve gönderin;
- Kanalları yönetme: Kanalınıza metin ve medya duyuruları gönderin, yöneticiler atayın, diğer kanallardan mesajlar alın;
- Gelişmiş işlevler: Sohbetleri sabitleyin, kullanıcıları engelleyin, anketler ve ürünler gönderin, ayrıca gruplar ve katılımcılar hakkında gerçek zamanlı veri alın;
Java ile WhatsApp Grubu Oluşturma
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"participants\":[\"919984351847\",\"919984351848\",\"919984351849\"],\"subject\":\"Group Subject 99\"}");
Request request = new Request.Builder()
.url("https://gate.whapi.cloud/groups")
.post(body)
.addHeader("accept", "application/json")
.addHeader("content-type", "application/json")
.addHeader("authorization", "Bearer YOUR_TOKEN")
.build();
Response response = client.newCall(request).execute();
Sorun Giderme
Bot Gelen Mesajlara Yanıt Vermiyor
- Botun çalıştırıldığı numaraya, başka bir telefondan mesaj gönderdiğinizden emin olun. Bot, aynı numaradan gönderilen mesajlara yanıt veremez.
- Eğer bot diğer numaralardan gelen mesajlara yanıt vermiyorsa, web kancalarının çalışıp çalışmadığını kontrol edin. Örneğin, Webhook.site gibi web kancası simülasyon servislerini kullanarak, geri çağırma isteklerinin hangi yoldan geldiğini doğrulayın. Daha sonra, yolun yapılandırmanızda belirttiğiniz yola uyup uymadığını kontrol edin. Ayrıca, sunucunuzun 200Ok yanıtı verdiğinden de emin olun.
Bot Durmaksızın Mesaj Gönderiyor
Bot Bazı Sohbetlerde Çalışıyor, Diğerlerinde Çalışmıyor
Dağıtım ve Sunucuları Kullanma
Firebase
- Firebase Console'da bir proje oluşturun;
- talimatları takip ederek Firebase CLI yükleyin;
- Proje dizininizde firebase init komutu ile Firebase'i başlatın;
- Botunuzu firebase deploy --only functions komutu kullanarak dağıtın.
AWS (Amazon Web Services)
- AWS Yönetim Konsolu'na kaydolun veya giriş yapın;
- AWS konsolu üzerinden API Gateway tetikleyici olarak seçilerek yeni bir Lambda fonksiyonu oluşturun;
- Botunuzun kodunu Lambda fonksiyonuna yükleyin;
- Botunuzun dış dünya ile etkileşimde bulunması için API Gateway'i yapılandırın.
Heroku
- Heroku'da bir hesap oluşturun;
- Heroku CLI yükleyin ve sisteme giriş yapın;
- Konsol üzerinden veya heroku create komutunu kullanarak Heroku'da yeni bir uygulama oluşturun;
- Git reposunu Heroku ile ilişkilendirin ve git push heroku master komutları ile dağıtım yapın;
- Heroku tarafından sağlanan web kancası URL'sini ayarlayın.