קטגוריות משנה

  • הסברים מסודרים ללא יכולת תגובה או פתיחת דיון

    229 נושאים
    210 פוסטים
    B
    כתבתי קוד לשעון מעורר בסיוע בינה מלאכותית על בסיב קוד ש @איל-משולש העלה פה זה בנוי על שלוחת קבלת נתונים אם קוד PHP וגוגל סקריפט שמפעיל את השרת כל דקה קוד PHP <?php date_default_timezone_set('Asia/Jerusalem'); // --- הגדרות --- $dbFile = 'reminders.sqlite'; $logFile = 'debug.log'; $SECRET_KEY = "MySecretKey123"; function writeLog($message) { global $logFile; $timestamp = date('Y-m-d H:i:s'); file_put_contents($logFile, "[$timestamp] $message" . PHP_EOL, FILE_APPEND); } try { $db = new PDO("sqlite:$dbFile"); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $db->exec("CREATE TABLE IF NOT EXISTS reminders ( id INTEGER PRIMARY KEY AUTOINCREMENT, phone TEXT, start_type INTEGER, start_date TEXT, scheduled_time TEXT, repeat_count INTEGER, snooze_gap INTEGER, freq INTEGER, days_week_list TEXT, fixed_day_week INTEGER, fixed_day_month INTEGER, expiry_date TEXT, last_sent TEXT )"); } catch (Exception $e) { writeLog("CRITICAL DATABASE ERROR: " . $e->getMessage()); die("Database Error."); } $action = $_GET['action'] ?? 'none'; // --- מצב א': שמירה --- if ($action === 'save') { $p = $_GET; $phone = preg_replace('/\D/', '', $p['Phone'] ?? ''); $startType = (int)($p['P050'] ?? 0); writeLog("RECEIVE: New request from Phone: $phone, Type: $startType"); if ($startType == 3) { $deleteAction = (int)($p['P059'] ?? 0); if ($deleteAction == 1) { $stmt = $db->prepare("DELETE FROM reminders WHERE phone = ?"); $stmt->execute([$phone]); } elseif ($deleteAction == 2) { $stmt = $db->prepare("DELETE FROM reminders WHERE id = (SELECT id FROM reminders WHERE phone = ? AND last_sent IS NOT NULL ORDER BY last_sent DESC LIMIT 1)"); $stmt->execute([$phone]); } echo "id_list_message=OK"; exit; } $currentYear = date('Y'); $rawDate = $p['P051'] ?? ''; $startDate = (strlen($rawDate) === 4) ? "$currentYear-" . substr($rawDate, 2, 2) . "-" . substr($rawDate, 0, 2) : $rawDate; $rawTime = $p['P052'] ?? ''; $timeStr = (strlen($rawTime) === 4) ? substr($rawTime, 0, 2) . ":" . substr($rawTime, 2, 2) : $rawTime; $rawExpiry = $p['P060'] ?? ''; $expiryDate = (strlen($rawExpiry) === 4) ? "$currentYear-" . substr($rawExpiry, 2, 2) . "-" . substr($rawExpiry, 0, 2) : null; try { $sql = "INSERT INTO reminders (phone, start_type, start_date, scheduled_time, repeat_count, snooze_gap, freq, days_week_list, fixed_day_week, fixed_day_month, expiry_date) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; $stmt = $db->prepare($sql); $stmt->execute([ $phone, $startType, $startDate, $timeStr, (int)($p['P053'] ?? 1), (int)($p['P054'] ?? 0), (int)($p['P055'] ?? 1), implode(',', str_split($p['P056'] ?? '')), (int)($p['P057'] ?? 0), (int)($p['P058'] ?? 0), $expiryDate ]); writeLog("SUCCESS: Reminder saved for $phone at $timeStr"); } catch (Exception $e) { writeLog("SAVE ERROR: " . $e->getMessage()); } echo "id_list_message=OK"; exit; } // --- מצב ב': הרצה (Run) --- if ($action === 'run') { if (($_GET['secret'] ?? '') !== $SECRET_KEY) die("Unauthorized"); $now = time(); $today = date('Y-m-d'); $currentDayOfWeek = date('N') + 1; if ($currentDayOfWeek > 7) $currentDayOfWeek = 1; // --- חישוב יום עברי עם החלפת יום בשקיעה --- $lat = 31.77; // Latitude (ירושלים) $long = 35.23; // Longitude // בדיקת זמן שקיעה להיום $sun_info = date_sun_info($now, $lat, $long); $sunset_timestamp = $sun_info['sunset']; // אם עכשיו אחרי השקיעה, נחשב לפי התאריך של מחר if ($now > $sunset_timestamp) { $calc_timestamp = strtotime('+1 day', $now); writeLog("DEBUG: After sunset. Calculating for tomorrow."); } else { $calc_timestamp = $now; } // המרה לתאריך עברי $jd = gregoriantojd(date('m', $calc_timestamp), date('d', $calc_timestamp), date('Y', $calc_timestamp)); $hebrewDateStr = jdtojewish($jd); // פורמט: month/day/year $hebrewParts = explode('/', $hebrewDateStr); $hebrewDay = (int)$hebrewParts[1]; // היום בחודש העברי writeLog("DEBUG: Hebrew Day is: $hebrewDay"); // ------------------------------------------ $stmt = $db->query("SELECT * FROM reminders"); $reminders = $stmt->fetchAll(PDO::FETCH_ASSOC); $phonesToCall = []; $idsToUpdate = []; foreach ($reminders as $r) { if ($r['expiry_date'] && $today > $r['expiry_date']) continue; if ($r['last_sent'] && date('Y-m-d H:i', strtotime($r['last_sent'])) === date('Y-m-d H:i', $now)) continue; // בתזכורת חודשית עברית (4) לא בודקים תאריך התחלה לועזי בצורה רגילה, אלא אם זה תזכורת חד פעמית if ($r['start_date'] && $today < $r['start_date']) continue; if ($r['freq'] == 1 && $today !== $r['start_date']) continue; $isTimeMatch = false; $baseMinutes = (int)substr($r['scheduled_time'], 0, 2) * 60 + (int)substr($r['scheduled_time'], 3, 2); $currentMinutes = (int)date('H') * 60 + (int)date('i'); for ($i = 0; $i < $r['repeat_count']; $i++) { if ($currentMinutes === ($baseMinutes + ($i * $r['snooze_gap']))) { $isTimeMatch = true; break; } } if (!$isTimeMatch) continue; $shouldTrigger = false; if ($r['freq'] == 1) $shouldTrigger = true; elseif ($r['freq'] == 2) { $allowed = array_map('trim', explode(',', $r['days_week_list'])); if (empty($r['days_week_list']) || in_array((string)$currentDayOfWeek, $allowed)) $shouldTrigger = true; } elseif ($r['freq'] == 3 && $r['fixed_day_week'] == $currentDayOfWeek) $shouldTrigger = true; // כאן הבדיקה לתאריך עברי: elseif ($r['freq'] == 4 && $r['fixed_day_month'] == $hebrewDay) $shouldTrigger = true; if ($shouldTrigger) { $phonesToCall[] = $r['phone']; $idsToUpdate[] = $r['id']; } } if (!empty($phonesToCall)) { writeLog("CALLING: " . count($phonesToCall) . " numbers."); $token = "YOUR_TOKEN"; $callerId = "YOUR_CALLER_ID"; $finalUrl = "https://www.call2all.co.il/ym/api/RunTzintuk?token={TOKEN}&callerId={CALLERID&phones=tzl:" . implode(',', $phonesToCall); // שליחה עם Timeout קצר כדי לא לתקוע את הסקריפט $ctx = stream_context_create(['http'=> ['timeout' => 5]]); $res = @file_get_contents($finalUrl, false, $ctx); $nowTs = date('Y-m-d H:i:s'); $updateStmt = $db->prepare("UPDATE reminders SET last_sent = ? WHERE id = ?"); foreach ($idsToUpdate as $id) { $updateStmt->execute([$nowTs, $id]); } } } קוד לגוגל סקריפט function triggerPhpServer1() { const SERVER_URL = "קישור לקוד PHP"; const SECRET_KEY = "MySecretKey123"; try { const response = UrlFetchApp.fetch(SERVER_URL + "?action=run&secret=" + SECRET_KEY); console.log(response.getContentText()); } catch (e) { console.error("Server is down: " + e.message); } } הגדרות בשלוחה type=recording_and_entering_data title=תזכורות add_phone_dial_to_list_all_information=yes start_first=data 050-option=1-1-5-TTS--123-CheckGoTo 051-option=4-4-5-Digits---CheckGoTo 052-option=4-4-5-Time---CheckGoTo 053-option=1-1-5-Digits---CheckGoTo 054-option=2-1-3-Number---CheckGoTo 055-option=1-1-5-TTS--1234-CheckGoTo 056-option=6-1-5-TTS---CheckGoTo 057-option=1-1-5-TTS--123456-CheckGoTo 058-option=2-1-5-TTS---CheckGoTo 059-option=1-1-5-TTS---CheckGoTo 060-option=4-4-4-Digits---CheckGoTo say_approval_number=say_approval_no_number recording_and_entering_data_ok_sand_api=yes recording_and_entering_data_ok_sand_api_link=קישור לקוד PHP אלו הנתונים בשאלות על פי הם הקוד עובד 050 – בחירת מועד התזכורת היום → הקש 1 תאריך אחר → הקש 2 לביטול הקש 3 051 – הזנת תאריך הזן את התאריך ב־4 ספרות (יום וחודש). לדוגמה: 04/08 → 0408 052 – הזנת שעה הזן את השעה ב־4 ספרות (שעות ודקות). לדוגמה: 08:30 → 0830 053 – מספר חזרות הגדר כמה פעמים המערכת תתקשר (נודניק). 054 – מרווח בין צלצולים הזן את משך הזמן בין צלצול לצלצול. 055 – סוג התזכורת חד־פעמית → 1 יומית → 2 שבועית → 3 חודשית → 4 056 – בחירת ימים לתזכורת יומית בחר את הימים בשבוע: 1 = ראשון, 2 = שני, 3 = שלישי, 4 = רביעי, 5 = חמישי, 6 = שישי. לדוגמה: ראשון ורביעי → 1,4 057 – יום בשבוע לתזכורת שבועית בחר יום אחד בשבוע (1–6). 058 – יום בחודש לתזכורת חודשית בחר יום בחודש (1–31) 11 = י"א 15= ט"ו וכו'. 059 – מחיקת תזכורות כל התזכורות → 1 התזכורת האחרונה → 2 ביטול → 3 060 – תאריך סיום הזן את התאריך האחרון לקבלת התזכורת. ההגדרות בקובץ RecordingAndEnteringDataCheckGoTo 050-1=052 050-2=051 050-3=059 053-1=055 055-1=End-/95 055-2=056 055-3=057 055-4=058 056=060 057=060 058=060 059=End-/95 060=End-/95 שלוחה 95 זה ניתוק לא הצלחתי להגדיר העברה לניתוק בסיום שעון מעורר אם אופציה של נודניק תזכורת יומית שבועית וחודשית לפי התאריך העברי בחודש כולל חישוב מהשקיעה אני מאמין שניתן להתאים לגוגל סקריפט אני הגדרתי על כל בחירה בקובץ TTS שיקריא את הנבחר לדגומא בתזכורת חודשית אם לחץ 11 זה מקריא י"א לחודש וכו' מי שרוצה עוד פרטים אשמח לשתף צריך להירשם לצינתוקים איישים חינם כמו פה קבצי השאלות יצירה על ידי בינה
  • 7k נושאים
    64k פוסטים
    4
    הגדרתי בקבלת נתונים add_extension_to_list_all_information כך שיש עמודה בlistallinformation ששם מופיע הנתיב ממנו הוא הגיע. האם יש אפשרות לסנן כניסה לשלוחה על בסיס זה? או שיש רעיון אחר בענין?
  • 109 נושאים
    551 פוסטים
    I
    הקמתי מערכת חינמית וקניתי לה מספר משנה (עובד כבר). במערכת הקמתי 6 שלוחות SIP ואחת מהם חיברתי למספר החדש כזיהוי יוצא. לאחמ"כ פתאום המערכת כותבת אפילו כשמנסים להוציא שיחות מהדפדפן שההתחברות נכשלה (מצ"ב תמונה) [image: 1769137217440-e5bc5854-2f73-44c7-b4c8-3ec3ccde890d-image.png] לא שיניתי שום פרט אחר במערכת וכששיניתי את מספר השלוחה מ-201 ל-206 זה עדיין לא עזר כי השלוחה הפנימית נשארה אותו דבר =2 הבעיה כנראה נמצאת איפשהו במערכת עצמה כי היא לא נותנת להוציא שיחות רק מהשלוחה הזו (בשאר שלוחות הכל רגיל) יש למישהו מושג מה הבעיה? תודה רבה
  • טיפים עצות ודיונים עליהם

    715 נושאים
    11k פוסטים
    מ
    @יוסלע כתב בחדש! תמלול וסיכומי הקלטות מהמערכת הטלפונית שלכם באמצעות מנוע AI – ישירות במייל : למה הוא כותב לי ככה? [image: 1769594487170-338b9331-0cc1-4d0d-987b-ab753a211d03-image.png] אני מניח בגלל שלא הגדרת אמצעי תשלום. אנחנו משתמשים במודל המתקדם Gemini 3 pro לכן הוא מצריך תשלום. @IS כתב בחדש! תמלול וסיכומי הקלטות מהמערכת הטלפונית שלכם באמצעות מנוע AI – ישירות במייל : @מ.-מ.-פליישער עם איזה מפתח זה משתמש? דרך aistudio או console cloud? בקישור ליצירת מפתח שמתי את הAISTUDIO שזה אכן עובד. אבל בכל מקרה גם הCONSOLE CLOUD אמור לעבוד כי הAISTUDIO זה בסך הכל קיצור דרך בשביל GEMINI. כל מפתח שנוצר בAISTUDIO נוצר גם בCONSOLE עם הבחירת API של: Generative Language API [image: 1769609203486-933cf9e0-28e0-414e-abc4-8bf5ff197f43-image.png] הAI סטודיו בסך הכל קיצור דרך. כמו שאמרתי צריך להגדיר אמצעי תשלום, זה מודל שככל הנראה לא זמין במינוי החינמי לע"ע.
  • 1k נושאים
    10k פוסטים
    א
    שלום רב אני מנסה להפעיל סנריו במייק שהוובהוק רספונס ייצור קריאת API חוזרת אחרי הסליקה זה מה שיש לי בוובהוק רספונס כרגע: t_message=t-בחרת לרכוש {{5.name}} הנך מועברת לתשלום&credit_card=nedarim_plus,{{5.pcfprice2}}1,,1,,,,7000960,,CreditCard_CODE&t-העסקה בוצעה בהצלחה הינך מועברת לקורס אני רוצה שהוא יחזיר לי את CreditCard_CODE כדי לדעת מה היתה תשובת החברה הסולקת וזה משום מה לא קורה אשמח לעזרת המומחים ממש תודה
  • 280 נושאים
    4k פוסטים
    B
    @anti-malware כן שאלתי אותו והכל תקין בסוף כתבתי קוד חדש והוא עובד לא יודע מה הבעיה בזה תודה