[Python] Jak wysłać SMS z poziomu Pythona bez użycia bramki?

Czy da się wysyłać SMS'y z poziomu Pythona bez konieczności korzystania z płatnych bramek? Oczywiście, że tak. Potrzebny do tego będzie Modem GSM z aktywną kartą SIM oraz biblioteka pySerial do komunikacji z modemem.

Przykład

W poniższym przykładzie program po uruchomieniu będzie oczekiwał na podanie numeru odbiorcy, a następnie podanie treści wiadomości SMS, po której podaniu zostanie ona wysłana. Pamiętaj, aby w modem_port podać poprawny port, gdzie podłączony jest modem.

import serial
import time

# Ustawienia portu szeregowego
modem_port = '/dev/ttyUSB0'  # Port USB z modemem
baud_rate = 9600


def get_network_name(port):
    try:
        with serial.Serial(port, baud_rate, timeout=5) as modem:
            time.sleep(1)

            # Inicjalizacja
            modem.write(b'AT\r')
            time.sleep(1)
            print(modem.read_all().decode())  # Odczytanie odpowiedzi

            # Sprawdzenie operatora
            modem.write(b'AT+COPS?\r')
            time.sleep(1)
            response = modem.read_all().decode()  # Odczytanie odpowiedzi
            return response

    except Exception as e:
        print(f'Wystąpił błąd przy pobieraniu nazwy sieci: {e}')
        return None


def send_sms(port, number, message):
    try:
        with serial.Serial(port, baud_rate, timeout=5) as modem:
            time.sleep(1)

            # Ustawiamy SMS w trybie tekstowym
            modem.write(b'AT+CMGF=1\r')
            time.sleep(1)
            print(modem.read_all().decode())  # Odczytanie odpowiedzi

            # Ustawiamy numer odbiorcy
            modem.write(f'AT+CMGS="{number}"\r'.encode())
            time.sleep(1)
            print(modem.read_all().decode())  # Odczytanie odpowiedzi

            # Wyślij wiadomość
            modem.write(message.encode() + b'\x1A')  # \x1A to znak końca wiadomości
            time.sleep(1)
            print(modem.read_all().decode())  # Odczytanie odpowiedzi

            print('Wiadomość wysłana')

    except Exception as e:
        print(f'Wystąpił błąd: {e}')

if __name__ == "__main__":
    # Wyświetlenie nazwy sieci
    network_name = get_network_name(modem_port)
    print(f"Operator: {network_name}")

    # Podaj numeru telefonu
    recipient_number = input("Podaj numer telefonu w formacie: +48XXXXXXXXX: ")

    # Podaj treść wiadomości
    sms_text = input("Wpisz treść wiadomości SMS: ")

    # Wysłanie wiadomości
    send_sms(modem_port, recipient_number, sms_text)

Komentarze

Popular

[C++] Jak obliczyć pole i obwód trapezu?

[HTML] Jak wyśrodkować tekst?

[PHP|HTML] Odświeżenie strony