דילוג לתוכן
  • חוקי הפורום
  • פופולרי
  • לא נפתר
  • משתמשים
  • חיפוש גוגל בפורום
  • צור קשר
עיצובים
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • ברירת מחדל (ללא עיצוב (ברירת מחדל))
  • ללא עיצוב (ברירת מחדל)
כיווץ
מתמחים טופ
  1. דף הבית
  2. קטגוריות בהרצה
  3. תכנות
  4. בינה מלאכותית - AI
  5. עזרה הדדית - בינה מלאכותית
  6. מדריך | מדריך | מדריך ליצירת צ'אט בינה מלאכותית באימייל

מדריך | מדריך | מדריך ליצירת צ'אט בינה מלאכותית באימייל

מתוזמן נעוץ נעול הועבר עזרה הדדית - בינה מלאכותית
1 פוסטים 1 כותבים 49 צפיות 5 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • ט מנותק
    ט מנותק
    טשיקאוור ניוז
    כתב נערך לאחרונה על ידי טשיקאוור ניוז
    #1

    מקור-הבלוג שלי

    מדריך ליצירת צ'אט בינה מלאכותית באימייל

    פרטי המדריך, מה יקרה כאן?
    א, יהיה לנו כתובת מייל שנתכתב איתה וזה יחזיר לנו תשובות AI אוטומטיות,
    ב, נבנה סקריפט שקורא את כל ההודעות שלא נקראו בכתובת המייל שייעדנו לAI ומחזיר תשובות.
    ג, כדי שהסקריפט ירוץ כל כמה דקות, נפתח חשבון בגיטהאב ושם נבנה סקריפט שמריץ סקריפטים אונליין, כל כמה דקות,
    ד, חשוב לדעת, החשבון החינמי בגיטהאב נותן לנו 2000 דקות הרצה בחודש, כל ריצה של הסקריפט ללא אימיילים נכנסים לוקחת 15-17 שניות, וזה קורה כל 2-5 דקות, ריצה עם אימיילים נכנסים לוקח יותר זמן, לכן, יתכן ושווה לעשות שהסקריפט בגיטהאב ירוץ רק פעם בחמש דקות או יותר, ואז יישאר לנו דקות ריצה עד סוף החודש, ודו''ק...

    💬 מה הבוט עושה?
    מזהה מיילים חדשים בתיבת Gmail.
    שולח את תוכן ההודעה ל-Gemini.
    מחזיר תשובה אוטומטית ישירות לשולח — בעברית או בכל שפה אחרת.

    🧰 מה צריך?
    1.✉️ כתובת מייל משלכם
    2.כתובת מייל ייעודית לבינה המלאכותית.(שאיתה נתכתב...)
    3.🌐 חשבון ב-GitHub
    4.🔑 מפתח API של Gemini (של גוגל)
    5.🕒 חצי שעה פנויה.

    שלב 1️⃣ – פתיחת כתובת מייל חדשה והכנת גישה מאובטחת

    1, פתחו כתובת Gmail חדשה (רצוי ייעודית לבוט).
    2, היכנסו אל הגדרות החשבון של Google → אבטחה → אימות דו־שלבי והפעילו אותו.
    3, לאחר מכן, גשו לכתובת: https://myaccount.google.com/apppasswords👉
    4, צרו סיסמת אפליקציה חדשה, תנו לה שם כלשהו (למשל “ChatBot”), ותקבלו מספר מילים באנגלית — זו הסיסמה לשימוש בתוכנה בלבד (לא סיסמת החשבון).
    5, העתיקו ושמרו אותה בצד — נשתמש בה בהמשך.

    שלב 2️⃣ - קבלת API פרטי של ג'מיני

    1, היכנסו לכאן'קבלת API של ג'מיני'👉
    2, וודאו שנכנסתם עם החשבון הייעודי לג'מיני
    3, פיתחו פרוייקט חדש
    4, קבלו API פרטי בשבילכם
    5, כנסו לפרטי הAPI, והעתיקו את המפתח, נצטרך אותו לשלב 5/2

    שלב 3️⃣ – יצירת המאגר והקוד ב-GitHub

    1, היכנסו ל-GitHub👉
    2, ופתחו חשבון (אם אין לכם).
    3, צרו מאגר חדש (New repository) בשם כרצונכם.
    4, בתוך המאגר, לחצו על “Add file → Create new file”
    5, וקראו לקובץ:

    gemini_email_bot.py
    

    6, הדביקו בו את הקוד הבא⬇️: [ קוד הבוט (Python)]

    import os
    import imaplib
    import email
    import smtplib
    import requests
    import markdown
    from email.mime.text import MIMEText
    import json
    import re
     
    # --- הגדרות קבועות ---
    IMAP_SERVER = "imap.gmail.com"
    SMTP_SERVER = "smtp.gmail.com"
    THREADS_FILE = "threads.json"
     
    EMAIL_ACCOUNT = os.getenv("EMAIL_ACCOUNT")
    EMAIL_PASSWORD = os.getenv("EMAIL_PASSWORD")
    GEMINI_API_KEY = os.getenv("GEMINI_API_KEY")
     
    # --- טעינה ושמירה של השרשורים מקובץ JSON ---
    def load_threads():
    try:
    with open(THREADS_FILE, "r", encoding="utf-8") as f:
    return json.load(f)
    except FileNotFoundError:
    return {}
    except Exception as e:
    print(f"[!] Error loading threads: {e}")
    return {}
     
    def save_threads(threads):
    try:
    with open(THREADS_FILE, "w", encoding="utf-8") as f:
    json.dump(threads, f, ensure_ascii=False, indent=2)
    except Exception as e:
    print(f"[!] Error saving threads: {e}")
     
    # --- ניקוי חתימות והודעות חוזרות ---
    def clean_email_body(body):
    patterns_to_remove = [
    r"--\s*\n.*",# קו חתימה --
    r"Sent from my .*",# טקסטים כמו Sent from my iPhone
    r"שלח:.*",# שורות של מייל קודם בעברית
    r"נשלח:.*",
    r"From:.*",
    r"To:.*",
    r"Cc:.*",
    r"Subject:.*",
    r"-----Original Message-----",
    r"^>+",# ציטוטים מקויים
    ]
    pattern = "|".join(patterns_to_remove)
    body = re.split(pattern, body, flags=re.IGNORECASE | re.MULTILINE)[0]
    return body.strip()
     
    # --- קבלת מיילים חדשים ---
    def get_unread_emails():
    try:
    mail = imaplib.IMAP4_SSL(IMAP_SERVER)
    mail.login(EMAIL_ACCOUNT, EMAIL_PASSWORD)
    mail.select("inbox")
     
    result, data = mail.search(None, "(UNSEEN)")
    unread_msg_nums = data[0].split()
    messages = []
     
    for num in unread_msg_nums:
    result, msg_data = mail.fetch(num, "(RFC822)")
    raw_email = msg_data[0][1]
    msg = email.message_from_bytes(raw_email)
     
    sender = email.utils.parseaddr(msg["From"])[1]
    subject = msg["Subject"] if msg["Subject"] else "(ללא נושא)"
    message_id = msg["Message-ID"]
    in_reply_to = msg.get("In-Reply-To")
    body = ""
     
    if msg.is_multipart():
    for part in msg.walk():
    if part.get_content_type() == "text/plain":
    charset = part.get_content_charset() or "utf-8"
    body += part.get_payload(decode=True).decode(charset, errors="ignore")
    else:
    charset = msg.get_content_charset() or "utf-8"
    body += msg.get_payload(decode=True).decode(charset, errors="ignore")
     
    body = clean_email_body(body)
     
    messages.append({
    "from": sender,
    "subject": subject,
    "body": body,
    "message_id": message_id,
    "in_reply_to": in_reply_to
    })
     
    mail.logout()
    return messages
     
    except Exception as e:
    print(f"[!] Error fetching emails: {e}")
    return []
     
    # --- בניית השרשור עבור ג'מיני ---
    def build_thread_for_gemini(message, threads):
    thread_id = message["in_reply_to"] or message["message_id"]
     
    if thread_id not in threads:
    threads[thread_id] = []
     
    # הוספת הודעת המשתמש החדשה
    threads[thread_id].append({
    "from": "user",
    "body": message["body"]
    })
     
    # בניית טקסט לג'מיני
    gemini_prompt = ""
    for msg in threads[thread_id]:
    if msg["from"] == "user":
    gemini_prompt += f"[משתמש כתב]:\n{msg['body']}\n\n"
    elif msg["from"] == "gemini":
    gemini_prompt += f"[ג'מיני כתב]:\n{msg['body']}\n\n"
     
    return gemini_prompt, thread_id
     
    # --- שליחת מייל כולל שרשור ---
    def send_email(to_email, subject, body_text, original_message_id=None):
    try:
    formatted_text = markdown.markdown(body_text)
     
    signature = """
    <hr>
    <div style="color:#666; font-size:14px; margin-top:10px;">
    בינה מלאכותית ג'מיני באימייל נבנה ע"י @טשיקאוור ניוז
    </div>
    """
     
    html_body = f"""
    <html>
    <body style="direction: rtl; text-align: right; font-family: Arial, sans-serif;">
    {formatted_text}
    {signature}
    </body>
    </html>
    """
     
    msg = MIMEText(html_body, "html", "utf-8")
    msg["From"] = EMAIL_ACCOUNT
    msg["To"] = to_email
    msg["Subject"] = subject
     
    if original_message_id:
    msg["In-Reply-To"] = original_message_id
    msg["References"] = original_message_id
     
    with smtplib.SMTP_SSL(SMTP_SERVER, 465) as server:
    server.login(EMAIL_ACCOUNT, EMAIL_PASSWORD)
    server.sendmail(EMAIL_ACCOUNT, to_email, msg.as_string())
     
    print(f"[✔] Sent reply to {to_email}")
     
    except Exception as e:
    print(f"[!] Error sending email: {e}")
     
    # --- קבלת תגובה מג'מיני ---
    def get_gemini_reply(prompt):
    try:
    url = "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent"
     
    headers = {
    "Content-Type": "application/json",
    "X-goog-api-key": GEMINI_API_KEY
    }
     
    data = {
    "contents": [
    {"parts": [{"text": prompt}]}
    ]
    }
     
    response = requests.post(url, headers=headers, json=data)
     
    if response.status_code == 200:
    result = response.json()
    return result["candidates"][0]["content"]["parts"][0]["text"]
     
    print("[!] Gemini API error:", response.text)
    return "אירעה שגיאה בעת יצירת התגובה."
     
    except Exception as e:
    print(f"[!] Error contacting Gemini API: {e}")
    return "שגיאה פנימית בתקשורת עם Gemini."
     
    # --- הפעלת הבוט ---
    def main():
    print("Starting Gemini Email Bot...")
     
    threads = load_threads()
    emails = get_unread_emails()
     
    if not emails:
    &import os
    import imaplib
    import email
    import smtplib
    import requests
    import markdown
    from email.mime.text import MIMEText
    import json
    import re
     
    # --- הגדרות קבועות ---
    IMAP_SERVER = "imap.gmail.com"
    SMTP_SERVER = "smtp.gmail.com"
    THREADS_FILE = "threads.json"
     
    EMAIL_ACCOUNT = os.getenv("EMAIL_ACCOUNT")
    EMAIL_PASSWORD = os.getenv("EMAIL_PASSWORD")
    GEMINI_API_KEY = os.getenv("GEMINI_API_KEY")
     
    # --- טעינה ושמירה של השרשורים מקובץ JSON ---
    def load_threads():
        try:
            with open(THREADS_FILE, "r", encoding="utf-8") as f:
                return json.load(f)
        except FileNotFoundError:
            return {}
        except Exception as e:
            print(f"[!] Error loading threads: {e}")
            return {}
     
    def save_threads(threads):
        try:
            with open(THREADS_FILE, "w", encoding="utf-8") as f:
                json.dump(threads, f, ensure_ascii=False, indent=2)
        except Exception as e:
            print(f"[!] Error saving threads: {e}")
     
    # --- ניקוי חתימות והודעות חוזרות ---
    def clean_email_body(body):
        patterns_to_remove = [
            r"--\s*\n.*",               # קו חתימה --
            r"Sent from my .*",          # טקסטים כמו Sent from my iPhone
            r"שלח:.*",                   # שורות של מייל קודם בעברית
            r"נשלח:.*",
            r"From:.*",
            r"To:.*",
            r"Cc:.*",
            r"Subject:.*",
            r"-----Original Message-----",
            r"^>+",                       # ציטוטים מקויים
        ]
        pattern = "|".join(patterns_to_remove)
        body = re.split(pattern, body, flags=re.IGNORECASE | re.MULTILINE)[0]
        return body.strip()
     
    # --- קבלת מיילים חדשים ---
    def get_unread_emails():
        try:
            mail = imaplib.IMAP4_SSL(IMAP_SERVER)
            mail.login(EMAIL_ACCOUNT, EMAIL_PASSWORD)
            mail.select("inbox")
     
            result, data = mail.search(None, "(UNSEEN)")
            unread_msg_nums = data[0].split()
            messages = []
     
            for num in unread_msg_nums:
                result, msg_data = mail.fetch(num, "(RFC822)")
                raw_email = msg_data[0][1]
                msg = email.message_from_bytes(raw_email)
     
                sender = email.utils.parseaddr(msg["From"])[1]
                subject = msg["Subject"] if msg["Subject"] else "(ללא נושא)"
                message_id = msg["Message-ID"]
                in_reply_to = msg.get("In-Reply-To")
                body = ""
     
                if msg.is_multipart():
                    for part in msg.walk():
                        if part.get_content_type() == "text/plain":
                            charset = part.get_content_charset() or "utf-8"
                            body += part.get_payload(decode=True).decode(charset, errors="ignore")
                else:
                    charset = msg.get_content_charset() or "utf-8"
                    body += msg.get_payload(decode=True).decode(charset, errors="ignore")
     
                body = clean_email_body(body)
     
                messages.append({
                    "from": sender,
                    "subject": subject,
                    "body": body,
                    "message_id": message_id,
                    "in_reply_to": in_reply_to
                })
     
            mail.logout()
            return messages
     
        except Exception as e:
            print(f"[!] Error fetching emails: {e}")
            return []
     
    # --- בניית השרשור עבור ג'מיני ---
    def build_thread_for_gemini(message, threads):
        thread_id = message["in_reply_to"] or message["message_id"]
     
        if thread_id not in threads:
            threads[thread_id] = []
     
        # הוספת הודעת המשתמש החדשה
        threads[thread_id].append({
            "from": "user",
            "body": message["body"]
        })
     
        # בניית טקסט לג'מיני
        gemini_prompt = ""
        for msg in threads[thread_id]:
            if msg["from"] == "user":
                gemini_prompt += f"[משתמש כתב]:\n{msg['body']}\n\n"
            elif msg["from"] == "gemini":
                gemini_prompt += f"[ג'מיני כתב]:\n{msg['body']}\n\n"
     
        return gemini_prompt, thread_id
     
    # --- שליחת מייל כולל שרשור ---
    def send_email(to_email, subject, body_text, original_message_id=None):
        try:
            formatted_text = markdown.markdown(body_text)
     
            signature = """
            <hr>
            <div style="color:#666; font-size:14px; margin-top:10px;">
            בינה מלאכותית ג'מיני באימייל נבנה ע"י @טשיקאוור ניוז
            </div>
            """
     
            html_body = f"""
            <html>
                <body style="direction: rtl; text-align: right; font-family: Arial, sans-serif;">
                    {formatted_text}
                    {signature}
                </body>
            </html>
            """
     
            msg = MIMEText(html_body, "html", "utf-8")
            msg["From"] = EMAIL_ACCOUNT
            msg["To"] = to_email
            msg["Subject"] = subject
     
            if original_message_id:
                msg["In-Reply-To"] = original_message_id
                msg["References"] = original_message_id
     
            with smtplib.SMTP_SSL(SMTP_SERVER, 465) as server:
                server.login(EMAIL_ACCOUNT, EMAIL_PASSWORD)
                server.sendmail(EMAIL_ACCOUNT, to_email, msg.as_string())
     
            print(f"[✔] Sent reply to {to_email}")
     
        except Exception as e:
            print(f"[!] Error sending email: {e}")
     
    # --- קבלת תגובה מג'מיני ---
    def get_gemini_reply(prompt):
        try:
            url = "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent"
     
            headers = {
                "Content-Type": "application/json",
                "X-goog-api-key": GEMINI_API_KEY
            }
     
            data = {
                "contents": [
                    {"parts": [{"text": prompt}]}
                ]
            }
     
            response = requests.post(url, headers=headers, json=data)
     
            if response.status_code == 200:
                result = response.json()
                return result["candidates"][0]["content"]["parts"][0]["text"]
     
            print("[!] Gemini API error:", response.text)
            return "אירעה שגיאה בעת יצירת התגובה."
     
        except Exception as e:
            print(f"[!] Error contacting Gemini API: {e}")
            return "שגיאה פנימית בתקשורת עם Gemini."
     
    # --- הפעלת הבוט ---
    def main():
        print("Starting Gemini Email Bot...")
     
        threads = load_threads()
        emails = get_unread_emails()
     
        if not emails:
            print("No new emails.")
            return
     
        for msg in emails:
            print(f"[📩] New email from {msg['from']}")
     
            # --- בניית השרשור המסומן ---
            gemini_prompt, thread_id = build_thread_for_gemini(msg, threads)
     
            # --- שליחת השרשור לג'מיני לקבלת תשובה ---
            gemini_reply = get_gemini_reply(gemini_prompt)
     
            # --- שמירת תגובת ג'מיני בשרשור ---
            threads[thread_id].append({
                "from": "gemini",
                "body": gemini_reply
            })
     
            # --- שליחת המייל למשתמש ---
            send_email(
                msg["from"],
                f"Re: {msg['subject']}",
                gemini_reply,
                msg["message_id"]
            )
     
        # --- שמירה עדכנית של השרשורים ---
        save_threads(threads)
     
    if __name__ == "__main__":
        main()
     
    
    

    7, לאחר מכן לחצו על Save / Commit changes (או Ctrl + S → ואז הכפתור הירוק).

    שלב 4️⃣ – יצירת קובץ הפעולה (GitHub Actions)

    1, חזרו למאגר שלכם ולחצו שוב על
    “Add file → Create new file”
    2, תנו לקובץ את השם הבא (כולל הנקודות והסלשים!):

    .github/workflows/gemini_email_bot.yml
    

    3, הדביקו את התוכן הבא⬇️: [ קובץ ההרצה (YAML)]

    name: Gemini Email Bot
    
    on:
      schedule:
        - cron: '*/2 * * * *' # ריצה כל 2 דקות
      workflow_dispatch:      # אפשר להריץ גם ידנית
    
    jobs:
      run-bot:
        runs-on: ubuntu-latest
    
        steps:
          - name: Checkout repository
            uses: actions/checkout@v4
    
          - name: Setup Python
            uses: actions/setup-python@v5
            with:
              python-version: '3.10'
    
          - name: Install dependencies
            run: |
              python -m pip install --upgrade pip
              pip install requests
    
          - name: Run Gemini Email Bot
            env:
              EMAIL_ACCOUNT: ${{ secrets.EMAIL_ACCOUNT }}
              EMAIL_PASSWORD: ${{ secrets.EMAIL_PASSWORD }}
              GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
            run: |
              echo "Starting Gemini Email Bot..."
              python gemini_email_bot.py
              echo "Bot finished successfully."
    

    4, לאחר מכן שמרו את הקובץ בדיוק כמו קודם.

    שלב 5️⃣ – הוספת הסודות (Secrets) במאגר

    1, היכנסו לכרטיסייה Settings → בצד שמאל בחרו Secrets → Actions.
    2, לחצו על “New repository secret” שלוש פעמים, ובכל פעם הוסיפו אחד מהבאים:
    שם הסוד: EMAIL_ACCOUNT
    תוכן: כתובת המייל שפתחתם
    שם הסוד: EMAIL_PASSWORD
    תוכן: סיסמת האפליקציה ששמרתם בשלב 1/4
    שם הסוד: GEMINI_API_KEY
    תוכן: מפתח ה-API של Gemini
    3, שמרו כל אחד מהם.

    שלב 6️⃣ – הרצת הבוט

    1, חזרו למאגר שלכם ולחצו על כרטיסיית Actions.
    2, מצאו בצד שמאל את הפעולה בשם
    3, “Gemini Email Bot” ולחצו עליה.
    4, יופיע כפתור כחול “Run workflow” — לחצו עליו.
    5, המתינו כדקה → אם תופיע שורה עם ✔️ ירוק — הצלחתם! 🎉
    6, בעצם הבוט אמור לרוץ כל 2 דקות. אבל בפועל זה לא עובד ממש טוב.

    ניתן להגיב כאן

    תגובה 1 תגובה אחרונה
    2

    • התחברות

    • אין לך חשבון עדיין? הרשמה

    • התחברו או הירשמו כדי לחפש.
    • פוסט ראשון
      פוסט אחרון
    0
    • חוקי הפורום
    • פופולרי
    • לא נפתר
    • משתמשים
    • חיפוש גוגל בפורום
    • צור קשר