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

    פורום PHP
    8
    1 הצבעות
    8 פוסטים
    148 צפיות
    א
    @בונה-מערכות תעשה את זה דרך האתר של @פתרון-ai תכנס לאתר תרשם [אם אתה נרשם עם שמירת טוקן בדפדפן זה לא חשוף אפי' לו עצמו] תעשה חיבור לקלופיירד [image: 1792715854265-f2adb873-e243-42c2-9462-1f0bdf4752be-image.jpeg] תרשם עם החשבון גוגל תבחר אח"כ בסקריפט לצד שרת [image: 1792715946271-917a8bc9-0ad5-45e9-bcd4-087d0b3533ce-image.jpeg] ושים תשים את הקוד הבא (שים לב להחליף את המספר מערכת וסיסמה) תעשה פריסה, יופיע לך בצד קישור Spoiler אתה צריך להגדיר בשלוחה את המקש כ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,,,,,`); }, };
  • דרמה!! מישהו שמע על זה????

    שאלות ועזרה הדדית
    305
    1 הצבעות
    305 פוסטים
    10k צפיות
    א
    @ישראל10 כתב: ובאופציה שהמערכת מחייגת ללקוח, [לא קמפיין קולי] זה נחשב כערוץ? לא.
  • האתר בטא הפסיק לעבוד?

    נעול עזרה הדדית למשתמשים מתקדמים
    3
    1
    0 הצבעות
    3 פוסטים
    26 צפיות
    א
    @איל-משולש האתר חזר לעבוד.
  • בעיה בקישור באתר החדש (האמצעי)

    על הפורום
    22
    1
    0 הצבעות
    22 פוסטים
    47 צפיות
    א
    @אז-נדברו תודה רבה! אין מילים! אשמח שתעביר לחברה בימות.
  • מה זה תיבה אישית?

    שאלות ועזרה הדדית
    40
    0 הצבעות
    40 פוסטים
    333 צפיות
    מ
    @אA בסדר תודה
  • השמעת הודעת קמפיין בתפריט

    עזרה הדדית למשתמשים מתקדמים
    7
    0 הצבעות
    7 פוסטים
    47 צפיות
    א
    @שלוחה-404 מה עם מעבר לשלוחה אחרת עם אקסס פילטר?
  • באג בAPI להגדרת הגדרות?

    עזרה הדדית למשתמשים מתקדמים
    5
    0 הצבעות
    5 פוסטים
    39 צפיות
    א
    @אז-נדברו תודה רבה!
  • הסוף להקשות בטלפון !!!

    עזרה הדדית למשתמשים מתקדמים
    24
    1 הצבעות
    24 פוסטים
    102 צפיות
    J
    בעצם זה עוקף גם את האימות דו שלבי שימות מחייבים...
  • 0 הצבעות
    6 פוסטים
    61 צפיות
    ה
    @שיבקשו-שלשתם מה ש@שמואל כתב פה רלןןנטי גם למוזיקת המתנה למענה מהשרת. בגדול אתה צריך להינס לשלוחת הtype=api ובקובץ ext.ini להגדיר: מוזיקה ברירת מחדל: api_music_on_hold=yes וכדי לעלות מוזיקה משלך תוסיף את השורה הזאת api_music_on_hold=שם_המוזיקה_שלכם
  • 0 הצבעות
    5 פוסטים
    28 צפיות
    ה
    @חוויה-טלפונית יש פיתוח של @דוד_מלך_ישראל פה
  • שינוי קול בהגדרות כלל המערכת אפשרי?

    שאלות ועזרה הדדית
    8
    0 הצבעות
    8 פוסטים
    72 צפיות
    מ
    עכשיו עובד לי הסרתי את tts_voice=ymMale על איזה קול הכי נורמלי אתם ממליצים?
  • ניוד מספר נייד כשר לימות+קבלת SMS

    לא נפתר טיפים עצות והדגמות מהמשתמשים
    8
    0 הצבעות
    8 פוסטים
    61 צפיות
    א
    @איל-משולש כתב: @אז-נדברו האם זה רק בתשלום מראש או גם אח"כ? אפשר גם רטרואקטיבי.
  • 1 הצבעות
    18 פוסטים
    328 צפיות
    מ
    @המתכנת-הראשי יש לי טוקמן של הוט מובייל כבר כמה שנים ועד היום כולל היום הוא פעיל בלי בעיה כלל, מאנם בהתחלה קניתי חבילה חאת של דקות, אולי בזה נעוץ ההבדל
  • שינוי קריין

    פורום מפתחים API
    2
    0 הצבעות
    2 פוסטים
    29 צפיות
    ה
    @דוד-1 לא הסברת מה הAPI עושה, אבל לרוב אפשר להכניס בהגדרות הגלובליות בלי בעיה. עיין כאן בקולות הזמינים.
  • חיפוש גוגל בפורום

    על הפורום
    2
    0 הצבעות
    2 פוסטים
    18 צפיות
    א
    @אז-נדברו כתב: כיון ששמואל לכאורה לא יקדיש זמן לטפל בזה יצרתי לך סקריפט בtampermonkey לתיקון כפתורי "חיפוש גוגל בפורום" ו"חיפוש בהגדרות מתקדמות" (כאן יש הוראות התקנה לתוסף). הנה הסקריפט: // ==UserScript== // @name פורום ימות - תיקון כפתורי החיפוש // @namespace https://f2.freeivr.co.il/ // @version 1.0.0 // @description מתקן את "חיפוש גוגל בפורום" ואת "חיפוש בהגדרות המתקדמות" - שניהם פותחים חלון חיפוש // @match https://f2.freeivr.co.il/* // @run-at document-idle // @grant none // ==/UserScript== (function () { 'use strict'; const LOGO_URL = 'https://f2.freeivr.co.il/assets/uploads/system/site-logo.gif?v=090613ffd44'; const SITE = location.hostname; // f2.freeivr.co.il const MODAL_ID = 'ym-search-modal'; const ADV_OLD_LABEL = 'חיפוש בהגדרות המתקדמות'; const ADV_LABEL = 'חיפוש באזור התעשייה - הגדרות המערכת'; // ================= עזרים ================= function matchesNavButton(el, hrefRegex, title) { const a = el.closest('a'); if (!a) return false; if (hrefRegex.test(a.getAttribute('href') || '')) return true; const li = a.closest('li'); return !!(li && (li.getAttribute('data-bs-original-title') === title || li.getAttribute('title') === title)); } function currentTopicId() { const m = location.pathname.match(/\/topic\/(\d+)/); return m ? m[1] : null; } // ================= חיפוש גוגל ================= function googleSearch(query, topicId) { const scope = topicId ? `site:${SITE}/topic/${topicId}/` : `site:${SITE}`; const url = 'https://www.google.com/search?q=' + encodeURIComponent(`${scope} ${query}`); window.open(url, '_blank', 'noopener'); } function openGoogleModal() { const topicId = currentTopicId(); openSearchModal({ placeholder: 'הקלידו כדי לחפש בגוגל', logoAlt: 'חיפוש בגוגל', buttons: [ { label: 'חיפוש בכל הפורום', cls: 'btn-secondary', title: 'לחצו על אנטר כדי לחפש', isEnter: true, run: (q) => googleSearch(q, null), }, { label: 'חיפוש בנושא זה', cls: 'btn-primary', available: !!topicId, unavailableTitle: 'זמין רק בתוך נושא', run: (q) => googleSearch(q, topicId), }, ], }); } // ================= חיפוש בהגדרות המתקדמות ================= function advancedSearchPath(term) { return 'search?in=titlesposts&term=' + encodeURIComponent(term) + '&matchWords=all&by=&categories%5B%5D=1&searchChildren=true&hasTags=&replies=' + '&repliesFilter=atleast&timeFilter=newer&timeRange=&sortBy=relevance' + '&sortDirection=desc&showAs=posts'; } function goAdvancedSearch(term, newTab) { const path = advancedSearchPath(term); if (newTab) { window.open('/' + path, '_blank', 'noopener'); } else if (window.ajaxify && typeof window.ajaxify.go === 'function') { window.ajaxify.go(path); // ניווט SPA בלי רענון } else { location.href = '/' + path; } } function openAdvancedModal() { openSearchModal({ placeholder: ADV_LABEL, logoAlt: 'חיפוש בפורום', buttons: [ { label: 'חיפוש', cls: 'btn-primary', title: 'אנטר לחיפוש, Ctrl+אנטר או Ctrl+לחיצה לפתיחה בלשונית חדשה', isEnter: true, run: (q, newTab) => goAdvancedSearch(q, newTab), }, ], }); } // ================= יירוט הלחיצות ================= document.addEventListener('click', (e) => { let handler = null; if (matchesNavButton(e.target, /\/misc\/freeivr\/?$/, 'חיפוש גוגל בפורום')) { handler = openGoogleModal; } else if (matchesNavButton(e.target, /^\/?SearchSettings\/?$/i, ADV_OLD_LABEL) || matchesNavButton(e.target, /^\/?SearchSettings\/?$/i, ADV_LABEL)) { handler = openAdvancedModal; } if (!handler) return; e.preventDefault(); e.stopImmediatePropagation(); // מונע את ajaxify של NodeBB handler(); }, true); // ================= שינוי התווית של כפתור ההגדרות המתקדמות ================= function relabelAdvancedButton() { document.querySelectorAll('a[href="/SearchSettings"], a[href="SearchSettings"]').forEach((a) => { const li = a.closest('li'); if (!li || li.dataset.ymRelabeled === '1') return; li.dataset.ymRelabeled = '1'; // הטקסט הצף (Bootstrap tooltip) li.setAttribute('data-bs-original-title', ADV_LABEL); if (li.hasAttribute('title')) li.setAttribute('title', ADV_LABEL); a.setAttribute('aria-label', ADV_LABEL); try { const tip = window.bootstrap && window.bootstrap.Tooltip && window.bootstrap.Tooltip.getInstance(li); if (tip && typeof tip.setContent === 'function') { tip.setContent({ '.tooltip-inner': ADV_LABEL }); } } catch (err) { /* לא קריטי */ } // הטקסט שמוצג בתפריט בנייד const span = a.querySelector('span.visible-xs-inline'); if (span) span.textContent = ADV_LABEL; }); } relabelAdvancedButton(); let relabelPending = false; new MutationObserver(() => { if (relabelPending) return; relabelPending = true; requestAnimationFrame(() => { relabelPending = false; relabelAdvancedButton(); }); }).observe(document.body, { childList: true, subtree: true }); // ================= סגנון ================= function injectStyle() { if (document.getElementById(MODAL_ID + '-style')) return; const css = ` #${MODAL_ID}{position:fixed;inset:0;z-index:2000;display:flex;align-items:flex-start;justify-content:center; padding:1.75rem .5rem;background:rgba(0,0,0,.5);direction:rtl;} #${MODAL_ID} .ymg-dialog{background:var(--bs-body-bg,#fff);color:var(--bs-body-color,#212529); width:100%;max-width:500px;border-radius:.5rem;box-shadow:0 .5rem 1rem rgba(0,0,0,.25);overflow:hidden;} #${MODAL_ID} .ymg-header{display:flex;align-items:center;justify-content:space-between;gap:.5rem; padding:1rem;border-bottom:1px solid var(--bs-border-color,#dee2e6);} #${MODAL_ID} .ymg-logo{flex:1;text-align:center;} #${MODAL_ID} .ymg-logo img{max-width:100%;max-height:90px;} #${MODAL_ID} .ymg-close{background:none;border:0;font-size:1.75rem;line-height:1;cursor:pointer; color:inherit;opacity:.6;padding:0 .25rem;} #${MODAL_ID} .ymg-close:hover{opacity:1;} #${MODAL_ID} .ymg-body{padding:1rem;} #${MODAL_ID} .ymg-footer{display:flex;flex-wrap:wrap;gap:.5rem;justify-content:flex-start; padding:.75rem 1rem;border-top:1px solid var(--bs-border-color,#dee2e6);} #${MODAL_ID} .btn[disabled]{opacity:.5;cursor:not-allowed;} `; const style = document.createElement('style'); style.id = MODAL_ID + '-style'; style.textContent = css; document.head.appendChild(style); } // ================= חלון חיפוש כללי ================= // buttons: [{ label, cls, title?, isEnter?, available? (ברירת מחדל true), unavailableTitle?, run(query, newTab) }] function openSearchModal({ placeholder, logoAlt, buttons }) { if (document.getElementById(MODAL_ID)) return; injectStyle(); const wrap = document.createElement('div'); wrap.id = MODAL_ID; wrap.setAttribute('role', 'dialog'); wrap.setAttribute('aria-modal', 'true'); wrap.innerHTML = ` <div class="ymg-dialog"> <div class="ymg-header"> <div class="ymg-logo"><img alt=""></div> <button type="button" class="ymg-close" aria-label="סגירה">&times;</button> </div> <div class="ymg-body"> <input type="text" class="form-control ymg-input" autocomplete="off"> </div> <div class="ymg-footer"></div> </div>`; const img = wrap.querySelector('.ymg-logo img'); img.src = LOGO_URL; img.alt = logoAlt; const input = wrap.querySelector('.ymg-input'); input.placeholder = placeholder; const footer = wrap.querySelector('.ymg-footer'); const btnEls = buttons.map((b) => { const el = document.createElement('button'); el.type = 'button'; el.className = 'btn ' + b.cls; el.textContent = b.label; el.disabled = true; const available = b.available !== false; const t = available ? b.title : b.unavailableTitle; if (t) el.title = t; el.addEventListener('click', (e) => run(b, e.ctrlKey || e.metaKey)); footer.appendChild(el); return { def: b, el, available }; }); const cancel = document.createElement('button'); cancel.type = 'button'; cancel.className = 'btn btn-light'; cancel.textContent = 'ביטול'; footer.appendChild(cancel); document.body.appendChild(wrap); const query = () => input.value.trim(); const updateButtons = () => { const hasText = query().length > 0; btnEls.forEach(({ el, available }) => { el.disabled = !hasText || !available; }); }; const close = () => { wrap.remove(); document.removeEventListener('keydown', onKey, true); }; function run(b, newTab) { const q = query(); if (!q) { input.focus(); return; } close(); b.run(q, newTab); } const onKey = (e) => { if (e.key === 'Escape') { e.preventDefault(); close(); } else if (e.key === 'Enter' && document.activeElement === input) { e.preventDefault(); const enterBtn = btnEls.find(({ def }) => def.isEnter); if (enterBtn && !enterBtn.el.disabled) run(enterBtn.def, e.ctrlKey || e.metaKey); } }; input.addEventListener('input', updateButtons); wrap.querySelector('.ymg-close').addEventListener('click', close); cancel.addEventListener('click', close); wrap.addEventListener('mousedown', (e) => { if (e.target === wrap) close(); }); document.addEventListener('keydown', onKey, true); setTimeout(() => input.focus(), 0); } })();
  • 3 הצבעות
    19 פוסטים
    413 צפיות
    י
    @המומחה יענקי-פולק כתב: כי הקישור להוצאת המפתח חסום לי מנטפרי
  • דחוף עזרה

    שאלות ועזרה הדדית
    7
    0 הצבעות
    7 פוסטים
    58 צפיות
    י
    @דוד-1 אגב תסתכל כאן
  • תקלה בהעלאת קבצים למערכת

    לא נפתר שאלות ועזרה הדדית
    38
    0 הצבעות
    38 פוסטים
    230 צפיות
    י
    @בעל-כישרון זה בעיה ידועה אז מה שאני עושה בדרך כלל: כשאני רוצה להעלות הודעת מערכת לשלוחה הראשית אני מעלה קודם את ההודעה לשלוחת השמעת קבצים פנימית ושם אני מחליף לו את השם להודעת מערכת שאני רוצה ואחרי זה אני עושה העתק הדבק לשלוחה הראשית כשאני רוצה להחליף קבצים אני עושה את זה רק ע''י האתר הישן שם זה עובד מצוין בהצלחה!!!
  • 5 הצבעות
    22 פוסטים
    558 צפיות
    ה
    @הללוהו זה מודל API,שמשמש כמודל קבלת נתונים, והאם אפשרי שתוך כדי שהלקוח במערכת הוא ישמע את התמלול ויאשר והמערכת תמשיך לעוד כמה שאלות, - זה מה שזה עושה עכשיו
  • שליחת פרטי הקובץ

    פורום מפתחים API
    5
    0 הצבעות
    5 פוסטים
    22 צפיות
    מ
    @שלוחה-404 תודה