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



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

    אני בס"ד הוספתי את המחלקות החדשות.

    /*================יצירת אובייקט(מופע) חדש====================*/
    
    $con = new connecting_to_yemot_api('0773137770', '0000');
    
    /*================עריכת פרטי מנהל המערכת====================*/
    
    $body = array
    
    (
    
    // שם לקוח
    'name' => 'מנחם',
    
    //כתובת המייל
    'email' => '[email protected]',
    
    // שם ארגון
    'organization' => 'אהבת ישראל',
    
    //שם איש קשר
    'contactName' => 'פליישער',
    
    // טלפון ליצירת קשר
    'phones' => '0534100432',
    
    //חשבונית על שם...
    'invoiceName' => 'שירותי התוכן היהודי',
    
    //כתובת למשלוח חשבונית
    'invoiceAddress' => 'תל אביב',
    
    //פקס
    'fax' => '0771234567',
    );
    
    $a = $con -> connecting('SetCustomerDetails', $body);
    
    print_r($a);
    
    /*===============================================================*/
    
    /*================קבלת רשימת קבצים שבשלוחה====================*/
    
    $body = array
    
    (
    'path' => 'ivr2:1',
    );
    
    $a = $con -> connecting('GetIvrTree', $body);
    
    
    //בשביל להדפיס את התשובה שהתקבלה מימות
    
    echo $a->responseStatus;
    
    //בשביל להדפיס את מספר השלוחה הנוכחית
    
    echo $a->thisPath;
    
    //בשביל להדפיס את מספר השלוחה ההורה
    
    echo $a->parentPath;
    
    
    
    //כאן רץ מערך שצריך להריץ בforeach כך שכל הנתונים יוצגו אך ניתן להדפיס רק אבר אחד מן המערך וזאת ע"י המספר שלו. המיון מבתבצע לפי א-ב האנגלית
    
    
    
    // האם קיים
    echo $a->items[0]->exists;
    
    // שם הקובץ
    echo $a->items[1]->name;
    
    // מספר id מיוחד
    echo $a->items[2]->uniqueId;
    
    // סוג קובץ
    echo $a->items[3]->fileType;
    
    // גודל הקובץ
    echo $a->items[4]->size;
    
    // תאריך יצירת הקובץ
    echo $a->items[5]->mtime;
    
    // אורך הקובץ גירסא 1
    echo $a->items[6]->duration;
    
    // אורך הקובץ בשעות ודקות
    echo $a->items[7]->durationStr;
    
    // מספר המערכת
    echo $a->items[8]->customerDid;
    
    // שם הקובץ המקורי לפני העלתו
    echo $a->items[9]->meta->title;
    
    // תאריך שינוי אחרון
    echo $a->items[10]->date;
    
    // יוצר הקובץ
    echo $a->items[11]->source;
    
    // טלפון יוצר הקובץ במידה והוא יצר
    echo $a->items[12]->phone;
    
    // כתובת ip יוצר הקובץ
    echo $a->items[13]->ip;
    
    // מספר השלוחה המלאה
    echo $a->items[14]->what;
    
    
    //בforeach 
    
    foreach($a->items as $b){
    // האם קיים
    echo $b->exists;
    
    // שם הקובץ
    echo $b->name;
    
    // מספר id מיוחד
    echo $b->uniqueId;
    
    // סוג קובץ
    echo $b->fileType;
    
    // גודל הקובץ
    echo $b->size;
    
    // תאריך יצירת הקובץ
    echo $b->mtime;
    
    // אורך הקובץ גירסא 1
    echo $b->duration;
    
    // אורך הקובץ בשעות ודקות
    echo $b->durationStr;
    
    // מספר המערכת
    echo $b->customerDid;
    
    // שם הקובץ המקורי לפני העלתו
    echo $b->meta->title;
    
    // תאריך שינוי אחרון
    echo $b->date;
    
    // יוצר הקובץ
    echo $b->source;
    
    // טלפון יוצר הקובץ במידה והוא יצר
    echo $b->phone;
    
    // כתובת ip יוצר הקובץ
    echo $b->ip;
    
    // מספר השלוחה המלאה
    echo $b->what;
    }
    print_r($a);
    
    /*===============================================================*/
    
    /*================העתקת,העברת,מחיקת קובץ====================*/
    
    $body = array
    
    (
    
    //סוג הפעולה:move | copy |  (בפקודה זו לא צריך לכתוב target)delete
    'action' => 'copy',
    //שלוחה מלאה והקובץ ממנה המוצא. *שימו לב שבמקום ivr/ יש לכתוב ivr2:
    'what' => 'ivr2:1/ext.ini',
    //שלוחה מלאה והקובץ ממנה היעד *שימו לב יש לכתוב אך ורק שלוחה שכבר קיימת
    'target' => 'ivr2:4584/ext.ini',
    );
    
    $a = $con -> connecting('FileAction', $body);
    
    print_r($a);
    
    /*===============================================================*/
    
    /*================קבלת תוכן קובץ טקסט====================*/
    
    $body = array
    
    (
    //מספר השלוחה והקובץ המלא. שימו לב לשינוי לivr2: במקום ivr/
    'what' => 'ivr2:2/ext.ini',
    );
    
    $a = $con -> connecting('GetTextFile', $body);
    
    
    //בשביל להדפיס את התשובה שהתקבלה מימות
    echo $a->responseStatus;
    
    //בשביל להדפיס את תכולת הטקסט
    echo $a->contents;
    
    //בשביל לומר האם הקובץ קיים
    echo $a->file->exists;
    
    //בשביל להדפיס את שם הקובץ
    echo $a->file->name;
    
    //בשביל להדפיס את הקוד הייחודי של הקובץ
    echo $a->file->uniqueId;
    
    //בשביל להדפיס את סוג הקובץ
    echo $a->file->fileType;
    
    //בשביל להדפיס את גודל הקובץ
    echo $a->file->size;
    
    //בשביל להדפיס את תאריך יצירת הקובץ
    echo $a->file->mtime;
    
    //בשביל להדפיס את כתובת השלוחה המלאה
    echo $a->file->what;
    
    print_r($a);
    /*===============================================================*/
    
    /*================קבלת רשימת שיחות נכנסות====================*/
    
    $a = $con -> connecting('GetIncomingCalls');
    
    
    //בשביל להדפיס את התשובה שהתקבלה מימות
    echo $a->responseStatus;
    
    //מספר המערכת
    echo $a->did;
    
    //מספר המתקשרים שנמצאים בזמן אמת על המערכת
    echo $a->callsCount;
    
    //כאן רץ מערך שצריך להריץ בforeach כך שכל הנתונים יוצגו אך ניתן להדפיס רק אבר אחד מן המערך וזאת ע"י המספר שלו. 
    
    // המספר אליו חייגו
    echo $a->calls[0]->did;
    
    // המספר המחייג
    echo $a->calls[0]->callerIdNum;
    
    // מספר השניות שנמצא במערכת
    echo $a->calls[0]->duration;
    
    // מערכת המעבירה את השיחה במידה וקיים
    echo $a->calls[0]->transferFrom;
    
    // מספר id 
    echo $a->calls[0]->id;
    
    // מיקום המתקשר/ת במערכת
    echo $a->calls[0]->path;
    
    
    
    //בforeach 
    
    foreach($a->calls as $b){
    
    // המספר אליו חייגו
    echo $b->did;
    
    // המספר המחייג
    echo $b->callerIdNum;
    
    // מספר השניות שנמצא במערכת
    echo $b>duration;
    
    // מערכת המעבירה את השיחה במידה וקיים
    echo $b->transferFrom;
    
    // מספר id 
    echo $b->id;
    
    // מיקום המתקשר/ת במערכת
    echo $b->path;
    
    }
    print_r($a);
    
    /*===============================================================*/
    
    /*================קבלת מספר היחידות====================*/
    
    $a = $con -> connecting('GetSession');
    
    print_r($a);
    
    /*===============================================================*/
    
    /*================הפעלת קמפיין====================*/
    
    $body = array
    (
    // מספר הקמפיין
    'templateId' => '203584',
    );
    
    $a = $con -> connecting('RunCampaign', $body);
    
    print_r($a);
    /*===============================================================*/
    
    /*================הורדת קובץ====================*/
    
    $body = array
    (
    // נתיב הקובץ
    'path' => 'ivr/ext.ini',
    );
    
    $a = $con -> connecting('DownloadFile', $body);
    
    print_r($a);
    
    /*===============================================================*/
    
    /*================העלאת קובץ====================*/
    
    // יצירת הקובץ
    $File = new oFile('ext.ini', 'text/plain', 'type=menu');
    
    $body = array
    (
    'path' => 'ivr/ext.ini',
    'convertAudio' => 0,
    'fileUpload' => $File
    );
    
    $a = $con -> connecting('UploadFile', $body);
    
    print_r($a);
    
    /*===============================================================*/
    

    להלן המחלקה:

    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 = 'https://www.call2all.co.il/ym/api/';
    
        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;
        }
    }
    


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



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

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

    בוצע.



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



  • איזה שפה זה?
    איך ממירים את זה לכתובת 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=/



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



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



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

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

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



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

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

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

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

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



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


  • ניהול

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





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


  • ניהול

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

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

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

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

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



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


  • ניהול

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



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



  • למשתמשי נוד:
    יש את המחלקה הזאת ב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);
    
    })();
    


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



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

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

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


התחבר כדי לפרסם תגובה