מחלקה של תקשורת עם ימות API
-
ברוכים הבאים למחלקה לתקשורת עם ימות 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; } }
-
@מ-מ-פליישער
יש לך את אפשרויות החדשות של ה-API הרשמי?
המחלקה הוא רק על האפשרויות הישנות -
@איש-ימיני אמר במחלקה של תקשורת עם ימות API:
@מ-מ-פליישער
יש לך את אפשרויות החדשות של ה-API הרשמי?
המחלקה הוא רק על האפשרויות הישנותבוצע.
-
@מ-מ-פליישער
תודה רבה!! -
איזה שפה זה?
איך ממירים את זה לכתובת URL (ישירות מהדפדפן)?
כמו זה: -
ואפה שמים את כל ההגדרות
-
@מ-מ-פליישער אם אפשר הסבר מה זה הדבר הזה לא הבנתי מה זה מחלקה ומה זה כל ההגדרות האלו (ודרך אגב מנחם מה עם האלפון אני לא מצליח להשתמש איתו)
-
@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?תעשה שמירה לקובץ ותפעיל את השלוחה לפחות פעם אחת דרך הטלפון