• דף הבית
    • אינדקס קישורים
    • פוסטים אחרונים
    • משתמשים
    • חיפוש בהגדרות המתקדמות
    • חיפוש גוגל בפורום
    • ניהול המערכת
    • ניהול המערכת - שרת private
    • הרשמה
    • התחברות
    1. דף הבית
    2. איל משולש
    א מנותק
    • פרופיל
    • עוקב אחרי 4
    • עוקבים 8
    • נושאים 172
    • פוסטים 1,149
    • קבוצות 0

    איל משולש

    @איל משולש

    452
    מוניטין
    558
    צפיות בפרופיל
    1.1k
    פוסטים
    8
    עוקבים
    4
    עוקב אחרי
    תאריך הצטרפות
    נראה לאחרונה
    מיקום ניתן ליצור איתי קשר במייל admin@0773312.xyz

    איל משולש הפסקת מעקב מעקב

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

    • ניתוב למשאיר ההודעה בחינם

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

      להגדרה מהירה כנסו פה

      type=nitoviya
      nitoviya_dial_to=
      

      ולהגדיר ככה בשלוחת שמיעת הודעות (מוגדר על מקש *0 ניתן לשנות לכל מקש ההגדרות פה)

      control_play_moreA0=send_api
      api_link=https://nituv-u1oq.onrender.com//api/process
      api_add_0=A=טוקן מערכת
      

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

      קוד ה PHP של השלוחה (עם טוקן מוטמע בקוד) - ללא מנגנון אבטחה או מודל תור

      פורסם בטיפים עצות והדגמות מהמשתמשים
      א
      איל משולש
    • תפריט זיהוי דיבור ע"י AI - חינמי (ישן)

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

      לא ממולץ להשתמש במודל זה

      במודל החדש יש גם את האפשרות לבדוק מה הקליטו והוא לא מצא תוצאה דומה (לוג)

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

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

      תפריט זיהוי דיבור חינמי - הסבר

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

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

      בהקלטה ניתן להקליט גם טקסט וגם אותיות לדוג' מי שיקליט מם נון הא למד התמלול יזהה את המילה מנהל

      חלק א - הוצאת מפתח API

      יש להיכנס לפה להוציא מפתח API (חינם)
      הדרכה עם תמונות בספוילר

      4a212519-5944-4db9-809a-952b7f05a8c6-image.png
      bdcd286a-6490-4a1d-8900-e391a22fd902-image.png
      5d5b5237-f390-4884-a209-748d69c938f1-image.png
      cbeafc0d-24e5-4427-891e-0f68b180c6ea-image.png

      חלק ב - ההגדרות בשלוחת התפריט

      יש לפתוח שלוחה בתוך שלוחת התפריט בשם api (או כל שם אחר ולשנות בהגדרות לעיל)

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

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

      api_add_2=1=מנהל
      api_add_3=2=מזכירות
      api_add_4=3=הנהלת חשבונות
      

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

      api_add_5=
      

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

      api_add_2=1A=מנהל כללי
      

      בדוגמה הזאת גם מי שיאמר מנהל וגם מי שיאמר מנהל כללי יעבור לשלוחה 1
      שאר ההגדרות בשלוחה
      שימו לב עליכם להכניס 1. מפתח של גמיני 2. טוקן 3. נתיב שלוחת התפריט שלכם
      נ.ב. כאשר פקודה DownloadFile תעבוד עם המפתחות החדשים יהיה אפשר לשים את המפתח במקום מספר מערכת וסיסמא

      type=api
      title=
      api_link=https://dibur.onrender.com//run_transcription
      api_add_0=key=פה יש להדביק את המפתח שקיבלתם 
      api_add_1=token=פה יש לכתוב מספר מערכת נקודתיים סיסמה (0773137770:123456)
      api_add_2=פה יש לכתוב מספר שלוחה = לשם אותו יש להקליט למעבר אליה
      api_add_3=
      api_add_4=
      
      api_000=rapi,,record,נתיב שלוחת התפריט/api,,no
      
      api_call_id_send=no
      api_phone_send=no
      api_did_send=no
      api_enter_id_send=no
      api_enter_id_name_send=no
      api_time_send=no
      

      ניתן להוסיף מוזיקה בהמתנה לתשובה מהשרת ע"י ההגדרה הזאת פה ניתן לראות שמות מוזיקה

      api_wait_answer_music_on_hold=yes
      api_wait_answer_music_on_hold_different=שם המוזיקה בהמתנה שלכם
      

      נ.ב. כל ההקלטות נשמרות בתקייה בשם api בתוך שלוחת התפריט

      אפשרויות שימוש נוספות

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

      api_add_3=1=מנהל
      

      ההגדרה היא (שימו לב לשמור על סדר עוקב)

      api_add_2=text=yes
      

      לאחמ"כ ניתן להגדיר את פעולות המערכת כמו פה
      לדוגמא אם יוגדר כך

      api_add_3=1=מנהל
      api_add_3=2=מזכירות
      api_answer_1=id_list_message=t-ההנהלה סגורה
      api_answer_1=id_list_message=t-המזכירות סגורה 
      

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

      בעיה שאולי יהיה למשהו פתרון - נפתר

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

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

      עדכון חוה"מ סוכות תשפ"ז
      @הדיבל-המעופף פיתח מודל כזה טוב יותר פה

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

      ההגדרות בשלוחה

      type=api
      api_link=https://timlul-sq7x.onrender.com/transcribe
      api_add_0=token=יש לכתוב טוקן
      api_add_1=N=נתיב שמירה של הודעת הטקסט (ללא / בהתחלה)
      api_add_2=M=נתיב שמירה של ההודעה קולית (עם / בהתחלה)
      

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

      type=api
      api_link=https://timlul-tziburi-yy1v.onrender.com/transcribe
      api_add_0=token=יש לכתוב טוקן
      api_add_1=path=נתיב שמירה של הודעת הטקסט (ללא / בהתחלה)
      api_add_2=M=נתיב שמירה של ההודעה קולית (עם / בהתחלה)
      

      כדי שיעבור גם הפרטי השמעה, יש להוסיף

      api_add_3=txt=yes
      

      לפני שאתם שואלים שאלה תבדקו טוב האם שמתם / אפה שצריך ואפה שלא צריך לא (עיינו טוב בהגדרות), שלא תהיו האדם ה 100 ששואל למה לא עובד לו

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

      בהצלחה

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

      יש לכם שאלות? ניתן לפנות אלי במייל ayl@0773312.xyz

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

      📊 דוחות

      השמעת שמות נרשמים ממודל קבלת נתונים - חדש

      מחיקת נרשמים ממודל קבלת נתונים - חדש

      🎙️ מודלי זיהוי דיבור

      התכתבות עם מאזינים דרך המייל - חדש

      תפריט זיהוי דיבור חינמי

      ספר טלפונים עם זיהוי דיבור - כולל ניתוב

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

      🌉 תקשורת של שתי מערכות

      שלוחת הקלטה למערכת אחרת - כולל צינתוק

      שליחת צינתוק לשתי מערכות

      🎵 הודעות, השמעת קבצים וצינתוקים 🔔

      ניתוב מהשמעת קבצים לכמה שלוחות API

      שמיעת פרטי השמעה ע"י מנהל בלבד

      צינתוק חינמי בשעות שהמאזין בוחר

      ניתוב למשאיר ההודעה - חינם

      השארת הודעה עם צליל של פרסומת - חדש

      🧩 שונות

      הוספת זיהוי ספיישל למערכת דרך הטלפון

      שרת מגשר לסקריפיטים של גוגל

      מדריכים (שלוחות של ימות המשיח)

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

      שליחת צינתוק ממערכת אחרת

      קבצי HTML

      ממשק עריכת דוחו"ת ymgr - לשימוש מהדפדן פה

      ממשק יצירת תשובה להחזרה מהשרת - לשימוש מהדפדפן פה

      ממשק צפייה בדוחו"ת - לשימוש מהדפדן (ממשק ישן) פה

      הגדרת שלוחת קבלת נתונים לשימוש מהדפדפן פה

      יצירת שלוחת API

      שיתוף קודים

      קוד PHP למעבר למשאיר ההודעה בחינם

      קוד PHP לניתוב למשאיר ההודעה בעלות יחידות

      קוד PHP לאימות זיהוי ספיישל

      פורסם בהסברים מסודרים ממשתמשים
      א
      איל משולש
    • שליחת צינתוק עם אפשרות למענה (אפשר גם לכמה רשימות יחד)
      לאור הגילוי של @cubase פה הצורך בשלוחה זו התייתר

      הגדירו בשלוחה:

      tzintuk_say_system_info_on_answer=yes
      

      או בקובץ ivr.ini לכל המערכת

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

      type=api
      api_link=https://www.call2all.co.il/ym/api/RunTzintuk
      api_add_0=token=טוקן
      api_add_1=phones=tzl:רשימת צינתוקים (ניתן לכתוב כמה ולהפריד בפסיק)
      לביטול אפשרות המענה יש למחוק את השורה הבאה
      api_add_2=sayInfoOnAnswer=true
      

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

      api_add_3=TzintukTimeOut=אורך צינתוק (עד 16 שניות)
      api_add_4=callerId= זיהוי יוצא
      

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

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

      שימו לב במידה והקבצים חסומים לכם יש לשלוח מייל ל ayl-auto@0773312.xyz, ולכתוב בשורת הנושא - צינתוקים לפי שעות
      חדש! מספר רשימות באותו קובץ וכן מענה לצינתוק, עדכון על השינויים פה
      הסבר
      לצורך כך יש ליצור עותק של הגליון שיטס הזה (יש למחוק את הכוכביות מהקישור) להיכנס לקוד (תוספים - apss script) ולעשות פריסה של אפלקציית אינטרנט, הקישור שהתקבל הוא הלינק שאליו יש לשלוח את הנתונים כדלהלן
      בשיטס בגליון מספרים יש להדביק בתא D1 טוקן של המערכת (החדש - לא שתקף לחצי שעה ולא מספר מערכת:סיסמא)
      ההרשמה לצינתוקים מתבצע בשתי שלבים:
      א. רישום לרשימת צינתוקים אישית עיין פה
      ב. שלוחת בחירת שעות אליה יש להיכנס לאחר שרשום לצינתוקים, לאחר שאישר צינתוקים אישיים יוכל להיכנס כל פעם לשלוחה זו על מנת לעדכן את השעות שלו
      ההגדרות בשלוחה:

      type=api
      title=עדכון שעות צינתוק
      api_link=פה יש לכתוב את הלינק שקבלתם בפריסה
      פרמטרים שלא ישלחו
      api_call_id_send=no
      api_did_send=no
      api_extension_send=no
      api_enter_id_send=no
      api_enter_id_name_send=no
      api_time_send=no
      הקשות
      api_000=M,no,,4,4,Time,yes,,,,,
      api_001=H,no,,4,4,Time,yes,,,,,
      

      יש לשים בשלוחה קובץ 000 "אנא הקישו את השעה ממנה תתחילו לקבל צינתוקים בארבע ספרות" (אפשר TTS)
      קובץ 001 "אנא הקישו את השעה עד אליה תקבלו צינתוקים בארבע ספרות" (כנ"ל)
      וקובץ שמע M1607 "השעות עודכנו בהצלחה"

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

      type=api
      title=שליחת צינתוק
      api_link=פה יש לכתוב את הלינק שקיבלתם בפריסה
      פרמטרים שישלחו
      
      פרמטרים שלא ישלחו
      api_call_id_send=no
      api_did_send=no
      api_extension_send=no
      api_enter_id_send=no
      api_enter_id_name_send=no
      api_time_send=no
      api_hangup_send=no
      הקשות
      api_add_0=T=YES
      

      יש להוסיף קובץ שמע M1607 "הצינתוק נשלח בהצלחה"

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

      api_end_goto=/
      

      כל פעם גם ישלח צינתוק לרשימה מספר 1 (אלא א"כ אין מספר שזה השעות שלו)
      בהצלחה

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

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

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

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

      מכיון שהמפתח החינמי של גמיני נהיה מוגבל מאד נוספה אפשרות לתמלול באמצעות ספריית פייתון SpeechRecognition שלא צריך מפתח, קרדיט ל @y6714453 ההגדרות מופיעות בחלק ההגדרות בשלוחה
      המודל מחולק לשלש חלקים:
      חלק א - הוצאת מפתח גמיני (חינם)
      חלק ב - יצירת הקובץ של השמות הטלפונים (והכתובות - אופציונלי)
      חלק ג - ההגדרות בשלוחה

      פעולות המערכת:
      א. קבלת הקלטה
      ב. משמיע את השם והטלפון ובמידה וקיים גם כתובת
      ג. נותן 3 אפשרויות
            1.שמיעה חוזרת
           2. ניתוב
           3. חיפוש חדש

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

      חלק א - הוצאת מפתח ג'מיני

      יש להיכנס לפה להוציא מפתח API (חינם)
      הדרכה עם תמונות בספוילר

      4a212519-5944-4db9-809a-952b7f05a8c6-image.png
      bdcd286a-6490-4a1d-8900-e391a22fd902-image.png
      5d5b5237-f390-4884-a209-748d69c938f1-image.png
      cbeafc0d-24e5-4427-891e-0f68b180c6ea-image.png

      חלק ב - ספר הטלפונים

      את הספר טלפונים יוצרים בקובץ ini (אפשר לשים אותו אפה שרוצים, יש להגידר בשלוחה מאפה לקחת אותו)
      הקובץ תואם לקובץ ListAllInformation.ini, אבל צריך לבנות אותו בצורה הבאה: (שימו לב שפה זה מתהפך)

      מספר אישי,1,משפחה ושם,כתובת,טלפון
      002,1,כהן משה,תל אביב,0773137770
      

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

      חלק ג - הגדרות בשלוחה

      יש לבצע את השינויים הבאים

      1. יש להכניס את המפתח (שורה 4)
      2. יש לכתוב את טוקן המערכת (כמו בדוגמא, בהמשך יהיה אפשר עם הטוקן החדש) (שורה 5)
      3. יש להכניס את נתיב השלוחה הנוכחית כולל / לפני (שורה 9 )
      4. יש לכתוב את נתיב קובץ השמות (ללא / בהתחלה ועם סיומות) (שורה 6)
      5. יש לכתוב את נתיב השלוחה (כולל / לפני) [לשם יופנה מי שיקיש 3 לחיפוש חדש] (שורה 7)
      type=api
      title=
      api_link=https://dibur-gg.onrender.com
      api_add_0=key=פה יש להדביק את המפתח  של גמיני שקיבלתם 
      api_add_1=token=פה יש לכתוב מספר מערכת נקודתיים סיסמה 0773137770:123456
      api_add_2=path=7/123.ini
      api_add_3=C=/7
      
      api_000=rapi,,record,נתיב שלוחת הספר טלפונים/api,,no
       
      api_call_id_send=no
      api_phone_send=no
      api_did_send=no
      api_enter_id_send=no
      api_enter_id_name_send=no
      api_time_send=no
      

      חדש: ניתן להשתמש ללא מפתח גמיני יש להחליף לינק (שורה 3)

      api_link=https://dibur-google.onrender.com
      

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

      api_wait_answer_music_on_hold=yes
      api_wait_answer_music_on_hold_different=
      

      יש להוסיף בשלוחה קובץ בשם 000 (אפשר TTS) שבו יהיה ההודעה (כגון "אנא הקלט שם ובסיום הקש סולמית)

      תוספת

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

      api_add_4=D=שלוחת הספר טלפונים של הקלדה כולל / לפני
      api_add_5=N=1
      

      ואז ישמעו בנוסף למה שיש היום "לחיפוש על ידי הקלדה הקש 4"

      בהצלחה

      ניתן לשלוח לי מייל
      לתגובות בפורום

      פורסם בהסברים מסודרים ממשתמשים
      א
      איל משולש
    • שרת תיווך לסקריפטים של גוגל

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

      api_link=https://gesher.onrender.com/
      

      ואת הלינק של הסקריפט פה

      api_add_0=URL_GESHER=
      

      בהצלחה

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

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

      ניתן לבצע התקנה מהיה של השלוחה פה

      ההגדרות בשלוחת ההקלטה

      type=api
      api_link=https://timlul-tzat.onrender.com/transcribe
      api_add_0=token=טוקן
      api_add_1=url-g=https://script.google.com/macros/s/AKfycbwEkY5yU-X9XH-nJsjfA1dvuiez3Wws3QpfGzRuvQMo0tolfhMqOx6IOnfYmNlchrAO/exec
      api_add_2=token_g=מייל
      api_add_3=M=מיקום שמירת ההקלטות עצמם כולל / בהתחלה (כל ניסוין הקלטה שומר קובץ בשלוחה, זה רק אריכיון)
      api_add_4=link=yes
      api_add_5=key_g=נתיב השלוחה שה המאזינים שומעים את ההודעות (ללא / בהתחלה)
      

      ההגדרות בשלוחת השמעת קבצים לפי טלפון

      type=playfile
      title=
      שישמיע הודעות אישיות
      folder_play=id_record
      

      המייל יגיע מהמייל mazinim@0773312.xyz
      ניתן להריץ את הסקריפט משיטס שלכם, יש לשכפל את הקובץ הזה להריץ טריגר על הפונקצייה checkEmailRepliesAndUpload כל כמה דקות, לעשות פריסה ולהחליף את הקישור שקיבלתם ב api_add_1=url-g=

      לתגובות פה
      פורסם בהסברים מסודרים ממשתמשים
      א
      איל משולש
    • השארת הודעה אישית למשאיר ההודעה

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

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

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

    • RE: ממשק HTML לבדיקת כמות מאזינים בו זמנית (ערוצים)

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

      פורסם בטיפים עצות והדגמות מהמשתמשים
      א
      איל משולש
    • שיתוף קוד + מדריך התקנה + אפשרת שימוש | שלוחת הרשמה לצינתוקים אישיים (API)

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

      type=api
      api_add_0=token=טוקן של הקו
      api_link=לינק שקיבלתם בפריסה 
      

      ניתן להשתמש בלי הפריסה עם הלינק הבא

      https://pai-dev-s-file-5pqkq7.pai-6ec8c3bb.workers.dev/
      

      הקוד:

      /**
       * Cloudflare Worker (ES Modules) - הרשמה לצינתוק אישי בימות המשיח
       *
       * מה הסקריפט עושה בכל קריאה משלוחת API:
       *  1. קורא את מספר הטלפון של המתקשר (ApiPhone) ואת נתיב שלוחת ה-API (ApiExtension).
       *  2. יוצר (או מעדכן, אם כבר קיימת) תת-שלוחה בשם הטלפון תחת שלוחת ה-API,
       *     מסוג tzintuk (הרשמה לצינתוקים) עם רשימה בשם הטלפון.
       *  3. מגדיר "מעבר בסיום" (tzintuk_end) לשלוחה האחורה - ההורה של שלוחת ה-API,
       *     כדי שהמשתמש לא ייכנס שוב לשלוחת ה-API.
       *  4. מעביר את המתקשר לתת-השלוחה החדשה (go_to_folder).
       *
       * הטוקן מתקבל בפרמטר GET בשם token (בפורמט "מספר_מערכת:סיסמה"), לדוגמה:
       *   https://your-worker.workers.dev/?token=0771234567:mypassword
       *
       * הגדרה בימות: בשלוחת ה-API הגדירו api_link לכתובת ה-Worker כולל ?token=...
       */
      
      const YEMOT_UPDATE_EXTENSION = "https://www.call2all.co.il/ym/api/UpdateExtension";
      
      export default {
        async fetch(request) {
          try {
            const params = await readParams(request);
      
            // ---- טוקן מפרמטר ה-GET ----
            const token = new URL(request.url).searchParams.get("token") || params.token;
            if (!token) {
              return reply("id_list_message=t-חסר טוקן בהגדרות&go_to_folder=hangup");
            }
      
            // ---- מספר הטלפון של המבקש ----
            const phone = String(params.ApiPhone || "").replace(/\D/g, "");
            if (!phone) {
              return reply("id_list_message=t-לא זוהה מספר טלפון. לא ניתן להירשם&go_to_folder=hangup");
            }
      
            // ---- נתיב שלוחת ה-API (השלוחה ממנה נשלחה הקריאה) ----
            const apiPath = normalizePath(params.ApiExtension);
            const parts = apiPath.split("/").filter(Boolean);
            const parentPath = "/" + parts.slice(0, -1).join("/"); // "/" אם שלוחת ה-API בשורש
            const newPath = (apiPath === "/" ? "" : apiPath) + "/" + phone;
      
            // ---- יצירת/עדכון תת-השלוחה ----
            const query = new URLSearchParams({
              token,
              path: "ivr2:" + newPath,
              type: "tzintuk",
              title: phone,
              list_tzintuk: phone,   // שם הרשימה = מספר הטלפון
              tzintuk_end: parentPath, // מעבר בסיום - אחורה, מעל שלוחת ה-API
            });
      
            const res = await fetch(YEMOT_UPDATE_EXTENSION, {
              method: "POST",
              headers: { "Content-Type": "application/x-www-form-urlencoded" },
              body: query.toString(),
            });
      
            const data = await res.json().catch(() => ({}));
            if (data.responseStatus !== "OK") {
              console.error("UpdateExtension failed:", JSON.stringify(data));
              return reply("id_list_message=t-אירעה שגיאה ביצירת ההרשמה&go_to_folder=" + parentPath);
            }
      
            // ---- העברה לשלוחה שנוצרה ----
            return reply("go_to_folder=" + newPath);
          } catch (err) {
            console.error("Worker error:", err);
            return reply("id_list_message=t-אירעה שגיאה&go_to_folder=hangup");
          }
        },
      };
      
      /** קורא פרמטרים גם מ-GET וגם מ-POST */
      async function readParams(request) {
        const out = Object.fromEntries(new URL(request.url).searchParams);
        if (request.method === "POST") {
          const type = request.headers.get("content-type") || "";
          try {
            if (type.includes("application/json")) {
              Object.assign(out, await request.json());
            } else {
              const form = await request.formData();
              for (const [k, v] of form.entries()) out[k] = String(v);
            }
          } catch (_) {
            /* גוף ריק או לא תקין - ממשיכים עם ה-query */
          }
        }
        return out;
      }
      
      /** מנרמל נתיב שלוחה: מסיר קידומת ivr2: ומוודא לוכסן בתחילה ובלי לוכסן בסוף */
      function normalizePath(p) {
        let s = String(p || "").trim().replace(/^ivr2:/, "");
        s = "/" + s.split("/").filter(Boolean).join("/");
        return s;
      }
      
      function reply(body) {
        return new Response(body, {
          headers: { "Content-Type": "text/plain; charset=utf-8" },
        });
      }
      
      
      פורסם בטיפים עצות והדגמות מהמשתמשים
      א
      איל משולש
    • RE: ממשק HTML לבדיקת כמות מאזינים בו זמנית (ערוצים)

      @ישראל10 eaa4c9ac-dd81-4637-87d9-3dbe604b32f0-image.jpeg

      פורסם בטיפים עצות והדגמות מהמשתמשים
      א
      איל משולש
    • RE: ממשק HTML לבדיקת כמות מאזינים בו זמנית (ערוצים)

      @ישראל10 לכאורה באתר הזה יש בעיות, הוא לא נראה לי אמין, תתחבר באתר של @פתרון-ai
      https://ivr.pitronai.com/#/devspace

      פורסם בטיפים עצות והדגמות מהמשתמשים
      א
      איל משולש
    • RE: קוד למעבר למשאיר ההודעה - בעלות יחידות

      @בונה-מערכות תעשה את זה דרך האתר של @פתרון-ai
      תכנס לאתר תרשם [אם אתה נרשם עם שמירת טוקן בדפדפן זה לא חשוף אפי' לו עצמו]
      תעשה חיבור לקלופיירד
      f2adb873-e243-42c2-9462-1f0bdf4752be-image.jpeg
      תרשם עם החשבון גוגל
      תבחר אח"כ בסקריפט לצד שרת
      917a8bc9-0ad5-45e9-bcd4-087d0b3533ce-image.jpeg
      ושים תשים את הקוד הבא (שים לב להחליף את המספר מערכת וסיסמה)
      תעשה פריסה, יופיע לך בצד קישור

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

      export default {
        async fetch(request, env) {
          const url = new URL(request.url);
          const headers = { "content-type": "text/plain; charset=utf-8" };
          const text = (msg) => new Response(msg, { headers });
      
          // 1. בדיקת קיומו של הפרמטר 'what'
          const what = url.searchParams.get("what");
          if (!what) return text("לא נשלח פרמטר what");
      
          // 2. החלפת 3 התווים האחרונים ב-txt
          const modified = what.slice(0, -3) + "txt";
      
          // 3. בניית ה-URL לקריאה ל-API
          const token = "0773137770:123456"; // מספר מערכת:סיסמה
          const apiUrl =
            "https://www.call2all.co.il/ym/api/GetTextFile?" +
            new URLSearchParams({ token, what: modified });
      
          // 4. קריאה ל-API ופענוח ה-JSON
          let data;
          try {
            const res = await fetch(apiUrl);
            data = await res.json();
          } catch (e) {
            return text("שגיאה בקריאה לשרת");
          }
          if (!data || !data.contents) return text("תשובה לא תקינה מהשרת");
      
          // 5. חילוץ מספר הטלפון והחזרת תשובת routing לימות המשיח
          const match = data.contents.match(/Phone-(05\d{8})/);
          if (!match) return text("לא נמצא מספר טלפון בתשובה.");
      
          return text(`routing=${match[1]},1,,,,,,,,,no,,,,,`);
        },
      };
      
      פורסם בפורום PHP
      א
      איל משולש
    • האתר בטא הפסיק לעבוד?

      https://www.call2all.co.il/yemot-admin-g1/#/login
      מחזיר שגיאה 404
      5953fccf-1d61-42bc-b87f-653c7db573c8-image.jpeg

      פורסם בעזרה הדדית למשתמשים מתקדמים
      א
      איל משולש
    • RE: ניוד מספר נייד כשר לימות+קבלת SMS

      @אז-נדברו כתב:

      @מזוזת כתב:

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

      @אז-נדברו האם זה רק בתשלום מראש או גם אח"כ?

      פורסם בטיפים עצות והדגמות מהמשתמשים
      א
      איל משולש
    • RE: הקלטות במודול תור

      @שנאור תכנס לגוגל דרייב
      תעשה "חדש"
      f1887310-3865-4912-9f4e-5d527ca8ecdd-image.jpeg
      תבחר "עוד" - "גוגל סקריפט"
      צילום מסך 2026-10-19 215037.png
      תבחר יצירת סקריפט, ואז תדביק שם את הקוד הבא
      **שים לב שיש מקום להכניס את מספר המערכת, את הסיסמה, ואת הנתיב של השלוחה שבה ההקלטות היום, ונתיב שאליו אתה רוצה שזה יעבור, אתה יכול לשים שם מזהה של תקייה בדרייב אם אתה רוצה שזה ישמר גם שם

      /**
       * העתקת קבצים מתיקייה בימות המשיח – לתיקייה בימות ו/או לתיקייה בגוגל דרייב
       * כל קובץ מורד מהמקור (DownloadFile) ומועלה מחדש ליעד (UploadFile) –
       * ללא שימוש בהעתקה הפנימית של ימות.
       * ------------------------------------------------------------------------
       * הוראות:
       * 1. ב-script.google.com צור פרויקט חדש והדבק את כל הקוד.
       * 2. מלא את ההגדרות ב-CONFIG למטה.
       * 3. הרץ פעם אחת ידנית את הפונקציה copyFiles (כדי לאשר הרשאות ולבדוק).
       * 4. לתזמון: הרץ פעם אחת את createTrigger (או דרך "טריגרים" בתפריט השמאלי).
       */
       
      const CONFIG = {
        // פרטי התחברות למערכת
        USERNAME: '07XXXXXXXX',
        PASSWORD: 'XXXXXX',
       
        // תיקיית המקור בימות (לדוגמה: '/1/2')
        SOURCE_PATH: '/1',
       
        // מצב: 'yemot' = העתקה לתיקייה בימות | 'drive' = שמירה בדרייב | 'both' = לשניהם
        MODE: 'both',
       
        // יעד בימות (רלוונטי ל-yemot / both). הקבצים יורדו מהמקור ויועלו לכאן מחדש.
        YEMOT_TARGET_PATH: '/9',
       
        // מזהה תיקייה בדרייב (רלוונטי ל-drive / both)
        // מעתיקים מהכתובת: https://drive.google.com/drive/folders/<המזהה_כאן>
        DRIVE_FOLDER_ID: 'PUT_DRIVE_FOLDER_ID_HERE',
       
        // אילו סיומות להעתיק. מערך ריק [] = כל הקבצים
        EXTENSIONS: ['wav', 'mp3', 'ogg', 'txt', 'tts'],
       
        // כל כמה שעות להריץ (משמש את createTrigger)
        TRIGGER_EVERY_HOURS: 1
      };
       
      const API = 'https://www.call2all.co.il/ym/api/';
      const MAX_RUNTIME_MS = 5 * 60 * 1000; // עצירה בטוחה לפני מגבלת 6 הדקות של גוגל
      const MAX_FILE_BYTES = 50 * 1024 * 1024; // מגבלת UrlFetchApp בגוגל
       
      /* ===================== פונקציה ראשית ===================== */
       
      function copyFiles() {
        const start = Date.now();
        const mode = String(CONFIG.MODE).toLowerCase();
        const toYemot = mode === 'yemot' || mode === 'both';
        const toDrive = mode === 'drive' || mode === 'both';
        if (!toYemot && !toDrive) throw new Error('MODE חייב להיות yemot / drive / both');
       
        const token = login_();
        try {
          const sourceDir = normalizePath_(CONFIG.SOURCE_PATH);
          const files = listFiles_(token, sourceDir);
          Logger.log('נמצאו ' + files.length + ' קבצים במקור ' + sourceDir);
       
          // רשימת קבצים קיימים ביעד – כדי לדלג עליהם
          let yemotTarget, yemotExisting, driveFolder, driveExisting;
          if (toYemot) {
            yemotTarget = normalizePath_(CONFIG.YEMOT_TARGET_PATH);
            if (yemotTarget === sourceDir) throw new Error('תיקיית היעד בימות זהה לתיקיית המקור');
            yemotExisting = new Set(listFiles_(token, yemotTarget, true).map(f => f.name));
          }
          if (toDrive) {
            driveFolder = DriveApp.getFolderById(CONFIG.DRIVE_FOLDER_ID);
            driveExisting = new Set();
            const it = driveFolder.getFiles();
            while (it.hasNext()) driveExisting.add(it.next().getName());
          }
       
          let copiedY = 0, copiedD = 0, skipped = 0, errors = 0;
       
          for (const f of files) {
            if (Date.now() - start > MAX_RUNTIME_MS) {
              Logger.log('הגעתי למגבלת זמן – ההמשך יתבצע בהרצה הבאה.');
              break;
            }
            const srcFile = joinPath_(sourceDir, f.name);
            const needYemot = toYemot && !yemotExisting.has(f.name);
            const needDrive = toDrive && !driveExisting.has(f.name);
       
            if (!needYemot && !needDrive) { skipped++; continue; }
       
            if (f.size && f.size > MAX_FILE_BYTES) {
              errors++;
              Logger.log('דילוג על ' + srcFile + ' – גדול מ-50MB (מגבלת גוגל)');
              continue;
            }
       
            // 1. הורדה פעם אחת מהמקור
            let blob;
            try {
              blob = downloadFile_(token, srcFile).setName(f.name);
            } catch (e) {
              errors++;
              Logger.log('שגיאה בהורדת ' + srcFile + ': ' + e.message);
              continue;
            }
       
            // 2. העלאה מחדש לתיקיית היעד בימות
            if (needYemot) {
              try {
                uploadFile_(token, joinPath_(yemotTarget, f.name), blob);
                yemotExisting.add(f.name);
                copiedY++;
              } catch (e) {
                errors++;
                Logger.log('שגיאה בהעלאה לימות ' + f.name + ': ' + e.message);
              }
            }
       
            // 3. שמירה בדרייב
            if (needDrive) {
              try {
                driveFolder.createFile(blob);
                driveExisting.add(f.name);
                copiedD++;
              } catch (e) {
                errors++;
                Logger.log('שגיאה בשמירה לדרייב ' + f.name + ': ' + e.message);
              }
            }
          }
       
          Logger.log('סיום: הועתקו לימות ' + copiedY + ', נשמרו בדרייב ' + copiedD +
                     ', דולגו (קיימים) ' + skipped + ', שגיאות ' + errors);
        } finally {
          logout_(token);
        }
      }
       
      /* ===================== תזמון ===================== */
       
      function createTrigger() {
        // מוחק טריגרים קודמים של הפונקציה כדי לא ליצור כפילויות
        ScriptApp.getProjectTriggers()
          .filter(t => t.getHandlerFunction() === 'copyFiles')
          .forEach(t => ScriptApp.deleteTrigger(t));
       
        ScriptApp.newTrigger('copyFiles')
          .timeBased()
          .everyHours(CONFIG.TRIGGER_EVERY_HOURS)
          .create();
        Logger.log('נוצר טריגר: כל ' + CONFIG.TRIGGER_EVERY_HOURS + ' שעות');
      }
       
      function removeTriggers() {
        ScriptApp.getProjectTriggers()
          .filter(t => t.getHandlerFunction() === 'copyFiles')
          .forEach(t => ScriptApp.deleteTrigger(t));
        Logger.log('הטריגרים נמחקו');
      }
       
      /* ===================== פונקציות API ===================== */
       
      function login_() {
        const data = apiCall_('Login', { username: CONFIG.USERNAME, password: CONFIG.PASSWORD });
        if (!data.token) throw new Error('התחברות נכשלה – לא התקבל טוקן');
        return data.token;
      }
       
      function logout_(token) {
        try { apiCall_('Logout', { token: token }); } catch (e) { /* לא קריטי */ }
      }
       
      /** רשימת קבצים בתיקייה (כמו בקובץ ה-PHP: GetIVR2Dir + סינון לפי סיומת) */
      function listFiles_(token, dirPath, allowMissing) {
        const apiPath = dirPath === '/' ? '/' : dirPath + '/';
        let data;
        try {
          data = apiCall_('GetIVR2Dir', { token: token, path: apiPath });
        } catch (e) {
          if (allowMissing) return [];
          throw e;
        }
        const raw = Array.isArray(data.files) ? data.files : [];
        const exts = (CONFIG.EXTENSIONS || []).map(x => String(x).toLowerCase());
       
        return raw.filter(f => {
          if (!f || !f.name) return false;
          if (exts.length === 0) return true;
          const ext = f.name.split('.').pop().toLowerCase();
          return exts.indexOf(ext) !== -1 || f.fileType === 'AUDIO';
        });
      }
       
      /** העלאת קובץ לימות (UploadFile – POST multipart/form-data) */
      function uploadFile_(token, targetPath, blob) {
        const resp = UrlFetchApp.fetch(API + 'UploadFile', {
          method: 'post',
          payload: {                       // אובייקט עם Blob => נשלח כ-multipart/form-data
            token: token,
            path: 'ivr2:' + targetPath.replace(/^\/+/, ''),
            convertAudio: '0',             // שומר את הקובץ כמו שהוא, בלי המרה
            file: blob
          },
          muteHttpExceptions: true
        });
        let data;
        try {
          data = JSON.parse(resp.getContentText());
        } catch (e) {
          throw new Error('UploadFile: תשובה לא תקינה (HTTP ' + resp.getResponseCode() + ')');
        }
        if (data.responseStatus !== 'OK') {
          throw new Error('UploadFile: ' + (data.message || data.responseStatus) +
                          (data.messageCode ? ' (קוד ' + data.messageCode + ')' : ''));
        }
        return data;
      }
       
      /** הורדת קובץ (DownloadFile) כ-Blob */
      function downloadFile_(token, filePath) {
        const url = API + 'DownloadFile?' + toQuery_({
          token: token,
          path: 'ivr2:' + filePath.replace(/^\/+/, '')
        });
        const resp = UrlFetchApp.fetch(url, { muteHttpExceptions: true });
        if (resp.getResponseCode() === 404) {
          throw new Error('הקובץ לא נמצא (404)');
        }
        if (resp.getResponseCode() !== 200) {
          throw new Error('HTTP ' + resp.getResponseCode());
        }
        // אם חזר JSON של שגיאה במקום הקובץ
        const ct = String(resp.getHeaders()['Content-Type'] || '');
        if (ct.indexOf('application/json') !== -1) {
          throw new Error('שגיאת API: ' + resp.getContentText());
        }
        return resp.getBlob();
      }
       
      function apiCall_(method, params) {
        const resp = UrlFetchApp.fetch(API + method + '?' + toQuery_(params), { muteHttpExceptions: true });
        let data;
        try {
          data = JSON.parse(resp.getContentText());
        } catch (e) {
          throw new Error(method + ': תשובה לא תקינה (HTTP ' + resp.getResponseCode() + ')');
        }
        if (data.responseStatus !== 'OK') {
          throw new Error(method + ': ' + (data.message || data.responseStatus || 'שגיאה לא ידועה'));
        }
        return data;
      }
       
      /* ===================== עזר ===================== */
       
      function toQuery_(obj) {
        return Object.keys(obj)
          .map(k => encodeURIComponent(k) + '=' + encodeURIComponent(obj[k]))
          .join('&');
      }
       
      function normalizePath_(p) {
        const t = String(p || '').replace(/^ivr2:/, '').replace(/^\/+|\/+$/g, '');
        return '/' + t;
      }
       
      function joinPath_(dir, name) {
        return (dir === '/' ? '' : dir) + '/' + name;
      }
       
      

      אח"כ תשמור, ואז תיצור טריגר
      357ef5c0-3427-4637-af4e-29113c74dded-image.jpeg
      יש שם אפשרות לבחור כל כמה זמן זה יופעל, זה יבקש ממך אישור לבצע דברים תאשר, ואז כל פעם שזה יופעל זה יעתיק את השלוחות

      פורסם בעזרה הדדית למשתמשים מתקדמים
      א
      איל משולש
    • RE: הקלטות במודול תור

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

      פורסם בעזרה הדדית למשתמשים מתקדמים
      א
      איל משולש
    • RE: הקלטות במודול תור

      @שנאור https://f2.freeivr.co.il/post/199649
      תלחץ על הספויילר, יפתח לך קוד לגוגל סקריפט, אתה מבין בגוגל סקריפט?

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