שמות למספרי משנה
-
בסייתא דשמיא כתבתי קוד לתוסף tampermonkey שאתה מקליד ערך שקשור לבחירת זיהוי הוא מציג לך את רשימת המספרים שלך אם שמות
את הרשימה צריך ליצור בקובץ CallerIdMap.ini בשלוחה ראשית
מספר=שם
הקוד הוא// ==UserScript== // @name Yemot Config Helper - Full Site Names // @match https://*.call2all.co.il/* // @grant GM_xmlhttpRequest // @grant GM_setClipboard // @connect self // @connect *.call2all.co.il // ==/UserScript== (function () { 'use strict'; let numberToNameMap = new Map(); // number -> name let callerIdMap = new Map(); // name -> number let approvedNumbers = new Set(); let approvedSmsNumbers = new Set(); let missingFromIni = []; const keysToWatch = [ "invitation_join_campaign_say_did_number=", "queue_caller_id=", "send_sms_from=", "send_tzintuk_from=", "tzintuk_your_id=", "out_id=", "tzintuk_invitation_join_to_list_caller_id=", "out=" ]; const box = document.createElement("div"); box.style.cssText = "position: absolute; background: white; border: 1px solid #aaa; box-shadow: 2px 2px 10px rgba(0,0,0,0.2); padding: 5px; display: none; z-index: 10000; max-height: 300px; overflow-y: auto; min-width: 240px; font-family: Arial, sans-serif; direction: rtl; text-align: right; border-radius: 4px;"; document.body.appendChild(box); function formatPhoneNumber(num) { if (!num) return num; let clean = num.toString().trim(); if (clean.startsWith('+972')) return '0' + clean.substring(4); return clean; } // פונקציה להחלפת שמות בכל ה-Selects באתר function updateAllSelects() { const selects = document.querySelectorAll('select option'); selects.forEach(option => { const val = formatPhoneNumber(option.value); const name = numberToNameMap.get(val); if (name && !option.textContent.includes(' - ')) { // מונע הדבקה כפולה ומציג "שם - מספר" option.textContent = `${name} - ${val}`; } }); } function fetchCallerIdMap() { const apiUrl = window.location.origin + '/ym/ws.php?ws=YDDownloadIniFile&what=ivr2://CallerIdMap.ini'; GM_xmlhttpRequest({ method: "GET", url: apiUrl, onload: function(response) { try { const jsonData = JSON.parse(response.responseText); if (jsonData.responseStatus === "OK" && jsonData.contents) { parseIniContent(jsonData.contents); } } catch (e) {} fetchApprovedCallerIDs(); } }); } function parseIniContent(content) { numberToNameMap.clear(); callerIdMap.clear(); const lines = content.split(/\r?\n/); for (const line of lines) { const parts = line.split('='); if (parts.length >= 2) { const number = formatPhoneNumber(parts[0]); const name = parts[1].trim(); if (number && name) { numberToNameMap.set(number, name); callerIdMap.set(name, number); } } } updateAllSelects(); } function fetchApprovedCallerIDs() { const apiUrl = window.location.origin + '/ym/ws.php?ws=GetApprovedCallerIDs'; GM_xmlhttpRequest({ method: "GET", url: apiUrl, onload: function(response) { try { const jsonData = JSON.parse(response.responseText); if (jsonData.responseStatus === "OK") { processApprovedIDs(jsonData); } } catch (e) {} } }); } function processApprovedIDs(data) { approvedNumbers.clear(); approvedSmsNumbers.clear(); missingFromIni = []; if (data.call) { [data.call.mainDid, ...(data.call.secondaryDids || []), ...(data.call.callerIds || [])].forEach(num => { if(num) approvedNumbers.add(formatPhoneNumber(num)); }); } if (data.sms && Array.isArray(data.sms)) { data.sms.forEach(s => { const fNum = formatPhoneNumber(s.smsId); if(fNum) { approvedNumbers.add(fNum); if (s.allowText) approvedSmsNumbers.add(fNum); } }); } approvedNumbers.forEach(num => { if (!numberToNameMap.has(num)) { missingFromIni.push(num + "="); } }); updateAllSelects(); } // צפייה בשינויים בדף (עבור חלונות קופצים שנפתחים) const observer = new MutationObserver(() => { updateAllSelects(); }); observer.observe(document.body, { childList: true, subtree: true }); // --- לוגיקת תיבת הטקסט (הקוד הקודם) --- function showBox(textarea, isSmsMode) { box.innerHTML = ""; const title = document.createElement("div"); title.style.cssText = "font-weight:bold; border-bottom:1px solid #ccc; margin-bottom:5px; padding-bottom:3px; font-size:12px;"; title.textContent = isSmsMode ? "בחר מזהה SMS:" : "בחר מזהה:"; box.appendChild(title); if (missingFromIni.length > 0) { const copyBtn = document.createElement("button"); copyBtn.textContent = `העתק ${missingFromIni.length} חסרים ל-INI`; copyBtn.style.cssText = "width:100%; margin-bottom:8px; padding:4px; cursor:pointer; background:#e1f5fe; border:1px solid #03a9f4; border-radius:3px; font-size:11px;"; copyBtn.onmousedown = (e) => { e.preventDefault(); GM_setClipboard(missingFromIni.join("\n")); copyBtn.textContent = "הועתק!"; setTimeout(() => { box.style.display = "none"; }, 800); }; box.appendChild(copyBtn); } callerIdMap.forEach((number, name) => { if (isSmsMode && !approvedSmsNumbers.has(number)) return; const item = document.createElement("div"); item.textContent = `${name} (${number})`; item.style.cssText = "cursor: pointer; padding: 5px; border-bottom: 1px solid #eee; font-size: 13px;"; item.onmouseover = () => item.style.backgroundColor = "#f5f5f5"; item.onmouseout = () => item.style.backgroundColor = "transparent"; item.onmousedown = (e) => { e.preventDefault(); insert(textarea, number); box.style.display = "none"; }; box.appendChild(item); }); const rect = textarea.getBoundingClientRect(); box.style.top = (rect.top + window.scrollY + 20) + "px"; box.style.left = (rect.left + window.scrollX) + "px"; box.style.display = "block"; } function insert(textarea, value) { const start = textarea.selectionStart; const end = textarea.selectionEnd; textarea.value = textarea.value.substring(0, start) + value + textarea.value.substring(end); textarea.setSelectionRange(start + value.length, start + value.length); textarea.dispatchEvent(new Event('input', { bubbles: true })); textarea.focus(); } fetchCallerIdMap(); document.addEventListener("input", (e) => { if (e.target.tagName === "TEXTAREA") { const textBefore = e.target.value.substring(0, e.target.selectionStart); const matchedKey = keysToWatch.find(key => textBefore.endsWith(key)); if (matchedKey) showBox(e.target, matchedKey === "send_sms_from="); else box.style.display = "none"; } }); document.addEventListener("mousedown", (e) => { if (!box.contains(e.target) && e.target.tagName !== "TEXTAREA") box.style.display = "none"; }); })();אם יש מישהו שיכול לעשות שזה יהיה אוטמטי רק להתקין תוסף כמו זה זה יביא תועלת להרבה משתמשים וכן אם יש עוד הגדרות שקשורות לזיהוי להוסיף
קרדיט @cubase לקחתי את הבסיס של הקוד של התוסף שלו ושיניתי על ידי בינה
@מוזר -
B BEN ZION התייחס לנושא זה
-
-
@CUBASE אצלי זה אוטומטי התכונתי להעלות לאיזה שרת או משהו שכל מי שירצה את התוסף יוכל להתקין אותו כמו המוזמנים לרשימת צינתוקים
-
@BEN-ZION אני מדבר על זה שצריך ליצור קובץ עם הזיהויים, תבקש מהבינה את מה שכתבתי בפוסט קודם ואז זה יהיה אוטומטי על פי הזיהוים המאושרים במערכת ולא יהיה צורך להקליד את הזיהויים בקובץ
-
@CUBASE אבל איפא אני יכתוב להם שמות?
-
@BEN-ZION למה צריך שמות?
הרעיון בזה הוא שנפתח לך רשימה ואתה בוחר את אחד המספרים, לא?
האמת שלא בדקתי את זה אבל כך הבנתי
-
@CUBASE אני לא זוכר לפי המספרים יש לי 10 מס' אני לא זוכר למה כל אחד משמש ככה כל מס' חדש אני רושם לאיזה קו הוא ושאני עורך הגדרות של הקו מופיע לי השם ליד המס'
-
@BEN-ZION אז אולי תעשה את זה משולב, כי עם קריאה לשירות שציינתי לעיל אתה מקבל את רשימת המספרים המאושרים לשיחות והמאושרים לסמס, כך שאם אתה מקליד לדוג׳
send_sms_from=אז מופיעים לך רק המספרים המאושרים לסמס -
@CUBASE ערכתי את הקוד הוספתי את הפונקציה עדכנתי את הקוד למעלה
האם צריך לבקש משירות לקוחות כדי שיהיה זיהוי מאושר ל SMS ?
זה אומר לי שאין לי זיהוי מאושר השאלה אם זה הגדרה לא נכונה של הבינה או שבאמת אין תודה -
הקוד למעלה עודכן, כרגע הוא מציג את כל המספרים גם בלי שמות, מה שכתוב שם מציג את השם.
וגם בכל מקום במערכת שיש לבחור זיהוי יוצא מופיע השמות, בתפריט שיגור הודעות או הפעלת צינתוקים דרך המערכת וכו'
אם יש הגדרות של זיהוי יוצא שלא הוספתי ניתן לכתוב פה ואני יעדכן, כמו כן מי שיש לו רעיון לשדרוג ניתן לכתוב פה ואני ישתדל לעדכן