• הרשמה
    • התחברות
    • חיפוש
    • דף הבית
    • אינדקס קישורים
    • פוסטים אחרונים
    • קבלת התראות מהדפדפן
    • משתמשים
    • חיפוש בהגדרות המתקדמות
    • חיפוש גוגל בפורום
    • ניהול המערכת
    • ניהול המערכת - שרת private
    1. דף הבית
    2. ASS
    3. הגבוה ביותר
    A
    • פרופיל
    • עוקב אחרי 1
    • עוקבים 5
    • נושאים 29
    • פוסטים 152
    • הגבוה ביותר 47
    • שנוי במחלוקת 1
    • קבוצות 0

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

    • מדריך התחלת עבודה עם API של ימות משיח (חלק א').

      כמשתמש מתחיל בנושא API חיפשתי מדריך שיתן כיוון כיצד להתחיל, ולא היה! אז הנה המדריך שלי במיוחד בשביל זה, מקווה שיהיה לתועלת...

      טוב, אז מאיפה מתחילים?
      נתחיל עם התאוריה! בכדי שנבין את המונחים הבסיסים.

      מהו API?

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

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

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

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

      שפת PHP

      ישנם שני שפות תיכנות עיקריות בעזרתם ניתן לכתוב את הקוד להתחברות לשרת של ימות:
      א. שפת PHP .
      ב. שפת JavaScript .

      שפת PHP ידועה כשפה קלה ללמידה, ואף ימות משתשמים בה, המדריך הזה נכתב בהתייחסות לשפה זו.
      למרות שהמדריך נועד גם לאלה שממש מתחילים - חשוב לדעת את השפה בכדי להצליח!

      ישנם מקומות רבים שניתן ללמוד את השפה בקלות ובמהירות:

      1. סרטונים ביוטיוב, לדוגמא סדרת המדריכים הבסיסים של אלי נעים.
      2. אתר w3schools.com, זהו אתר מדהים שכדאי להכיר.
      3. בתיעוד של אתר PHP הרשמי: php.net .
      4. מאגר גדול של סירטונים מאושרים בנטפרי.
      5. אתר וובמאסטר.
      6. מדריך של אחד המשתמשים בימות.

      בכל מקרה במדריך נלך לאט ובטוח, אל דאגה!

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

      מה שגם מצריך מאיתנו להפעיל את הקוד דווקא בשרת כל שהוא, כלומר השרת שלנו מתקשר ב PHP עם השרת של ימות.

      מסובך? לא לדאוג בהמשך נרחיב!

      אז רוצים להתחיל לעבוד? קדימה!

      מכינים את המחשב שלנו.

      כפי שהבנו למעלה בכדי להפעיל את קוד ה PHP ולתקשר עם ימות, אנחנו צריכים שרת.
      אין לכם שרת? לא נורא! בעוד 5 דקות יהיה לכם!

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

      אנחנו נכיר דרך קלה ומהירה, כמו שהבטחתי: 5 דקות ויש שרת!

      שרת WAMP.

      WAMP זה דרך קלה להפוך את המחשב האישי שלכם לשרת אמיתי! ממש כך.
      אז איך עושים את זה?

      1. נכסים לאתר wampserver בקישור הזה מורידים את הגירסה האחרונה לפי מה שמתאים למחשב שלכם.
        להלן: קישור להורדה ישירה של הגירסה האחרונה ל Windows (64 סביות)
        מדריך בנושא הורדת תוכנת WAMP ניתן לראות כאן.

      2. מתקינים את התוכנה.

      3. לא לשכוח להפעיל את התוכנה בכל פעם שרוצים לעבוד עם ימות, ההפעלה מתבצעת דרך סמל הקיצור דרך שבשולחן העבודה: צילום_מסך_2021-09-13_202138-removebg-preview.png .

      4. להיכנס לכונן C, תקיית wamp64, ולאחר מכן לתקיית www, בתקייה זו ניצור תקייה חדשה, ניתן לבחור כל שם לדוגמא "my_php".

      👏 מזל -טוב! יש לכם שרת.

      תוכנה לכתיבת קוד.

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

      לאחר ההורדה וההתקנה של ויזואל סטודיו קוד, נפתח את התוכנה וניצור קובץ חדש בעזרת "New file".
      צילום מסך לדוגמא
      לאחר שנפתח הקובץ נשמור אותו בעזרת Save < File.
      צילום מסך לדוגמא
      בחלון שנפתח נעשה 3 פעולות:

      1. נבחר היכן לשמור את הקובץ, שימו לב חשוב לשמור רק בנתיב הבא:
        C:\wamp64\www\my_php
        כלומר: לבחור את כונן C, תקיית wamp64, ולאחר מכן את תקיית www, ולבסוף את תקייה שיצרנו: my_php.

      2. נקליד שם, לדוגמא: "main".

      3. נבחר מתוך התפריט בשורה מתחת את שפת PHP:צילום מסך 2021-09-13 210336.png

      זהו קובץ ה PHP הראשון שלנו מוכן!....

      כותבים קוד.

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

      <?php
      

      ונגמר בתג:

      ?>
      

      העתיקו לקובץ שלכם את הקוד הבא:

      <?php
      
      echo "זה קוד PHP";
      
      ?>
      

      בצעו שמירה.

      רואים משהו?

      זוכרים שאמרנו שקוד PHP זה לא קוד שממש רואים?! אז זהו שיש דרך מעולה לראות חלקים מסויימים בקוד.

      כנסו לדפדפן שלכם, והכניסו בשורה למעלה את הנתיב הבא:

      http://localhost/my_php/main.php
      

      הסבר:
      הנתיב הזה אומר לדפדפן להכנס אל localhost שזה השרת שלנו (המחשב שהפך בין רגע לשרת 🙂 ), לאחר מכן אל התקייה שיצרנו שהיא my_php, ולבסוף אל הקובץ שיצרנו שהוא main.php.

      והנה הקוד שלנו יופיע במלא הדרו! עד כאן חלק א'.

      המדריך הבא יעסוק ממש בקוד ההתחברות וכו' יהיה מעניין.

      למעבר למדריך לחצו כאן.

      פורסם בפורום מפתחים API
      A
      ASS
    • הפרוייקט השיתופי הושלם, וישמש את מאות אלפי בני התורה!

      בסיעתא דשמיא.

      • יש לך קו של הרב שלך, אתה מעוניין שכולם ישמעו את דברי תורתו?
      • אתה משקיע המון בקו שלך, אבל אין לך הרבה מאזינים?
      • פתחת קו חדש, אבל אין לך איך לפרסם אותו?

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

      הפרוייקט ישמש את מאות אלפי בני התורה, ואלפי בעלי קווי שיעורי התורה בחברת ימות משיח.

      מהו הפרוייקט?

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

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

      איך מחפשים?

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

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

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

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

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

      למעבר לאתר חיפוש פון לחצו כאן.

      פורסם בעזרה הדדית למשתמשים מתקדמים
      A
      ASS
    • מדריך התחלת עבודה עם API של ימות משיח (חלק ב').

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

      הידע בשפת PHP הכרחי למי שרוצה לעשות פעולות נוספות מעבר למה שמופיע במדריך הזה.
      המדריך מבוסס על התיעוד של ימות כמובן!

      מתחילים:

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

      שלב א':
      במקום המסומן ב *** נגדיר האם המערכת שלנו בימות נמצאת בשרת הפרייוט או הרגיל.

      define("URL", "https://***.call2all.co.il/ym/api/");
      

      בשרת רגיל נכתוב: www

      define("URL", "https://www.call2all.co.il/ym/api/");
      
      

      ובשרת פרייוט נכתוב: private

      define("URL", "https://private.call2all.co.il/ym/api/");
      
      

      בכדי למנוע בעיות בהעלאת קבצים בהמשך, יש להוסיף את המשתנה הבא:
      בשרת רגיל נכתוב: www

      $server = "www";
      
      

      ובשרת פרייוט נכתוב: private

      $server = "private";
      
      

      לסיכום:
      בשרת רגיל הקוד צריך להראות ככה:

      define("URL", "https://www.call2all.co.il/ym/api/");
      $server = "www";
      

      ובשרת פרייוט הקוד צריך להראות ככה:

      define("URL", "https://private.call2all.co.il/ym/api/");
      $server = "private";
      

      שלב ב':

      הוספת המחלקה.
      נעתיק את הקוד הבא:

      class BodyPost
      {
      // part "multipart/form-data"
          public static function PartPost($name, $val)
           {
               $body = 'Content-Disposition: form-data; name="' . $name . '"';
      // check instance of oFile
               if($val instanceof oFile)
                {
                    $file = $val->Name();
                    $mime = $val->Mime();
                    $cont = $val->Content();
       
                    $body .= '; filename="' . $file . '"' . "\r\n";
                    $body .= 'Content-Type: ' . $mime ."\r\n\r\n";
                    $body .= $cont."\r\n";
                } else $body .= "\r\n\r\n".$val."\r\n";
               return $body;
           }
       
          public static function Get(array $post, $delimiter = '-------------0123456789')
           {
               if(is_array($post) && !empty($post))
                {
                    $bool = true;
                    //foreach($post as $val) if($val instanceof oFile) {$bool = true; break; };
                    if($bool)
                     {
                         $ret = '';
                         foreach($post as $name=>$val)
                             $ret .= '--' . $delimiter. "\r\n". self::PartPost($name, $val);
                         $ret .= "--" . $delimiter . "--\r\n";
                     } else $ret = http_build_query($post);
                } else throw new \Exception('Error input param!');
               return $ret;
           }
      }
       
      class oFile
      {
           private $name;
           private $mime;
           private $content;
       
           public function __construct($name, $mime=null, $content=null)
            {
                if(is_null($content))
                 {
                     $info = pathinfo($name);
      // check is exist and readable file
                     if(!empty($info['basename']) && is_readable($name))
                      {
                          $this->name = $info['basename'];
      // get MIME
                          $this->mime = mime_content_type($name);
      // load file
                          $content = file_get_contents($name);
                          if($content!==false)
                          {
                              $this->content = $content;
                          }
                          else
                          {
                              throw new Exception('Don`t get content - "'.$name.'"');
                          }
                      }
                      else
                      {
                          throw new Exception('Error param');
                      }
                 }
                 else
                 {
                         $this->name = $name;
                         if(is_null($mime)) $mime = mime_content_type($name);
                         $this->mime = $mime;
                         $this->content = $content;
                  };
            }
       
          public function Name() { return $this->name; }
       
          public function Mime() { return $this->mime; }
       
          public function Content() { return $this->content; }
       
      }
       
      class connecting_to_yemot_api
      {
          public $token;
       
          const URL = URL;
       
          public function __construct($user_name, $password)
          {
              $body = array('username' => $user_name, 'password' => $password);
       
              $body = http_build_query($body);
       
              $opts = array('http' => array(
       
                  'method'  => 'POST',
       
                  'header'  => "Content-Type: application/x-www-form-urlencoded",
       
                  'content' => $body,
       
                  'follow_location' => false) );
       
               $context  = stream_context_create($opts);
       
               $url = self::URL.'Login';
       
                  $result = file_get_contents($url, FALSE, $context);
       
                  $result = json_decode($result);
       
                  if($result -> responseStatus == 'OK')
                  {
                      $this -> token = $result -> token;
       
                      return TRUE;
                  }
                  else
                  {
                      throw new Exception('שם המשתמש או הסיסמא של המערכת שגויים');
                  }
          }
       
          public function __destruct()
          {
              $this -> connecting('Logout');
          }
       
          public function connecting($action, $body = array())
          {
              $delimiter = '----'.uniqid();
       
              $body['token'] = $this -> token;
       
              $body = BodyPost::Get($body, $delimiter);
       
              $opts = array('http' =>
                      array(
                          'method'  => 'POST',
                          'header'  => 'Content-Type: multipart/form-data; boundary='.$delimiter,
                          'content' => $body,
                          'follow_location' => false
                          )
                        );
              $context  = stream_context_create($opts);
       
              $url = self::URL.$action;
       
              $result = file_get_contents($url, FALSE, $context);
       
              $headers = $this -> parseHeaders($http_response_header);
       
              if($headers['Content-Type'][0] == 'application/json')
              {
                  return json_decode($result);
              }
              else
              {
                  return $result;
              }
          }
       
          private function parseHeaders($headers)
          {
              // פונקציה שמקבלת מערך של שורות הכותרות
              // הפונקציה מפרקת את קבצי הקוקי לתת-מערך נפרד
       
       
              // מערך הכותרות
              $head = array();
       
              foreach( $headers as $k=>$v )
              {
                  $t = explode( ':', $v, 2 );
       
                  if( isset( $t[1] ) )
                  {
                      if($t[0] == 'Set-Cookie')
                      {
                          $CookiesArr = array();
       
                          $cookies = explode( ';', $t[1]);
       
                          foreach($cookies as $cookie)
                          {
                              $c = explode( '=', $cookie);
       
                              if( isset( $c[1] ) )
                              {
                                  $CookiesArr[ trim($c[0]) ] = trim( $c[1] );
                              }
                              else
                              {
                                  $CookiesArr[] = trim( $c[0] );
                              }
                          }
       
                          $head[ trim($t[0]) ] = $CookiesArr;
                      }
                      elseif($t[0] == 'Content-Type')
                      {
                          $arr = array();
       
                          $children = explode( ';', $t[1]);
       
                          foreach($children as $child)
                          {
                              $c = explode( '=', $child);
       
                              if( isset( $c[1] ) )
                              {
                                  $arr[ trim($c[0]) ] = trim( $c[1] );
                              }
                              else
                              {
                                  $arr[] = trim( $c[0] );
                              }
                          }
       
                          $head[ trim($t[0]) ] = $arr;
                      }
                      else
                      {
                          $head[ trim($t[0]) ] = trim( $t[1] );
                      }
                  }
                  else
                  {
                      $head[] = $v;
                      if( preg_match( "#HTTP/[0-9\.]+\s+([0-9]+)#",$v, $out ) )
                      {
                          $head['reponse_code'] = intval($out[1]);
                      }
                  }
              }
              return $head;
          }
      }
      

      ארוך, אבל שווה את זה!

      שלב ג':

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

      $con = new connecting_to_yemot_api('0790000000','1234');
      

      לסיום נציב עוד משתנה עם הפרמטר טוקן, בעזרת משתנה זה לא נדרש לכתוב שם משתמש וסיסמה בכל פעם.
      במקום המסומן ב 0790000000 נכניס את מספר הטלפון של המערכת, ובמקום המסומן ב 1234 נכניס את הסיסמה, כך:

      $token =  "0790000000:1234";
      

      זהו סיימנו את קוד ההתחברות, אחת ולתמיד.

      בצעו שמירה
      ורעננו את הדפדפן או כנסו שוב ל http://localhost/my_php/main.php.

      אם אין שגיאות הצלחנו להכנס לשרת של ימות!
      נכון שלא רואים כלום ככה זה ב PHP אם לא רואים כלום זה סימן טוב 🙂 .

      ממשיכים...

      פקודות ופרמטרים.

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

      פקודה: בכדי שהשרת יבין מה אתם רוצים לעשות חשוב לציין את שם הפקודה, הפקודה יכולה להיות בין היתר: העלאת קבצים, מחיקת קבצים, קבלת פרטי המערכת, ועוד פקודות רבות כמופיע בתיעוד .

      פרמטרים: הפרמטרים הם בעצם הפרטים של הפקודה, כלומר: אם לדוגמא אנחנו רוצים להעלות קובץ וכתבנו פקודת העלאת קבצים, מעולה! אבל לאן להעלות? לשלוחה הראשית או לשלוחה אחרת? את זה השרת חייב לדעת! בשביל זה נועדו הפרמטרים, לכוון את השרת למה שאנחנו רוצים בדיוק.
      בהמשך נראה את הנושא בצורה יותר פרקטית.

      בשורת הקוד הבאה נציב את פרמטר נתיב בתוך משתנה.
      החליפו את *** בנתיב השלוחה אליה אתם רוצים להעלות את הקובץ:

      $path = "ivr2:***";
      

      לדוגמא:

      $path = "ivr2:4/1";
      

      הסבר:
      הקובץ יעלה לשלוחה 1 שבתוך שלוחה 4.

      הנתיב חייב להיות מוגדר, ודאו ששורת הקוד הזו נמצאת אצלכם!

      בעיה בהעלאת קבצים
      לפני שנמשיך לפרט על פקודת העלאת קבצים נעצור לרגע.
      ישנה בעיה בהעלאת קבצים לשלוחה, לדוגמא אם בשלוחה כל שהיא יש לנו קובץ שמע בשם 000.wavנרצה שהקובץ הבא שיעלה יהיה 001.wav , פה יש לנו בעיה: הקוד לא יעשה את זה!
      הבעיה הועלתה בנושא הזה ונפתרה ע"י ערוץ הסקרים, כעת נשלב את הפתרון בקוד.
      העתיקו את הקוד:

      // פונקציה למספרי קבצים עוקבים
      function FileNameToUpload($server, $token, $path){
      	$array = json_decode(file_get_contents("https://$server.call2all.co.il/ym/api//GetIVR2Dir?token=$token&path=$path"),true);
      	if($array["responseStatus"] == "OK"){
      		foreach($array["files"] as $key => $value){
      			if($value["fileType"] == "AUDIO" || $value["fileType"] == "TTS"){
      				$split = explode(".",$value["name"]);
      				if (is_numeric($split[0])){		
      					break;
      				}
      			}
      		}
      		if($split[0] == null){
      			$NewFileName = 0;
      		}else{
      			$NewFileName = $split[0]+1;
      		}
      		//הפוך למינימום 3 ספרות/
      		return str_pad($NewFileName,3,"0",STR_PAD_LEFT);
      	}else{
      	//במקרה של שגיאה
          echo "שגיאה";
      
      	}
      }
          // קריאה לפונקציה.
      $NewFileName = FileNameToUpload($server,$token,$path);
      if($NewFileName != null){
        //מכריז על שם של נתיב הקובץ להעלאה
      $path_name = "$path/$NewFileName.wav";
       }
      

      פקודת העלאת קבצים

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

      שלב א':
      בשלב הראשון נודיע לשרת מהיכן לקחת את הקובץ אותו אנחנו רוצים לעלות.
      נציב משתנה בשם $File אשר יכיל את כל פרטי הקובץ:
      העתיקו את הקוד הבא:

      $File = new oFile('ext.ini', 'text/plain', file_get_contents("***"));
      

      כעת הכניסו במקום *** את הנתיב שבו מאוחסן הקובץ, לדוגמא: C:\Users\PC\Downloads, והוסיפו אחריו סלש כזה: / ולא כזה: \, ולאחר מכן את שם הקובץ, לדוגמא: Lesson_Number_55.mp3.

      הנתיב צריך להראות כך: C:\Users\PC\Downloads/Lesson_Number_55.mp3.

      לסיכום הקוד צריך להראות כך:

      $File = new oFile('ext.ini', 'text/plain', file_get_contents("C:\Users\PC\Downloads/Lesson_Number_55.mp3"));
      
      

      שלב ב':
      לאחר שהשרת יודע היכן הקובץ, נתקדם לפקודה והפרמטרים.
      נציב את הפקודה בתוך משתנה Upload_order$
      פקודה נכתבת כך:

         $Upload_order = $con -> connecting('***',
      

      החליפו את *** בשם הפקודה להעלאת קבצים.
      שם הפקודה הוא: UploadFile.
      כך:

         $Upload_order = $con -> connecting('UploadFile',
      

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

      1. טוקן : token .
        על הפרמטר 'טוקן' אפשר לדלג משום שנכנסנו עם המחלקה.
      2. נתיב : path .
        בפרמטר נתיב נכניס את המשתנה path_name$ זהו המשתנה שהוגדר בחלק האחרון של הקוד שהעתקנו למעלה.
      3. המרה : convertAudio .
        אם המרה מוגדר על 1 הקובץ יומר לפורמט: .wav שהוא פורמט השמע הטוב ביותר עבור מערכת טלפונית, אם מודגר על: 0 לא תתבצע המרה.

      ניגש לקוד:
      פרמטר נתיב - path:

      נוסיף ] לאחריו את הפרמטר נתיב : 'path' את הסימן: <= ואז את המשתנה path_name$ ולבסוף פסיק:, .
      הקוד נראה כך:

      [
       'path' =>$path_name,
      

      פרמטר המרה - convertAudio:
      נכתב כך:

           'convertAudio' => 1,
      

      הסבר:
      פרמטר המרה מוגדר על 1 מה שאומר שהקובץ יומר, אם נגדיר 0 לא תתבצע המרה.

      פרמטר קובץ להעלאה - fileUpload:
      נוסיף פרמטר נוסף (שמשום מה לא מופיע בתיעוד של ימות) פרמטר קובץ להעלאה: fileUpload, ונוסיף לו את משתנה נתיב קובץ להעלאה שהגדרנו למעלה, כך:

           'fileUpload' => $File
      

      כאן לא מוסיפים פסיק :, משום שהוא הפרמטר האחרון.

      נסגור עם:

         ]
      );
      

      לסיכום: קוד הפקודה יחד עם הפרמטרים נראה כך:

         $Upload_order = $con -> connecting('UploadFile',
         [
          'path' =>$path_name,
          'convertAudio' => 1,
          'fileUpload' => $File
         ]
      );
      

      זהו, סיימנו!

      בצעו שמירה
      ורעננו את הדפדפן או כנסו שוב ל http://localhost/my_php/main.php.
      אם אין שגיאות כנסו למערכת הניהול שלכם ובידקו האם הקובץ אכן עלה לשלוחה, אם כן - ברכות- אם לא חזרו שוב על הקוד ובידקו את הטעות לפי הודעת השגיאה...

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

      למעבר למדריך הבא לחצו כאן.

      פורסם בפורום מפתחים API
      A
      ASS
    • פרוייקט שיתופי ענק...

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

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

      כל מי שיש ידע בשפות תכנות ובמיוחד ב: PHP, Python, js, sql. וכן בתחום ה- API. מוזמן להצטרף לפיתוח הפרוייקט, ולהיות שותף בהפצת תורה, גם השתתפות בחלק קטן תעזור!

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

      אין לחץ עבודה והספק, הכל ברוח נעימה ובשמחה.

      פורסם בעזרה הדדית למשתמשים מתקדמים
      A
      ASS
    • לימוד API של ימות משיח.

      לכל מי שמעוניין להתחיל ללמוד את הנושא של API של ימות משיח, מוזמן להכנס למדריך הזה:
      חלק א':
      https://f2.freeivr.co.il/topic/6904/מדריך-התחלת-עבודה-עם-api-של-ימות-משיח-חלק-א?_=1631544495840

      חלק ב':
      https://f2.freeivr.co.il/topic/6906/מדריך-התחלת-עבודה-עם-api-של-ימות-משיח-חלק-ב/1

      חלק ג':
      https://f2.freeivr.co.il/topic/6918/מדריך-התחלת-עבודה-עם-api-של-ימות-משיח-חלק-ג/1

      פורסם בהסברים מסודרים ממשתמשים
      A
      ASS
    • השמעת הודעות משתנות לפי יום - הדרך הקלה.

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

      יוצרים שלוחה במקום כל שהוא במערכת, לדוגמא שלוחה 1.
      נכנסים להגדרות מתקדמות (במערכת הישנה) או לקובץ ה- ext.ini במערכת החדשה, ומכניסים:

      type=daily_message
      

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

      daily_message_end_goto=/
      

      ניתן להגדיר שיחזור לכל מקום אחר, לדוגמא שלוחה 2, כך:

      daily_message_end_goto=/2
      

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

      ישנם אופציות נוספות חוץ מקובץ wav, לפי תאריך ועוד... ניתן לראות כאן.

      שלב ב':
      כעת יש להיכנס לשלוחה שבה אנחנו רוצים שתושמע ההודעה (בכל שלוחה שהיא), נכנסים להגדרות מתקדמות (במערכת הישנה) או לקובץ ה- ext.ini במערכת החדשה, ומכניסים:

      check_did_and_go_to_folder=yes
      

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

      check_did_and_go_to_folder_one_time=yes
      

      לאחר מכן יש ליצור קובץ .ini בשם: Did_Go_To, למי שלא יודע כיצד ליצור, אפשר להוריד מכאן .
      יש להכניס בקובץ את מספר המערכת לדוגמא: 0795001111 ובהמשך את מספר השלוחה שייצרנו בשלב א', לדוגמא שלוחה 1. בצורה כזו:

      0795001111=/1
      

      ישנם עוד אופציות, לזיהוי לפי מתקשר וכדו' כאן.

      בהצלחה.

      קרדיט ל:שאול, יעקב ישראל, שמואל, ובראש ובראשונה לה' יתברך על הכל...

      פורסם בהסברים מסודרים ממשתמשים
      A
      ASS
    • RE: עזרה בהצגת קבצי מערכת ימות באתר פרטי ע"י קוד php

      לכל מי שצריך להלן הקוד:

      <?php
      $get = file_get_contents("https://private.call2all.co.il/ym/api/DownloadFile?token=079000000:1234&path=ivr2:/1/2/2/IdListMessage.ini");
      echo "<b>$get</b>";
      
      ?>
      
      <script>
      setTimeout(function(){location.reload()},5000);
      </script>
      
      פורסם בפורום PHP
      A
      ASS
    • RE: משהו יודע מה קורה עם "חיפוש פון"??

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

      בקרוב הכל יחזור לקדמותו ביתר שאת.

      כל שאלה ניתן לפנות אלי במייל : media.peak.1@gmail.com

      בברכה.

      פורסם בשאלות ועזרה הדדית
      A
      ASS
    • RE: משהו יודע מה קורה עם "חיפוש פון"??

      @שמואל-מאיר
      צודק לגמרי. היינו צריכים לעדכן.

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

      @ישראל10
      ב"ה מתקדם, כשנסיים נעדכן בשמחה.
      אין הברכה שרוייה אלא בדבר הסמוי מן העין 🙂

      פורסם בעזרה הדדית למשתמשים מתקדמים
      A
      ASS
    • RE: "חיפוש פון"

      @MGM-IVR
      @LEVI770
      היי

      1. עדכנתי את המייל שם.
      2. הבעיה היחידה של הפיתוח הזה הוא חוסר רצון לשיתוף פעולה מצד בעלי הקווים, השקעתי שם הון רב וגם מאמץ לא קטן יחד עם @MGM-IVR ונוספים, אבל בעלי הקווים חששו למסור לנו את הסיסימה לניהול הקו בלי סיסמה איך אנחנו יכולים לחפש בתוך הקו שלהם?
        לכן לא ראיתי טעם להמשיך עם פיתוח יקר ומסובך בלי שבאמת יהיה שיתוף פעולה כל כך פשוט מבעלי הקווים.
      פורסם בשאלות ועזרה הדדית
      A
      ASS
    • RE: הפרוייקט השיתופי הושלם, וישמש את מאות אלפי בני התורה!

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

      אגב התיעוד ממש לא מצריך התעמקות, הוא קליל ופשוט.
      כל מדריך דורש 3' דק' קריאה כפול 9 מדריכים = 27 דק' 🙂

      פורסם בעזרה הדדית למשתמשים מתקדמים
      A
      ASS
    • RE: מדריך התחלת עבודה עם API של ימות משיח (חלק ג').

      @ass
      טיפ!
      ככה הקוד שלי נראה???

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

      //אינדקס
      $i = 0;
      //הכנת מערך
      $noarray_tst=array();
      $obj =  $File_list;
      
      //פונקציה להמרה למערך
      foreach ($obj->items as $value){
            {
              $mynewvalue = $value->name;
             //הורדת סיומת קובץ
             $path_parts = pathinfo($mynewvalue);
             $path_parts =  $path_parts['filename'];
             $noarray_tst[$i] = $path_parts;
             $i ++;
            }
      }; 
      // חישוב לקבלת מספר קובץ הגדול ביותר 
      $e = $i -2;
      echo "מספר קובץ: <b> $noarray_tst[$e] </b> <br/> ";
      

      לסיכום: כל הקוד של מדריך חלק ג' יחד עם הקוד הזה, נראה כך:

       $File_list = $con -> connecting('GetIvrTree',[
          'path' =>$path,
               ] 
      );
      
      //אינדקס
      $i = 0;
      //הכנת מערך
      $noarray_tst=array();
      $obj =  $File_list;
      
      //פונקציה להמרה למערך
      foreach ($obj->items as $value){
            {
              $mynewvalue = $value->name;
             //הורדת סיומת קובץ
             $path_parts = pathinfo($mynewvalue);
             $path_parts =  $path_parts['filename'];
             $noarray_tst[$i] = $path_parts;
             $i ++;
            }
      }; 
      // חישוב לקבלת מספר קובץ הגדול ביותר 
      $e = $i -2;
      echo "מספר קובץ: <b> $noarray_tst[$e] </b> <br/> ";
      
      
      
      
      
       $File = new oFile('ext.ini', 'text/plain', file_get_contents("C:\Users\PC\Downloads/Lesson_Number_55.mp3"));
       
       $Upload_order = $con -> connecting('UploadFile',
       [
        'path' =>$path_name,
        'convertAudio' => 1,
        'fileUpload' => $File
       ]
      );
      
      
      
      $File_list = $con -> connecting('GetIvrTree',[
          'path' =>$path,
               ] 
      );
      
      //אינדקס
      $i = 0;
      //הכנת מערך
      $noarray_tst=array();
      $obj =  $File_list;
      
      //פונקציה להמרה למערך
      foreach ($obj->items as $value){
            {
              $mynewvalue = $value->name;
             //הורדת סיומת קובץ
             $path_parts = pathinfo($mynewvalue);
             $path_parts =  $path_parts['filename'];
             $noarray_tst[$i] = $path_parts;
             $i ++;
            }
      }; 
      // חישוב לקבלת מספר קובץ הגדול ביותר 
      $e = $i -2;
      echo "מספר קובץ: <b> $noarray_tst[$e] </b> <br/> ";
      
      פורסם בפורום מפתחים API
      A
      ASS
    • RE: ניתוב השיחה למשאיר ההודעה, למורשים בלבד, שייך?

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

      say_details_message=date,time,phone,name,menu_routing
      

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

      say_details_message=date,time,phone,name
      

      ואז לעשות פילטר של מספרים מורשים, מספרים מורשים יכנסו לשלוחה הראשונה ומספרים לא מורשים יכנסו לשלוחה השניה.

      פורסם בעזרה הדדית למשתמשים מתקדמים
      A
      ASS
    • RE: סימניה - חזרה למיקום שהאזין לאחרונה

      @זעליג
      יש דרך מאוד נחמדה לעשות משהו דומה, תראה כאן:
      https://f2.freeivr.co.il/topic/1227/חזרה-למיקום-האחרון-שהאזנתם-לפי-תפריט?_=1632067024917

      פורסם בשאלות ועזרה הדדית
      A
      ASS
    • RE: מדריך התחלת עבודה עם API של ימות משיח (חלק ג').

      @ass
      להלן כל הקוד של כל חלקי המדריך יחד, ניתן לעיין בו ולהבין את סדר הדברים:

      define("URL", "https://***.call2all.co.il/ym/api/");
      $server = "***";
      class BodyPost
      {
      // part "multipart/form-data"
          public static function PartPost($name, $val)
           {
               $body = 'Content-Disposition: form-data; name="' . $name . '"';
      // check instance of oFile
               if($val instanceof oFile)
                {
                    $file = $val->Name();
                    $mime = $val->Mime();
                    $cont = $val->Content();
       
                    $body .= '; filename="' . $file . '"' . "\r\n";
                    $body .= 'Content-Type: ' . $mime ."\r\n\r\n";
                    $body .= $cont."\r\n";
                } else $body .= "\r\n\r\n".$val."\r\n";
               return $body;
           }
       
          public static function Get(array $post, $delimiter = '-------------0123456789')
           {
               if(is_array($post) && !empty($post))
                {
                    $bool = true;
                    //foreach($post as $val) if($val instanceof oFile) {$bool = true; break; };
                    if($bool)
                     {
                         $ret = '';
                         foreach($post as $name=>$val)
                             $ret .= '--' . $delimiter. "\r\n". self::PartPost($name, $val);
                         $ret .= "--" . $delimiter . "--\r\n";
                     } else $ret = http_build_query($post);
                } else throw new \Exception('Error input param!');
               return $ret;
           }
      }
       
      class oFile
      {
           private $name;
           private $mime;
           private $content;
       
           public function __construct($name, $mime=null, $content=null)
            {
                if(is_null($content))
                 {
                     $info = pathinfo($name);
      // check is exist and readable file
                     if(!empty($info['basename']) && is_readable($name))
                      {
                          $this->name = $info['basename'];
      // get MIME
                          $this->mime = mime_content_type($name);
      // load file
                          $content = file_get_contents($name);
                          if($content!==false)
                          {
                              $this->content = $content;
                          }
                          else
                          {
                              throw new Exception('Don`t get content - "'.$name.'"');
                          }
                      }
                      else
                      {
                          throw new Exception('Error param');
                      }
                 }
                 else
                 {
                         $this->name = $name;
                         if(is_null($mime)) $mime = mime_content_type($name);
                         $this->mime = $mime;
                         $this->content = $content;
                  };
            }
       
          public function Name() { return $this->name; }
       
          public function Mime() { return $this->mime; }
       
          public function Content() { return $this->content; }
       
      }
       
      class connecting_to_yemot_api
      {
          public $token;
       
          const URL = URL;
       
          public function __construct($user_name, $password)
          {
              $body = array('username' => $user_name, 'password' => $password);
       
              $body = http_build_query($body);
       
              $opts = array('http' => array(
       
                  'method'  => 'POST',
       
                  'header'  => "Content-Type: application/x-www-form-urlencoded",
       
                  'content' => $body,
       
                  'follow_location' => false) );
       
               $context  = stream_context_create($opts);
       
               $url = self::URL.'Login';
       
                  $result = file_get_contents($url, FALSE, $context);
       
                  $result = json_decode($result);
       
                  if($result -> responseStatus == 'OK')
                  {
                      $this -> token = $result -> token;
       
                      return TRUE;
                  }
                  else
                  {
                      throw new Exception('שם המשתמש או הסיסמא של המערכת שגויים');
                  }
          }
       
          public function __destruct()
          {
              $this -> connecting('Logout');
          }
       
          public function connecting($action, $body = array())
          {
              $delimiter = '----'.uniqid();
       
              $body['token'] = $this -> token;
       
              $body = BodyPost::Get($body, $delimiter);
       
              $opts = array('http' =>
                      array(
                          'method'  => 'POST',
                          'header'  => 'Content-Type: multipart/form-data; boundary='.$delimiter,
                          'content' => $body,
                          'follow_location' => false
                          )
                        );
              $context  = stream_context_create($opts);
       
              $url = self::URL.$action;
       
              $result = file_get_contents($url, FALSE, $context);
       
              $headers = $this -> parseHeaders($http_response_header);
       
              if($headers['Content-Type'][0] == 'application/json')
              {
                  return json_decode($result);
              }
              else
              {
                  return $result;
              }
          }
       
          private function parseHeaders($headers)
          {
              // פונקציה שמקבלת מערך של שורות הכותרות
              // הפונקציה מפרקת את קבצי הקוקי לתת-מערך נפרד
       
       
              // מערך הכותרות
              $head = array();
       
              foreach( $headers as $k=>$v )
              {
                  $t = explode( ':', $v, 2 );
       
                  if( isset( $t[1] ) )
                  {
                      if($t[0] == 'Set-Cookie')
                      {
                          $CookiesArr = array();
       
                          $cookies = explode( ';', $t[1]);
       
                          foreach($cookies as $cookie)
                          {
                              $c = explode( '=', $cookie);
       
                              if( isset( $c[1] ) )
                              {
                                  $CookiesArr[ trim($c[0]) ] = trim( $c[1] );
                              }
                              else
                              {
                                  $CookiesArr[] = trim( $c[0] );
                              }
                          }
       
                          $head[ trim($t[0]) ] = $CookiesArr;
                      }
                      elseif($t[0] == 'Content-Type')
                      {
                          $arr = array();
       
                          $children = explode( ';', $t[1]);
       
                          foreach($children as $child)
                          {
                              $c = explode( '=', $child);
       
                              if( isset( $c[1] ) )
                              {
                                  $arr[ trim($c[0]) ] = trim( $c[1] );
                              }
                              else
                              {
                                  $arr[] = trim( $c[0] );
                              }
                          }
       
                          $head[ trim($t[0]) ] = $arr;
                      }
                      else
                      {
                          $head[ trim($t[0]) ] = trim( $t[1] );
                      }
                  }
                  else
                  {
                      $head[] = $v;
                      if( preg_match( "#HTTP/[0-9\.]+\s+([0-9]+)#",$v, $out ) )
                      {
                          $head['reponse_code'] = intval($out[1]);
                      }
                  }
              }
              return $head;
          }
      }
      $con = new connecting_to_yemot_api('0790000000','1234');
      $token = "0790000000:1234";
      $path = "ivr2:***";
      // פונקציה למספרי קבצים עוקבים
      function FileNameToUpload($server, $token, $path){
      	$array = json_decode(file_get_contents("https://$server.call2all.co.il/ym/api//GetIVR2Dir?token=$token&path=$path"),true);
      	if($array["responseStatus"] == "OK"){
      		foreach($array["files"] as $key => $value){
      			if($value["fileType"] == "AUDIO" || $value["fileType"] == "TTS"){
      				$split = explode(".",$value["name"]);
      				if (is_numeric($split[0])){		
      					break;
      				}
      			}
      		}
      		if($split[0] == null){
      			$NewFileName = 0;
      		}else{
      			$NewFileName = $split[0]+1;
      		}
      		//הפוך למינימום 3 ספרות/
      		return str_pad($NewFileName,3,"0",STR_PAD_LEFT);
      	}else{
      	//במקרה של שגיאה
          echo "שגיאה";
       
      	}
      }
          // קריאה לפונקציה.
      $NewFileName = FileNameToUpload($server,$token,$path);
      if($NewFileName != null){
        //מכריז על שם של נתיב הקובץ להעלאה
      $path_name = "$path/$NewFileName.wav";
       }
       $File_list = $con -> connecting('GetIvrTree',[
          'path' =>$path,
               ] 
      );
       
      //אינדקס
      $i = 0;
      //הכנת מערך
      $noarray_tst=array();
      $obj =  $File_list;
       
      //פונקציה להמרה למערך
      foreach ($obj->items as $value){
            {
              $mynewvalue = $value->name;
             //הורדת סיומת קובץ
             $path_parts = pathinfo($mynewvalue);
             $path_parts =  $path_parts['filename'];
             $noarray_tst[$i] = $path_parts;
             $i ++;
            }
      }; 
      // חישוב לקבלת מספר קובץ הגדול ביותר 
      $e = $i -2;
      echo "מספר קובץ: <b> $noarray_tst[$e] </b> <br/> ";
       
       
       
       
       
       $File = new oFile('ext.ini', 'text/plain', file_get_contents("C:\Users\PC\Downloads/Lesson_Number_55.mp3"));
       
       $Upload_order = $con -> connecting('UploadFile',
       [
        'path' =>$path_name,
        'convertAudio' => 1,
        'fileUpload' => $File
       ]
      );
       
       
       
      $File_list = $con -> connecting('GetIvrTree',[
          'path' =>$path,
               ] 
      );
       
      //אינדקס
      $i = 0;
      //הכנת מערך
      $noarray_tst=array();
      $obj =  $File_list;
       
      //פונקציה להמרה למערך
      foreach ($obj->items as $value){
            {
              $mynewvalue = $value->name;
             //הורדת סיומת קובץ
             $path_parts = pathinfo($mynewvalue);
             $path_parts =  $path_parts['filename'];
             $noarray_tst[$i] = $path_parts;
             $i ++;
            }
      }; 
      // חישוב לקבלת מספר קובץ הגדול ביותר 
      $e = $i -2;
      echo "מספר קובץ: <b> $noarray_tst[$e] </b> <br/> ";
      
      פורסם בפורום מפתחים API
      A
      ASS
    • RE: ביטול תפריט לאחר שמיעת פרטי ההודעה

      @33064325
      תודה!
      עובד מצויין....
      רק שבמקרה שלי ההודעה שהיה צריך להחליף לשקט זה : M1481 .
      לטובת המשתמשים:
      את ההקלטה השקטה הורדתי מכאן.
      בשביל להחליף לשקט צריך להכנס לניהול (מערכת תוכן)>הודעות, ולחפש את מספר הקובץ, (במערכת ניהול הישנה מספר הקובץ מופיע במעבר עכבר על האייקון של הסימן קריאה).
      ללחוץ על העלאת קובץ חלופי, ולהעלות את הקובץ השקט שהורדנו.

      תודה ל@33064325 על העזרה.

      פורסם בעזרה הדדית למשתמשים מתקדמים
      A
      ASS
    • RE: קבלת כמות הקבצים שנמצאים בשלוחה ב api

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

      פורסם בשאלות ועזרה הדדית
      A
      ASS
    • RE: מדריך התחלת עבודה עם API של ימות משיח (חלק ב').

      @לולב-ואתרוג אמר במדריך התחלת עבודה עם API של ימות משיח (חלק ב').:

      היכן אני מכניס את הפקודה הזו?

      שלום @לולב-ואתרוג,
      ראשית זאת לא פקודה אלא משתנה שהערך שלו זה פרמטר הנתיב, כלומר אתה מגדיר לתוכנה מראש להיכן להעלות את הקובץ.

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

      ואיך אני מפנה לשלוחה 1 תחת השלוחה הראשית?

      פשוט ככה:

      $path = "ivr2:1";
      

      או:

      $path = "ivr2:/1";
      

      ואיך אני מפנה לשלוחה 1 תחת השלוחה הראשית?

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

      פורסם בפורום מפתחים API
      A
      ASS
    • RE: הפרוייקט השיתופי הושלם, וישמש את מאות אלפי בני התורה!

      @eliyahu
      תודה.
      שם הדומיין הזה נבחר כברירת מחדל כשהפיתוח של הפרוייקט התחיל.
      בקרוב מאוד נחליף את הדומיין (קצת עבודה לשנות את כל הקישורים :)).
      הדומיין החדש יהיה : search-phone.co.il (עדיין לא פעיל).

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