@עידו @צבי-ד-צ @יב @CUBASE
לתועלת הרבים אני מעלה פה בס"ד קוד משודרג!!
הקוד כמובן מתבסס על הקוד הבסיסי ש @עידו היקר העלה פה!
ויש כאן 4 שידרוגים חשובים
-
בשאילתה יש אפשרות לקבוע איזו פעולה לעשות (להוסיף / לחסום /להחליף) - (שימו לב: פונקציית "מחיקה" כרגע לא פעילה, - אולי בהמשך אעלה בעז"ה תיקון לפונקצייה הזו).
-
בנוסף יש אפשרות בפעולה אחת לבחור כמה רשימות "מקור" (ללא הגבלה) וכן אפשר לבחור כמה רשימות "יעד" (ללא הגבלה), - ולבצע את העתקת כל המספרים שנשלפו מכל המקורות שנבחרו, לכל היעדים שנבחרו,
(שימו לב: אין אפשרות לפצל ביניהם, אלא הפעולה היא מכל המקורות לכל היעדים).
-
ישנה אפשרות להכניס את הפרמטרים לתוך הגדרות השלוחה, ואז ניתן לבצע את הכל דרך הטלפון...
להלן מה שצריך להכניס לשלוחה
type=api
api_link=http://164XXXXXXXXXXXXXXXXtfuza.php
טוקן
api_add_0=token=0999999999:123456
איזו פעולה לבצע
api_add_1=action=add
4 אפשרויות:
להוסיף add / למחוק remove /לחסום block / להחליף את המספרים הישנים בחדשים replace
רשימת מקור
api_add_2=source1=255510
אפשר להוסיף מקורות ע"י source2 וכן הלאה
רשימת יעד
api_add_3=target1=255739
אפשר להוסיף יעדים ע"י target2 וכן הלאה
(אפשר להשתיק את הודעת "אין מענה משרת API" - הפעולה מתבצעת בלי תשובה מהשרת)
- מי שמשתמש הרבה פעמים בהעברות בין רשי"ת קבועות, - ואין לו זמן וכח למלא כל פעם את השאילתה מחדש, יכול ליצור לעצמו באופן חד פעמי לינק, שיבצע את הכל בלחיצה אחת,
הלינק צריך להיות כך:
.http://164XXXXXXXXXXXXXXXXtfuza.php?token=0799999999:123456&action=add&source1=11122&target1=22233
מצו"ב תמונה של השאילתה המעודכנת:

וכמובן צריך שרת להכניס שם את הקוד, ולהלן הקוד המשודרג:
<?php
// משתנים עיקריים
$success = '';
$error = '';
$resultMsg = '';
$removedCount = 0;
$blockedCount = 0;
$transferredCount = 0;
// קבלת פרמטרים מהמשתמש (GET/POST)
$request = array_merge($_GET, $_POST);
$action = $request['action'] ?? '';
$token = $request['token'] ?? '';
// קבלת מקורות ויעדים כמערכים
$sources = [];
$targets = [];
// תמיכה בפרמטרים בודדים או מערכים
foreach ($request as $key => $value) {
if (preg_match('/^source(\d+)$/', $key) && trim($value) !== '') {
$sources[] = trim($value);
}
}
if (isset($request['sources']) && is_array($request['sources'])) {
foreach ($request['sources'] as $src) {
if (trim($src) !== '') $sources[] = trim($src);
}
}
foreach ($request as $key => $value) {
if (preg_match('/^target(\d+)$/', $key) && trim($value) !== '') {
$targets[] = trim($value);
}
}
if (isset($request['targets']) && is_array($request['targets'])) {
foreach ($request['targets'] as $tgt) {
if (trim($tgt) !== '') $targets[] = trim($tgt);
}
}
// ביצוע פעולה רק אם כל הנתונים קיימים
if ($_SERVER['REQUEST_METHOD'] === 'POST' || !empty($_GET)) {
if ($token && count($sources) > 0 && count($targets) > 0 && in_array($action, ['add','remove','block','replace'])) {
// פונקציית עזר לשליחת בקשה ל-API
function apiRequest($url, $data) {
$curl = curl_init($url);
curl_setopt_array($curl, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query($data),
]);
$response = curl_exec($curl);
curl_close($curl);
return json_decode($response, true);
}
// שליפת כל המספרים מכל המקורות (ללא כפילויות), כולל rowid
$allNumbers = [];
foreach ($sources as $sourceId) {
$getUrl = 'https://www.call2all.co.il/ym/api/GetTemplateEntries';
$getResponse = apiRequest($getUrl, [
'token' => $token,
'templateId' => $sourceId,
]);
if (isset($getResponse['entries'])) {
foreach ($getResponse['entries'] as $entry) {
$phone = $entry['phone'];
$allNumbers[$phone] = [
'phone' => $phone,
'name' => $entry['name'] ?? '',
'moreinfo' => $entry['moreinfo'] ?? '',
'blocked' => $entry['blocked'] ? 1 : 0,
'rowid' => $entry['rowid'] ?? '', // נוסיף את rowid
];
}
}
}
// ביצוע הפעולה שבחר המשתמש
if ($action === 'replace') {
// אם נבחרה פעולה 'החלפה' - מנקים את כל המספרים מכל היעדים
$clearUrl = 'https://www.call2all.co.il/ym/api/ClearTemplateEntries';
foreach ($targets as $targetId) {
apiRequest($clearUrl, [
'token' => $token,
'templateId' => $targetId,
]);
}
}
if ($action === 'add' || $action === 'replace') {
// אם נבחרה פעולה 'הוספה' או 'החלפה' - מוסיפים את כל המספרים מהמקורות לכל היעדים
$updateUrl = 'https://www.call2all.co.il/ym/api/UpdateTemplateEntry';
foreach ($targets as $targetId) {
foreach ($allNumbers as $entry) {
apiRequest($updateUrl, [
'token' => $token,
'templateId' => $targetId,
'phone' => $entry['phone'],
'name' => $entry['name'],
'moreinfo' => $entry['moreinfo'],
'blocked' => $entry['blocked'],
]);
$transferredCount++;
}
}
$resultMsg = "בוצעה הוספה של $transferredCount מספרים.";
} elseif ($action === 'remove') {
// אם נבחרה פעולה 'מחיקה' - מוחקים את כל המספרים מהיעדים לפי rowid
$deleteUrl = 'https://www.call2all.co.il/ym/api/UpdateTemplateEntries';
foreach ($targets as $targetId) {
$rowids = [];
foreach ($allNumbers as $entry) {
if (!empty($entry['rowid'])) {
$rowids[] = $entry['rowid'];
}
}
if (count($rowids) > 0) {
apiRequest($deleteUrl, [
'token' => $token,
'templateId' => $targetId,
'rowids' => implode('-', $rowids),
'action' => 'delete',
]);
$removedCount += count($rowids);
}
}
$resultMsg = "בוצעה מחיקה של $removedCount מספרים.";
} elseif ($action === 'block') {
// אם נבחרה פעולה 'חסימה' - חוסמים את כל המספרים בכל היעדים
$blockUrl = 'https://www.call2all.co.il/ym/api/UpdateTemplateEntry';
foreach ($targets as $targetId) {
foreach ($allNumbers as $entry) {
apiRequest($blockUrl, [
'token' => $token,
'templateId' => $targetId,
'phone' => $entry['phone'],
'name' => $entry['name'],
'moreinfo' => $entry['moreinfo'],
'blocked' => 1, // חסום
]);
$blockedCount++;
}
}
$resultMsg = "בוצעה חסימה של $blockedCount מספרים.";
}
// שמירת הודעת הצלחה
$success = $resultMsg;
} else {
// אם חסר נתון - הודעת שגיאה מתאימה
$error = "יש למלא טוקן, לפחות מקור אחד ולפחות יעד אחד, ולבחור פעולה";
}
}
?>
<!DOCTYPE html>
<html lang="he">
<head>
<meta charset="UTF-8">
<title>ניהול רשימות תפוצה</title>
<style>
/* עיצוב בסיסי לטופס ולרכיבים */
body { font-family: sans-serif; direction: rtl; padding: 20px; max-width: 600px; margin: auto; }
label { display: block; margin-top: 10px; }
input[type="text"], input[type="number"] { width: 100%; padding: 8px; margin-top: 5px; }
button { margin-top: 20px; padding: 10px 20px; font-size: 16px; }
.msg { margin-top: 20px; font-weight: bold; }
select { width: 100%; padding: 8px; margin-top: 5px; }
.dynamic-list { margin-bottom: 10px; }
.dynamic-list input { width: 90%; display: inline-block; }
.dynamic-list button { width: 8%; display: inline-block; }
</style>
<script>
// פונקציה להוספת שדה מקור/יעד דינמית לטופס
// מוסיפה div עם שדה קלט וכפתור X להסרה
function addField(listId, inputName) {
var list = document.getElementById(listId);
var div = document.createElement('div');
div.className = 'dynamic-list';
div.innerHTML = '<input type="number" name="'+inputName+'[]" placeholder="הכנס מזהה"> <button type="button" onclick="this.parentNode.remove();">X</button>';
list.appendChild(div);
}
</script>
</head>
<body>
<h2>ניהול רשימות תפוצה</h2>
<form method="post">
<!-- שדה טוקן -->
<label>Token:
<input type="text" name="token" required>
</label>
<!-- שדות מקורות -->
<label>מקורות (ללא הגבלה):</label>
<div id="sources-list"></div>
<button type="button" onclick="addField('sources-list','sources')">הוסף מקור</button>
<!-- שדות יעדים -->
<label>יעדים (ללא הגבלה):</label>
<div id="targets-list"></div>
<button type="button" onclick="addField('targets-list','targets')">הוסף יעד</button>
<!-- בחירת פעולה -->
<label>פעולה:
<select name="action" required>
<option value="">בחר פעולה</option>
<option value="add">הוספה (העתקה)</option>
<option value="remove">מחיקה</option>
<option value="block">חסימה</option>
<option value="replace">החלפה (ניקוי ואז הוספה)</option>
</select>
</label>
<button type="submit">בצע פעולה</button>
</form>
<?php if (!empty($error)): ?>
<!-- הודעת שגיאה אם יש -->
<div class="msg" style="color: red;"> <?= htmlspecialchars($error) ?> </div>
<?php elseif (!empty($success)): ?>
<!-- הודעת הצלחה אם יש -->
<div class="msg" style="color: green;"> <?= htmlspecialchars($success) ?> </div>
<?php endif; ?>
<script>
// הוספת שדה ראשון אוטומטית למקורות וליעדים בעת טעינת הדף
addField('sources-list','sources');
addField('targets-list','targets');
</script>
</body>
</html>
בהצלחה גדולה!!