ค้นหาเว็บไซต์

12 วัน (วันที่ 3) - ตรวจสอบวันเกิดและส่งการแจ้งเตือนทาง SMS


🎄 12 วันแห่ง DigitalOcean: ตรวจสอบวันเกิดและส่งการแจ้งเตือนทาง SMS 🎁

ยินดีต้อนรับสู่ วันที่ 3 ของ 12 วันของ DigitalOcean! ในช่วงสองวันที่ผ่านมา เราได้ตั้งค่าฐานข้อมูล PostgreSQL และเชื่อมต่อกับฐานข้อมูลโดยใช้ Python ตอนนี้ถึงเวลาที่จะทำให้บริการเตือนวันเกิดของเราทำสิ่งที่มีประโยชน์จริงๆ แล้ว ส่งข้อความถึงคุณเมื่อวันนี้เป็นวันเกิด

เราจะใช้ Twilio ซึ่งเป็นบริการที่ทำให้การส่งข้อความ SMS เป็นเรื่องง่ายด้วยโค้ดเพียงไม่กี่บรรทัด ภายในสิ้นวันนี้ แอปของคุณจะตรวจสอบฐานข้อมูลสำหรับวันเกิด และส่งการแจ้งเตือนถึงคุณหากมีรายการที่ตรงกัน

มาเริ่มกันเลย!

✨ ทำไมต้องเป็นขั้นตอนนี้?

การค้นหาวันเกิดในฐานข้อมูลของคุณเป็นเพียงส่วนหนึ่งของงานเท่านั้น เพื่อให้แอปนี้มีประโยชน์อย่างแท้จริง เราจำเป็นต้องแจ้งให้ใครบางคน (คุณ!) เกี่ยวกับวันพิเศษเหล่านี้

ขั้นตอนนี้เชื่อมต่อจุดต่างๆ:

  • ใช้คำสั่ง SQL เพื่อค้นหาวันเกิดที่ตรงกับวันนี้
  • ส่ง SMS เตือนความจำที่เป็นมิตรโดยใช้ Twilio

ตั้งค่าได้รวดเร็วและทำให้แอปใช้งานได้จริงมากขึ้นในทันที

🚀 สิ่งที่คุณจะได้เรียนรู้

นี่คือสิ่งที่เราจะแก้ไขในวันนี้:

  1. ใช้คำสั่ง SQL เพื่อค้นหาวันเกิดที่ตรงกับวันนี้
  2. ส่งการแจ้งเตือนทาง SMS โดยใช้ Python SDK ของ Twilio
  3. รวมขั้นตอนเหล่านี้เป็นสคริปต์ Python เดียวที่ใช้งานได้

🛠 สิ่งที่คุณต้องการ

ก่อนเริ่มต้น ตรวจสอบให้แน่ใจว่าคุณมี:

  • บัญชี Twilio (หากคุณยังไม่มี ให้ปฏิบัติตามคู่มือการเริ่มต้นฉบับย่อนี้เพื่อสมัคร ซื้อหมายเลขโทรศัพท์ Twilio และรับข้อมูลประจำตัวของคุณ
  • ข้อมูลรับรอง Twilio ของคุณ:

    • บัญชี SID
    • โทเค็นการรับรองความถูกต้อง
    • หมายเลขโทรศัพท์ทวิลิโอ
  • สคริปต์การเชื่อมต่อฐานข้อมูลและ Python ตั้งแต่วันที่ 2
  • ข้อมูลตัวอย่างในตารางผู้ติดต่อของคุณ (เราได้เพิ่มสิ่งนี้ในวันที่ 1 - การตั้งค่าฐานข้อมูล PostgreSQL สำหรับการเตือนวันเกิด) หากคุณต้องการเพิ่มอีก ให้ทำตามขั้นตอนในวันที่ 1 เพื่อเติมฐานข้อมูลของคุณ

🧑🍳 สูตรอาหารสำหรับวันที่ 3: ตรวจสอบวันเกิดและส่งการแจ้งเตือน

ขั้นตอนที่ 1: ติดตั้ง Python SDK ของ Twilio

หากต้องการส่งการแจ้งเตือนทาง SMS เราจำเป็นต้องมีไลบรารี Twilio Python ติดตั้งโดยการรัน:

pip install twilio

หากคุณยังไม่มีข้อมูลรับรอง Twilio (SID ของบัญชี, โทเค็นการรับรองความถูกต้อง และหมายเลขโทรศัพท์) ให้ปฏิบัติตามการเริ่มต้นอย่างรวดเร็วของการส่งข้อความของ Twilio โดยจะแนะนำคุณเกี่ยวกับการสมัคร ซื้อหมายเลขโทรศัพท์ และการรับรายละเอียดที่จำเป็น

ขั้นตอนที่ 2: อัปเดตไฟล์ .env ของคุณ

ไฟล์ .env ของคุณควรมีทั้งข้อมูลรับรองฐานข้อมูลของคุณ (ตั้งแต่วันที่ 2) และข้อมูลรับรอง Twilio ของคุณ คุณสามารถค้นหาข้อมูลรับรอง Twilio—SID บัญชี, โทเค็นการตรวจสอบสิทธิ์ และหมายเลขโทรศัพท์ Twilio ของคุณได้โดยการลงชื่อเข้าใช้แดชบอร์ดบัญชี Twilio ของคุณ

อัปเดตไฟล์ .env ของคุณให้มีลักษณะดังนี้:

# Database credentials
DB_HOST=<your-database-hostname>
DB_NAME=<your-database-name>
DB_USER=<your-database-username>
DB_PASSWORD=<your-database-password>
DB_PORT=5432  # Default PostgreSQL port
Twilio credentials
TWILIO_ACCOUNT_SID=<your-twilio-account-sid>
TWILIO_AUTH_TOKEN=<your-twilio-auth-token>
TWILIO_PHONE_FROM=<your-twilio-phone-number>
TWILIO_PHONE_TO=<your-personal-phone-number>
  • แทนที่ตัวยึดตำแหน่งด้วยข้อมูลรับรองจริงของคุณ
  • เพิ่มหมายเลขโทรศัพท์ส่วนตัวของคุณเป็น TWILIO_PHONE_TO เพื่อรับการแจ้งเตือนการทดสอบ

เคล็ดลับสำหรับมือโปร: ตรวจสอบให้แน่ใจว่าได้เพิ่ม .env ลงในไฟล์ .gitignore ของคุณแล้ว เพื่อป้องกันไม่ให้ข้อมูลประจำตัวที่ละเอียดอ่อนถูกเปิดเผยในการควบคุมเวอร์ชัน

ขั้นตอนที่ 3: เขียนสคริปต์ Python

นี่คือสคริปต์ Python เต็มรูปแบบที่ค้นหาฐานข้อมูลสำหรับวันเกิดวันนี้และส่งการแจ้งเตือนทาง SMS โดยใช้ Twilio:

# check_birthdays.py

from datetime import datetime
import pg8000
from dotenv import load_dotenv
from twilio.rest import Client
import os
Load environment variables
load_dotenv()

def connect_to_database():
    """Establish connection to the database."""
    return pg8000.connect(
        host=os.getenv("DB_HOST"),
        database=os.getenv("DB_NAME"),
        user=os.getenv("DB_USER"),
        password=os.getenv("DB_PASSWORD"),
        port=int(os.getenv("DB_PORT"))
    )

def send_birthday_message(first_name, last_name):
    """Send a birthday text message using Twilio."""
    try:
        # Twilio setup
        account_sid = os.getenv("TWILIO_ACCOUNT_SID")
        auth_token = os.getenv("TWILIO_AUTH_TOKEN")
        client = Client(account_sid, auth_token)

        # Compose the message
        message = client.messages.create(
            body=f"🎉 It's {first_name} {last_name or ''}'s birthday today! 🎂",
            from_=os.getenv("TWILIO_PHONE_FROM"),
            to=os.getenv("TWILIO_PHONE_TO")
        )

        print(
            f"Message sent to {os.getenv('TWILIO_PHONE_TO')} for {first_name} {last_name or ''}. Message SID: {message.sid}"
        )
    except Exception as e:
        print(f"An error occurred while sending the message: {e}")

def check_birthdays():
    """Check if any contact's birthday matches today's date and send a notification."""
    try:
        conn = connect_to_database()
        cursor = conn.cursor()

        # Get today's month and day
        today = datetime.now()
        today_month = today.month
        today_day = today.day

        # Query to fetch contacts whose birthday matches today's date
        cursor.execute(
            """
            SELECT first_name, last_name, birthday
            FROM contacts
            WHERE EXTRACT(MONTH FROM birthday) = %s
              AND EXTRACT(DAY FROM birthday) = %s;
            """,
            (today_month, today_day)
        )

        rows = cursor.fetchall()

        # Notify for each matching contact
        if rows:
            print("Birthday Notifications:")
            for row in rows:
                first_name, last_name, _ = row
                send_birthday_message(first_name, last_name)
        else:
            print("No birthdays today.")

        # Close the cursor and connection
        cursor.close()
        conn.close()

    except Exception as e:
        print(f"An error occurred while checking birthdays: {e}")

if __name__ == "__main__":
    check_birthdays()

ขั้นตอนที่ 5: ทดสอบสคริปต์ของคุณ

รันสคริปต์เพื่อทดสอบทุกอย่าง:

python check_birthdays.py

หากมีวันเกิดในฐานข้อมูลของคุณตรงกับวันที่วันนี้ คุณจะได้รับข้อความ 🎉 ถ้าไม่เช่นนั้น สคริปต์ก็จะพิมพ์:

No birthdays today.

🎁 สรุปผล

นี่คือสิ่งที่เราทำสำเร็จในวันนี้:

✅สอบถามฐานข้อมูลวันเกิดที่ตรงกับวันที่วันนี้

✅ ใช้ Twilio เพื่อส่งการแจ้งเตือนทาง SMS สำหรับวันเกิดเหล่านั้น

✅ รวมทุกอย่างไว้ในสคริปต์ Python ที่ใช้งานได้

ถัดไป: พรุ่งนี้ เราจะปรับใช้สคริปต์นี้กับฟังก์ชัน DigitalOcean เพื่อให้สคริปต์ทำงานในระบบคลาวด์ โดยไม่จำเป็นต้องจัดการเซิร์ฟเวอร์ นี่คือจุดที่บริการเตือนวันเกิดเริ่มทำงานโดยอัตโนมัติ คอยติดตาม!