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

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
צבי-שצ

צבי-ש

@צבי-ש
אודות
פוסטים
460
נושאים
41
שיתופים
0
קבוצות
0
עוקבים
6
עוקב אחרי
0

פוסטים

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

  • FreeSWITCH | איך לבנות תפריטים מרובי שלוחות – XML או סקריפט מרכזי?
    צבי-שצ צבי-ש

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

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

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

    אז יש לי 2 דרכים לעשות את זה

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

    def handler(session, args):
        if not session.ready():
            return
    
        # הגדרת משתנים לשימוש ב־XML מאוחר יותר
        session.setVariable("min_digits", "1")
        session.setVariable("max_digits", "1")
        session.setVariable("tries", "3")
        session.setVariable("timeout", "5000")
        session.setVariable("terminator", "#")
        session.setVariable("menu_prompt", "/path/to/menu_prompt.wav")
        session.setVariable("invalid_prompt", "invalid.wav")
        session.setVariable("valid_keys", "123")
        session.setVariable("timeout_prompt", "timeout.wav")
    
        session.execute("transfer", "menu_processor XML dynamic_menu")
    

    ואז בשלוחה עצמה לעשות

    <context name="dynamic_menu">
      <extension name="menu_processor">
        <condition field="destination_number" expression="^menu_processor$">
    
          <action application="play_and_get_digits"
                  data="${min_digits} ${max_digits} ${tries} ${timeout} ${terminator} ${menu_prompt} ${invalid_prompt} ${valid_keys} ${timeout_prompt} input_digit"/>
    
          <action application="python" data="handle_menu_result.py"/>
    
          <action application="transfer" data="${result} XML main"/>
    
        </condition>
      </extension>
    </context>
    
    

    ואז בhandle_menu_result (שבעצם אחראי על להגיד לאן לנתב אחרי שלחצו) לכתוב משו כזה

    def handler(session, args):
        digit = session.getVariable("input_digit")
        menu_id = session.getVariable("menu_id")
    
        if menu_id == "main_menu":
            if digit == "1":
                session.setVariable("result", "sales")
            elif digit == "2":
                session.setVariable("result", "support")
            else:
                session.setVariable("result", "menu_processor") 
    

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

    <extension name="go_to_dynamic_menu">
      <condition field="destination_number" expression="^123$">
        <action application="python" data="my_menu_entry.py"/>
      </condition>
    </extension>
    

    ואז את הקוד פייתון לכתוב משו כזה

    def handler(session, args):
        if not session.ready():
            return
    
        def play_menu(prompt_file, valid_digits, tries=3, timeout=5000, terminator="#"):
            session.setInputCallback(None)  # Reset input callback
            return session.playAndGetDigits(
                1,                 # min digits
                1,                 # max digits
                tries,             # max tries
                timeout,           # timeout ms
                terminator,        # terminator key
                prompt_file,       # prompt to play
                "ivr/invalid.wav", # invalid entry prompt
                valid_digits,      # valid digits
                "",                # regex (not used here)
                5000,              # digit timeout
                "input_digit"      # variable name to store result
            )
    
        # שלב 1: תפריט ראשי
        main_choice = play_menu("ivr/main_menu.wav", "12")
        if not main_choice:
            session.streamFile("ivr/timeout.wav")
            return
    
        # שלב 2: תת תפריט לפי הבחירה
        if main_choice == "1":
            submenu_prompt = "ivr/service_submenu.wav"
            menu_label = "service"
        elif main_choice == "2":
            submenu_prompt = "ivr/support_submenu.wav"
            menu_label = "support"
        else:
            session.streamFile("ivr/invalid.wav")
            return
    
        sub_choice = play_menu(submenu_prompt, "123456789")
        if not sub_choice:
            session.streamFile("ivr/timeout.wav")
            return
    
        # שלב 3: הדמיית פעולה (או העברה אמיתית)
        session.streamFile(f"ivr/you_selected_{menu_label}_{sub_choice}.wav")
        # או לצורך העברה:
        # session.execute("transfer", f"{menu_label}_{sub_choice} XML public")
    
        # סיום
        session.hangup()
    
    

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

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

    תכנות

  • API לקבלת רשימת הבנקים בישראל וקבלת סניפי בנק מסויים
    צבי-שצ צבי-ש

    @ששא כתב בAPI לקבלת רשימת הבנקים בישראל וקבלת סניפי בנק מסויים:

    @dovid כתב בAPI לקבלת רשימת הבנקים בישראל וקבלת סניפי בנק מסויים:

    https://www.boi.org.il/roles/statistics/banking/banks-and-branches/banks-and-branches/

    את זה ראיתי, אבל הוא מוריד אקסל, הייתי יותר שמח בjson וכדומה

    יש שם בXML.
    וזה נתונים סטטיים, כלומר לא משתנים, תאחסן את זה אצלך.

    תכנות

  • בעיה בגישה לדומיין מקומי במכונה וירטואלית על MacBook M2
    צבי-שצ צבי-ש

    @yossiz כתב בבעיה בגישה לדומיין מקומי במכונה וירטואלית על MacBook M2:

    @צבי-ש יש לי חדשות טובות בשבילך

    אתה יכול להיפטר מהמכונה השמנה
    באמת לא מובן מה חשבו. למה צריך פיירפוקס, ליברהאופיס, וכו' כדי להריץ אתר 😖

    היה קל מאוד להגיע לדסקטופ
    צריך פשוט לתפוס אותו לפני שהוא ננעל
    זה מוגדר לנעול אחרי שניה אחת של חוסר פעילות
    אבל אפשר לפתוח טרמינל
    אחרי שהיה לי טרמינל דיפדפתי בהיסטוריה בהיסטוריה (כן, יש שם הרבה דברים משעשעים 🤣 ) וראיתי את הפקודה של gsettings שמגדיר את ה-idle timeout לנעילה, ופשוט הרצתי במקום זה gsettings reset ... כדי לחזור לברירת המחדל
    משם היה קל מאוד להגיע לסיסמת המשתמש (cecadmin2020) לקבל sudo (אין שום צורך)
    בדקתי את היסטורית הדפדפן והגעתי לריפו זה
    https://github.com/DaniRubin/pizzaCyber
    שם יש כל מה שצריך להריץ את האתר... 🙂

    אאל"ט תוכל להריץ לוקלית על מק בלי להסתבך עם מכונה וירטואלית ענקית

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

    עבר קצת זמן (עוד לא שלחתי את הפוסט הזה), עברתי קצת על הריפו הוא כתוב בשפה שאני לא מכיר😊, פייתון 2+ או משהו כזה, עם ענף כן מעודכן יותר ל3.8 לכאורה, בכל מקרה אם ארצה להריץ רק את זה אצטרך להריץ הנפרד db כלשהוא (לא בדקתי באיזה סוג db עדיין) וזה כבר להתחיל להיכנס לקודים, וכל באג שיהיה לי אני אצטרך ״להפיל״ את זה עליי ולא עליהם, אז אסתכל אולי אחרי הקורס, נטו לידע ולראות כמה הרסו....

    תכנות

  • API זיהוי מתקשרים
    צבי-שצ צבי-ש

    @רובוט כתב בAPI זיהוי מתקשרים:

    @Elhanan
    שני הרפוזטורים כבר לא קיימים
    יש קישור חדש או משהו אחר ?

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

    תכנות

  • API נדרים פלוס, נחסם?
    צבי-שצ צבי-ש

    @איש-ימיני כתב בAPI נדרים פלוס, נחסם?:

    @אביי כתב בAPI נדרים פלוס, נחסם?:

    @צבי-ש כתב בAPI נדרים פלוס, נחסם?:

    @Nedarim יש חדש?

    מעדכן שעלה תיעוד מסודר, כאן:
    https://matara.pro/nedarimplus/ApiDocumentation.html

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

    לא מכיר חברת אשראי שנותנת סליקה לא באמצעות ifream (עריכה, יש כאלה, בהמשך הפוסטים)
    אני לא בטוח שמותר להם חוקית בכלל

    תכנות

  • סליקת אשראי נדרים פלוס ב API
    צבי-שצ צבי-ש

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

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

    תוכל להקים אוטומציה שלמה לזה, אבל זה אכן נהיה מסובך יותר לסלוק

    תכנות

  • ניתוק השיחה | asterisk
    צבי-שצ צבי-ש

    שלום וברכה,
    הפנתי קו של ימות המשיח אל השרת שלי (routing_ip)

    בקובץ extensions.conf הגדרתי כך:

    [public]
    exten => 1000,1,NoOp(Starting simple Python AGI script)
    same => n,AGI(/etc/asterisk/test/handle_extension.py)
    

    בקובץ handle_extension.py הגדרתי כך:

    #!/usr/bin/env python3
    
    import sys
    
    def agi_command(command):
        sys.stdout.write(command + '\n')
        sys.stdout.flush()
        return sys.stdin.readline().strip()
    
    def main():
        env = {}
        while True:
            line = sys.stdin.readline().strip()
            if not line:
                break
            key, value = line.split(':', 1)
            env[key.strip()] = value.strip()
        agi_channel = env['agi_channel']
        agi_command('ANSWER')
        agi_command(f'VERBOSE "all env: {env}" 1')
        agi_command('STREAM FILE /etc/asterisk/test/Ketapuach ""')
        agi_command(f'HANGUP {agi_channel}')
    
    if __name__ == "__main__":
        main()
    
    

    למעשה, השיחה נענית, נכתב בconsole כל המשתנים, הקובץ מושמע (קובץ של 10 שניות), ואז הכל חוזר על עצמו, ולא מתנתקת השיחה

    הנה הלוג שמראה שהוא קולט בהצלחה את המשתנים: (צינזרתי חלק מטעמי פרטיות)

    <SIP/207.232.31.138-000000e9>AGI Rx << VERBOSE "all env: {'agi_request': '/etc/asterisk/test/handle_extension.py', 'agi_channel': 'SIP/207.232.31.138-000000e9', 'agi_language': 'en', 'agi_type': 'SIP', 'agi_uniqueid': '1721087037.440', 'agi_version': '20.4.0~dfsg+******', 'agi_callerid': '055******', 'agi_calleridname': '0799******', 'agi_callingpres': '0', 'agi_callingani2': '0', 'agi_callington': '0', 'agi_callingtns': '0', 'agi_dnid': '1000', 'agi_rdnis': 'unknown', 'agi_context': 'public', 'agi_extension': '1000', 'agi_priority': '2', 'agi_enhanced': '0.0', 'agi_accountcode': '', 'agi_threadid': '1243178992****}" 1
    

    הנה הלוג הרלוונטי, יש פה את השמעת הקובץ, ואת הבקשת ניתוק, ואת הסטטוס החוזר

    <SIP/207.232.31.138-000000e9>AGI Rx << STREAM FILE /etc/asterisk/test/Ketapuach ""
        -- <SIP/207.232.31.138-000000e9> Playing '/etc/asterisk/test/Ketapuach.slin' (escape_digits=) (sample_offset 0) (language 'en')
           > 0x71114c018d50 -- Strict RTP learning complete - Locking on source address 207.232.31.138:16620
    <SIP/207.232.31.138-000000e9>AGI Tx >> 200 result=0 endpos=80105
    <SIP/207.232.31.138-000000e9>AGI Rx << HANGUP SIP/207.232.31.138-000000e9
    <SIP/207.232.31.138-000000e9>AGI Tx >> 200 result=1
    

    איך אוכל לגרום כן לניתוק השיחה?

    תכנות

  • בעיה בהורדת קובץ לשרת
    צבי-שצ צבי-ש

    @ששא כתב בבעיה בהורדת קובץ לשרת:

    @yossiz למעשה אני משתמש בפקודת cron כמו ש @איש-נחמד הביא פה בשמך
    השאלה רק האם יש לוגים מהפעולות, כי אני מריץ את זה כל יום בשעה 12 בלילה, איך אני יכול לדעת האם זה הצליח או לא?
    וכן אפשר אולי לעשות שאם היה שגיאה שינסה שוב עוד כמה דקות?

    אתה יכול להדפיס את הלוגים שה cron יוצר לקובץ, תוסיף > אחרי הפקודת cron, ותשים שם נתיב לקובץ txt

    המבנה הוא

    תזמון | שירות | קובץ | > קובץ הלוג > מה לשמור שם 
    

    כאשר בסיום אתה מגדיר 0|1|2 או כמה מהם,

    0 עבור קלט רגיל (stdin)
    1 עבור פלט סטנדרטי (stdout)
    2 לשגיאה רגילה (stderr)

    למשל

    * * * * * /usr/bin/python3 /app.py > app.log 2>&1
    

    ישמור בקובץ app.log, את הפלט של usr/bin/python3 /app.py
    וישמור שם את הפלט הסטנדרטי + השגיאות

    נ.ב. לא בדיוק הבנתי מה ההבדל בין 0 ל1 , אבל זה מידע שפעם מצאתי בגוגל,
    כשאני משתמש בזה, אני רושם 2>&1

    תכנות

  • בעיה בשימוש עם PHPMailer - הפסיק לעבוד לי
    צבי-שצ צבי-ש

    @ששא כתב בבעיה בשימוש עם PHPMailer - הפסיק לעבוד לי:

    לא הבנתי

    logs - לוגים

    תכנות

  • בהרצת קובץ פייתון בשרת - הקובץ יורד במקום להריץ
    צבי-שצ צבי-ש

    @ששא כתב בבהרצת קובץ פייתון בשרת - הקובץ יורד במקום להריץ:

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

    או אולי שהפייתון יקרא לPHP כשהוא מסיים?

    תוכל להריץ python גם מתוך הקוד php, על ידי

    <?php
    $result = shell_exec('python file_name.py');
    ?>
    

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

    תכנות

  • לינוקס אבונוטו קבלת נתונים משרת מרוחק באמצעות VPN של Fortinet/הרצת תהליך קבוע
    צבי-שצ צבי-ש

    @מוטי-מן כתב בלינוקס אבונוטו קבלת נתונים משרת מרוחק באמצעות VPN של Fortinet/הרצת תהליך קבוע:

    @צבי-ש לא, זה ללא "/" בכלל, זה קובץ שממוקם באותה תיקייה של הindex.js

    תנסה לציין לו את הנתיב המלא.

    const filePath = '/var/www/node/authorized_numbers.ini';
    
    תכנות

  • לינוקס אבונוטו קבלת נתונים משרת מרוחק באמצעות VPN של Fortinet/הרצת תהליך קבוע
    צבי-שצ צבי-ש

    @מוטי-מן כתב בלינוקס אבונוטו קבלת נתונים משרת מרוחק באמצעות VPN של Fortinet/הרצת תהליך קבוע:

    @dovid תודה, בדיוק הייתי צריך את זה גם

    אבל יש לי בעיה, יש לי שורה בקוד שקוראת את התוכן של קובץ מסויים מהתיקייה בשרת

    const fileContent = fs.readFileSync(filePath, 'utf-8');
    

    ובשורה הזו הקוד נופל (בדקתי וזה עובד מצוין ללא זה), ובאופן הרגיל זה כן עובד עם זה, מה יכול להיות הבעיה?

    ברגיל אני מריץ את זה כמשתמש ubuntu, וככה הגדרתי (גם לי זה עשה כמה שגיאות עד שהצלחתי ללמוד איך להפעיל את זה ב"ה 🙂 )

    [Unit]
    Description=node app Service
     
    [Service]
    ExecStart=/home/ubuntu/.nvm/versions/node/v14.17.0/bin/node /var/www/node/index.js
    Restart=always
    
    RestartSec=10
    SyslogIdentifier=short-name-for-logs
    User=ubuntu
     
    [Install]
    WantedBy=multi-user.target
    

    ה filePath שכתבת, הוא נתיב ביחס לתיקייה או ביחס לכל השרת?

    (האם הוא

    ${filePath}/var/www/node/
    

    או

    /${filePath} 
    

    )

    תכנות

  • html לחיץ אבל גם שיאפשר בחירה
    צבי-שצ צבי-ש

    @dovid כתב בhtml לחיץ אבל גם שיאפשר בחירה:

    אני לא יכול לבדוק מה יש בספריא בגלל נטפרי (אולי תתאר לי במילים),

    הקלטת מסך 2023-12-13 ב-14.43.57.mov

    תכנות

  • אחסון אתרים זול ומהיר
    צבי-שצ צבי-ש

    @מי-זה כתב באחסון אתרים זול ומהיר:

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

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

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

    ליזום קריאות ? או להעמיד service?

    תכנות

  • מחפש דרך לקבל בקלות את כל הפרקי תהילים והמשניות שיש
    צבי-שצ צבי-ש

    תוגה לכולם על התגובות, אנסה אותם ואעדכן.

    תכנות

  • עזרה ביצירת תוסף
    צבי-שצ צבי-ש

    @א-ב-ו-ב כתב בעזרה ביצירת תוסף:

    יש לי איזה קוד שמישהו (אולי @EMG) כתב (כאן) ונשמח אם מישהו יוכל לעזור ולהפוך את זה לתוסף שלא נצטרך כל פעם ללחוץ עליו במייל.
    הקוד הזה עושה שמי שיש לו את מעקב מיילים של mailtrack.io זה מוריד את הסימון הזה a8dd3cff-99c9-48ba-b48d-3cc87765e28f-image.png שהמייל במעקב
    תודה רבה

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

    תכנות

  • קוד להקראה קבצי TTS בימות שיתממשק עם ההקראה החדשה של גוגל
    צבי-שצ צבי-ש

    @מוגן כתב בקוד להקראה קבצי TTS בימות שיתממשק עם ההקראה החדשה של גוגל:

    @צבי-ש אני אישית לא מבין בכלל בקודים, אבל ניסיתי לבקש מידע באחד שמבין בתחום וזה מה שהוא ענה לי
    59f4947c-7d41-46c9-ad70-b8137efcfedb-image.png
    ואני מנסה להיעזר בפורום כאן איך להגיע לזה.

    יש 3 אופציות

    1. תלמד לתכנת אפילו בצורה יחסית בסיסית ב js /php בדגש על js , תיצור אתר שמקבל טקסט, שולח לתמלול, ומעלה את הקובץ אל ימות המשיח.

    2. chat gpt ושות׳ ולנסות ליצור כזה משהו

    3. לפנות למתכנת בתשלום, שיבנה לך,ממשק שבו תוכל להכניס טקסט, מספר מערכת, סיסמה שלוחה, שם של קובץ / מספור אוטומטי,
      ושזה ימיר אוטומטי.

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

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

    תכנות
  • 1 / 1
  • התחברות

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

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