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

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

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תוכנה
  3. העלאת טקסט מגוגל שיטס לתוך שלוחות בימות המשיח, ויצירת/מחיקת שלוחות

העלאת טקסט מגוגל שיטס לתוך שלוחות בימות המשיח, ויצירת/מחיקת שלוחות

מתוזמן נעוץ נעול הועבר תוכנה
11 פוסטים 5 כותבים 1.2k צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • Y.Excel.AccessY מנותק
    Y.Excel.AccessY מנותק
    Y.Excel.Access
    כתב ב נערך לאחרונה על ידי
    #1

    איך מעלים נתונים משיטס לימות?

    יש לי צורך להעלאת טקסט מגוגל שיטס לתוך שלוחות בימות המשיח, ויצירת/מחיקת שלוחות קיימות. על בסיס יומי (טריגר בAPP SCRIPT ,לפי זמן).

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

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

    תודה רבה!

    Y.Excel.Access @ gmail.com

    צבי-שצ צדיק תמיםצ 2 תגובות תגובה אחרונה
    0
    • צבי-שצ מחובר
      צבי-שצ מחובר
      צבי-ש
      השיב לY.Excel.Access ב נערך לאחרונה על ידי
      #2

      @Y-Excel-Access כתב בהעלאת טקסט מגוגל שיטס לתוך שלוחות בימות המשיח, ויצירת/מחיקת שלוחות:

      איך מעלים נתונים משיטס לימות?

      יש לי צורך להעלאת טקסט מגוגל שיטס לתוך שלוחות בימות המשיח, ויצירת/מחיקת שלוחות קיימות. על בסיס יומי (טריגר בAPP SCRIPT ,לפי זמן).

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

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

      תודה רבה!

      התכוונת לזה?
      https://tchumim.com/topic/13820/שליחת-וקבלת-מיילים-באמצעות-הטלפון-הכשר-בחינם-abaye-מדריך-מפורט-מתעדכן

      כיף לגלות דברים חדשים.
      חוק ה-50-50-90: בכל פעם שיש סיכוי של 50-50 שמשהו יעבוד, יש סיכוי של 90 אחוז שהוא לא. מקור

      Y.Excel.AccessY תגובה 1 תגובה אחרונה
      0
      • צדיק תמיםצ מנותק
        צדיק תמיםצ מנותק
        צדיק תמים
        השיב לY.Excel.Access ב נערך לאחרונה על ידי צדיק תמים
        #3

        @Y-Excel-Access כיוון שאני רואה שלא נתנו פה הדרכה יותר טובה או קישור למשהו מוכן, אנסה לכתוב משהו:
        א - קריאה/כתיבה לטבלת שיטס מתוך גוגל סקריפט

        כל הנ"ל מתייחס לאם רוצים לקבל/לכתוב יותר מאשר תא של 1X1, אחרת ניתן להשתמש במתודת getValue/setValue בהתאמה, שמקבלת/מחזירה סטרינג.

        הקריאה/כתיבה של נתונים אל קובץ השיטס נעשית באמצעות הSpreadsheet Service, כאשר הפעולה נעשית על ידי קבלת "אזור" תאים בטבלה - ragne, וכתיבה אליו של "מערך דו מימדי", או בקריאה - שימוש במתודה getValues על הrange מה שיחזיר מערך דו מימדי.
        לדוגמה יש כזו טבלה:
        CleanShot 2022-09-19 at 01.30.49@2x.png
        נוסיף סקריפט דרך הטבלה - מה שיאפשר לי להשתמש בgetActiveSheet:
        CleanShot 2022-09-19 at 01.31.20@2x.png
        ונכתוב בו את הפונקציה הבאה:

        function getSheetValues() {
            const sheet = SpreadsheetApp.getActiveSheet()
            const range = sheet.getRange('A1:B3')
            const values = range.getValues()
            Logger.log(JSON.stringify(values))
        }
        

        כאן אני מקבל את כל השורות בטבלה אז ניתן באותה מידה להשתמש בsheet.getValues(), אבל באופן כללי, כשזה רלוונטי, נעדיף לקבל רק את הטווח הרלוונטי כדי לחסוך ב"שאילתות" מול שירות חיצוני - השיטס, שמאיטות את הריצה של הקוד.

        יודפס המערך דו-מימדי הבא שמייצג את הטבלה:

        [["שם","תפקיד"],["משה","מנהל"],["יעקב","מזכיר"]]
        

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

        values[1][1] // "מנהל"
        

        ממילא כל ההתעסקות עם הנתונים היא עם מתודות של מערכים בJS - סתם לדוגמה אני אוהב להפריד את השורה הראשונה ע"י מתודת shift.
        אם לדוגמה יעקב המזכיר קודם לדרגת מנהל, וגם שינו את שמו עקב מחלה קשה ליעקב-חיים, ואני ארצה לעדכן את השורה שלו,
        אבצע את הפעולה הבאה:

        sheet.getRange(2, 1, 1, 2).setValues([["יעקב חיים", "מנהל"]]);
        

        כלומר אני מקבל את הrange בצורה הבאה:
        CleanShot 2022-09-19 at 01.48.32@2x.png
        דהיינו:
        החל משורה: 2 (=שורה 1 לא כולל הכותרות)
        החל מעמודה: 1
        כמות שורות: 1
        כמות עמודות: 2
        ולאחר מכן אני כותב לטווח שזה בעצם האזור הזה בטבלה, מערך דו מימדי שכמובן במקרה הזה מכיל רק תת-מערך אחד.
        אני מקווה שלא יצא מידי מעורפל, אם יש שאלות אתה מוזמן לשאול.
        ב - שליחת בקשות לAPI של ימות
        החלק הזה הוא החלק הפשוט, שליחת בקשות נעשית באמצעות UrlFetchApp (בד"כ באמצעות UrlFetchApp.fetch (קישור)), ויש לימות תיעוד ברור של הAPI שלהם:
        https://f2.freeivr.co.il/topic/55

        Don’t comment bad code — rewrite it." — Brian W. Kernighan and P. J. Plaugher"
        טיפים

        Y.Excel.AccessY 2 תגובות תגובה אחרונה
        7
        • Y.Excel.AccessY מנותק
          Y.Excel.AccessY מנותק
          Y.Excel.Access
          השיב לצבי-ש ב נערך לאחרונה על ידי
          #4

          @צבי-ש לא, התכוונתי ליצור שלוחות לקו טלפוני קיים. בלי קשר למייל.

          Y.Excel.Access @ gmail.com

          תגובה 1 תגובה אחרונה
          0
          • Y.Excel.AccessY מנותק
            Y.Excel.AccessY מנותק
            Y.Excel.Access
            השיב לצדיק תמים ב נערך לאחרונה על ידי Y.Excel.Access
            #5

            @צדיק-תמים תודה רבה! הסברת על SHEETS ממש ברור ומפשט.

            Y.Excel.Access @ gmail.com

            תגובה 1 תגובה אחרונה
            1
            • Y.Excel.AccessY מנותק
              Y.Excel.AccessY מנותק
              Y.Excel.Access
              השיב לצדיק תמים ב נערך לאחרונה על ידי
              #6

              @צדיק-תמים כתב בהעלאת טקסט מגוגל שיטס לתוך שלוחות בימות המשיח, ויצירת/מחיקת שלוחות:

              ב - שליחת בקשות לAPI של ימות
              החלק הזה הוא החלק הפשוט, שליחת בקשות נעשית באמצעות UrlFetchApp (בד"כ באמצעות UrlFetchApp.fetch (קישור)), ויש לימות תיעוד ברור של הAPI שלהם:
              https://f2.freeivr.co.il/topic/55

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

              אשמח אם יש למישהו דוגמה חיה של API בJS שאפשר ללמוד ממנה
              וכמובן עדיפות לדוגמה של API של ימות (כמובן למחוק פרטים אישיים וכו').

              Y.Excel.Access @ gmail.com

              ל 2 תגובות תגובה אחרונה
              0
              • ל מנותק
                ל מנותק
                לעזור לכולם
                השיב לY.Excel.Access ב נערך לאחרונה על ידי לעזור לכולם
                #7

                @Y-Excel-Access
                API: הפעלת URL עם פרמטרים שונים ומקבלים תגובה מהשרת
                לדוגמא: נניח שיש שרת המחזירה זמני היום,
                תצטרך לשלוח בקשה לקבלת הזמנים ולצרף את התאריך הנוכחי והאזור שלך והשרת ישלח לך בחזרה את זמני היום
                כך גם בימות המשיח , אתה שולח את מספר המערכת ואת הסיסמא , כמו כן אתה שולח את הפעולה שאתה רוצה לעשות (לדוגמא, פירוט השלוחות שיש בקו) ואם זה נצרך אז גם את הנתיב (כלומר השלוחה) שבו תרצה לבצע פעולה

                תגובה 1 תגובה אחרונה
                1
                • ל מנותק
                  ל מנותק
                  לעזור לכולם
                  השיב לY.Excel.Access ב נערך לאחרונה על ידי לעזור לכולם
                  #8

                  @Y-Excel-Access כתב בהעלאת טקסט מגוגל שיטס לתוך שלוחות בימות המשיח, ויצירת/מחיקת שלוחות:

                  אשמח אם יש למישהו דוגמה חיה של API בJS שאפשר ללמוד ממנה
                  וכמובן עדיפות לדוגמה של API של ימות (כמובן למחוק פרטים אישיים וכו')

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

                  @צדיק-תמים כתב את זה לבקשת משתמש שרוצה לקבל את מספר הקובץ (tts) הגבוה ביותר

                  הלוגיקה של זה מאוד פשוטה. יש API של ימות לקבלת רשימת הקבצים בתקיה. הוא מחזיר items שזה מערך של קבצים, שמכיל בין השאר את שם כל קובץ.
                  צריך לעבור עליהם, לסנן רק את הקבצים מסוג מסוים, ואז להחזיר את הקובץ הגבוה ביותר. המספר של הקובץ הזה + 1, יהיה המספר לקובץ החדש...
                  בNode.js (הקוד הזה בדיוק יעבוד גם בסביבת דפדפן, רק שצריך לטעון את axios) פונקציה שעושה כזה דבר תיראה ככה בערך (השתמשתי לבקשת רשת במודול axios, אבל אפשר כמובן לממש את זה גם בלי):

                  const axios = require('axios');
                   
                  axios.defaults.baseURL = 'https://www.call2all.co.il/ym/api/';
                  axios.defaults.params = { token: '0773137770:123456' }
                   
                  /**
                   * get max file id in folder
                   * @param {String} extension - extension of the file
                   * @param {String} path - path of the file in yemot system
                   * @returns {Number|Boolean} max file id. false if no files found with requested extension
                   * */
                  async function getMaxFileId(extension, path) {
                    const ymResponse = await axios.get('GetIvrTree', {
                      params: {
                        path
                      }
                    })
                    if (!['ok', 'OK'].includes(ymResponse.data.responseStatus)) throw new Error(ymResponse.data.message);
                  Error(ymResponse.data.message);
                    let filesList = ymResponse.data.items.map(item => {
                      return item.name
                    })
                    filesList = filesList.filter(item => {
                      const regexFileName = new RegExp(`[0-9]+\.${extension}`)
                      return regexFileName.test(item)
                    })
                    if (!filesList.length) return false;
                    filesList = filesList.map(item => {
                      return item.replace(`.${extension}`, '')
                    })
                    return Math.max(...filesList)
                  }
                   
                  // get max file in 'tts' extension
                  getMaxFileId('tts', 'ivr2:0/1').then(max => {
                    if (!max) throw new Error('files not found in this folder')
                    const padLength = 4;
                    console.log('next file name:', `${String(max + 1).padStart(padLength, "0")}.tts`)
                  })
                  

                  התרגום לפייתון/כל שפת תכנות אחרת אמור להיות פשוט ביותר.
                  לדוגמה הפונקציה המקבילה ל()Math.max היא max.

                  צדיק תמיםצ תגובה 1 תגובה אחרונה
                  1
                  • צדיק תמיםצ מנותק
                    צדיק תמיםצ מנותק
                    צדיק תמים
                    השיב ללעזור לכולם ב נערך לאחרונה על ידי צדיק תמים
                    #9

                    @לעזור-לכולם אני לא חושב שזה טוב בתור דוגמה.
                    @Y-Excel-Access הדגמה קטנה של שימוש בAPI של UpdateExtension דרך google script כדי ליצור/לעדכן את שלוחה 1 של מערכת מספר 0773137777, כשלוחת העברה למערכת מספר 0773137770:

                    const BASE_API_URL = 'https://www.call2all.co.il/ym/api/';
                    const YEMOT_USER = '0773137777';
                    const YEMOT_PASSWORD = '123456';
                    
                    function send() {
                      const data = {
                        type: 'routing_yemot',
                        'routing_yemot_number': '0773137770',
                        'password': '1234',
                        token: `${YEMOT_USER}:${YEMOT_PASSWORD}`,
                        'path': 'ivr2:1'
                      }
                    
                      const options = {
                        'method': 'post',
                        'contentType': 'application/json',
                        'payload': JSON.stringify(data)
                      };
                    
                      const response = UrlFetchApp.fetch(BASE_API_URL + 'UpdateExtension', options)
                      const responseJson = JSON.parse(response.getContentText());
                      if (responseJson.responseStatus.toUpperCase() !== 'OK') {
                        throw new Error(responseJson.message)
                      } else {
                        Logger.log('OK')
                      }
                    }
                    

                    אם משהו לא ברור תשאל.

                    Don’t comment bad code — rewrite it." — Brian W. Kernighan and P. J. Plaugher"
                    טיפים

                    שמואל ש.ש תגובה 1 תגובה אחרונה
                    2
                    • שמואל ש.ש מנותק
                      שמואל ש.ש מנותק
                      שמואל ש.
                      השיב לצדיק תמים ב נערך לאחרונה על ידי שמואל ש.
                      #10

                      @צדיק-תמים מותר לשאול מהם השורות מ-14 והלאה?-אני מבין ש-14 עד 18 זה שליחת הקוד, ושורות 20 עד 26 הם החזרת לוג, רק אני שואל מה זה כל אחד אם אפשר

                      צדיק תמיםצ תגובה 1 תגובה אחרונה
                      0
                      • צדיק תמיםצ מנותק
                        צדיק תמיםצ מנותק
                        צדיק תמים
                        השיב לשמואל ש. ב נערך לאחרונה על ידי צדיק תמים
                        #11

                        @שמואל-ש שורות 14-18 מגדירות את המשתנה options כאובייקט, שמועבר לאחמ"כ (שורה 20) לfetch כארגומנט אופציות,
                        שמגדיר את הבקשה כך שתישלח במתודת post, עם contentType מתאים, ועם payload (בד"כ נקרא body, אבל גוגל חייבים להיות שונים... 😏 ראה גם https://tchumim.com/post/112838) מתאים של אובייקט הdata - הנתונים שרוצים לשלוח לימות.
                        הקוד הבא יתן תוצאה זהה:

                        const response = UrlFetchApp.fetch(BASE_API_URL + 'UpdateExtension', {
                          method: 'post',
                          contentType: 'application/json',
                          payload: JSON.stringify({
                            type: 'routing_yemot',
                            routing_yemot_number: '0773137770',
                            password: '1234',
                            token: `${YEMOT_USER}:${YEMOT_PASSWORD}`,
                            path: 'ivr2:1'
                          })
                        })
                        

                        פשוט ככה זה יותר קריא.
                        ראה עוד:
                        https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app#fetchurl,-params


                        שורה 20 היא שליחת הבקשה בפועל, שמגדירה את המשתנה response כHTTPResponse שהfetch החזיר,
                        לאחר מכן בשורה 21 מחלצים את התשובה כטקסט מתוך הHTTPResponse ע"י מתודת getContentText, שמחזירה סטרינג של הJSON - ולכן אני מפרסר אותו לאובייקט ע"י JSON.parse, כך שכעת responseJson מכיל את האובייקט שחזר בJSON מימות.
                        לאחר מכן בשורות 22-26 אני בודק את הערך responseStatus מתוך התגובה של ימות,
                        באם הוא לא שווה לOK אני זורק שגיאה עם מה שימות החזירו בערך message,
                        אם הוא שווה אני מדפיס לוג של "OK".

                        בד"כ אין צורך בבדיקה הזאת כיוון שאם יש שגיאה אמור לחזור ססטוס קוד של שגיאה, לדוגמה 400 או 500, אבל כך ימות עובדים. הם תמיד מחזירים 200, ו-responseStatus שאומר אם הפעולה הצליחה.
                        כנ"ל לגבי הצורך בresponseStatus.toUpperCase(), נתקלתי בחלק מהAPIs שלהם שמחזירים OK וחלק מחזירים ok (באותיות קטנות)... שימוש בבדיקה כזאת (ע"י המרה של הresponseStatus לאותיות גדולות והשוואה מול OK, אני מכוסה תמיד.

                        Don’t comment bad code — rewrite it." — Brian W. Kernighan and P. J. Plaugher"
                        טיפים

                        תגובה 1 תגובה אחרונה
                        4

                        בא תתחבר לדף היומי!
                        • התחברות

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

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