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

    מחלקה של תקשורת עם ימות API

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

      ברוכים הבאים למחלקה לתקשורת עם ימות API בקלות ובמהירות!

      התיעודים נלקחו מכאן


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

      /*================התחברות רגיל====================*/
      $con = new connecting_to_yemot_api('0773137770', '0000',false);
      
      /*================התחברות פריווט====================*/
      $con = new connecting_to_yemot_api('0773137770', '0000',true);
      

      ולאחר מכן נוסיף את הפקודה הרצוייה ואת הפרמטרים הרצויים ונכניס למשתנה $a:

      $a = $con -> connecting('PKUDA',[
      "key"=>"value",
      "key"=>"value"
      ]);
      

      התשובה מהשרת (ניתן לדעת כל תשובה על ידי מעבר ספציפית לכל פונקצייה לתיעוד בAPI)


      מצורפים כאן כל הפונקציות


      קבלת פרטי המערכת

      $a = $con -> connecting('GetSession',[]);
      

      שינוי סיסמת ניהול

      $a = $con -> connecting('SetPassword', [
      "password"=>"סיסמת הניהול הנוכחית", 
      "newPassword"=>"סיסמה חדשה"
      ]);
      

      קבלת רשימת חיובי יחידות

      $a = $con -> connecting('GetTransactions',[
      "from"=>"מאיזה תנועה להציג",
      "limit"=>"מספר מרבי של תנועות שיש לכלול"
      ]);
      

      העברת יחידות

      $a = $con -> connecting('TransferUnits',[
      "destination"=>"מספר מערכת להעברה",
       "amount"=>"כמות יחידות להעברה"
      ]);
      

      קבלת רשימת שיחות הפעילות במערכת

      $a = $con -> connecting('GetIncomingCalls',[]);
      

      העלאת קובץ

      //טקסט ישירות
      $File = new oFile('ext.ini', 'text/plain', 'type=menu');
      //קובץ מלינק
      $File = new oFile('ext.ini', 'text/plain', file_get_contents("https://"));
      
      $a = $con -> connecting('UploadFile',[
      'path' => 'ivr/ext.ini',
      'convertAudio' => 0,
      'fileUpload' => $File
      ]);
      
      

      הורדת קובץ

      $a = $con -> connecting('DownloadFile',[
      "path"=>"ivr/1/000.wav"
      ]);
      

      קבלת מצב כל תבניות הקמפיינים

      $a = $con -> connecting('GetTemplates',[]);
      

      עדכון תבנית קמפיין

      $a = $con -> connecting('UpdateTemplate',[
      "templateId"=>"מזהה תבנית	פרמטר חובה",
      "description"=>"תיאור התבנית",
      "callerId"=>"זיהוי שיחה יוצאת",
      "incomingPolicy"=>"מדיניות שיחות נכנסות - רלוונטי לקמפיין ברירת המחדל בלבד. (OPEN BLACKLIST WHITELIST BLOCKED)",
      "customerDefault"=>"האם להגדיר כקמפיין ברירת המחדל אם כן, יש להגדיר 1. אם לא, יש להגדיר קמפיין אחר",
      "maxActiveChannels"=>"הגבלת קווים מחייגים",
      "maxBridgedChannels"=>"הגבלת קווים מנותבים",
      "originateTimeout"=>"זמן חיוג מקסימלי - בשניות",
      "vmDetect"=>"האם להפעיל את האפשרות של זיהוי תא קולי	במידה וכן, יש להגדיר 1. במידה ולא, יש להגדיר 0",
      "filterEnabled"=>"האם להפעיל את האפשרות של קמפיין ממספרים אישיים	במידה וכן, יש להגדיר 1. במידה ולא, יש להגדיר 0",
      "maxDialAttempts"=>"ניסיונות חיוג",
      "redialWait"=>"המתנה בין נסיונות חיוג - בשניות",
      "redialPolicy"=>"מדיניות חיוגים חוזרים. ישנם 3 מצבים - NONE CONGESTIONS FAILED",
      "yemotContext"=>"סוג הקמפיין. ישנם 5 מצבים - SIMPLE REPEAT MESSAGE VOICEMAIL BRIDGE",
      "bridgeTo"=>"מספר הטלפון לניתוב",
      "playPrivateMsg"=>"האם להפעיל את האפשרות של מצב הודעה פרטית	במידה וכן, יש להגדיר 1. במידה ולא, יש להגדיר 0",
      "removeRequest"=>"אפשרויות הסרה. קיימים 2 מצבים - SILENT WITH_MESSAGE"
      ]);
      

      להלן המחלקה:

      $SetSite = $_GET["SetSite"];
      	if ($SetSite == NULL) {
      	define("URL", "https://www.call2all.co.il/ym/api/");
      }
      	if ($SetSite == "private") {
      	define("URL", "https://www.private.call2all.co.il/ym/api/");
      }
      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;
          }
      }
      
      

      אהבת ישראל & ivrTOP - מרכזייה טלפונית חכמה.
      אתר: אהבת.ישראל | מייל: cs@ivrtop.com

      א P 2 תגובות תגובה אחרונה תגובה ציטוט 13
      • א
        איש ימיני @מ. מ. פליישער נערך לאחרונה על ידי

        @מ-מ-פליישער
        יש לך את אפשרויות החדשות של ה-API הרשמי?
        המחלקה הוא רק על האפשרויות הישנות

        מ. מ. פליישער תגובה 1 תגובה אחרונה תגובה ציטוט 0
        • מ. מ. פליישער
          מ. מ. פליישער ניהול @איש ימיני נערך לאחרונה על ידי

          @איש-ימיני אמר במחלקה של תקשורת עם ימות API:

          @מ-מ-פליישער
          יש לך את אפשרויות החדשות של ה-API הרשמי?
          המחלקה הוא רק על האפשרויות הישנות

          בוצע.

          אהבת ישראל & ivrTOP - מרכזייה טלפונית חכמה.
          אתר: אהבת.ישראל | מייל: cs@ivrtop.com

          א אהרן שובקס 2 תגובות תגובה אחרונה תגובה ציטוט 2
          • א
            איש ימיני @מ. מ. פליישער נערך לאחרונה על ידי

            @מ-מ-פליישער
            תודה רבה!!

            תגובה 1 תגובה אחרונה תגובה ציטוט 0
            • ה
              הוי דן נערך לאחרונה על ידי הוי דן

              איזה שפה זה?
              איך ממירים את זה לכתובת URL (ישירות מהדפדפן)?
              כמו זה:

              https://www.call2all.co.il/ym/api/UploadTextFile?token=079XXXXXXX:XXXX&what=ivr2:/1/ext.ini&contents=type=say_hour_and_minute end_goto=/

              תגובה 1 תגובה אחרונה תגובה ציטוט 0
              • ח
                חסידישער נערך לאחרונה על ידי

                ואפה שמים את כל ההגדרות

                תגובה 1 תגובה אחרונה תגובה ציטוט 0
                • P
                  p03121997 @מ. מ. פליישער נערך לאחרונה על ידי p03121997

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

                  מ. מ. פליישער תגובה 1 תגובה אחרונה תגובה ציטוט 0
                  • מ. מ. פליישער
                    מ. מ. פליישער ניהול @p03121997 נערך לאחרונה על ידי

                    @p03121997 אמר במחלקה של תקשורת עם ימות API:

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

                    זה מחלקה לשימוש בphp למי שיש שרת אחסון באינטרנט של php יכול להשתמש בזה

                    אהבת ישראל & ivrTOP - מרכזייה טלפונית חכמה.
                    אתר: אהבת.ישראל | מייל: cs@ivrtop.com

                    P תגובה 1 תגובה אחרונה תגובה ציטוט 2
                    • P
                      p03121997 @מ. מ. פליישער נערך לאחרונה על ידי

                      @מ-מ-פליישער אמר במחלקה של תקשורת עם ימות API:

                      @p03121997 אמר במחלקה של תקשורת עם ימות API:

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

                      זה מחלקה לשימוש בphp למי שיש שרת אחסון באינטרנט של php יכול להשתמש בזה

                      ומה עם האלפון?

                      תגובה 1 תגובה אחרונה תגובה ציטוט 0
                      • ע
                        עידן נערך לאחרונה על ידי

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

                        אהרן שובקס חנון המרבה A 3 תגובות תגובה אחרונה תגובה ציטוט 0
                        • אהרן שובקס
                          אהרן שובקס ניהול @עידן נערך לאחרונה על ידי אהרן שובקס

                          @עידן
                          מה זה קשור לפה?
                          תפתח נושא חדש!

                          תגובה 1 תגובה אחרונה תגובה ציטוט 1
                          • חנון המרבה
                            חנון המרבה @עידן נערך לאחרונה על ידי

                            @עידן https://freeivr.co.il/oldforum//f2//viewtopic.php?f=12&t=2844

                            ע תגובה 1 תגובה אחרונה תגובה ציטוט 2
                            • ע
                              עידן @חנון המרבה נערך לאחרונה על ידי עידן

                              @חנון-המרבה חזק מאד אולי צריך לשים את הקישור הזה באיזשהו מקום בפורום API

                              תגובה 1 תגובה אחרונה תגובה ציטוט 0
                              • אהרן שובקס
                                אהרן שובקס ניהול @מ. מ. פליישער נערך לאחרונה על ידי אהרן שובקס

                                @מ-מ-פליישער או מישהו אחר
                                אולי תוכל לעזור לי הגדרתי ככה:

                                foreach($a->calls as $b){
                                    if ($b->path==4){{
                                

                                וזה עובד מצוין אבל אם אני מגדיר ככה:

                                $ff=$_GET['bbb'];
                                foreach($a->calls as $b){
                                    if ($b->path==$ff){
                                

                                אז הוא לא קולט שזה 4

                                ש תגובה 1 תגובה אחרונה תגובה ציטוט 0
                                • ש
                                  שלמה צובל @אהרן שובקס נערך לאחרונה על ידי

                                  @אהרן-שובקס @איש-ימיני ו @מאזין-נלהב ודאי ידעו לעזור פה..

                                  אהרן שובקס תגובה 1 תגובה אחרונה תגובה ציטוט 0
                                  • אהרן שובקס
                                    אהרן שובקס ניהול @שלמה צובל נערך לאחרונה על ידי אהרן שובקס

                                    @שלמה-צובל
                                    ב"ה הסתדרתי בעזרת @אלחנן1
                                    הבעיה היא שאת מיקום המאזין מקבלים עם רווח זאת אומרת אם המאזין נמצא בשלוחה 4 אז מקבלים "4 " @מ-מ-פליישער לבדיקתך

                                    ע D 2 תגובות תגובה אחרונה תגובה ציטוט 1
                                    • ע
                                      עידן @אהרן שובקס נערך לאחרונה על ידי עידן

                                      @אהרן-שובקס אז בקרוב זה הולך לצאת לציבור ? 😝

                                      תגובה 1 תגובה אחרונה תגובה ציטוט 1
                                      • מ
                                        מאזין נלהב נערך לאחרונה על ידי

                                        למשתמשי נוד:
                                        יש את המחלקה הזאת בjs.
                                        https://github.com/MusiCode1/yemot-api

                                        התקנה:

                                         npm i yemot-api
                                        
                                        const yemot_api = require("yemot-api");
                                        
                                        (async () => {
                                        
                                        	const y = new yemot_api("0773137770", "1234");
                                        
                                        	let r;
                                        
                                        	/** קבלת מספר יחידות */
                                        	r = await y.exec("GetSession");
                                        
                                        	console.log(r);
                                        
                                        	/** העלאת קובץ */
                                        	let o = {
                                        
                                        		file: {
                                        			value: "12345",
                                        			options: {
                                        				filename: "123.txt",
                                        				contentType: "text/txt"
                                        			}
                                        		},
                                        		path: "ivr/123.txt"
                                        	};
                                        
                                        	r = await y.exec("UploadFile", o);
                                        
                                        	console.log(r);
                                        
                                        	/** הורדת קובץ */
                                        	o = {
                                        		path: "ivr/123.txt"
                                        	};
                                        
                                        	r = await y.exec("DownloadFile", o);
                                        
                                        	console.log(r);
                                        
                                        })();
                                        
                                        תגובה 1 תגובה אחרונה תגובה ציטוט 6
                                        • D
                                          dudu @אהרן שובקס נערך לאחרונה על ידי

                                          @אהרן-שובקס איך אפשר לדעת בשרת מה מקבלים?
                                          איך אפשר לעקוב בזמן אמת מה נתונים שיש בשרת?
                                          איך מדבגים בphp?

                                          תגובה 1 תגובה אחרונה תגובה ציטוט 0
                                          • ב
                                            באמת נערך לאחרונה על ידי

                                            @dudu אמר במחלקה של תקשורת עם ימות API:

                                            @אהרן-שובקס איך אפשר לדעת בשרת מה מקבלים?
                                            איך אפשר לעקוב בזמן אמת מה נתונים שיש בשרת?
                                            איך מדבגים בphp?

                                            תעשה שמירה לקובץ ותפעיל את השלוחה לפחות פעם אחת דרך הטלפון

                                            D תגובה 1 תגובה אחרונה תגובה ציטוט 0
                                            • פוסט ראשון
                                              פוסט אחרון