Golang ও Spring Boot (Java) ব্যবহার করে SMS Gateway REST API ইন্টিগ্রেশন গাইড

Golang ও Spring Boot (Java) ব্যবহার করে SMS Gateway REST API ইন্টিগ্রেশন গাইড

এন্টারপ্রাইজ অ্যাপ্লিকেশনে হাই-থ্রুপুট এসএমএস সার্ভিস

ব্যাংকিং, ফিনটেক ও বড় স্কেলের ই-কমার্স সিস্টেমে প্রতি মিনিটে হাজার হাজার নোটিফিকেশন প্রসেস করতে ব্যাকএন্ডে Golang (Go) কিংবা Java Spring Boot বহুল ব্যবহৃত হয়। এ ধরনের সিস্টেমে নোটিফিকেশন সার্ভিসকে অবশ্যই নন-ব্লকিং, কনকারেন্ট এবং অত্যন্ত দ্রুতগতির হতে হয়।

১. Golang (Go) দিয়ে হাই-স্পিড এসএমএস সেন্ডার ইমপ্লিমেন্টেশন

Go-এর গোরুটিন (Goroutines) ও চ্যানেল ব্যবহার করে প্রতি সেকেন্ডে শত শত এসএমএস সহজে কিউ করে পাঠানো যায়:

package main

import (
	"fmt"
	"io"
	"net/http"
	"net/url"
	"time"
)

type SmsClient struct {
	ApiKey   string
	SenderId string
	Client   *http.Client
}

func NewSmsClient(apiKey, senderId string) *SmsClient {
	return &SmsClient{
		ApiKey:   apiKey,
		SenderId: senderId,
		Client: &http.Client{
			Timeout: 10 * time.Second,
		},
	}
}

func (s *SmsClient) SendSMS(phone, message string) (string, error) {
	endpoint := "https://smsbd.asia/api/send-sms.php"

	data := url.Values{}
	data.Set("api_key", s.ApiKey)
	data.Set("sender_id", s.SenderId)
	data.Set("phone", phone)
	data.Set("message", message)

	resp, err := s.Client.PostForm(endpoint, data)
	if err != nil {
		return "", err
	}
	defer resp.Body.Close()

	body, err := io.ReadAll(resp.Body)
	if err != nil {
		return "", err
	}
	return string(body), nil
}

func main() {
	client := NewSmsClient("YOUR_SMSBD_API_KEY", "YOUR_SENDER_ID")
	resp, err := client.SendSMS("01712345678", "Hello from Go Backend via SMSBD.Asia!")
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	fmt.Println("SMSBD Response:", resp)
}

২. Spring Boot (Java) এ WebClient বা RestTemplate দিয়ে ইন্টিগ্রেশন

স্প্রিং বুট অ্যাপ্লিকেশনে ডিপেন্ডেন্সি ইনজেকশনের মাধ্যমে একটি ডেডিকেটেড SmsService তৈরি করা যায়:

package com.example.service;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.*;
import org.springframework.stereotype.Service;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;

@Service
public class SmsService {

    @Value("${smsbd.api.key}")
    private String apiKey;

    @Value("${smsbd.sender.id}")
    private String senderId;

    private final RestTemplate restTemplate = new RestTemplate();
    private final String API_URL = "https://smsbd.asia/api/send-sms.php";

    public boolean sendSms(String phone, String message) {
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);

        MultiValueMap<String, String> map = new LinkedMultiValueMap<>();
        map.add("api_key", apiKey);
        map.add("sender_id", senderId);
        map.add("phone", phone);
        map.add("message", message);

        HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(map, headers);
        ResponseEntity<String> response = restTemplate.postForEntity(API_URL, request, String.class);

        return response.getStatusCode() == HttpStatus.OK && response.getBody() != null && response.getBody().contains("success");
    }
}

প্রোডাকশন অপ্টিমাইজেশন টিপস:

  • কানেকশন পুলিং: এইচটিটিপি ক্লায়েন্টে Keep-Alive কানেকশন রিইউজ করুন যাতে প্রতিটি এসএমএসে নতুন করে TCP হ্যান্ডশেক করতে না হয়।
  • নন-ব্লকিং কিউ: এসএমএস প্রেরণের কাজ মূল রিকোয়েস্ট থ্রেড থেকে আলাদা করে RabbitMQ, Kafka বা ইন-মেমরি চ্যানেলে দিন।
  • অটোমেটিক রিট্রাই: নেটওয়ার্ক গ্লিচ হলে এক্সপোনেনশিয়াল ব্যাকঅফ সহ ৩ বার পর্যন্ত রিট্রাই লজিক রাখুন।
WhatsApp সাপোর্ট
হোম প্যাকেজ এআই রাইটার লগইন