FA-TOOLS — Header Component

آموزش ارسال SMS با پایتون — سرویس‌های ایرانی

💎 نقشه راه ارسال SMS با پایتون

آموزش ارسال SMS با پایتون — سرویس‌های ایرانی — تصویر 1

رفیق برنامه‌نویس، اینفوگرافیک زیر یه دید کلی از تمام مسیر ارسال SMS با پایتون و سرویس‌های ایرانی بهت میده:

1️⃣ انتخاب پنل SMS

(ایرانی) ثبت‌نام و دریافت API Key/Secret.

2️⃣ نصب پایتون و Requests

pip install requests برای ارتباط با API.

3️⃣ کدنویسی ارسال SMS

استفاده از متد POST و پارامترهای API.

4️⃣ مدیریت پاسخ و خطاها

چک کردن وضعیت HTTP و پیام‌های خطا.

5️⃣ نکات پیشرفته و امنیتی

ارسال انبوه، زمان‌بندی، حفاظت از API Key.

ببین رفیق، توی دنیای امروز که همه چی داره اتوماتیک میشه، نیاز به یه راه ساده و مطمئن برای ارتباط با کاربرها حسابی پررنگ شده. از احراز هویت دو مرحله‌ای بگیری تا اطلاع‌رسانی سفارش و کمپین‌های بازاریابی، پیامک هنوزم یکی از بهترین و سریع‌ترین کانال‌های ارتباطیه. اگه برنامه‌نویس پایتونی و دنبال یه راهکار تمیز برای ارسال SMS با سرویس‌های ایرانی هستی، جای درستی اومدی. قراره اینجا صفر تا صد این ماجرا رو با هم بریم جلو.
برای اینکه پروژه‌هات حسابی جون بگیرن و ابزارهای درست و حسابی دستت باشه، حتماً یه سری به فروشگاه ابزارهای برنامه‌نویسی ما بزن؛ کلی چیز خفن منتظرته که کارتو راه میندازه!

چرا اصلاً با پایتون SMS بفرستیم؟ 🧐

آموزش ارسال SMS با پایتون — سرویس‌های ایرانی — تصویر 2

پایتون با سادگی و قدرت مثال‌زدنیش، یه انتخاب فوق‌العاده برای اتوماسیون هر کاریه، از جمله ارسال پیامک. حالا چرا بهترین انتخابه؟

  • سادگی سینتکس: کد پایتون رو می‌شه مثل خوندن یه متن ساده فهمید. این یعنی سریع‌تر می‌نویسی و دیباگ می‌کنی.
  • کتابخانه‌های قدرتمند: با کتابخونه requests که یه پکیج شاهکاره، ارتباط با API هر سرویسی، مثل آب خوردنه. برای کارهای پیچیده‌تر هم کلی کتابخونه دیگه هست.
  • جامعه فعال و پشتیبانی: هر مشکلی که خوردی، یه سرچ کوچیک تو گوگل یا Stack Overflow حتماً بهت راه حل رو نشون میده.
  • قابلیت چندمنظوره بودن: چه بخوای یه اسکریپت ساده برای ارسال نوتیفیکیشن بنویسی، چه یه سیستم پیچیده CRM که با پنل پیامک همگام سازی بشه، پایتون حرف اول رو می‌زنه.

آشنایی با ارائه‌دهندگان پنل SMS ایرانی 🇮🇷

آموزش ارسال SMS با پایتون — سرویس‌های ایرانی — تصویر 3

قبل از اینکه بریم سراغ کدنویسی، باید یه پنل پیامک داشته باشی. خوشبختانه توی ایران چندین سرویس‌دهنده خوب و معتبر داریم که APIهای خوبی هم ارائه میدن. بعضی از معروف‌ترین‌ها مثل کاوه نگار، فراز اس‌ام‌اس و ملی پیامک، زیرساخت‌های خوبی برای توسعه‌دهنده‌ها دارن. کار همه اینا تقریباً یه شکله:

  • ثبت‌نام و خرید پنل: اول باید تو سایتشون ثبت‌نام کنی و یه پنل پیامک بخری.
  • دریافت API Key/Secret: بعد از فعال‌سازی پنل، یه بخش برای توسعه‌دهنده‌ها دارن که از اونجا می‌تونی کلید API و Secret Key یا توکن دسترسی رو دریافت کنی. اینا مثل رمز عبور اختصاصی پروژه‌ی تو هستن.
  • شماره فرستنده (Sender Number): برای ارسال پیامک، باید یه شماره اختصاصی (یا مشترک) داشته باشی که پیامک‌ها از طرف اون ارسال بشن.

جدول مقایسه‌ای عمومی سرویس‌دهنده‌های SMS (نمونه)

ویژگی توضیح
دسترسی به API بیشتر سرویس‌ها API RESTful با مستندات خوب دارند.
قیمت پیامک بر اساس تعرفه‌های دولتی و حجم خرید متفاوت است.
شماره فرستنده امکان خرید شماره اختصاصی یا استفاده از شماره‌های عمومی.
پشتیبانی پشتیبانی تلفنی و آنلاین (تیکت).
قابلیت‌های پیشرفته ارسال انبوه، زمان‌بندی، گزارش‌گیری، دفترچه تلفن و …

پیش‌نیازهای شروع کار با پایتون برای ارسال SMS

قبل از اینکه کد بزنیم، باید مطمئن بشیم همه‌چی آماده‌ست:

  • پایتون نصب باشه: اگه نصب نیست، از سایت رسمی پایتون آخرین نسخه رو دانلود و نصب کن.
  • کتابخونه requests: این کتابخونه برای ارتباط با APIهای وب ضروریه. با این دستور نصبش کن:
    pip install requests

  • اکانت فعال پنل پیامک: حتماً توی یکی از پنل‌های ایرانی ثبت‌نام کرده باشی و اعتبار کافی هم داشته باشی.
  • API Key و Secret/Token: این کلیدها رو از پنلت بگیر و یه جای امن نگهشون دار. (توی کد واقعی، اینا رو نباید مستقیم بنویسی، از متغیرهای محیطی استفاده کن تا امن بمونن).
  • شماره فرستنده (Sender Number): شماره‌ای که پیامک‌ها از طرف اون ارسال میشن.

گام به گام: ارسال SMS با پایتون (نمونه کد جامع) 🚀

خب، رسیدیم به بخش هیجان‌انگیز ماجرا: کدنویسی! اینجا یه نمونه کد می‌نویسیم که بتونه پیامک بفرسته. من از ساختار کلی APIهای رایج ایرانی استفاده می‌کنم، ممکنه یه سری جزئیات کوچیک توی هر پنل فرق کنه که باید مستندات همون سرویس رو بخونی.

دریافت اطلاعات API از پنل (مثال عمومی)

وقتی توی پنلت ثبت‌نام می‌کنی و میری بخش توسعه‌دهندگان، معمولاً یه URL پایه برای ارسال پیامک بهت میدن (مثلاً api.example.com/v1/sms/send). پارامترهایی هم که باید بفرستی، عموماً اینا هستن:

  • api_key: کلید API اختصاصی تو.
  • api_secret یا token: رمز عبور یا توکن دسترسی.
  • receptor: شماره تلفن گیرنده (یا لیستی از شماره‌ها).
  • message: متن پیامک.
  • sender: شماره فرستنده پیامک (خطی که پیامک از اون ارسال میشه).

ساخت تابع ارسال SMS

بیا یه تابع پایتون بسازیم که این کارو برامون انجام بده. حواست باشه که YOUR_API_KEY و بقیه اطلاعات رو با مال خودت جایگزین کنی.


import requests
import os # برای مدیریت امن API Key

def send_sms(receptor, message):
    # این آدرس رو از مستندات پنل SMS خودت بگیر
    # مثلاً: "https://api.kavenegar.com/v1/{YOUR_API_KEY}/sms/send.json"
    # یا: "https://panel.farazsms.com/api/send.php"
    
    api_url = "https://api.your-sms-provider.com/v1/sms/send.json" # تغییر بده!
    
    # اطلاعات احراز هویت و فرستنده
    api_key = os.getenv("SMS_API_KEY", "YOUR_API_KEY_HERE") # بهتره از متغیر محیطی استفاده کنی
    sender_number = "YOUR_SENDER_NUMBER" # شماره فرستنده رو اینجا وارد کن

    # پارامترهایی که باید به API ارسال بشن
    payload = {
        "api_key": api_key,
        "receptor": receptor,
        "message": message,
        "sender": sender_number
    }

    try:
        # ارسال درخواست POST
        response = requests.post(api_url, data=payload)
        response.raise_for_status() # برای چک کردن خطاهای HTTP (4xx or 5xx)

        # تبدیل پاسخ به فرمت JSON و نمایش آن
        result = response.json()
        
        if result.get("return", {}).get("status") == 200: # این قسمت به ساختار پاسخ API بستگی داره
            print(f"✅ پیامک با موفقیت ارسال شد. کد وضعیت: {result.get('return', {}).get('status')}")
            print(f"شناسه پیامک: {result.get('entries', [])[0].get('messageid')}")
        else:
            print(f"❌ خطای ارسال پیامک: {result.get('return', {}).get('message')}")
            print(f"کد خطا: {result.get('return', {}).get('status')}")
            
        return result

    except requests.exceptions.HTTPError as err:
        print(f"HTTP Error: {err}")
        print(f"Response content: {err.response.text}")
        return None
    except requests.exceptions.ConnectionError as err:
        print(f"Error Connecting: {err}")
        return None
    except requests.exceptions.Timeout as err:
        print(f"Timeout Error: {err}")
        return None
    except requests.exceptions.RequestException as err:
        print(f"Oops: Something Else {err}")
        return None

# ----- استفاده از تابع -----
if __name__ == "__main__":
    # شماره تماص پشتیبانی
    # tel:09202232789
    
    # برای امنیت بیشتر، API Key را از متغیرهای محیطی بخوانید
    # os.environ["SMS_API_KEY"] = "YOUR_ACTUAL_API_KEY_FROM_ENVIRONMENT_VARIABLE"
    
    # یک مثال ساده برای ارسال پیامک
    target_number = "09123456789"  # شماره گیرنده
    sms_text = "سلام رفیق! پیامک تستی با پایتون ارسال شد. موفق باشی!"
    
    print(f"در حال ارسال پیامک به {target_number}...")
    response_data = send_sms(target_number, sms_text)
    
    # مثال برای ارسال پیامک به لیست گیرندگان (بستگی به API پنل شما دارد)
    # bulk_numbers = ["09121112233", "09354445566"]
    # bulk_message = "پیامک گروهی از طریق پایتون."
    # for num in bulk_numbers:
    #     print(f"در حال ارسال پیامک به {num}...")
    #     send_sms(num, bulk_message)

توی این کد، تابع send_sms رو ساختیم که دو تا پارامتر اصلی می‌گیره: شماره گیرنده (receptor) و متن پیام (message). آدرس API رو باید با آدرس پنل خودت جایگزین کنی. برای مشاهده اسنیپت‌های پایتون بیشتر و یادگیری نحوه مدیریت متغیرهای محیطی، حتماً سری به بخش کدهای آماده ما بزن.

مدیریت خطاهای احتمالی در کد

بخش try...except توی کد بالا خیلی مهمه. چرا؟ چون همیشه ممکنه اتفاقات غیرمنتظره‌ای بیفته:

  • خطاهای شبکه (ConnectionError, Timeout): اینترنت قطع بشه یا سرور پنل پیامک دیر جواب بده.
  • خطاهای HTTP (HTTPError): مثلاً کد API اشتباه باشه (401 Unauthorized) یا پارامترهای ناقص بفرستی (400 Bad Request). response.raise_for_status() اینا رو شناسایی می‌کنه.
  • پاسخ‌های ناموفق از API: حتی اگه درخواستت درست بره، ممکنه خود پنل پیامک بگه مشکلی هست (مثلاً اعتبار نداری یا شماره اشتباهه). بخش result.get("return", {}).get("status") برای همین کار طراحی شده.

ارسال SMS به صورت انبوه (Bulk SMS) 📩

اکثر پنل‌های پیامک ایرانی قابلیت ارسال انبوه رو هم دارن. یعنی می‌تونی یه پیام رو به چند تا شماره همزمان بفرستی. نحوه کارش معمولاً اینجوریه که به جای یه شماره، یه لیست از شماره‌ها رو توی پارامتر receptor به API میفرستی. مثلاً:


# ... (کدهای قبلی) ...

if __name__ == "__main__":
    bulk_numbers = ["09121112233", "09354445566", "09017778899"] # لیست شماره‌ها
    bulk_message = "سلام به همه رفقا! این یک پیامک گروهی آزمایشی است."
    
    for num in bulk_numbers:
        print(f"در حال ارسال پیامک به {num}...")
        response_data = send_sms(num, bulk_message)
        # می‌تونی اینجا یه تأخیر کوچیک با time.sleep(0.1) هم اضافه کنی که سرور فشار نیاد

البته بعضی APIها یه متد اختصاصی برای ارسال انبوه دارن که می‌تونی همه شماره‌ها رو توی یه درخواست بفرستی. حتماً مستندات پنل خودت رو برای این بخش چک کن.

ارسال SMS زمان‌بندی‌شده (Scheduled SMS) ⏰

تصور کن میخوای یه پیامک تبریک تولد رو دقیقاً توی روز تولد کاربر بفرستی یا یه یادآوری رو برای هفته دیگه تنظیم کنی. برای این کار دو تا رویکرد داریم:

  • استفاده از قابلیت پنل پیامک: اکثر پنل‌های ایرانی خودشون یه قابلیتی دارن که می‌تونی پیامک رو زمان‌بندی کنی. کافیه تاریخ و ساعت ارسال رو توی پارامترهای API (معمولاً senddate یا schedule) بفرستی. این بهترین روشه چون پنل خودش مدیریت ارسال رو بر عهده می‌گیره.
  • زمان‌بندی سمت کلاینت/سرور خودت: اگه پنلت این قابلیت رو نداره، می‌تونی از کتابخانه‌های پایتون مثل APScheduler یا Celery (برای کارهای سنگین‌تر) استفاده کنی. اینجوری یه سرویس روی سرور خودت پیامک‌ها رو توی زمان مشخصی با تابع send_sms ما ارسال می‌کنه.

    برای نصب APScheduler از دستور pip install APScheduler استفاده کن. این کتابخانه بهت کمک می‌کنه کارهات رو در پایتون زمان‌بندی کنی.

نکات امنیتی و بهترین شیوه‌ها 🔒

هیچ وقت امنیت رو دست کم نگیر! مخصوصاً وقتی با API Key سرویس‌های پولی کار می‌کنی.

  • نگهداری امن API Key: هرگز API Key رو مستقیم توی کد ننویس و اونو توی گیت‌هاب یا مخازن عمومی نذار. از متغیرهای محیطی (Environment Variables) یا فایل‌های .env استفاده کن.
  • اعتبارسنجی ورودی‌ها (Input Validation): شماره تلفن‌ها رو قبل از ارسال، چک کن که فرمت درستی داشته باشن. مثلاً ۱۱ رقم با ۰۹ شروع بشن. این کار جلوی خطاهای بیخودی و هدر رفتن اعتبار پنلت رو می‌گیره.
  • مدیریت نرخ (Rate Limiting): اگه توی یه زمان کوتاه تعداد زیادی پیامک بفرستی، ممکنه سرویس‌دهنده بلاکت کنه. برای این کار باید بین هر درخواست یه تأخیر کوچیک (مثلاً چند میلی‌ثانیه) بذاری یا از مکانیزم‌های صف (Queue) استفاده کنی.
  • لاگ‌برداری (Logging): تمام درخواست‌های ارسال پیامک و پاسخ‌هایی که از API می‌گیری رو لاگ کن. اینجوری اگه مشکلی پیش اومد، می‌دونی کجا دنبالش بگردی.
  • بررسی وضعیت اعتبار: همیشه قبل از ارسال حجم زیادی پیامک، وضعیت اعتبار پنلت رو چک کن تا وسط کار پیامک‌ها ارسال نشن.

عیب‌یابی سریع (Troubleshooting) 🛠️

بعضی وقتا ممکنه به مشکلاتی بربخوری. نگران نباش، اینا رایج‌ترین‌ها و راه‌حل‌هاشون هستن:

  • ❗️ مشکل: پیامک ارسال نمیشه و خطای 401 Unauthorized می‌ده.

    ✅ راه‌حل: این یعنی API Key یا Secret/Token شما اشتباهه یا منقضی شده. حتماً از پنلتون چک کنید و از درست بودنش مطمعن شید. همچنین بررسی کنید که دسترسی به IP شما روی پنل محدود نشده باشه.

  • ❗️ مشکل: پیامک ارسال نمیشه و خطای 400 Bad Request می‌ده.

    ✅ راه‌حل: یکی از پارامترهایی که می‌فرستی (مثل شماره گیرنده، متن پیام، شماره فرستنده) فرمت درستی نداره یا خالیه. مستندات API پنل رو بخون و مطمئن شو همه پارامترها مطابق انتظار هستن.

  • ❗️ مشکل: پیامک ارسال میشه ولی به دست گیرنده نمیرسه.

    ✅ راه‌حل: چند تا دلیل می‌تونه داشته باشه:

    • اعتبار پنل: شاید اعتبارت تموم شده باشه.
    • شماره گیرنده: شاید شماره اشتباه باشه یا گیرنده پیامک‌های تبلیغاتی رو مسدود کرده باشه (سرویس‌های ایرانی اغلب برای خطوط بلک‌لیست، پیام رو ارسال نمی‌کنن).
    • مشکل شبکه مخابراتی: گاهی اوقات ممکنه به خاطر مشکلات از سمت اپراتور باشه.
    • شماره فرستنده: مطمئن شو شماره فرستنده فعال و معتبره.

    از گزارشات پنل پیامکت وضعیت پیامک رو پیگیری کن.

  • ❗️ مشکل: Error Connecting یا Timeout.

    ✅ راه‌حل: این خطاها معمولاً به مشکل در اتصال به اینترنت یا کندی سرور API برمی‌گرده.

    • اتصال اینترنت خودت رو چک کن.
    • مطمئن شو آدرس API درسته.
    • ممکنه سرور پنل پیامک در اون لحظه شلوغ باشه. دوباره امتحان کن.
    • افزایش زمان timeout در درخواست requests می‌تونه کمک کنه.
  • ❗️ مشکل: پاسخ API نامفهومه یا JSON نیست.

    ✅ راه‌حل: این یعنی یا URL رو اشتباه زدی و به یه صفحه HTML رسیدی، یا API در حال حاضر مشکل داره و خروجی درستی نمیده. print(response.text) رو اضافه کن تا محتوای خام پاسخ رو ببینی و مشکل رو دقیق‌تر پیدا کنی.

امیدوارم این آموزش جامع و کاربردی کمکت کرده باشه که به راحتی با پایتون پیامک بفرستی. یادگیری اسنیپت‌های مختلف و آشنایی با تکنیک‌های CSS، JavaScript، HTML و حتی وردپرس می‌تونه بهت توی مسیر توسعه کمک بزرگی کنه.

اگه سوال یا مشکلی داشتی، با ما در تماس باش. همیشه اینجا هستیم که کمکت کنیم!

Table of Contents

آخرین نوشته‌ها