• דף הבית
    • אינדקס קישורים
    • פוסטים אחרונים
    • משתמשים
    • חיפוש בהגדרות המתקדמות
    • חיפוש גוגל בפורום
    • ניהול המערכת
    • ניהול המערכת - שרת private
    • הרשמה
    • התחברות
    1. דף הבית
    2. y6714453
    Y מנותק
    • פרופיל
    • עוקב אחרי 0
    • עוקבים 4
    • נושאים 24
    • פוסטים 385
    • קבוצות 0

    y6714453

    @y6714453

    350
    מוניטין
    201
    צפיות בפרופיל
    385
    פוסטים
    4
    עוקבים
    0
    עוקב אחרי
    תאריך הצטרפות
    נראה לאחרונה
    מיקום ניתן לפנות בכתובת y6714453@gmail.com

    y6714453 הפסקת מעקב מעקב

    הפוסטים הטובים ביותר שנוצרו על ידי y6714453

    • 🎙️🎯 זיהוי דיבור בעברית – חינם, איכותי, מדויק!!

      כמה מחשבות על מודל זיהוי דיבור...

      הרבה פעמים בכל מיני מערכות - רוצים לשלב זיהוי דיבור, דהיינו שמשתמש יוכל לשלוח הקלטה לשרת והשרת יתמלל את ההקלטה.
      ימות המשיח מציעים מודל כזה, והאמת שאף פעם לא ניסיתי אותו, כך שאני לא יודע מה רמת האיכות שלו...
      אבל זה בעלות יחידות, ולהרבה משתמשים זה מספיק סיבה כדי לנסות למצוא אלטרנטיבה,
      (וממילא הטקסט נשלח לשרת - אז למה שהשרת לא יבצע גם את התמלול בעצמו?!)

      יש שתי ספריות מוכרות וטובות לתמלול שמתאים לעברית,

      אחד של גוגל - הספרייה SpeechRecognition
      ואחד של מייקרוסופט - הספרייה Whisper

      ל Whisper יש ייתרון משמעותי - שאפשר להוריד למחשב ללא צורך בחיבור לאינטרנט, אבל בגלל שממילא רוב השימוש ממילא נעשה בדרך כלל בשרת וכדו' אז הייתרון לא כל כך משמעותי...

      אמנם לאחר בדיקות ותעיות... הגעתי למסקנה שהמודל של גוגל, לא רואה את ההוא של מייקרוסופט...

      חשוב לזכור שההקלטה בסוף מגיעה באיכות של טלפון... ולא של קונדנסר אולפני... ולכן חשוב שהמודל יידע לזהות את הדיבור גם בתנאים קשים כמו רעשי רקע, איכות ירודה, וכו'...

      אני חושב שהמודל של גוגל הוא מדוייק ואיכותי כמעט ללא טעויות... והייתי ממליץ לכל מי שרוצה מערכת איכותית, להשתמש בו...

      לא צריך מפתח API !

      אני רוצה להוסיף המלצה מנסיון הרבה זמן השתמשתי עם זה ומשום מה ההתחלה והסוף של ההקלטה לא זוהה... למשל במקום "אחד שתיים שלוש ארבע" הוא זיהה "ד שתיים שלוש אר"- עד שהבנתי שהמודל אמנם הוא טוב אבל לפעמים התחלת ההקלטה וסוף ההקלטה נחתך (ממש במימדים של שנייה) ולכן אם רוצים לשלוח הקלטה ארוכה לשרת, למשל משפט שלם וכו' אז זה בדרך כלל לא כל כך בעיה...
      אבל אם רוצים לשלוח מילה אחת וכדו' אז זה יכול להיות מאוד משמעותי.... לכן מומלץ (מנסיון! זה פותר את הבעייה!) להוסיף שנייה שקט בתחילת וסוף ההקלטה כלומר אחרי שהיא נשלחת לשרת, לפני שגוגל מעבד את ההקלטה ומחלץ את התמלול... - להשתמש עם הספרייה pydub כדי להוסיף שנייה שקט תחילה וסוף...
      (צריך לבדוק ש-FFmpeg מותקן בסביבה, אחרת הספרייה לא תעבוד)

      עוד משהו...
      לפעמים אנחנו יודעים מראש מה האפשרויות שהמשתמש יכול לומר –
      למשל שמות של ערים:

      בני ברק, ירושלים, תל אביב, חיפה, אשדוד, וכו'...

      אפשר לעשות שהקוד יזהה את הדיבור ויבצע התאמה
      למשל אם המודל זיהה "ירושמים" אז הוא יתאים לירושלים...

      אני מצרף פה קוד פייתון לדוגמא: ⬇


      אולי צריך עוד כמה שינויים כדי שיתאים לימות המשיח...

      import os
      import tempfile
      import logging
      import requests
      from flask import Flask, request, jsonify
      from pydub import AudioSegment
      import speech_recognition as sr
      from rapidfuzz import process, fuzz
      
      # ------------------ Logging Configuration ------------------
      logging.basicConfig(
          level=logging.INFO,
          format="%(asctime)s | %(levelname)s | %(message)s",
          datefmt="%H:%M:%S"
      )
      
      app = Flask(__name__)
      
      # List of possible keywords to match
      KEYWORDS = ["בני ברק", "ירושלים", "תל אביב", "חיפה", "אשדוד"]
      
      # ------------------ Helper Functions ------------------
      
      def add_silence(input_path: str) -> AudioSegment:
          """
          Add one second of silence at the beginning and end of the audio file.
          This improves speech recognition accuracy, especially for short recordings.
          """
          logging.info("Adding one second of silence to audio file...")
          audio = AudioSegment.from_file(input_path, format="wav")
          silence = AudioSegment.silent(duration=1000)  # 1000ms = 1 second
          return silence + audio + silence
      
      def recognize_speech(audio_segment: AudioSegment) -> str:
          """
          Perform speech recognition using Google SpeechRecognition API.
          """
          recognizer = sr.Recognizer()
          try:
              # Use a temporary file for SpeechRecognition to read
              with tempfile.NamedTemporaryFile(suffix=".wav", delete=True) as temp_wav:
                  audio_segment.export(temp_wav.name, format="wav")
                  with sr.AudioFile(temp_wav.name) as source:
                      data = recognizer.record(source)
      
                  text = recognizer.recognize_google(data, language="he-IL")
                  logging.info(f"Recognized text: {text}")
                  return text
          except sr.UnknownValueError:
              logging.warning("Speech not detected or unclear.")
              return ""
          except Exception as e:
              logging.error(f"Error during speech recognition: {e}")
              return ""
      
      def find_best_match(text: str) -> str | None:
          """
          Find the closest matching word from the predefined KEYWORDS list.
          """
          if not text:
              return None
      
          result = process.extractOne(text, KEYWORDS, scorer=fuzz.ratio)
          if result and result[1] >= 80:
              logging.info(f"Best match found: {result[0]} (confidence: {result[1]}%)")
              return result[0]
      
          logging.info("No sufficient match found.")
          return None
      
      # ------------------ API Endpoint ------------------
      
      @app.route("/upload_audio", methods=["GET"])
      def upload_audio():
          """
          Endpoint to receive an audio file via GET parameter,
          download it, process it, and return the recognized text with the best match.
          Example usage:
          /upload_audio?file_url=https://example.com/audio.wav
          """
          file_url = request.args.get("file_url")
          if not file_url:
              logging.error("Missing 'file_url' parameter.")
              return jsonify({"error": "Missing 'file_url' parameter"}), 400
      
          logging.info(f"Received file URL: {file_url}")
      
          try:
              # Step 1: Download the audio file
              response = requests.get(file_url, timeout=15)
              if response.status_code != 200:
                  logging.error(f"Failed to download audio file. Status code: {response.status_code}")
                  return jsonify({"error": "Failed to download audio file"}), 400
      
              with tempfile.NamedTemporaryFile(suffix=".wav", delete=True) as temp_input:
                  temp_input.write(response.content)
                  temp_input.flush()
                  logging.info(f"Audio downloaded and saved temporarily: {temp_input.name}")
      
                  # Step 2: Add silence
                  processed_audio = add_silence(temp_input.name)
      
                  # Step 3: Speech recognition
                  recognized_text = recognize_speech(processed_audio)
      
                  # Step 4: Matching against predefined keywords
                  matched_word = find_best_match(recognized_text)
      
                  if matched_word:
                      logging.info(f"Final matched keyword: {matched_word}")
                  else:
                      logging.info("No keyword match found.")
      
          except Exception as e:
              logging.error(f"Processing error: {e}")
              return jsonify({"error": "Error processing the audio file"}), 500
      
          return jsonify({
              "recognized_text": recognized_text,
              "matched_word": matched_word if matched_word else "No match found"
          })
      
      # ------------------ Run Server ------------------
      
      if __name__ == "__main__":
          port = int(os.environ.get("PORT", 5000))
          logging.info(f"Server running on port {port}")
          app.run(host="0.0.0.0", port=port)
      

      מקווה שהייתי ברור...
      בכל מקרה גם מי שלא הבין שלפחות יידע שיש אופציה כזו, כדאי לנסות! 😛
      בהצלחה!

      פורסם בעזרה הדדית למשתמשים מתקדמים
      Y
      y6714453
    • 💻🌐 תגובה ל"מה זה שרת?"

      @מערכת-המשפחה ו @פיתה כתבו ביצירת שלוחות api בקלות ובמהירות.:

      @otomatik מה זה לינק?
      @y6714453 אפשר לפרט יותר מה אני עושה באתר הזה
      @מערכת-המשפחה מה זה הלינק של השרת שלכם

      תאר לעצמך שאתה רוצה לפתוח קו טלפוני שבו תוכל לשמוע בכל רגע נתון כמה שווה הביטקוין... ממש בזמן אמת!

      אתה מחפש בכל המודלים של ימות המשיח חורש את כל הפורום ולא מוצא שלוחת ביטקוין... 🙄
      אתה מנסה לעשות "קומבינה" - אולי נעשה שלוחת השמעת קבצים?

      אבל אוקי - אם תעשה שלוחת השמעת קבצים - אולי תוכל לייצר קובץ שמע שאומר "מחיר הביטקוין כעת הוא 119,431 דולר..." אבל לא הרווחת כלום בגלל שאתה רוצה שזה יתעדכן בזמן אמת... לבד, בלי שתצטרך כל דקה להכנס לבדוק כמה שווה הביטקוין ולהקליט בקו שלך


      פה נכנס התפקיד של השרת!

      באופן כללי שרת זה מחשב שיושב אי שם בענן שלא נכבה אף פעם (כמובן תלוי מאיזה חברה את מקבל את השרת😉) והוא מעבד מידע! מבצע פעולות! מחזיר תשובות! וכו'

      בשלב הזה נכנסת לתמונה ימות המשיח, ומציעה לך מודול מיוחד – כזה שמאפשר למערכת שלך לשלוח בקשות החוצה לשרת חיצוני (!)

      סוג של שלוחה שלא רק מנגנת קבצים או מעבירה תפריטים, אלא ממש פותחת חלון לעולם –
      שלוחה שמסוגלת לצאת החוצה, לשלוח שאלה לשרת חכם, ולחזור עם תשובה – בזמן אמת.

      כלומר - אתה למשל מגדיר שבכל פעם שמאזין נכנס לשלוחה - תישלח בקשה לשרת
      כמובן שכשאתה מגדיר את השלוחה כשלוחה מסוג API זה כבר אומר שבכל פעם שנכנסים לשלוחה - נשלח מידע לשרת...
      ובשרת אתה מגדיר שבכל פעם שנשלחת בקשה - התשובה תהיה מחיר הביטקוין כעת - ולפי המחיר העדכני של הביטקוין...
      השרת מחזיר את המידע בטקסט - והמערכת שלך מקריאה אותו (באמצעות רובוט הקראה של ימות)


      ואיך השרת יידע מה המחיר של הבטקוין?

      רגע? אמרנו שהשרת מעבד מידע נכון? מי מכתיב לו איך לעבד את המידע? ואיזה?


      אז ככה, פה נכנס לתמונה הקוד...

      קוד זה בעצם ההוראות שאתה מכתיב לשרת ... (לא דווקא לשרת... ואכמ"ל)

      ובמקרה שלנו, אתה מגדיר בקוד - שבכל פעם שתישלח בקשה לשרת - השרת ירוץ לבורסות הקריפטו בארה"ב יחפש שם את הנתונים של הביטקוין ("119,431") מכניס את זה לתוך שבלונת טקסט מסודרת ("מחיר הביטקוין כעת הוא 119,431 דולר") ומחזיר את המידע בחזרה.

      אני מניח שזה פשוט אבל לייתר ביטחון צריך להדגיש - לקוד יש שפה משלו! שפה שרק מחשבים מבינים...
      אתה לא יכול לכתוב לו בשפה שלך "רוץ לבורסה, ותביא את המחיר של הביטקוין..." (להבדיל מ AI)
      אגב - זה המיקצוע של אלה שמתחים בתיכנות...

      זה נראה בערך ככה:

      import requests
      from datetime import datetime
      
      def get_bitcoin_price():
          try:
              url = "https://api.coingecko.com/api/v3/simple/price?ids=bitcoin&vs_currencies=usd"
              response = requests.get(url)
              response.raise_for_status()
      
              data = response.json()
              price = data['bitcoin']['usd']
              now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
      
              log_line = f"[{now}]  הביטקוין נסחר כעת בשער של {price:,} דולר."
              print(log_line)
      
          except Exception as e:
              now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
              print(f"[{now}]  שגיאה בשליפת הנתונים: {e}")
      
      if __name__ == "__main__":
          get_bitcoin_price()
      

      וכך יוצא שכשאתה מגדיר שלוחת API אתה בעצם שולח בקשה לשרת והשרת מחזיר תגובה


      ומה זה הלינק?

      הלינק הוא בעצם הכתובת של השרת... הרי יש מלא שרתים...יש לך, יש לי, יש לגוגל, יש לימות המשיח...
      אז לכל שרת יש כתובת - בעצם לינק (בלע"ז) וכך כשאתה מגדיר בשלוחה את הלינק המערכת שלך יודעת לאיזה שרת לגשת...
      כמובן שבמידה שהלינק לא תקין - לא יחזרו נתונים מהשרת... כי כלל לא התקבלה בקשה אצל השרת...

      לסיום:
      |מה האתר הזה עושה?

      האתר הזה ש @otomatik העלה מאפשר לך להגדיר טוב את שלוחת הAPI שלך... כלומר לכתוב את ההגדרות של השלוחה בגלל שבדרך כלל זה הגדרות קצת יותר מסובכות מאשר סתם שלוחת השמעת קבצים...

      עד כאן ההסבר התיאורתי - כהמשך כתבתי עוד פוסט עם הסבר יותר מעשי... אפשר לראות בקישור הזה

      חוץ מזה -
      כדאי לך מאוד לקרוא טוב את הנושא הזה בנוגע לאופציה הזו

      פורסם בעזרה הדדית למשתמשים מתקדמים
      Y
      y6714453
    • 💻 🌐 המשך ל"תגובה ל"מה זה שרת?" החלק הטכני

      איך המחשב מבין אותנו, מה זה קוד, ולמה שרת יכול לשדרג לכם את הקו פי כמה

      בהמשך למה שכתבתי פה – אני רוצה לנסות להסביר בצורה טכנית, פשוטה ומעשית איך עושים את זה בפועל, במיוחד בשביל אלו שרוצים להתקדם קצת מעבר לשבלונות הרגילות של ימות המשיח.

      אני יודע שיהיו כאלה שיגידו:
      "נו באמת, מה זה פוסט כזה בסיסי? מה הקשר לפורום הזה בכלל?..."

      אז קודם כל – אתם צודקים 😄
      ואם אתם מהמומחים – תרגישו חופשי לדלג.

      אבל אם אתם בונים קו שמתבסס על שלוחות פשוטות – תדעו שיש עולם שלם שיכול לשדרג את הקו שלכם לרמות שלא חלמתם.

      אשתמש עם הגישה לפיה חוסר דיוק חוסך הרבה הסברים.



      הקדמה (שנראית לא קשורה, אבל קריטית):
      במחשב הכל נראה פשוט –
      אתה לוחץ על כפתור, נפתח חלון. מקליד משהו, המחשב מגיב.
      אבל האמת? המחשב לא מבין כלום.

      הוא בסך הכול מבצע פקודות, שנכתבו לו בשפה מיוחדת, שמבוססת על לוגיקה וחישובים מתמטיים.
      כל פעולה שאתה עושה – זה בעצם אתה שולח פקודה, והמחשב מבצע את מה שתוכנת לעשות בתגובה אליה.

      לדוגמה: כשאני לוחץ עכשיו על כפתור "שלח" בפוסט –
      יש מישהו שכתב מראש:

      "אם המשתמש לוחץ כאן → אז תשמור את ההודעה, תשלח אותה, תעדכן את המסך..."

      ומה אם אני רוצה לכתוב את הפקודות בעצמי?
      אפשר!
      וזה בדיוק כל עולם התכנות –
      לכתוב פקודות למחשב ישירות, בלי ממשק גרפי.

      לדוגמה, הפקודה:

      print("שלום עולם!")
      

      אומרת למחשב:
      "תדפיס לי את המשפט שלום עולם"

      איך עושים את זה בפועל?

      1. פותחים עורך טקסט פשוט (או עורך קוד כמו VS Code)
      2. כותבים את הפקודה:
      print("שלום עולם!")
      
      1. שומרים את הקובץ בשם כלשהו, עם סיומת .py (שזה פייתון)
      2. פותחים את שורת הפקודה (cmd), גוררים את הקובץ פנימה, ולוחצים אנטר

      המחשב יקרא את הקובץ, יבין את הפקודה – ויבצע אותה!
      (בשורת הפקודה יופיע המילים "שלום עולם"!)

      אבל... מה אם אני רוצה שהפקודה תתבצע כל 5 דקות?
      פה כבר נכנסים לעולם של אוטומציה.
      אפשר לכתוב קוד שאומר למחשב:

      import time
      while True:
          print("שלום עולם!")
          time.sleep(300)  
      

      אבל שים לב – אם המחשב שלך כבוי או שאתה סוגר את שורת הפקודה – זה יפסיק לעבוד.

      ופה נכנס הפתרון:



      שרת! מחשב שלא הולך לישון לעולם
      שרת הוא פשוט מחשב, כמו שלך – רק שהוא יושב בענן.
      אפשר "לתת לו קוד", והוא יריץ אותו כל הזמן
      ולכן, גם כשאתה ישן, לומד, או בשבת – השרת ממשיך להריץ את הפקודות שכתבת.

      מקודם הסברתי איך מכתיבים למחשב את הקוד במחשב בצורה מקומית - איך איך מכתיבים לשרת?
      כותבים את הקוד כמו שראינו קודם.

      (מכאן אני מסביר לפי איך שאני משתמש, ייתכן שיש דרכים יותר פשוטות...)

      1. פותחים חשבון ב־GitHub (אפשר להרחיב הרבה על השימושים בגיטהב אבל לא פה המקום)

      (GitHub הוא מקום בענן שבו שומרים קבצי קוד – כמו לשמור קבצים על שולחן העבודה, רק בענן.
      כדי שהשרת יוכל להריץ את הקוד – גם הקוד עצמו צריך להיות נגיש בענן.)

      1. יוצרים מאגר חדש, קוראים לו בשם, ומכניסים לשם את הקוד...
        אפשר לכתוב את הקוד בצורה מקומית בתוך עורך טקסטים פשוט, ואח"כ להעלות לגיטהב - לענן.
        ואפשר לכתוב את הקוד ישירות בענן.
        יש פה צילומי מסך...

      צור מאגר:
      3d86972c-89ff-40f6-887f-5f570239d0ea-image.png

      לאחר מכן צריך לקרוא שם למאגר...
      מדפדפים למטה ולוחצים על Create repository = צור מאגר

      7a62f813-7fbe-4227-b074-6639f3d55c4e-image.png
      עכשיו זה השלב שצריך להעלות את הקוד לענן - יש אפשרות להעלות קובץ מוכן מהמחשב, ויש אפשרות לייצר קובץ חדש בענן... פשוט לכתוב את הקוד שם!
      8247b196-afa8-46a6-b61d-d1c49ce4ccf0-image.png

      שימו לב לשם הקובץ!
      אם זה קוד פייתון – הסיומת חייבת להיות .py
      אם זו שפה אחרת – בהתאם.

      זהו - הקוד נמצא בענן. עכשיו צריך לחבר את השרת - המחשב שייקרא את הפקודות משם!!

      1. פותחים חשבון בחברת שרתים כלשהיא - ומכיוון שאני משתמש עם railway אני יסביר לפי זה אבל הרעיון הוא אותו דבר ברוב החברות של השרתים.

      אגב - ב Railway אפשר להרשם בצורה פשוטה דרך החשבון שנפתח בגיטהב.

      1. פריסת פרויקט חדש > פריסה מתוך מאגר בגיטהב > המאגר הרצוי

      c31fb9ef-e209-4eff-b996-4fb85be8ab9b-image.png
      c325b2f6-1fbc-455f-9f4c-2fc3bb50234d-image.png
      (אם זה הפעם הראשונה צריך ללחוץ על הגדרת אפליקצית גיטהב > כל המאגרים > התקנה ואימות
      ואז יוצגו כל המאגרים שיש בגיטהב תבחר במאגר המתאים ו... זהו המאגר נפרס!!

      פריסה זה בעצם המונח שמתאר את הסינכרון בין הקוד לשרת -
      ובמילים יותר פשוטות - הקוד זה ההוראות - כשפורסים את הקוד - בעצם אומרים לשרת - תקרא את כל ההוראות האלו -
      כך יוצא שבסיום הפריסה השרת מתחיל לבצע את הפעולות...

      בדוגמא לעיל:
      אם אמרנו לשרת "תדפיס את המילים "שלום עולם""
      השרת ידפיס לנו את המילים האלו...
      אפשר לראות את המילים האלו בלוגים - כלומר בתגובות של השרת!

      כל שינוי שעושים בקוד - צריך לפרוס שוב מחדש את הקוד בשרת... כדי שהשינויים יחולו
      ב railway הקוד נפרס אוטומטית בכל פעם שנשמר שינוי בקוד (כמובן אפשר לשנות את זה בהגדרות...).



      לוגים – למה זה חשוב?

      בשרת יש מושג שנקרא לוג שזה בעצם התגובות שהשרת עונה... גם את זה צריך להגדיר בקוד.
      למשל:
      אם אני רוצה שהשרת בכל חמש דקות ייצר קובץ חדש בשלוחה X בקו.
      אז מגדירים בסוף השרשרת פקודות - עוד פקודה וזה שאם הפעולה הצליחה שידפיס תשובה שהצליח ואם לא - אז שיגיאה - ופרטי השגיאה
      זה כמובן עוזר לדעת האם הפעולה הצליחה ואם לא אז מה השגיאה - אחרת בלי לוגים - זה ממש לגשש באפילה.

      איך מחברים את כל זה עם המערכת של ימות המשיח?
      כל חברת שרתים נותנת לינק - כתובת אינטרנט, שדרכה אפשר לתקשר עם השרת - לשלוח אליו נתונים וכו'

      ב railway זה נמצא פה
      24374255-e31e-4d61-960e-aa0c85788fbb-image.png
      אם זה לא מופיע צריך להיכנס להגדרות הפרויקט > צור דומיין.

      את הלינק הזה אפשר לחבר לשלוחת API בימות המשיח
      אפשר גם להשתמש עם שרת בלי לעשות שלוחה בימות המשיח באמצעות האפשרויות של גישת מפתחים

      כלומר - יש אפשרות לשלוח בקשות לשרת עם שלוחה ייעודית - כמו שמתואר פה
      ויש אפשרות לנהל דברים באמצעות טוקן (שם משתמש:סיסמא) כמו שמתואר פה

      ההסבר כאן עוסק רק בשימוש בקוד מוכן –
      אבל כל פעולה שאתה רוצה שהשרת יבצע – דורשת קוד מותאם משלה.
      ולכן צריך להכיר תכנות, או לפחות לדעת איך להתאים קוד בסיסי.

      מי שלא יודע לכתוב קוד יכול כמובן להשתמש עם "בינות מלאכותיות" לרוב...

      הדברים נכתבו כהמשך למה שכתבתי פה
      ומי שרוצה לכתוב קוד עם בינה מלאכותית אולי כדאי לו לראות גם את זה
      וגם פה יש מידע חשוב למתחילים שכדאי מאוד לעבור עליו...

      מקווה שהדברים יהיו לתועלת
      ומקווה שזה לא היה מידי ארוך...
      אם פיספסתי משהו - אשמח לערוך את הפוסט!

      פורסם בעזרה הדדית למשתמשים מתקדמים
      Y
      y6714453
    • ✨ ⚡ כותבים קוד עם AI (בינה מלאכותית)? כמה טיפים איך לא כדאי...

      לאחרונה אני רואה הרבה דיבור פה בפורום על השימוש בבינה מלאכותית לכתיבת קוד למערכת של ימות המשיח.
      אז רציתי לשתף כמה מחשבות בעניין:

      ברור שכל מי שלמד לפתח בצורה מקצועית באמת – יגחך כשיראה את הקוד שה־AI מייצר.
      לפעמים הוא מסורבל, לפעמים לא יעיל, ולפעמים פשוט שגוי לגמרי.
      וברור לי שאי אפשר באמת להיות מתכנת אפילו לא מתחיל... בלי להבין כלום בתכנות, ולהשתמש רק עם AI. מי שרוצה להיות מפתח – אין תחליף ללמידה אמיתית, ניסוי וטעייה והבנה של המערכת.

      אבל…
      מי שיש לו את הכוח להעתיק שגיאות חזרה לצ'אט, להתעקש קצת, לנסח את הבקשה בצורה ברורה – ורצון פשוט "לעשות משהו" ולהתקדם – אז כן, בהחלט אפשר לבנות ככה דברים. (אפילו דברים שלמתחיל ייראה כדברים מורכבים...)
      זה לא יהיה הקוד הכי אלגנטי בעולם – אבל הוא יעשה את העבודה. ולפעמים, זה כל מה שצריך.

      אז הנה כמה טיפים קטנים שיכולים לעזור למי שרוצה להשתמש בזה נכון:

      לא לצפות שה־AI "יבין" את ימות המשיח
      הוא לא מכיר את המערכת בכלל ולא יודע מה צריך להגדיר בכל שלוחה. שאלות כמו "מה צריך להכניס בהגדרות" או "איך להגדיר שלוחה מסוג הקלטה" – לרוב יענו תשובות, שגויות או לא רלוונטיות.
      כל העניין הוא לגבי לכתוב קוד בשביל שרת, כמו פייתון PHP וכדו'.

      אל תתחיל ישר עם "תכתוב לי קוד ל..." בלי להבין מה אתה בכלל רוצה
      לפני שאתה פונה אליו – תחשוב רגע לבד:
      מה בדיוק אתה רוצה שהמערכת תעשה?
      מה קורה בכל שלב? מאיפה מגיעים הנתונים? לאן הם הולכים?
      רק אחרי שיש לך תוכנית לוגית בראש, תן לו אותה ותבקש שיכתוב לך קוד לפי זה.
      ככה יש סיכוי שתצא מזה תוצאה נורמלית – ולא סלט של משתנים שלא קשורים למציאות.
      ושוב מאותה סיבה שה AI לא באמת מכיר את הפונקציות של ימות המשיח, ולפעמים יש דרכים הרבה יותר פשוטות ממה שהוא מציע.

      לא לסמוך עליו בעיניים עצומות – במיוחד כשמדובר בפעולות קריטיות.
      הוא יכול בטעות לשלוח נתונים לא נכונים, לשמור בקובץ הלא נכון, או פשוט להפסיק לפעול באמצע.
      לפעמים הקוד יכול לעבוד יום יומיים ופתאום לקרוס מסיבה כל שהיא שה AI לא חישב (יכול להיות המון דוגמאות)
      אל תכניס אותו למערכות "חיות" בלי פיקוח.

      להזין לו מידע אמיתי על ימות המשיח
      אם רוצים לפתח קוד שקשור ל־API של ימות, או להתממשקות עם קבצים ומודולים – כדאי פשוט להעתיק לו את קובץ המפתחים של ימות או שירשור רלוונטי מהפורום.
      הוא קורא מעולה – ואם נותנים לו את המידע, הוא יודע לעבד אותו טוב מאוד.

      לתשומת לב: אין אפשרות להעתיק קישורים של אשכולות מהפורום, ולכן יש שתי אופציות, או פשוט להעתיק את כל הטקסט בעמוד (ובדרך כלל הוא מצליח להבין הקשרים) או בצורה יותר אינטליגנטית לייצא את הדף ב PDF ולהעלות לו.

      דרך אגב, עוד משהו שיכול לעניין את מי שמתנסה בזה –
      השוואה קצרה בין Gemini ל־GPT בכתיבת קוד:

      ל־Gemini יש יתרון משמעותי בכתיבה של קודים ארוכים.
      אם אתם עובדים על קובץ שלם ורוצים שיכתוב אותו מחדש עם שינוי קטן – GPT בדרך כלל פשוט לא יכול להחזיר את כל הקוד (בגלל מגבלת אורך), וייתן רק את הקטע ששיניתם.
      לעומת זאת, Gemini מחזיר את הקובץ המלא גם אם הוא יחסית ארוך – וזה שימושי מאוד.

      Gemini גם יותר מדויק בהוראות נקודתיות.
      נגיד תכתבו לו: "תשאיר הכל בדיוק אותו דבר, רק תשנה את הפונקציה הזו והזו" – יש סיכוי טוב שהוא באמת יעשה את זה בלי להרוס חלקים אחרים. GPT לעיתים ממציא שינויים לא רלוונטיים.

      מבחינת מהירות – Gemini מרגיש הרבה יותר מהיר בכתיבת קוד ארוך.
      פשוט מקבלים את הכל תוך שניות, בלי המתנה ארוכה או "טעינה בשלבים".

      מצד שני, GPT כן זוכר שירשורים קודמים, ויודע להתאים את עצמו לדרישות שחוזרות על עצמן.
      לדוגמה: אם כתבתם לו קודם לבנות קובץ שמע שמתאים למערכת של ימות (פורמט WAV, קידוד מסוים וכו') –
      ואז תבקשו ממנו לכתוב פונקציה אחרת שמייצרת קובץ חדש – הוא יזכור את הדרישות הקודמות וימשיך אוטומטית עם אותו פורמט.
      ב־Gemini לעומת זאת, צריך להזכיר כל פעם מחדש את כל הדרישות.

      אז מי שרוצה פשוט לקחת קוד שלם, לעשות בו שינויים מדויקים, ולקבל את התוצאה המלאה – Gemini הרבה יותר נוח.
      ומי שמחפש שיחה מתמשכת, עם "סגנון אישי" והרבה אימוג'יים... – כנראה ש־GPT יתאים יותר.

      נ.ב. לגבי גרוק לא ניסתי אף פעם!

      פורסם בטיפים עצות והדגמות מהמשתמשים
      Y
      y6714453
    • 📞 מאגר קווי תוכן ומידע - בממשק מסודר

      בשבוע האחרון עלה כאן בפורום רעיון להקים מאגר מסודר של כל מספרי הקווים למיניהם.
      הרעיון התקבל בחום, ומשתמשים רבים כבר שיתפו מספרים והוסיפו מידע חשוב.

      כדי לעשות את השימוש קל יותר – יצרתי דף אינטרנט פשוט ונוח, שבו אפשר להוסיף מספרים חדשים לערוך פרטים קיימים לחפש מספרים בצורה מסודרת...

      כל מי שפתח מערכת – מוזמן כמובן להוסיף את הקו שלו למאגר.

      📎 הקישור לאתר:

      איתור קווים ומערכות

      קרדיט כמובן ל @אליהו-החכם על הרעיון, ל @יהודה-צ-כ על המאגר הנרחב של המספרים, ל @י-ע על הגוגל שיטס שיצר, ולכל מי שערך והעשיר – אני רק עטפתי את זה בממשק נוח יותר 🙂

      אשמח להערות, הארות, והצעות לשיפור

      פורסם בעזרה הדדית למשתמשים מתקדמים קווים
      Y
      y6714453
    • 📂 🔊 פתיחת שלוחות מרובות עם קבצי שמע / טקסט

      יצירת שלוחות מרובות

      שלום לכולם!
      ב"ה יצא לי לעשות סקריפט פשוט, שעוזר ליצור ולהעלות שלוחות למערכת ימות המשיח בקלות, כולל יצירת קבצי שמע (TTS) וקובצי הגדרות (ext.ini) אוטומטית.

      שלב אחד:
      מה הסקריפט עושה?
      הסקריפט קורא קובץ אקסל פשוט, ועל פיו:

      • יוצר שלוחות ותתי שלוחות במערכת ימות המשיח.
      • מעלה קבצי הגדרה (ext.ini) אוטומטית.
      • ממיר טקסט לקבצי שמע (TTS) בעברית ומעלה אותם לשלוחה לפי הנתיב
      • מעלה קובצי טקסט/TTS רגילים.
      • הוא דואג להתקנה אוטומטית של תוכנת FFmpeg.

      שלב שתיים:
      מכינים את הקבצים...
      קובץ הסקריפט: שמרו את קוד הפייתון שפה (בספוילר) בקובץ בשם make_audio.py (או כל שם אחר עם סיומת .py).

      import pandas as pd
      import requests
      from requests_toolbelt.multipart.encoder import MultipartEncoder
      import os
      import asyncio
      import edge_tts
      import subprocess
      import json
      import urllib.request
      import zipfile
      import shutil
      import warnings
      
      warnings.filterwarnings("ignore")
      
      DEFAULT_TTS_VOICE = "he-IL-AvriNeural"
      # נגדיר את FFMPEG_EXECUTABLE כ-None בהתחלה, ורק נאתחל אותו כשנצטרך
      FFMPEG_EXECUTABLE = None 
      
      def read_excel_data(excel_file_path):
          print(f"📖 קורא קובץ אקסל: {excel_file_path}")
          try:
              df = pd.read_excel(excel_file_path, header=None)
              username = str(df.iloc[0, 1]).strip()
              password = str(df.iloc[1, 1]).strip()
              
              if not username:
                  print("❌ שגיאה: אנא הכנס מספר מערכת (תא B1 באקסל).")
                  return None, None, None
              if not password:
                  print("❌ שגיאה: אנא הכנס סיסמא (תא B2 באקסל).")
                  return None, None, None
      
              extensions = df.iloc[5:, [0, 1, 2, 3, 4]].dropna(how='all')
              extensions.columns = ['נתיב', 'הגדרה', 'שם השלוחה', 'קובץ שמע להעלאה', 'קובץ טקסט להעלאה']
              
              extensions = extensions.apply(lambda x: x.astype(str).str.strip().replace('nan', '') if x.dtype == 'object' else x)
      
              print(f"✔️ נקראו בהצלחה: משתמש={username}, סיסמה={'*' * len(password)}")
              print(f"📋 נתוני השלוחות שנקראו:\n{extensions.to_string()}")
              return username, password, extensions.to_dict('records')
          except FileNotFoundError:
              print(f"❌ שגיאה: קובץ האקסל '{excel_file_path}' לא נמצא. ודא שהוא באותה תיקייה כמו הסקריפט.")
              return None, None, None
          except Exception as e:
              print(f"❌ שגיאה בקריאת קובץ האקסל: {e}")
              return None, None, None
      
      def create_ext_ini_file(extension_type, extension_name, output_file_name, is_subpath=False, direct_ini_content=None):
          content = ""
      
          if direct_ini_content:
              content = direct_ini_content.strip()
              if not content.endswith('\n'):
                  content += '\n'
              print(f"⚙️ יוצר קובץ ext.ini מתוכן INI ישיר.")
          elif is_subpath:
              content = "type=menu\n"
          else:
              normalized_extension_type = str(extension_type).strip().lower() if extension_type else ""
              if pd.isna(extension_type):
                  normalized_extension_type = ""
      
              if normalized_extension_type == 'השמעת קבצים':
                  content = "type=playfile\n"
              elif normalized_extension_type == 'תפריט':
                  content = "type=menu\n"
              elif normalized_extension_type in ['הקלטה', 'הקלטות']:
                  content = "type=record\n"
              else:
                  print(f"⚠️ סוג שלוחה לא מוכר '{extension_type}'. מוגדר כ-'תפריט' כברירת מחדל.")
                  content = "type=menu\n"
                  
              if extension_name and extension_name.strip():
                  content += f"title={extension_name.strip()}\n"
                  
          try:
              with open(output_file_name, 'w', encoding='utf-8') as f:
                  f.write(content)
              print(f"✅ נוצר קובץ {output_file_name} עם תוכן: {content.strip() or '[ריק]'}")
              return True
          except Exception as e:
              print(f"❌ שגיאה ביצירת קובץ {output_file_name}: {e}")
              return False
      
      async def create_and_convert_audio_file(text, output_wav_name):
          output_mp3_temp = f"temp_{os.path.splitext(output_wav_name)[0]}.mp3"
          
          print(f"🔊 יוצר קובץ שמע {output_wav_name} מטקסט: '{text}'")
          
          # הבדיקה והאיתחול של FFMPEG_EXECUTABLE מתרחשים כאן בלבד
          global FFMPEG_EXECUTABLE
          if not FFMPEG_EXECUTABLE or not os.path.exists(FFMPEG_EXECUTABLE):
              print(f"⏳ מנסה להוריד או לאתר את FFmpeg כיוון שנדרש לטיפול בקבצי שמע...")
              ensure_ffmpeg() # קוראים ל-ensure_ffmpeg רק כאן
              if not FFMPEG_EXECUTABLE or not os.path.exists(FFMPEG_EXECUTABLE):
                  print(f"❌ לא ניתן ליצור קובץ שמע {output_wav_name} כי FFmpeg לא זמין.")
                  return False
      
          try:
              comm = edge_tts.Communicate(text, voice=DEFAULT_TTS_VOICE)
              await comm.save(output_mp3_temp)
              print(f"✅ קובץ אודיו זמני נוצר בהצלחה: {output_mp3_temp}")
      
              result = subprocess.run(
                  [FFMPEG_EXECUTABLE, "-loglevel", "error", "-y", "-i", output_mp3_temp, "-ar", "8000", "-ac", "1", "-acodec", "pcm_s16le", output_wav_name],
                  check=True
              )
              print(f"✅ קובץ WAV סופי נוצר בהצלחה: {output_wav_name}")
              return True
          except edge_tts.exceptions.NoAudioReceived as e:
              print(f"❌ שגיאה ביצירת קובץ שמע {output_wav_name}: {e}")
              print("❗ ודא/י חיבור אינטרנט תקין, אין חסימות חומת אש/אנטי-וירוס, או נסה/י קול אחר.")
          except subprocess.CalledProcessError as e:
              print(f"❌ שגיאה בהמרת אודיו (FFmpeg) עבור {output_wav_name}: {e}. ודא/י ש-FFmpeg מותקן ונגיש.")
          except FileNotFoundError:
              print(f"❌ שגיאה: FFmpeg לא נמצא בנתיב המוגדר. ודא/י שהורד והוגדר כראוי.")
          except Exception as e:
              print(f"❌ שגיאה כללית ביצירת/המרת אודיו עבור {output_wav_name}: {e}")
          finally:
              if os.path.exists(output_mp3_temp):
                  os.remove(output_mp3_temp)
          return False
      
      def create_text_file(text, output_file_name):
          print(f"📝 יוצר קובץ טקסט {output_file_name} עם תוכן: {text}")
          try:
              with open(output_file_name, 'w', encoding='utf-8') as f:
                  f.write(text)
              print(f"✅ קובץ טקסט {output_file_name} נוצר בהצלחה")
              return True
          except Exception as e:
              print(f"❌ שגיאה ביצירת קובץ טקסט {output_file_name}: {e}")
              return False
      
      def upload_file_to_yemot(file_path, yemot_full_path, username, password):
          token = f"{username}:{password}"
          
          file_ext = file_path.lower()
          if file_ext.endswith('.wav'):
              content_type = 'audio/wav'
          elif file_ext.endswith('.txt') or file_ext.endswith('.tts'):
              content_type = 'text/plain'
          elif file_ext.endswith('.ini'):
              content_type = 'text/plain'
          else:
              content_type = 'application/octet-stream'
              
          try:
              with open(file_path, 'rb') as f_read:
                  m = MultipartEncoder(fields={
                      "token": token,
                      "path": yemot_full_path,
                      "upload": (os.path.basename(file_path), f_read, content_type)
                  })
                  print(f"⬆️ מעלה קובץ {os.path.basename(file_path)} לנתיב: {yemot_full_path}")
                  r = requests.post("https://www.call2all.co.il/ym/api/UploadFile", data=m, headers={'Content-Type': m.content_type})
                  r.raise_for_status()
                  print(f"✔️ הקובץ '{os.path.basename(file_path)}' הועלה בהצלחה")
                  return True
          except FileNotFoundError:
              print(f"❌ שגיאה: קובץ מקור להעלאה לא נמצא: {file_path}")
              return False
          except requests.exceptions.RequestException as e:
              print(f"❌ שגיאה בהעלאת קובץ {os.path.basename(file_path)}: {e}")
              print(f"📤 תגובת שרת: {r.text if 'r' in locals() else 'אין תגובה מהשרת'}")
              return False
          except Exception as e:
              print(f"❌ שגיאה בלתי צפויה בהעלאת קובץ {os.path.basename(file_path)}: {e}")
          return False
      
      def generate_subpaths(full_path):
          parts = [p for p in full_path.split('/') if p]
          subpaths = []
          current_path_parts = []
          for part in parts[:-1]:
              current_path_parts.append(part)
              subpaths.append('/'.join(current_path_parts))
          return subpaths
      
      def test_yemot_credentials(username, password):
          token = f"{username}:{password}"
          
          dummy_file_name = "temp_cred_test.txt"
          dummy_file_path_local = os.path.join(os.getcwd(), dummy_file_name)
          yemot_target_path = "ivr2:/temp_credential_test_folder/test_file.txt"
      
          try:
              with open(dummy_file_path_local, "w") as f:
                  f.write("test_content")
              
              print("⏳ בודק שם משתמש וסיסמא מול מערכת ימות המשיח...")
              
              with open(dummy_file_path_local, 'rb') as f_read_dummy:
                  m = MultipartEncoder(fields={
                      "token": token,
                      "path": yemot_target_path,
                      "upload": (dummy_file_name, f_read_dummy, 'text/plain')
                  })
                  
                  r = requests.post("https://www.call2all.co.il/ym/api/UploadFile", data=m, headers={'Content-Type': m.content_type})
              
              response_text = r.text.strip()
              response_text_upper = response_text.upper()
      
              if r.status_code == 401 or r.status_code == 403:
                  print("❌ שם משתמש ו/או סיסמא לא תקין. שגיאת אימות (Unauthorized/Forbidden).")
                  return False
      
              try:
                  response_json = json.loads(response_text)
                  if response_json.get("responseStatus") == "OK" and response_json.get("success") == True:
                      print("✅ שם משתמש וסיסמא תקינים.")
                      return True
                  elif "TOKEN INVALID" in response_text_upper or \
                       "המספר אינו מורשה" in response_text_upper or \
                       "THE NUMBER IS NOT VALID" in response_text_upper or \
                       "מספר המערכת אינו תקין" in response_text_upper:
                      print("❌ שם משתמש ו/או סיסמא לא תקין.")
                      return False
                  else:
                      print(f"❌ שם משתמש ו/או סיסמא לא תקין. תגובת שרת לא צפויה: {response_text}")
                      return False
              except json.JSONDecodeError:
                  if "ERROR:" in response_text_upper:
                      if "TOKEN INVALID" in response_text_upper or \
                         "המספר אינו מורשה" in response_text_upper or \
                         "THE NUMBER IS NOT VALID" in response_text_upper or \
                         "מספר המערכת אינו תקין" in response_text_upper:
                          print("❌ שם משתמש ו/או סיסמא לא תקין.")
                          return False
                      else:
                          print(f"❌ שם משתמש ו/או סיסמא לא תקין. שגיאת שרת לא ספציפית: {response_text}")
                          return False
                  else:
                      print(f"❌ שם משתמש ו/או סיסמא לא תקין. תגובת שרת בפורמט לא צפוי: {response_text}")
                      return False
      
          except requests.exceptions.RequestException as e:
              print(f"❌ שגיאת חיבור או תקשורת בעת בדיקת התחברות: {e}")
              print("❗ ודא/י חיבור אינטרנט תקין.")
              return False
          except Exception as e:
              print(f"❌ שגיאה בלתי צפויה בעת בדיקת התחברות: {e}")
              return False
          finally:
              if os.path.exists(dummy_file_path_local):
                  try:
                      os.remove(dummy_file_path_local)
                  except OSError as e:
                      print(f"⚠️ אזהרה: לא ניתן למחוק את קובץ הדמה '{dummy_file_path_local}': {e}")
      
      def ensure_ffmpeg():
          global FFMPEG_EXECUTABLE
      
          local_ffmpeg_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "bin", "ffmpeg.exe")
      
          if os.path.exists(local_ffmpeg_path):
              print("⏩ ffmpeg כבר קיים בנתיב המקומי.")
              FFMPEG_EXECUTABLE = local_ffmpeg_path
              return
      
          print("⬇️ מוריד ומגדיר ffmpeg...")
          os.makedirs(os.path.dirname(local_ffmpeg_path), exist_ok=True)
      
          url = "https://www.gyan.dev/ffmpeg/builds/ffmpeg-release-essentials.zip"
          archive_path = os.path.join(os.path.dirname(local_ffmpeg_path), "ffmpeg.zip")
          
          try:
              print(f"📥 מוריד קובץ FFmpeg מ: {url}")
              urllib.request.urlretrieve(url, archive_path)
              print(f"📦 חולץ את קובץ FFmpeg מ: {archive_path}")
      
              with zipfile.ZipFile(archive_path, 'r') as zip_ref:
                  found_ffmpeg_in_zip = False
                  for member in zip_ref.namelist():
                      if member.endswith('ffmpeg.exe'):
                          source = zip_ref.open(member)
                          target = open(local_ffmpeg_path, "wb")
                          with source, target:
                              shutil.copyfileobj(source, target)
                          print(f"✅ FFmpeg הוכן בהצלחה ב: {local_ffmpeg_path}")
                          FFMPEG_EXECUTABLE = local_ffmpeg_path
                          found_ffmpeg_in_zip = True
                          break
                  
                  if not found_ffmpeg_in_zip:
                      print("❌ שגיאה: לא נמצא ffmpeg.exe בתוך קובץ ה-ZIP שהורד.")
                      FFMPEG_EXECUTABLE = None
                      return
      
          except Exception as e:
              print(f"❌ שגיאה בהורדה או בחילוץ של FFmpeg: {e}")
              print("❗ ודא/י חיבור אינטרנט תקין ונסה/י שוב.")
              FFMPEG_EXECUTABLE = None
          finally:
              if os.path.exists(archive_path):
                  try:
                      os.remove(archive_path)
                  except OSError as e:
                      print(f"⚠️ אזהרה: לא ניתן למחוק את קובץ ה-ZIP הזמני '{archive_path}': {e}")
      
          if not os.path.exists(local_ffmpeg_path):
              print("❌ FFmpeg לא הותקן אוטומטית. אנא הורד/י והתקן/י אותו ידנית.")
              print("ניתן להוריד מכאן: https://www.gyan.dev/ffmpeg/builds/ (בחר/י את גרסת Essentials או Full עבור Windows).")
              FFMPEG_EXECUTABLE = None
      
      async def main():
          print("🚀 מתחיל תהליך יצירת והעלאת שלוחות...")
          
          # ensure_ffmpeg() הוסר מכאן - יופעל רק במידת הצורך
          # if not FFMPEG_EXECUTABLE or not os.path.exists(FFMPEG_EXECUTABLE):
          #     print("⚠️ התהליך נעצר עקב חוסר ב-FFmpeg. אנא התקן/י אותו ידנית כדי להמשיך.")
          #     return
      
          script_dir = os.path.dirname(os.path.abspath(__file__))
          excel_file = os.path.join(script_dir, "משני.xlsx")
          
          print(f"📂 תיקיית הסקריפט: {script_dir}")
          print(f"🔍 מחפש קובץ אקסל: {excel_file}")
          if not os.path.exists(excel_file):
              print(f"❌ קובץ האקסל '{excel_file}' לא נמצא בתיקיית הסקריפט!")
              print(f"📋 קבצים בתיקייה: {os.listdir(script_dir)}")
              return
      
          username, password, extensions_data = read_excel_data(excel_file)
          if not username or not password or not extensions_data:
              print("⚠️ התהליך נעצר עקב חוסר בנתוני התחברות או נתוני שלוחות.")
              return
      
          if not test_yemot_credentials(username, password):
              print("⚠️ התהליך נעצר עקב פרטי התחברות לא תקינים.")
              return
      
          processed_subfolders = set()
      
          for ext in extensions_data:
              path = ext.get('נתיב')
              extension_type = ext.get('הגדרה')
              extension_name = ext.get('שם השלוחה')
              audio_content = ext.get('קובץ שמע להעלאה', '')
              text_content = ext.get('קובץ טקסט להעלאה', '')
      
              if isinstance(path, str): path = path.strip()
              if isinstance(extension_type, str): extension_type = extension_type.strip()
              if isinstance(extension_name, str): extension_name = extension_name.strip()
              if isinstance(audio_content, str): audio_content = audio_content.strip().replace('...', '')
              if isinstance(text_content, str): text_content = text_content.strip().replace('...', '')
      
              if not path:
                  print(f"⚠️ דילוג על שלוחה: נתיב לא תקין או חסר '{path}'")
                  continue
                  
              clean_path = path
              
              print(f"\n📋 מעבד שלוחה: {extension_name} ({path})")
      
              subpaths_to_create = generate_subpaths(clean_path)
              for subpath_item in subpaths_to_create:
                  full_sub_yemot_ini_path = f"ivr2:/{subpath_item}/ext.ini"
                  if full_sub_yemot_ini_path not in processed_subfolders:
                      print(f"⚙️ מעבד תת-שלוחה (ברירת מחדל menu): {full_sub_yemot_ini_path}")
                      ini_file_name = "ext.ini"
                      if create_ext_ini_file(None, None, ini_file_name, is_subpath=True):
                          if not upload_file_to_yemot(ini_file_name, full_sub_yemot_ini_path, username, password):
                              print(f"❌ שגיאה בהעלאת INI לתת-שלוחה {full_sub_yemot_ini_path}. המשך עיבוד...")
                      else:
                          print(f"❌ שגיאה ביצירת INI לתת-שלוחה {full_sub_yemot_ini_path}. מדלג.")
                          
                      if os.path.exists(ini_file_name):
                          os.remove(ini_file_name)
                      processed_subfolders.add(full_sub_yemot_ini_path)
      
              main_ini_file = "ext.ini"
              target_yemot_ini_path = f"ivr2:/{clean_path}/ext.ini"
      
              should_create_main_ext_ini = True
              
              is_direct_ini_input = False
              ini_content_for_direct_upload = ""
              
              if isinstance(extension_type, str) and extension_type.strip():
                  if ("type=" in extension_type.strip().lower() and "=" in extension_type.strip()) or "\n" in extension_type.strip():
                      is_direct_ini_input = True
                      ini_content_for_direct_upload = extension_type.strip()
      
              if is_direct_ini_input:
                  if not create_ext_ini_file(None, None, main_ini_file, direct_ini_content=ini_content_for_direct_upload):
                      print(f"❌ שגיאה ביצירת INI ראשי מתוכן ישיר עבור {extension_name}. מדלג על שלוחה זו.")
                      continue
              else:
                  normalized_ext_type_for_check = str(extension_type).strip().lower() if extension_type else ""
                  if pd.isna(extension_type):
                      normalized_ext_type_for_check = ""
      
                  if normalized_ext_type_for_check == 'תיקייה' or not normalized_ext_type_for_check:
                      print(f"🗂️ שלוחה מסוג '{normalized_ext_type_for_check or 'ריק'}'. לא נוצר קובץ ext.ini ראשי.")
                      should_create_main_ext_ini = False
                  else:
                      if not create_ext_ini_file(extension_type, extension_name, main_ini_file):
                          print(f"❌ שגיאה ביצירת INI ראשי עבור {extension_name}. מדלג על שלוחה זו.")
                          continue
                  
              if should_create_main_ext_ini:
                  if not upload_file_to_yemot(main_ini_file, target_yemot_ini_path, username, password):
                      print(f"❌ שגיאה בהעלאת INI ראשי עבור {extension_name}. המשך עיבוד...")
                      if os.path.exists(main_ini_file):
                          os.remove(main_ini_file)
                      continue
                  
                  if os.path.exists(main_ini_file):
                      os.remove(main_ini_file)
      
              # השינוי העיקרי: בדיקת audio_content לפני ניסיון יצירת קובץ שמע
              if audio_content and audio_content.strip(): 
                  audio_texts = [t.strip() for t in audio_content.split(' + ') if t.strip()]
                  for i, text_to_tts in enumerate(audio_texts):
                      audio_wav_final = f"{str(i).zfill(3)}.wav"
                      
                      # קריאה ל-create_and_convert_audio_file תטפל באיתחול FFmpeg אם נדרש
                      if await create_and_convert_audio_file(text_to_tts, audio_wav_final):
                          audio_yemot_path = f"ivr2:/{clean_path}/{audio_wav_final}"
                          upload_file_to_yemot(audio_wav_final, audio_yemot_path, username, password)
                      else:
                          print(f"⚠️ דילוג על העלאת קובץ שמע {audio_wav_final} עקב שגיאה ביצירה/המרה.")
                      
                      if os.path.exists(audio_wav_final):
                          os.remove(audio_wav_final)
      
              # קבצי טקסט אינם דורשים את FFmpeg, אז הם ממשיכים לפעול כרגיל
              if text_content and text_content.strip() and (extension_type and pd.notna(extension_type)):
                  text_files_list = [t.strip() for t in text_content.split(' + ') if t.strip()]
                  for i, item_text_content in enumerate(text_files_list):
                      if os.path.exists(item_text_content):
                          file_name_to_upload = os.path.basename(item_text_content)
                          print(f"📄 מעלה קובץ טקסט קיים: {file_name_to_upload}")
                          text_yemot_path = f"ivr2:/{clean_path}/{file_name_to_upload}"
                          upload_file_to_yemot(item_text_content, text_yemot_path, username, password)
                      else:
                          text_file_name_final = f"{str(i).zfill(3)}.tts"
                          if create_text_file(item_text_content, text_file_name_final):
                              text_yemot_path = f"ivr2:/{clean_path}/{text_file_name_final}"
                              upload_file_to_yemot(text_file_name_final, text_yemot_path, username, password)
                          else:
                              print(f"⚠️ דילוג על העלאת קובץ טקסט {text_file_name_final} עקב שגיאה ביצירה.")
                          
                          if os.path.exists(text_file_name_final):
                              os.remove(text_file_name_final)
      
          print("\n✅ סיום עיבוד כל השלוחות בהצלחה!")
      
      if __name__ == "__main__":
          asyncio.run(main())
      

      קובץ האקסל: ניתן להוריד מפה משני.xlsx

      חשוב מאוד: שימרו על מבנה האקסל כמו בדוגמה המקורית שקיבלתם.
      חשוב מאוד ששתי הקבצים (הקוד להרצה והקובץ אקסל) יהיו באותה תיקייה על המחשב!!

      שלב שלוש:
      פשוט תמלאו את הקובץ אקסל לפי השלוחות שתרצו לייצר לדוגמא:

      c458ec9e-18ac-4e08-af3f-bb74a850dea0-image.png

      כמה כללים בנוגע למילוי השדות:

      • השדות שהם חובה זה - למעלה בשם משתמש והסיסמה, חוץ מזה הכל יכול להישאר ריק - אם "הגדרות שלוחה" נשאר ריק - זה מייצר תיקייה בלבד בלי שום הגדרות.

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

      • אם רוצים למשל לעשות מאה תיקיות / שלוחות - לא צריך למלאות מאה שדות אפשר פשוט לעשות שתי שדות למשל:
        1/1/1
        1/1/2
        ואז לגרור כלפי מטה.

      • במידה ומגדירים ב"נתיב" למשל שלוחה 1/1/1 ומגדירים ב"הגדרות השלוחה" שיהיה השמעת קבצים או כל הגדרה אחרת - נוצר שלוחה בתוך שלוחה בתוך שלוחה - ומכיון שרק השלוחה האחרונה הוגדרה - ברירת מחדל שהשלוחות מוגדרות ל"תפריט".

      • ב"העלאת קובץ שמע / טקסט - ברירת מחדל נוצר קובץ בשם 000 אפשר לייצר כמה קבצים בכל שלוחה על ידי הפרדה של + לדוגמה "שלום וברוכים הבאים לקו המידע + לתכנים נוספים הקש כוכבית"
        כך נוצרים שתי קבצים 000, 001.

      שלב ארבע:
      שימו לב לפני שמריצים את הקוד צריך לוודא שפייתון מותקן על המחשב
      אפשר להתקין עם הפקודה הזו בשורת הפקודה

      winget install Python.Python.3.12 --source winget
      

      לאחר מכן תריצו את הפקודה הזו

      pip install pandas requests requests-toolbelt edge-tts
      

      ואז לגרור את הקובץ פייתון לתוך השורת פקודה (או להעתיק את הנתיב שלו) וכמובן - אנטר!

      השימוש באחריות המשתמש בלבד!
      אם מישהו מסתבך עם ההרצה של הקוד אשמח לעזור
      אשמח לשמוע שזה עזר למישהו... ואפילו למישהו אחד... דיינו!

      פורסם בטיפים עצות והדגמות מהמשתמשים
      Y
      y6714453
    • RE: אבטחה - באימות דו שלבי / דעתכם... 🪪💂🏻

      @חסידישער

      אולי שמישהו סוף סוף יעשה כאן סדר גם ל"עמך" שיש להם קצת הבנה בנושא אבל עדיין לא מתכנתים אלא יודעים לבנות כמה דברים טובים על ידי AI וכו',

      עכשיו שמישהו יעשה סדר מתי צריכים להכניס ולהגדיר שרת כמורשה בלי אימות דוש ומתי לא צריך
      כלומר תפשטו בצורה פשוטה

      שים לב שאם תבין את ההיגיון שעומד מאחורי הלוגיקה הזאת... יהיה לך יותר פשוט לזכור


      בכל פעם שאתה מתחבר למערכת "דרך הדלת הראשית" עם מספר והסיסמא צריך אימות דו שלבי!
      דהיינו צורת הזיהוי הרגילה כמו שהיה עד היום - לא מספיק אלא צריך אימות כפול -
      לכן גם באתר, גם ב Login וגם במספר מערכת:סיסמא, בכל הפעמים האלו אתה מתחייב באימות דו שלבי.


      אמנם יש לך אפשרות להיפתר מהאימות דו שלבי - אם תכניס את הכתובת IP של מבקש הבקשה (שרת - בקוד, מחשב - באתר ניהול...) בתוך הכתובות שפטורות מאימודו"ש!

      הכתובות האלו הם בעצם בעיקרון היו צריכות אימות דו שלבי הרי הם באים דרך הדלת הראשית אמנם - הם, יש להם פטור מיוחד... כיון שהם עברו אימות.

      וכי תימא - אז בעצם מה ההבדל בין "אסימוני זכור אותי" ל"כתובות המאושרות" כלומר מה בא ה"זכור אותי" להוסיף אם ממילא אני יכול להיפטר לגמרי מהאימודו"ש?!
      (שים לב שזכור אותי זה מהלך כזה שהוא לא פוטר אותך מאימו"דש אלא פשוט זוכר אותך...)

      אז בגדול - על המחשב שלך - וודאי שפשוט שתכניס את הכתובת IP המאושרת - ויותר לא תצטרך אימודו"ש
      כל הנושא זה אם אתה רוצה להכניס כתובת שתהיה תקיפה רק לשלושים יום... למשל מחשב מסויים וכו'... דהיינו שאתה רוצה שמחשב מסויים לא ייפתר מהאימוד"ש אלא ייזכר לזמן מה...


      נמצא שיש שלוש אפשרויות כניסה למערכת:
      כניסה רגילה באתר למשל - דורש אימות דו שלבי.
      כניסה ממחשב עם אסימון "זכור אותי" חייב באימות דו שלבי... אבל פשוט "זוכר"
      כניסה מכתובת IP מאושרת... פטור מאימות דו שלבי בגלל האישור המיוחד שהוא קיבל...

      ופה נכנס החלק השלישי - כמו דלת אחורית שבכלל לא צריכה אימות... וזה כמובן החלק של API Key זה כמו בעה"ב בכבודו ובעצמו פשוט מגיע עם המפתח, פותח, ונכנס!... הוא לא צריך לעבור את הבידוק...(זה לא שהוא קיבל "פטור" מהאימות...).

      לכן אם נכנסים למערכת עם המפתח הזה לא צריך להכניס לכתובות IP מאושרות ... כי כביכול זה המפתח עצמו של המערכת...

      --- בלי קשר (או עם...) ימות החליטו שמהיום אין יותר שימוש עם מספר:סיסמא, אפילו בכתובות IP מאושרות...
      דהיינו - א"א להזדהות עם מספר מערכת וסיסמא בלי לעבור את השלב של ההתחברות בפועל...

      על פניו נראה לא ברור מה מוסיף החלק של ה"כניסה"... ממילא תמיד זה עם מספר מערכת וסיסמא...

      נראה לי העניין הוא שכשעושים login יש כל מיני הגבלות למשל שהחיבור נפקע אחרי זמן מסויים בלי בקשה (גם באתר - בלי שימוש החיבור מפסיק...)

      מקווה שהייתי ברור (ייתכן שטעיתי אני גם למדתי את הנושא רק בזמן האחרון... 😳 )

      פורסם בעזרה הדדית למשתמשים מתקדמים
      Y
      y6714453
    • קריינויות מוכנות לקו שלכם, (המקצועי והנוסטלגי... לא AI) כנסו >

      מכירים את זה שאתם רוצים להשמע לדוגמא מאה נקודה חמש
      וה 'נקודה' נשמעת בקול אחר מהקול של המספרים...
      ולפ ר פ ק צ י ו נ י ס ט י ם שמבינינו זה קצת מפריע,
      וגם כל הקטע של קריינויות במערכת יש כאלו שהיו מעדיפים קול אחר,

      אז יש מאגר של הקלטות שמתאימות בדיוק למערכות IVR ומרכזיות וכו'
      והקטע שזה בדיוק אותו קול של אותו קריין ה'כבד' הזה שמקריא את המספרים בימות,
      אז אפשר להשתמש עם ההקלטה של 'נקודה', וזה נשמע מאוד אחיד,
      וגם לעוד קריינויות בקו,

      אז המאגר הזה העליתי אותו לדרייב, ומי שרוצה יכול לקחת מהקישור הזה

      👈 קישור לדרייב 👉

      אממה - השמות של הקבצים הם באנגלית, וקשה לעבור קובץ קובץ כדי לשמוע בדיוק מה ה'טקסט' שהוא אומר,

      בדיוק בשביל זה עשיתי את הטבלה הבאה:

      קריינות עברית

      חבילת asterisk-hebrew-1.0.5.

      התוכן לפי שם הקובץ (קטלוג Asterisk),

      שגיאות

      קובץ תוכן
      agent-incorrect הכניסה שגויה. נא להקיש את מספר הסוכן ואחריו סולמית.
      auth-incorrect סיסמה שגויה. נא להקיש את הסיסמה ואחריה סולמית.
      conf-errormenu בחירה לא חוקית.
      conf-invalid זה אינו מספר ועידה חוקי. נא לנסות שוב.
      conf-invalidpin קוד ה-PIN אינו חוקי לוועידה זו.
      conf-noempty אין כרגע ועידות פנויות.
      dir-nomatch אין רשומות במדריך שתואמות לחיפוש.
      invalid מצטערים, זו אינה שלוחה חוקית. נא לנסות שוב.
      pbx-invalid מצטערים, זו אינה שלוחה חוקית. נא לנסות שוב.
      pbx-invalidpark מצטערים, אין שיחה בחניה בשלוחה זו. נא לנסות שוב.
      privacy-incorrec מצטערים, המספר אינו חוקי.
      ss-noservice המספר שהקשתם אינו בשירות. נא לבדוק את המספר ולנסות שוב.
      vm-incorrect כניסה שגויה.
      vm-incorrect-mailbox כניסה שגויה. תיבת דואר?
      vm-mailboxfull מצטערים, תיבת הדואר של המשתמש אינה יכולה לקבל עוד הודעות.
      vm-mismatch הסיסמאות שהקשתם אינן תואמות. נא לנסות שוב.
      vm-nobodyavail אין כרגע מי שיקבל את שיחתכם.
      vm-nobox לא ניתן להשיב כי לשולח אין תיבת דואר.
      vm-nonumber איני יודע מי שלח הודעה זו.
      vm-sorry מצטערים, לא הבנתי את תשובתכם.
      vm-tooshort ההודעה קצרה מדי.

      סימנים ומטבע

      קובץ תוכן
      at ב / שטרודל
      at2 בשעה
      dash מקף
      dollar דולר
      dollars דולרים
      dot נקודה
      equals שווה
      exclaimation-point סימן קריאה
      percent אחוז
      plus פלוס
      pound סולמית
      slash לוכסן
      space רווח
      star כוכבית

      ספרות ותאריך

      קובץ תוכן
      a-m לפנות בוקר (A.M.)
      day-0 יום ראשון
      day-1 יום שני
      day-2 יום שלישי
      day-3 יום רביעי
      day-4 יום חמישי
      day-5 יום שישי
      day-6 שבת
      0 אפס
      1 אחת
      10 עשר
      100 מאה
      100k מאה אלף
      10k עשרה אלפים
      10m עשרה מיליון
      11 אחת עשרה
      11m אחד עשר מיליון
      12 שתים עשרה
      12m שנים עשר מיליון
      13 שלוש עשרה
      13m שלושה עשר מיליון
      14 ארבע עשרה
      14m ארבעה עשר מיליון
      15 חמש עשרה
      15m חמישה עשר מיליון
      16 שש עשרה
      16m שישה עשר מיליון
      17 שבע עשרה
      17m שבעה עשר מיליון
      18 שמונה עשרה
      18m שמונה עשר מיליון
      19 תשע עשרה
      19m תשעה עשר מיליון
      1k אלף
      1m מיליון
      2 שתיים
      20 עשרים
      200 מאתיים
      200k מאתיים אלף
      2k אלפיים
      2m שני מיליון
      3 שלוש
      30 שלושים
      300 שלוש מאות
      300k שלוש מאות אלף
      3k שלושה אלפים
      3m שלושה מיליון
      4 ארבע
      40 ארבעים
      400 ארבע מאות
      400k ארבע מאות אלף
      4k ארבעה אלפים
      4m ארבעה מיליון
      5 חמש
      50 חמישים
      500 חמש מאות
      500k חמש מאות אלף
      5k חמישה אלפים
      5m חמישה מיליון
      6 שש
      60 שישים
      600 שש מאות
      600k שש מאות אלף
      6k שישה אלפים
      6m שישה מיליון
      7 שבע
      70 שבעים
      700 שבע מאות
      700k שבע מאות אלף
      7k שבעה אלפים
      7m שבעה מיליון
      8 שמונה
      80 שמונים
      800 שמונה מאות
      800k שמונה מאות אלף
      8k שמונה אלפים
      8m שמונה מיליון
      9 תשע
      90 תשעים
      900 תשע מאות
      900k תשע מאות אלף
      9k תשעה אלפים
      9m תשעה מיליון
      And ו
      at ב / שטרודל
      day-0 יום ראשון
      day-1 יום שני
      day-2 יום שלישי
      day-3 יום רביעי
      day-4 יום חמישי
      day-5 יום שישי
      day-6 שבת
      f-01 אחת (נקבה)
      f-02 שתיים (נקבה)
      f-03 שלוש (נקבה)
      f-04 ארבע (נקבה)
      f-05 חמש (נקבה)
      f-06 שש (נקבה)
      f-07 שבע (נקבה)
      f-08 שמונה (נקבה)
      f-09 תשע (נקבה)
      f-10 עשר (נקבה)
      f-11 אחת עשרה (נקבה)
      f-12 שתים עשרה (נקבה)
      f-13 שלוש עשרה (נקבה)
      f-14 ארבע עשרה (נקבה)
      f-15 חמש עשרה (נקבה)
      f-16 שש עשרה (נקבה)
      f-17 שבע עשרה (נקבה)
      f-18 שמונה עשרה (נקבה)
      f-19 תשע עשרה (נקבה)
      h-1 ראשון (סודר)
      h-10 עשירי (סודר)
      h-11 אחד עשר (סודר)
      h-12 שנים עשר (סודר)
      h-13 שלושה עשר (סודר)
      h-14 ארבעה עשר (סודר)
      h-15 חמישה עשר (סודר)
      h-16 שישה עשר (סודר)
      h-17 שבעה עשר (סודר)
      h-18 שמונה עשר (סודר)
      h-19 תשעה עשר (סודר)
      h-2 שני (סודר)
      h-20 עשרים (סודר)
      h-3 שלישי (סודר)
      h-30 שלושים (סודר)
      h-4 רביעי (סודר)
      h-5 חמישי (סודר)
      h-6 שישי (סודר)
      h-7 שביעי (סודר)
      h-8 שמיני (סודר)
      h-9 תשיעי (סודר)
      hundred מאה
      m-01 אחד (זכר)
      m-02 שניים (זכר)
      m-03 שלושה (זכר)
      m-04 ארבעה (זכר)
      m-05 חמישה (זכר)
      m-06 שישה (זכר)
      m-07 שבעה (זכר)
      m-08 שמונה (זכר)
      m-09 תשעה (זכר)
      m-10 עשרה (זכר)
      m-11 אחד עשר (זכר)
      m-12 שנים עשר (זכר)
      m-13 שלושה עשר (זכר)
      m-14 ארבעה עשר (זכר)
      m-15 חמישה עשר (זכר)
      m-16 שישה עשר (זכר)
      m-17 שבעה עשר (זכר)
      m-18 שמונה עשר (זכר)
      m-19 תשעה עשר (זכר)
      million מיליון
      minus מינוס
      mon-0 ינואר
      mon-1 פברואר
      mon-10 נובמבר
      mon-11 דצמבר
      mon-2 מרץ
      mon-3 אפריל
      mon-4 מאי
      mon-5 יוני
      mon-6 יולי
      mon-7 אוגוסט
      mon-8 ספטמבר
      mon-9 אוקטובר
      oh או (אפס במספר)
      shtei שתי
      thousand אלף
      uu ו
      ve ו
      yesterday אתמול
      h-1 ראשון (סודר)
      h-10 עשירי (סודר)
      h-11 אחד עשר (סודר)
      h-12 שנים עשר (סודר)
      h-13 שלושה עשר (סודר)
      h-14 ארבעה עשר (סודר)
      h-15 חמישה עשר (סודר)
      h-16 שישה עשר (סודר)
      h-17 שבעה עשר (סודר)
      h-18 שמונה עשר (סודר)
      h-19 תשעה עשר (סודר)
      h-2 שני (סודר)
      h-20 עשרים (סודר)
      h-3 שלישי (סודר)
      h-30 שלושים (סודר)
      h-4 רביעי (סודר)
      h-5 חמישי (סודר)
      h-6 שישי (סודר)
      h-7 שביעי (סודר)
      h-8 שמיני (סודר)
      h-9 תשיעי (סודר)
      hours שעות
      hundred מאה
      million מיליון
      minus מינוס
      minutes דקות
      mon-0 ינואר
      mon-1 פברואר
      mon-10 נובמבר
      mon-11 דצמבר
      mon-2 מרץ
      mon-3 אפריל
      mon-4 מאי
      mon-5 יוני
      mon-6 יולי
      mon-7 אוגוסט
      mon-8 ספטמבר
      mon-9 אוקטובר
      oclock בשעה
      oh או (אפס במספר)
      p-m אחרי הצהריים (P.M.)
      seconds שניות
      thousand אלף
      today היום
      tomorrow מחר
      yesterday אתמול

      תא קולי

      קובץ תוכן
      vm-Cust1 תיקייה 5
      vm-Cust2 תיקייה 6
      vm-Cust3 תיקייה 7
      vm-Cust4 תיקייה 8
      vm-Cust5 תיקייה 9
      vm-Family משפחה
      vm-Friends חברים
      vm-INBOX חדשות
      vm-INBOX1 חדשות
      vm-Old ישנות
      vm-Old1 ישנות
      vm-Work עבודה
      vm-advopts הקישו 3 לאפשרויות מתקדמות.
      vm-and ו
      vm-calldiffnum הקישו 2 להקשת מספר אחר.
      vm-changeto לאיזו תיקייה לשנות?
      vm-delete הקישו 7 למחיקת ההודעה.
      vm-deleted ההודעה נמחקה.
      vm-dialout נא להמתין בזמן שאחבר את השיחה.
      vm-duration משך ההודעה
      vm-enter-num-to-call נא להקיש את המספר שברצונכם להתקשר אליו.
      vm-extension שלוחה
      vm-first ראשונה
      vm-for עבור
      vm-forward הקישו 1 להקשת שלוחה, הקישו 2 לשימוש במדריך.
      vm-forwardoptions הקישו 1 להוספת הקדמה, או 2 להעברה בלי הקדמה.
      vm-from מאת
      vm-from-extension הודעה משלוחה
      vm-from-phonenumber הודעה ממספר טלפון
      vm-goodbye להתראות
      vm-helpexit הקישו כוכבית לעזרה או סולמית ליציאה.
      vm-instructions לשמיעת ההודעות הקישו 1. אפשר לצאת בכל עת באמצעות סולמית.
      vm-intro נא להשאיר הודעה אחרי הצליל. בסיום נתקו או הקישו סולמית.
      vm-isonphone מדבר בטלפון
      vm-isunavail לא זמין
      vm-last אחרונה
      vm-leavemsg הקישו 5 להשארת הודעה.
      vm-login תא קולי. תיבת דואר?
      vm-message הודעה
      vm-messages הודעות
      vm-minutes דקות
      vm-msginstruct להודעה הבאה הקישו 6, לחזרה הקישו 5, לקודמת הקישו 4, למחיקה או ביטולה הקישו 0, ליציאה הקישו סולמית.
      vm-msgsaved ההודעה נשמרה.
      vm-newpassword נא להקיש סיסמה חדשה ואחריה סולמית.
      vm-newuser ברוכים הבאים לתא הקולי. תחילה אדריך אתכם בהגדרה קצרה.
      vm-next הקישו 6 להודעה הבאה.
      vm-no לא
      vm-nomessages אין הודעות.
      vm-nomore אין עוד הודעות.
      vm-num-i-have המספר שיש לי הוא
      vm-number מספר
      vm-onefor הקישו 1 עבור
      vm-options הקישו 1 להקלטת הודעת אי-זמינות, 2 להודעת תפוס, 3 לשם, 4 לברכה זמנית, 5 לשינוי סיסמה, כוכבית לתפריט הראשי.
      vm-opts הקישו 2 להחלפת תיקייה, 3 לאפשרויות מתקדמות, 0 לאפשרויות תיבה.
      vm-passchanged הסיסמאות שונו.
      vm-password סיסמה
      vm-press הקישו
      vm-prev הקישו 4 להודעה הקודמת.
      vm-reachoper הקישו 0 לנציג.
      vm-rec-busy אחרי הצליל אמרו את הודעת התפוס ואז הקישו סולמית.
      vm-rec-name אחרי הצליל אמרו את שמכם ואז הקישו סולמית.
      vm-rec-temp אחרי הצליל אמרו את ההודעה הזמנית ואז הקישו סולמית.
      vm-rec-unv אחרי הצליל אמרו את הודעת אי-הזמינות ואז הקישו סולמית.
      vm-received התקבלה
      vm-reenterpassword נא להקיש שוב את הסיסמה ואחריה סולמית.
      vm-repeat הקישו 5 לחזרה על ההודעה הנוכחית.
      vm-review הקישו 1 לאישור ההקלטה, 2 להאזנה, 3 להקלטה מחדש.
      vm-saved נשמרה
      vm-savedto נשמרה אל
      vm-savefolder לאיזו תיקייה לשמור את ההודעה?
      vm-savemessage או 9 לשמירת ההודעה
      vm-saveoper הקישו 1 לאישור ההקלטה, אחרת המשיכו להמתין.
      vm-shtei שתי
      vm-star-cancel הקישו כוכבית לביטול.
      vm-starmain הקישו כוכבית לחזרה לתפריט הראשי.
      vm-tempgreeting הקישו 1 להקלטת ברכה זמנית.
      vm-tempgreeting2 הקישו 1 להקלטת ברכה זמנית, או 2 למחיקתה.
      vm-tempremoved הברכה הזמנית הוסרה.
      vm-then-pound ואז הקישו סולמית.
      vm-theperson האדם בשלוחה
      vm-tocallback הקישו 2 להתקשר לשולח ההודעה.
      vm-tocallnum הקישו 1 להתקשר למספר זה.
      vm-tocancel או סולמית לביטול.
      vm-tocancelmsg הקישו כוכבית לביטול ההודעה.
      vm-toenternumber הקישו 1 להקשת מספר.
      vm-toforward הקישו 8 להעברת ההודעה למשתמש אחר.
      vm-tohearenv הקישו 3 לשמיעת מעטפת ההודעה.
      vm-tomakecall הקישו 4 לשיחה יוצאת.
      vm-toreply הקישו 1 לשליחת תשובה.
      vm-torerecord הקישו 3 להקלטה מחדש.
      vm-undelete הקישו 7 לביטול מחיקת ההודעה.
      vm-undeleted המחיקה בוטלה.
      vm-unknown-caller ממתקשר לא ידוע
      vm-whichbox להשארת הודעה, נא להקיש מספר תיבת דואר.
      vm-youhave יש לכם

      ועידה

      קובץ תוכן
      conf-adminmenu הקישו 1 להשתקה או ביטולה, 2 לנעילה או שחרור הוועידה, 3 להוצאת המשתמש האחרון, 4 או 6 להנמכת או הגברת עוצמת הוועידה, 7 או 9 להנמכת או הגברת העוצמה שלכם, או 8 ליציאה.
      conf-enteringno נכנסים לוועידה מספר
      conf-getchannel נא להקיש את מספר הערוץ ואחריו סולמית.
      conf-getconfno נא להקיש את מספר הוועידה ואחריו סולמית.
      conf-getpin נא להקיש את קוד ה-PIN של הוועידה.
      conf-hasjoin נכנס עכשיו לוועידה.
      conf-hasleft עזב את הוועידה.
      conf-kicked הוצאתם מוועידה זו.
      conf-leaderhasleft המנהל עזב את הוועידה.
      conf-locked הוועידה נעולה!
      conf-lockednow הוועידה ננעלה כעת.
      conf-muted אתם מושתקים כעת.
      conf-onlyone יש כרגע משתתף אחד נוסף בוועידה.
      conf-onlyperson אתם כרגע האדם היחיד בוועידה.
      conf-otherinparty משתתפים נוספים בוועידה.
      conf-placeintoconf כעת תוכנסו לוועידה.
      conf-thereare יש כרגע
      conf-unlockednow הוועידה שוחררה כעת.
      conf-unmuted ההשתקה בוטלה.
      conf-usermenu הקישו 1 להשתקה או ביטולה, 4 או 6 להנמכת או הגברת עוצמת הוועידה, 7 או 9 להנמכת או הגברת העוצמה שלכם, או 8 ליציאה.
      conf-userswilljoin משתמשים יצטרפו לוועידה.
      conf-userwilljoin משתמש יצטרף לוועידה.
      conf-waitforleader הוועידה תתחיל כשיגיע המנהל.

      תור

      קובץ תוכן
      queue-callswaiting ממתינים לנציג
      queue-holdtime זמן ההמתנה המשוער כרגע הוא
      queue-less-than פחות מ
      queue-minutes דקות
      queue-periodic-announce כל הנציגים תפוסים כרגע. נא להישאר על הקו, שיחתכם תיענה על ידי הנציג הפנוי הבא.
      queue-reporthold זמן המתנה
      queue-seconds שניות
      queue-thankyou תודה על הסבלנות
      queue-thereare אתם כרגע מתקשר מספר
      queue-youarenext שיחתכם ראשונה בתור ותיענה על ידי הנציג הפנוי הבא.

      סוכן והתחברות

      קובץ תוכן
      agent-alreadyon הסוכן כבר מחובר. נא להקיש את מספר הסוכן ואחריו סולמית.
      agent-loggedoff הסוכן התנתק.
      agent-loginok הסוכן התחבר.
      agent-newlocation נא להקיש שלוחה חדשה ואחריה סולמית.
      agent-pass נא להקיש את הסיסמה ואחריה סולמית.
      agent-user כניסת סוכן. נא להקיש את מספר הסוכן ואחריו סולמית.
      auth-thankyou תודה.

      מדריך

      קובץ תוכן
      dir-instr אם זה האדם שאתם מחפשים הקישו 1 עכשיו, אחרת הקישו כוכבית.
      dir-intro ברוכים הבאים למדריך. נא להקיש את שלוש האותיות הראשונות של שם המשפחה בלוח המקשים. מקש 7 לאות Q ומקש 9 לאות Z.
      dir-intro-fn ברוכים הבאים למדריך. נא להקיש את שלוש האותיות הראשונות של השם הפרטי בלוח המקשים. מקש 7 לאות Q ומקש 9 לאות Z.
      dir-nomore אין עוד רשומות תואמות במדריך.

      פרטיות

      קובץ תוכן
      priv-at ב
      priv-callee-options הקישו 1 אם ברצונכם שהמתקשר יגיע אליכם ישירות עכשיו ובעתיד. הקישו 2 לשליחה לתא קולי עכשיו ולתמיד. הקישו 3 לתפריטי עינוי. הקישו 4 לתפריט מנומס של «אל תתקשרו». הקישו 5 לאפשר בעתיד, וכרגע לשלוח לתא קולי.
      priv-callfrom שיחה מ-
      priv-callpending יש מתקשר ממתין, שמציג את עצמו כ:
      priv-instruct הוראות פרטיות למתקשר.
      priv-introsaved תודה. נא להמתין בזמן שאנסה לחבר אתכם.
      priv-recordintro בצליל, נא לומר את שמכם.
      priv-sayname נא לומר את שמכם.
      priv-trying מנסה לחבר אתכם.
      privacy-prompt נא להקיש את מספר הטלפון שלכם, כולל קידומת.
      privacy-thankyou תודה.
      privacy-unident המנוי שאתם מנסים להגיע אליו אינו מקבל שיחות לא מזוהות.
      screen-callee-options האפשרויות: הקישו 1 לחיבור מיידי לשיחה. הקישו 2 לשליחה לתא קולי. הקישו 3 לתפריטי עינוי. הקישו 4 לתפריט מנומס של «אל תתקשרו».

      הקלטה ותכתיב

      קובץ תוכן
      both_help הקישו כוכבית להשהיה, סולמית לשם קובץ תכתיב חדש.
      enter_filename הקישו שם קובץ מספרי ואחריו סולמית, או סולמית בלבד ליציאה.
      forhelp הקישו 0 לעזרה.
      inithelp עזרה ראשונית לתכתיב.
      pause השהיה
      paused מושהה
      play_help הקישו 1 למצב הקלטה, 2 להשמעה מהירה, 7 אחורה, 8 קדימה.
      playback השמעה
      playback_mode מצב השמעה
      record הקלטה
      record_help הקישו 1 למצב השמעה, 8 לחתוך את הקובץ ולהתחיל מחדש.
      record_mode מצב הקלטה
      truncating_audio חותך שמע

      אותיות ופונטי

      קובץ תוכן
      a האות A
      a_p אלפא (אלפבית פונטי)
      b האות B
      b_p בראבו (אלפבית פונטי)
      c האות C
      c_p צ'רלי (אלפבית פונטי)
      d האות D
      d_p דלתא (אלפבית פונטי)
      e האות E
      e_p אקו (אלפבית פונטי)
      f האות F
      f_p פוקסטרוט (אלפבית פונטי)
      g האות G
      g_p גולף (אלפבית פונטי)
      h האות H
      h_p הוטל (אלפבית פונטי)
      i האות I
      i_p אינדיה (אלפבית פונטי)
      j האות J
      j_p ג'ולייט (אלפבית פונטי)
      k האות K
      k_p קילו (אלפבית פונטי)
      l האות L
      l_p לימה (אלפבית פונטי)
      m האות M
      m_p מייק (אלפבית פונטי)
      n האות N
      n_p נובמבר (אלפבית פונטי)
      niner ניינר (אלפבית פונטי)
      o האות O
      o_p אוסקר (אלפבית פונטי)
      p האות P
      p_p פאפא (אלפבית פונטי)
      q האות Q
      q_p קוויבק (אלפבית פונטי)
      r האות R
      r_p רומיאו (אלפבית פונטי)
      s האות S
      s_p סיירה (אלפבית פונטי)
      t האות T
      t_p טנגו (אלפבית פונטי)
      u האות U
      u_p יוניפורם (אלפבית פונטי)
      v האות V
      v_p ויקטור (אלפבית פונטי)
      w האות W
      w_p ויסקי (אלפבית פונטי)
      x האות X
      x_p אקס-ריי (אלפבית פונטי)
      y האות Y
      y_p ינקי (אלפבית פונטי)
      z האות Z
      z_p זולו (אלפבית פונטי)
      zed זד (אלפבית פונטי)

      מילות חיבור

      קובץ תוכן
      bi בי
      shtay שתי
      uu ו
      va ו
      ve ו

      ערוצי האזנה

      קובץ תוכן
      spy-agent סוכן
      spy-h323 H.323
      spy-iax IAX
      spy-iax2 IAX
      spy-mgcp MGCP
      spy-sip SIP
      spy-skinny Skinny
      spy-zap Zap

      אחר

      קובץ תוכן
      beep צפצוף.
      hello-world שלום עולם.
      pbx-transfer העברה.
      transfer נא להמתין בזמן שאנסה את השלוחה.
      פורסם בטיפים עצות והדגמות מהמשתמשים
      Y
      y6714453
    • RE: חיפוש טלפוני

      @אלע כן יש אפשרות! אינני יודע מה זה בדיוק המודל זיהוי דיבור של ימות המשיח...
      אבל אתה יכול להשתמש במודל זיהוי דיבור חיצוני – כמו Google Speech Recognition או Whisper של OpenAI – וככה גם תחסוך תשלום על יחידות.

      לגבי עצם העניין – אתה צריך להכין רשימה של כל המוצרים, ולהגדיר בקוד שיחפש את המילה שנאמרה מתוך הרשימה. אפשר להשתמש בהתאמה גמישה (כמו Levenshtein distance) כדי לזהות גם אם יש טעות קטנה בהגייה.

      לדוגמה – אם מישהו אמר "מיקסר חום", והשם המדויק בקבצים הוא "מיקסר בצבע חום", המערכת תוכל לזהות שמדובר באותו מוצר ולהשיב בהתאם.

      כמובן שהקוד זה משהו מאוד גמיש אתה יכול לעשות שאם הוא אומר "מיקסר חום" הוא יקבל תוצאה של "מיקסר בצבע חום עולה ... ש"ח. תאריך קבלת ההזמנה הצפוי... וכו'"

      אפשר גם להחזיר תוצאה אחת או להציע כמה אפשרויות קרובות, לפי הצורך.
      אם אתה מסתדר עם הכתיבה של הקוד - מה טוב. אם אתה רוצה פיתוח אפשר בפרטי...

      פורסם בעזרה הדדית למשתמשים מתקדמים
      Y
      y6714453
    • RE: המרת טקסט לדיבור מטורפת!!!! ב ח י נ ם!!!!!

      @שמעון-123 כתב בהמרת טקסט לדיבור מטורפת!!!! ב ח י נ ם!!!!!:

      למה אין AI שממיר טקסט לדיבור על יידיש.

      גוגל עדיין לא הגדירו לו אם לדבר ב'ווֹס' או ב'ווּס'...😬

      פורסם בטיפים עצות והדגמות מהמשתמשים
      Y
      y6714453

    פוסטים אחרונים שנוצרו על ידי y6714453

    • קריינויות מוכנות לקו שלכם, (המקצועי והנוסטלגי... לא AI) כנסו >

      מכירים את זה שאתם רוצים להשמע לדוגמא מאה נקודה חמש
      וה 'נקודה' נשמעת בקול אחר מהקול של המספרים...
      ולפ ר פ ק צ י ו נ י ס ט י ם שמבינינו זה קצת מפריע,
      וגם כל הקטע של קריינויות במערכת יש כאלו שהיו מעדיפים קול אחר,

      אז יש מאגר של הקלטות שמתאימות בדיוק למערכות IVR ומרכזיות וכו'
      והקטע שזה בדיוק אותו קול של אותו קריין ה'כבד' הזה שמקריא את המספרים בימות,
      אז אפשר להשתמש עם ההקלטה של 'נקודה', וזה נשמע מאוד אחיד,
      וגם לעוד קריינויות בקו,

      אז המאגר הזה העליתי אותו לדרייב, ומי שרוצה יכול לקחת מהקישור הזה

      👈 קישור לדרייב 👉

      אממה - השמות של הקבצים הם באנגלית, וקשה לעבור קובץ קובץ כדי לשמוע בדיוק מה ה'טקסט' שהוא אומר,

      בדיוק בשביל זה עשיתי את הטבלה הבאה:

      קריינות עברית

      חבילת asterisk-hebrew-1.0.5.

      התוכן לפי שם הקובץ (קטלוג Asterisk),

      שגיאות

      קובץ תוכן
      agent-incorrect הכניסה שגויה. נא להקיש את מספר הסוכן ואחריו סולמית.
      auth-incorrect סיסמה שגויה. נא להקיש את הסיסמה ואחריה סולמית.
      conf-errormenu בחירה לא חוקית.
      conf-invalid זה אינו מספר ועידה חוקי. נא לנסות שוב.
      conf-invalidpin קוד ה-PIN אינו חוקי לוועידה זו.
      conf-noempty אין כרגע ועידות פנויות.
      dir-nomatch אין רשומות במדריך שתואמות לחיפוש.
      invalid מצטערים, זו אינה שלוחה חוקית. נא לנסות שוב.
      pbx-invalid מצטערים, זו אינה שלוחה חוקית. נא לנסות שוב.
      pbx-invalidpark מצטערים, אין שיחה בחניה בשלוחה זו. נא לנסות שוב.
      privacy-incorrec מצטערים, המספר אינו חוקי.
      ss-noservice המספר שהקשתם אינו בשירות. נא לבדוק את המספר ולנסות שוב.
      vm-incorrect כניסה שגויה.
      vm-incorrect-mailbox כניסה שגויה. תיבת דואר?
      vm-mailboxfull מצטערים, תיבת הדואר של המשתמש אינה יכולה לקבל עוד הודעות.
      vm-mismatch הסיסמאות שהקשתם אינן תואמות. נא לנסות שוב.
      vm-nobodyavail אין כרגע מי שיקבל את שיחתכם.
      vm-nobox לא ניתן להשיב כי לשולח אין תיבת דואר.
      vm-nonumber איני יודע מי שלח הודעה זו.
      vm-sorry מצטערים, לא הבנתי את תשובתכם.
      vm-tooshort ההודעה קצרה מדי.

      סימנים ומטבע

      קובץ תוכן
      at ב / שטרודל
      at2 בשעה
      dash מקף
      dollar דולר
      dollars דולרים
      dot נקודה
      equals שווה
      exclaimation-point סימן קריאה
      percent אחוז
      plus פלוס
      pound סולמית
      slash לוכסן
      space רווח
      star כוכבית

      ספרות ותאריך

      קובץ תוכן
      a-m לפנות בוקר (A.M.)
      day-0 יום ראשון
      day-1 יום שני
      day-2 יום שלישי
      day-3 יום רביעי
      day-4 יום חמישי
      day-5 יום שישי
      day-6 שבת
      0 אפס
      1 אחת
      10 עשר
      100 מאה
      100k מאה אלף
      10k עשרה אלפים
      10m עשרה מיליון
      11 אחת עשרה
      11m אחד עשר מיליון
      12 שתים עשרה
      12m שנים עשר מיליון
      13 שלוש עשרה
      13m שלושה עשר מיליון
      14 ארבע עשרה
      14m ארבעה עשר מיליון
      15 חמש עשרה
      15m חמישה עשר מיליון
      16 שש עשרה
      16m שישה עשר מיליון
      17 שבע עשרה
      17m שבעה עשר מיליון
      18 שמונה עשרה
      18m שמונה עשר מיליון
      19 תשע עשרה
      19m תשעה עשר מיליון
      1k אלף
      1m מיליון
      2 שתיים
      20 עשרים
      200 מאתיים
      200k מאתיים אלף
      2k אלפיים
      2m שני מיליון
      3 שלוש
      30 שלושים
      300 שלוש מאות
      300k שלוש מאות אלף
      3k שלושה אלפים
      3m שלושה מיליון
      4 ארבע
      40 ארבעים
      400 ארבע מאות
      400k ארבע מאות אלף
      4k ארבעה אלפים
      4m ארבעה מיליון
      5 חמש
      50 חמישים
      500 חמש מאות
      500k חמש מאות אלף
      5k חמישה אלפים
      5m חמישה מיליון
      6 שש
      60 שישים
      600 שש מאות
      600k שש מאות אלף
      6k שישה אלפים
      6m שישה מיליון
      7 שבע
      70 שבעים
      700 שבע מאות
      700k שבע מאות אלף
      7k שבעה אלפים
      7m שבעה מיליון
      8 שמונה
      80 שמונים
      800 שמונה מאות
      800k שמונה מאות אלף
      8k שמונה אלפים
      8m שמונה מיליון
      9 תשע
      90 תשעים
      900 תשע מאות
      900k תשע מאות אלף
      9k תשעה אלפים
      9m תשעה מיליון
      And ו
      at ב / שטרודל
      day-0 יום ראשון
      day-1 יום שני
      day-2 יום שלישי
      day-3 יום רביעי
      day-4 יום חמישי
      day-5 יום שישי
      day-6 שבת
      f-01 אחת (נקבה)
      f-02 שתיים (נקבה)
      f-03 שלוש (נקבה)
      f-04 ארבע (נקבה)
      f-05 חמש (נקבה)
      f-06 שש (נקבה)
      f-07 שבע (נקבה)
      f-08 שמונה (נקבה)
      f-09 תשע (נקבה)
      f-10 עשר (נקבה)
      f-11 אחת עשרה (נקבה)
      f-12 שתים עשרה (נקבה)
      f-13 שלוש עשרה (נקבה)
      f-14 ארבע עשרה (נקבה)
      f-15 חמש עשרה (נקבה)
      f-16 שש עשרה (נקבה)
      f-17 שבע עשרה (נקבה)
      f-18 שמונה עשרה (נקבה)
      f-19 תשע עשרה (נקבה)
      h-1 ראשון (סודר)
      h-10 עשירי (סודר)
      h-11 אחד עשר (סודר)
      h-12 שנים עשר (סודר)
      h-13 שלושה עשר (סודר)
      h-14 ארבעה עשר (סודר)
      h-15 חמישה עשר (סודר)
      h-16 שישה עשר (סודר)
      h-17 שבעה עשר (סודר)
      h-18 שמונה עשר (סודר)
      h-19 תשעה עשר (סודר)
      h-2 שני (סודר)
      h-20 עשרים (סודר)
      h-3 שלישי (סודר)
      h-30 שלושים (סודר)
      h-4 רביעי (סודר)
      h-5 חמישי (סודר)
      h-6 שישי (סודר)
      h-7 שביעי (סודר)
      h-8 שמיני (סודר)
      h-9 תשיעי (סודר)
      hundred מאה
      m-01 אחד (זכר)
      m-02 שניים (זכר)
      m-03 שלושה (זכר)
      m-04 ארבעה (זכר)
      m-05 חמישה (זכר)
      m-06 שישה (זכר)
      m-07 שבעה (זכר)
      m-08 שמונה (זכר)
      m-09 תשעה (זכר)
      m-10 עשרה (זכר)
      m-11 אחד עשר (זכר)
      m-12 שנים עשר (זכר)
      m-13 שלושה עשר (זכר)
      m-14 ארבעה עשר (זכר)
      m-15 חמישה עשר (זכר)
      m-16 שישה עשר (זכר)
      m-17 שבעה עשר (זכר)
      m-18 שמונה עשר (זכר)
      m-19 תשעה עשר (זכר)
      million מיליון
      minus מינוס
      mon-0 ינואר
      mon-1 פברואר
      mon-10 נובמבר
      mon-11 דצמבר
      mon-2 מרץ
      mon-3 אפריל
      mon-4 מאי
      mon-5 יוני
      mon-6 יולי
      mon-7 אוגוסט
      mon-8 ספטמבר
      mon-9 אוקטובר
      oh או (אפס במספר)
      shtei שתי
      thousand אלף
      uu ו
      ve ו
      yesterday אתמול
      h-1 ראשון (סודר)
      h-10 עשירי (סודר)
      h-11 אחד עשר (סודר)
      h-12 שנים עשר (סודר)
      h-13 שלושה עשר (סודר)
      h-14 ארבעה עשר (סודר)
      h-15 חמישה עשר (סודר)
      h-16 שישה עשר (סודר)
      h-17 שבעה עשר (סודר)
      h-18 שמונה עשר (סודר)
      h-19 תשעה עשר (סודר)
      h-2 שני (סודר)
      h-20 עשרים (סודר)
      h-3 שלישי (סודר)
      h-30 שלושים (סודר)
      h-4 רביעי (סודר)
      h-5 חמישי (סודר)
      h-6 שישי (סודר)
      h-7 שביעי (סודר)
      h-8 שמיני (סודר)
      h-9 תשיעי (סודר)
      hours שעות
      hundred מאה
      million מיליון
      minus מינוס
      minutes דקות
      mon-0 ינואר
      mon-1 פברואר
      mon-10 נובמבר
      mon-11 דצמבר
      mon-2 מרץ
      mon-3 אפריל
      mon-4 מאי
      mon-5 יוני
      mon-6 יולי
      mon-7 אוגוסט
      mon-8 ספטמבר
      mon-9 אוקטובר
      oclock בשעה
      oh או (אפס במספר)
      p-m אחרי הצהריים (P.M.)
      seconds שניות
      thousand אלף
      today היום
      tomorrow מחר
      yesterday אתמול

      תא קולי

      קובץ תוכן
      vm-Cust1 תיקייה 5
      vm-Cust2 תיקייה 6
      vm-Cust3 תיקייה 7
      vm-Cust4 תיקייה 8
      vm-Cust5 תיקייה 9
      vm-Family משפחה
      vm-Friends חברים
      vm-INBOX חדשות
      vm-INBOX1 חדשות
      vm-Old ישנות
      vm-Old1 ישנות
      vm-Work עבודה
      vm-advopts הקישו 3 לאפשרויות מתקדמות.
      vm-and ו
      vm-calldiffnum הקישו 2 להקשת מספר אחר.
      vm-changeto לאיזו תיקייה לשנות?
      vm-delete הקישו 7 למחיקת ההודעה.
      vm-deleted ההודעה נמחקה.
      vm-dialout נא להמתין בזמן שאחבר את השיחה.
      vm-duration משך ההודעה
      vm-enter-num-to-call נא להקיש את המספר שברצונכם להתקשר אליו.
      vm-extension שלוחה
      vm-first ראשונה
      vm-for עבור
      vm-forward הקישו 1 להקשת שלוחה, הקישו 2 לשימוש במדריך.
      vm-forwardoptions הקישו 1 להוספת הקדמה, או 2 להעברה בלי הקדמה.
      vm-from מאת
      vm-from-extension הודעה משלוחה
      vm-from-phonenumber הודעה ממספר טלפון
      vm-goodbye להתראות
      vm-helpexit הקישו כוכבית לעזרה או סולמית ליציאה.
      vm-instructions לשמיעת ההודעות הקישו 1. אפשר לצאת בכל עת באמצעות סולמית.
      vm-intro נא להשאיר הודעה אחרי הצליל. בסיום נתקו או הקישו סולמית.
      vm-isonphone מדבר בטלפון
      vm-isunavail לא זמין
      vm-last אחרונה
      vm-leavemsg הקישו 5 להשארת הודעה.
      vm-login תא קולי. תיבת דואר?
      vm-message הודעה
      vm-messages הודעות
      vm-minutes דקות
      vm-msginstruct להודעה הבאה הקישו 6, לחזרה הקישו 5, לקודמת הקישו 4, למחיקה או ביטולה הקישו 0, ליציאה הקישו סולמית.
      vm-msgsaved ההודעה נשמרה.
      vm-newpassword נא להקיש סיסמה חדשה ואחריה סולמית.
      vm-newuser ברוכים הבאים לתא הקולי. תחילה אדריך אתכם בהגדרה קצרה.
      vm-next הקישו 6 להודעה הבאה.
      vm-no לא
      vm-nomessages אין הודעות.
      vm-nomore אין עוד הודעות.
      vm-num-i-have המספר שיש לי הוא
      vm-number מספר
      vm-onefor הקישו 1 עבור
      vm-options הקישו 1 להקלטת הודעת אי-זמינות, 2 להודעת תפוס, 3 לשם, 4 לברכה זמנית, 5 לשינוי סיסמה, כוכבית לתפריט הראשי.
      vm-opts הקישו 2 להחלפת תיקייה, 3 לאפשרויות מתקדמות, 0 לאפשרויות תיבה.
      vm-passchanged הסיסמאות שונו.
      vm-password סיסמה
      vm-press הקישו
      vm-prev הקישו 4 להודעה הקודמת.
      vm-reachoper הקישו 0 לנציג.
      vm-rec-busy אחרי הצליל אמרו את הודעת התפוס ואז הקישו סולמית.
      vm-rec-name אחרי הצליל אמרו את שמכם ואז הקישו סולמית.
      vm-rec-temp אחרי הצליל אמרו את ההודעה הזמנית ואז הקישו סולמית.
      vm-rec-unv אחרי הצליל אמרו את הודעת אי-הזמינות ואז הקישו סולמית.
      vm-received התקבלה
      vm-reenterpassword נא להקיש שוב את הסיסמה ואחריה סולמית.
      vm-repeat הקישו 5 לחזרה על ההודעה הנוכחית.
      vm-review הקישו 1 לאישור ההקלטה, 2 להאזנה, 3 להקלטה מחדש.
      vm-saved נשמרה
      vm-savedto נשמרה אל
      vm-savefolder לאיזו תיקייה לשמור את ההודעה?
      vm-savemessage או 9 לשמירת ההודעה
      vm-saveoper הקישו 1 לאישור ההקלטה, אחרת המשיכו להמתין.
      vm-shtei שתי
      vm-star-cancel הקישו כוכבית לביטול.
      vm-starmain הקישו כוכבית לחזרה לתפריט הראשי.
      vm-tempgreeting הקישו 1 להקלטת ברכה זמנית.
      vm-tempgreeting2 הקישו 1 להקלטת ברכה זמנית, או 2 למחיקתה.
      vm-tempremoved הברכה הזמנית הוסרה.
      vm-then-pound ואז הקישו סולמית.
      vm-theperson האדם בשלוחה
      vm-tocallback הקישו 2 להתקשר לשולח ההודעה.
      vm-tocallnum הקישו 1 להתקשר למספר זה.
      vm-tocancel או סולמית לביטול.
      vm-tocancelmsg הקישו כוכבית לביטול ההודעה.
      vm-toenternumber הקישו 1 להקשת מספר.
      vm-toforward הקישו 8 להעברת ההודעה למשתמש אחר.
      vm-tohearenv הקישו 3 לשמיעת מעטפת ההודעה.
      vm-tomakecall הקישו 4 לשיחה יוצאת.
      vm-toreply הקישו 1 לשליחת תשובה.
      vm-torerecord הקישו 3 להקלטה מחדש.
      vm-undelete הקישו 7 לביטול מחיקת ההודעה.
      vm-undeleted המחיקה בוטלה.
      vm-unknown-caller ממתקשר לא ידוע
      vm-whichbox להשארת הודעה, נא להקיש מספר תיבת דואר.
      vm-youhave יש לכם

      ועידה

      קובץ תוכן
      conf-adminmenu הקישו 1 להשתקה או ביטולה, 2 לנעילה או שחרור הוועידה, 3 להוצאת המשתמש האחרון, 4 או 6 להנמכת או הגברת עוצמת הוועידה, 7 או 9 להנמכת או הגברת העוצמה שלכם, או 8 ליציאה.
      conf-enteringno נכנסים לוועידה מספר
      conf-getchannel נא להקיש את מספר הערוץ ואחריו סולמית.
      conf-getconfno נא להקיש את מספר הוועידה ואחריו סולמית.
      conf-getpin נא להקיש את קוד ה-PIN של הוועידה.
      conf-hasjoin נכנס עכשיו לוועידה.
      conf-hasleft עזב את הוועידה.
      conf-kicked הוצאתם מוועידה זו.
      conf-leaderhasleft המנהל עזב את הוועידה.
      conf-locked הוועידה נעולה!
      conf-lockednow הוועידה ננעלה כעת.
      conf-muted אתם מושתקים כעת.
      conf-onlyone יש כרגע משתתף אחד נוסף בוועידה.
      conf-onlyperson אתם כרגע האדם היחיד בוועידה.
      conf-otherinparty משתתפים נוספים בוועידה.
      conf-placeintoconf כעת תוכנסו לוועידה.
      conf-thereare יש כרגע
      conf-unlockednow הוועידה שוחררה כעת.
      conf-unmuted ההשתקה בוטלה.
      conf-usermenu הקישו 1 להשתקה או ביטולה, 4 או 6 להנמכת או הגברת עוצמת הוועידה, 7 או 9 להנמכת או הגברת העוצמה שלכם, או 8 ליציאה.
      conf-userswilljoin משתמשים יצטרפו לוועידה.
      conf-userwilljoin משתמש יצטרף לוועידה.
      conf-waitforleader הוועידה תתחיל כשיגיע המנהל.

      תור

      קובץ תוכן
      queue-callswaiting ממתינים לנציג
      queue-holdtime זמן ההמתנה המשוער כרגע הוא
      queue-less-than פחות מ
      queue-minutes דקות
      queue-periodic-announce כל הנציגים תפוסים כרגע. נא להישאר על הקו, שיחתכם תיענה על ידי הנציג הפנוי הבא.
      queue-reporthold זמן המתנה
      queue-seconds שניות
      queue-thankyou תודה על הסבלנות
      queue-thereare אתם כרגע מתקשר מספר
      queue-youarenext שיחתכם ראשונה בתור ותיענה על ידי הנציג הפנוי הבא.

      סוכן והתחברות

      קובץ תוכן
      agent-alreadyon הסוכן כבר מחובר. נא להקיש את מספר הסוכן ואחריו סולמית.
      agent-loggedoff הסוכן התנתק.
      agent-loginok הסוכן התחבר.
      agent-newlocation נא להקיש שלוחה חדשה ואחריה סולמית.
      agent-pass נא להקיש את הסיסמה ואחריה סולמית.
      agent-user כניסת סוכן. נא להקיש את מספר הסוכן ואחריו סולמית.
      auth-thankyou תודה.

      מדריך

      קובץ תוכן
      dir-instr אם זה האדם שאתם מחפשים הקישו 1 עכשיו, אחרת הקישו כוכבית.
      dir-intro ברוכים הבאים למדריך. נא להקיש את שלוש האותיות הראשונות של שם המשפחה בלוח המקשים. מקש 7 לאות Q ומקש 9 לאות Z.
      dir-intro-fn ברוכים הבאים למדריך. נא להקיש את שלוש האותיות הראשונות של השם הפרטי בלוח המקשים. מקש 7 לאות Q ומקש 9 לאות Z.
      dir-nomore אין עוד רשומות תואמות במדריך.

      פרטיות

      קובץ תוכן
      priv-at ב
      priv-callee-options הקישו 1 אם ברצונכם שהמתקשר יגיע אליכם ישירות עכשיו ובעתיד. הקישו 2 לשליחה לתא קולי עכשיו ולתמיד. הקישו 3 לתפריטי עינוי. הקישו 4 לתפריט מנומס של «אל תתקשרו». הקישו 5 לאפשר בעתיד, וכרגע לשלוח לתא קולי.
      priv-callfrom שיחה מ-
      priv-callpending יש מתקשר ממתין, שמציג את עצמו כ:
      priv-instruct הוראות פרטיות למתקשר.
      priv-introsaved תודה. נא להמתין בזמן שאנסה לחבר אתכם.
      priv-recordintro בצליל, נא לומר את שמכם.
      priv-sayname נא לומר את שמכם.
      priv-trying מנסה לחבר אתכם.
      privacy-prompt נא להקיש את מספר הטלפון שלכם, כולל קידומת.
      privacy-thankyou תודה.
      privacy-unident המנוי שאתם מנסים להגיע אליו אינו מקבל שיחות לא מזוהות.
      screen-callee-options האפשרויות: הקישו 1 לחיבור מיידי לשיחה. הקישו 2 לשליחה לתא קולי. הקישו 3 לתפריטי עינוי. הקישו 4 לתפריט מנומס של «אל תתקשרו».

      הקלטה ותכתיב

      קובץ תוכן
      both_help הקישו כוכבית להשהיה, סולמית לשם קובץ תכתיב חדש.
      enter_filename הקישו שם קובץ מספרי ואחריו סולמית, או סולמית בלבד ליציאה.
      forhelp הקישו 0 לעזרה.
      inithelp עזרה ראשונית לתכתיב.
      pause השהיה
      paused מושהה
      play_help הקישו 1 למצב הקלטה, 2 להשמעה מהירה, 7 אחורה, 8 קדימה.
      playback השמעה
      playback_mode מצב השמעה
      record הקלטה
      record_help הקישו 1 למצב השמעה, 8 לחתוך את הקובץ ולהתחיל מחדש.
      record_mode מצב הקלטה
      truncating_audio חותך שמע

      אותיות ופונטי

      קובץ תוכן
      a האות A
      a_p אלפא (אלפבית פונטי)
      b האות B
      b_p בראבו (אלפבית פונטי)
      c האות C
      c_p צ'רלי (אלפבית פונטי)
      d האות D
      d_p דלתא (אלפבית פונטי)
      e האות E
      e_p אקו (אלפבית פונטי)
      f האות F
      f_p פוקסטרוט (אלפבית פונטי)
      g האות G
      g_p גולף (אלפבית פונטי)
      h האות H
      h_p הוטל (אלפבית פונטי)
      i האות I
      i_p אינדיה (אלפבית פונטי)
      j האות J
      j_p ג'ולייט (אלפבית פונטי)
      k האות K
      k_p קילו (אלפבית פונטי)
      l האות L
      l_p לימה (אלפבית פונטי)
      m האות M
      m_p מייק (אלפבית פונטי)
      n האות N
      n_p נובמבר (אלפבית פונטי)
      niner ניינר (אלפבית פונטי)
      o האות O
      o_p אוסקר (אלפבית פונטי)
      p האות P
      p_p פאפא (אלפבית פונטי)
      q האות Q
      q_p קוויבק (אלפבית פונטי)
      r האות R
      r_p רומיאו (אלפבית פונטי)
      s האות S
      s_p סיירה (אלפבית פונטי)
      t האות T
      t_p טנגו (אלפבית פונטי)
      u האות U
      u_p יוניפורם (אלפבית פונטי)
      v האות V
      v_p ויקטור (אלפבית פונטי)
      w האות W
      w_p ויסקי (אלפבית פונטי)
      x האות X
      x_p אקס-ריי (אלפבית פונטי)
      y האות Y
      y_p ינקי (אלפבית פונטי)
      z האות Z
      z_p זולו (אלפבית פונטי)
      zed זד (אלפבית פונטי)

      מילות חיבור

      קובץ תוכן
      bi בי
      shtay שתי
      uu ו
      va ו
      ve ו

      ערוצי האזנה

      קובץ תוכן
      spy-agent סוכן
      spy-h323 H.323
      spy-iax IAX
      spy-iax2 IAX
      spy-mgcp MGCP
      spy-sip SIP
      spy-skinny Skinny
      spy-zap Zap

      אחר

      קובץ תוכן
      beep צפצוף.
      hello-world שלום עולם.
      pbx-transfer העברה.
      transfer נא להמתין בזמן שאנסה את השלוחה.
      פורסם בטיפים עצות והדגמות מהמשתמשים
      Y
      y6714453
    • RE: מספרי 1-700 - הפרטים שידועים לנו!

      @קו-המוסיקה
      אשמח לדבר איתך בפרטי
      y6714453#gmail.com

      פורסם בשאלות ועזרה הדדית
      Y
      y6714453
    • RE: כל מה שאנחנו צריכים לדעת על הקול החדש 📽️🗣️🤖

      @avrham
      כתבת למעלה:

      האם זה אפשרות ויש הגדרה שתחזיר את הקול הישן?

      כרגע לא.

      האם יש צפי / כיוון / סיכוי כלשהוא, לחזרת הקולות הישנים?
      זה רלוונטי לגבי שינויים שאעשה בחלק ניכר מהמערכות שלי.

      תודה רבה

      פורסם בעזרה הדדית למשתמשים מתקדמים
      Y
      y6714453
    • RE: 🎙️🎯 זיהוי דיבור בעברית – חינם, איכותי, מדויק!!

      @לעזור-לכולם
      כן,

      פורסם בעזרה הדדית למשתמשים מתקדמים
      Y
      y6714453
    • RE: בקשת API נגן יוטיוב פעיל להטמעה בשלוחה

      @יעקב-לוי-0 אין אפשרות להשמיע להזרים אודיו, דרך שלוחת API,
      האפשרות היחידה היא להעלות את הקובץ שמע לשלוחה במערכת ולהשמיע אותו למאזין,

      כנראה מה שיותר יעזור לך זה "שידור חי אינטרנטי", ואז תצטרך קישור סטירמינג ולא קישור API.

      פורסם בפורום מפתחים API
      Y
      y6714453
    • RE: למה לא עובדת שלוחת "שערי מט"ח"??

      @החברמן
      תפנה במייל
      y6714453@gmail.com

      פורסם בשאלות ועזרה הדדית
      Y
      y6714453
    • RE: למה לא עובדת שלוחת "שערי מט"ח"??

      @sh0548534047 090ae339-653e-4165-8700-e5dfc25c3814-image.jpeg

      פורסם בשאלות ועזרה הדדית
      Y
      y6714453
    • RE: למה לא עובדת שלוחת "שערי מט"ח"??

      @sh0548534047
      שערי מט"ח יציגים נקבעים על ידי בנק ישראל פעם ביום.
      שערי מט"ח רציפים, נקבעים לפי המסחר בבורסות, ומשתנים בכל פעם שמתבצעת עסקת מט"ח, (שזה יכול להיות כל כמה שניות)

      בד"כ כשמתכוונים לשערי מט"ח (לצורכי המרת מטבע, וכדומה) - הכוונה ליציג - שנקבע פעם ביום וזה לא אמור להשתנות כל כמה דקות.

      @החברמן - אם אתה עדיין צריך, יש לך שערים יציגים במספר 1700111098 > שלוחה 6, ושערים רציפים בשלוחה 1 > 5
      בשניהם - המידע נשלף ב-API בכל כניסה לשלוחה.

      אם אתה רוצה בתשלום - אני יכול לתת לך לינק שתטמיע בתוך שלוחת API בתוך המערכת שלך, (וגם לא תצטרך לעבור למערכת אחרת).

      פורסם בשאלות ועזרה הדדית
      Y
      y6714453
    • RE: עזרה ליצור קו של שידורים חיים מאתרי חדשות (כעין מה שהיה ב"נייעס החרדי") דרך שידור חי אינטרנטי מה אני צריך לעשות כדי שזה יקרה אשמח להסבר במילים פשוטות

      @שטיינהרטר
      כדי ליצור קו של שידור חי תצטרך דבר ראשון קישור סטירמינג של השידור החי
      קישור סטירמינג זה אומר, קישור שכשאתה נכנס אליו אתה רואה דף אינטרנט בלי שום רכיב נוסף, רק השמע של השידור.

      כדי להגיע לכזה קישור תבצע את השלבים הבאים:
      כנס לאתר כלשהוא שיש בו את השידור החי,
      תלחץ F12 במקלדת (או קליק שמאלי בעכבר > בדיקה)
      ואז ייפתח לך כמו מסך (בדרך כלל בצד של האתר) שבו תוכל לראות את כל מה שמרכיב את הדף שמוצג לפניך,
      כל הרכיבים התמונות וכו'
      (אחרי שלחצת F12, תרענן שוב פעם את הדף.)

      עכשיו תעבור לתגית, רשת יהיה לך שם רשימה של קישורים, כל מיני קישורים שאם תכניס כל אחד מהם בדפדפן, אז אתה תראה כל מיני דברים מוזרים כאלו, זה יכול להיות סתם תמונה שמופיעה איפשהו באתר, זה יכול להיות כל מיני טקסטים באנגלית (על רקע שחור...)
      וכו'
      אחד מהקישורים זה הקישור סטירמינג שאתה צריך, זה קישור שאם תכניס אותו בדפדפן, אז אתה תראה דף חלק עם ה'שמע' של השידור,

      אם הצלחת את כל זה,
      נשאר לך רק להכנס לאתר ניהול לעבור לתגית, שידור חי אינטרנטי, > צור שידור > כתובת קישור - תכניס את הכתובת של השידור סטירמינג
      אח"כ תראה כמו טבלה כזו - חפש שם כפתור של "העתק הגדרות" או משהו כזה,
      תפתח שלוחה כלשהי - תעתיק לשם את ההגדרות,
      ו..
      זהו.

      כדאי שתדע שאם מדובר בקישור בעייתי דהיינו - אחד מערוצי הטלוויזיה / רדיו שהוא לא מהערוצים החרדיים,
      אז חבל על כל העבודה, כי ימות חוסמים את זה אוטומטית, וגם עלולים לעשות עליך כל מיני 'סנקציות'.

      פורסם בעזרה הדדית למשתמשים מתקדמים
      Y
      y6714453
    • RE: סליקת אשראי - איך?

      @עידו כתב בסליקת אשראי - איך?:

      @צצ לא צריך מדריך רציני בשביל זה

      אם אתה לא עסק/עמותה אתה לא יכול לפתוח מסוף סליקה, נקודה.

      בשביל לפתוח מסוף סליקה אתה צריך לפנות לאחת מתוך המון החברות שעושות את זה בארץ, לדעתי הכי טוב זה קשר-קהילות עם חברת סליקה טרנזילה.

      כך יצא לי אחרי בדיקה.

      כמעט לכל חברת סליקה יש עלות ח"פ של הקמת מסוף באזור ה200 ש"ח
      תשלום חודשי של עשרות שקלים
      עמלה על כל סליקה של בערך אחוז וקצת

      בקשר-קהילות מה שיצא לי זה
      140 ח"פ, 50 קבוע ו0.89 כל סליקה
      יתכן ולמחירים יתווסף מע"מ.

      טוב להרשם זה הכי קל, ברגע שרק תצייץ בצור קשר באתר שלהם הם ירדפו אחריך, אם תרצה אוכל לבקש שיחזרו אליך.

      מכאן והלאה כל מה שצריך זה לקרוא את המדריך הזה, ויש עוד אם צריך, תלוי בסוג השלוחה.

      אפשר ליצור איתך קשר בנושא?
      המייל שלי
      y6714453@gmail.com

      פורסם בשאלות ועזרה הדדית
      Y
      y6714453