שילוב 1C-Bitrix עם Pushwoosh: התראות Push ותגיות
תארו לעצמכם: לחנות המקוונת שלכם ב-1C-Bitrix יש 50,000 משתמשים רשומים, אבל שיעור ההמרה לרכישה חוזרת הוא רק 12%. אתם מיישמים התראות push דרך אינטגרציה ישירה עם FCM — וחודש לאחר מכן אתם מבינים: הרבה קוד נכתב לשווא. פילוח לא עובד, חסרה לכם אנליטיקה, ותמיכה בפלטפורמות מובייל דורשת פתרונות נפרדים. נתקלנו בזה יותר מפעם אחת. לדוגמה, עבור רשת חנויות אלקטרוניקה, אינטגרציה עם Pushwoosh במקום FCM טהור קיצרה את זמן ההתקנה מ-8 ל-2 ימים ואפשרה התראות מותאמות אישית ללא פיתוח מותאם. החיסכון בתקציב הגיע עד 40%, והתוצאה הייתה עלייה של 30% ברכישות חוזרות בחודש הראשון. הזמינו אודיט — נעריך את הפרויקט שלכם.
Pushwoosh הוא שירות התראות push הבנוי על גבי FCM ו-APNs. הוא מספק API אחיד ל-web push, Android, iOS ו-Huawei. פלחים מובנים, בדיקות A/B ואנליטיקה חוסכים שעות של פיתוח. זמן טעינת ה-SDK הוא פחות משנייה. הניסיון שלנו: שילבנו את Pushwoosh עם Bitrix ביותר מ-10 פרויקטים, והפחתנו את עלויות העבודה פי 3 בהשוואה ל-FCM טהור. Pushwoosh מעבד התראות מהר יותר הודות לניתוב אופטימלי.
כיצד Pushwoosh מפשט שליחת התראות push
בניגוד לעבודה ישירה עם FCM ו-APNs, Pushwoosh מטפל בניתוב ובניהול המכשירים עבורכם. אתם רק צריכים לקשר את ה-hwid (מזהה חומרה) של Pushwoosh למשתמש Bitrix. למשתמש יחיד יכולים להיות מספר מכשירים. סכמת האינטראקציה: ה-SDK של Pushwoosh מקבל hwid ורושם את המכשיר, ואז דרך API אנו מקשרים את hwid ל-USER_ID. כאשר מתרחש אירוע (הזמנה, מבצע), קוד PHP שולח בקשה ל-API של Pushwoosh, אשר מעביר את ההתראה לכל מכשירי המשתמש. עד 70% מהמשתמשים נרשמים ל-push — גבוה יותר מניוזלטרים במייל.
אתחול Web SDK
הקוד שלהלן הוא סטנדרטי לכל פרויקט Bitrix. שימו לב: autoSubscribe: false — ההרשמה מתבקשת ידנית בלחיצה; זה מגדיל את ההמרה ועומד בדרישות 54-FZ (הסכמת משתמש). כמו כן, הציבו את קובץ ה-service worker /pushwoosh-service-worker.js בשורש האתר עם התוכן importScripts('https://cdn.pushwoosh.com/webpush/v3/pushwoosh-service-worker.js');.
<script src="https://cdn.pushwoosh.com/webpush/v3/pushwoosh-web-notifications.js"></script>
<script>
var Pushwoosh = Pushwoosh || [];
Pushwoosh.push(['init', {
logLevel: 'error',
applicationCode: 'XXXXX-YYYYY',
safariWebsitePushID: 'web.com.example.shop',
defaultNotificationTitle: 'Магазин Пример',
defaultNotificationImage: 'https://example.com/push-icon.png',
autoSubscribe: false,
serviceWorkerUrl: '/pushwoosh-service-worker.js',
}]);
Pushwoosh.push(function(api) {
api.onReady(function() {
api.getHWID().then(function(hwid) {
if (hwid) {
registerPushwooshDevice(hwid);
}
});
});
});
function registerPushwooshDevice(hwid) {
fetch('/local/api/pushwoosh/register', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-Bitrix-Csrf-Token': BX.bitrix_sessid()
},
body: JSON.stringify({
hwid: hwid,
platform: 'web'
})
});
}
document.getElementById('subscribe-push').addEventListener('click', function() {
Pushwoosh.push(function(api) {
api.subscribe().then(function() {
Pushwoosh.push(function(api) {
api.getHWID().then(registerPushwooshDevice);
});
});
});
});
</script> אחסון hwid ו-PHP client עבור Pushwoosh API
אנו משתמשים בטבלת highload block <script src="https://cdn.pushwoosh.com/webpush/v3/pushwoosh-web-notifications.js"></script> <script> var Pushwoosh = Pushwoosh || []; Pushwoosh.push(['init', { logLevel: 'error', applicationCode: 'XXXXX-YYYYY', safariWebsitePushID: 'web.com.example.shop', defaultNotificationTitle: 'Магазин Пример', defaultNotificationImage: 'https://example.com/push-icon.png', autoSubscribe: false, serviceWorkerUrl: '/pushwoosh-service-worker.js', }]); Pushwoosh.push(function(api) { api.onReady(function() { api.getHWID().then(function(hwid) { if (hwid) { registerPushwooshDevice(hwid); } }); }); }); function registerPushwooshDevice(hwid) { fetch('/local/api/pushwoosh/register', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-Bitrix-Csrf-Token': BX.bitrix_sessid() }, body: JSON.stringify({ hwid: hwid, platform: 'web' }) }); } document.getElementById('subscribe-push').addEventListener('click', function() { Pushwoosh.push(function(api) { api.subscribe().then(function() { Pushwoosh.push(function(api) { api.getHWID().then(registerPushwooshDevice); }); }); }); }); </script> לאחסון מיפויים. דוגמה ל-PHP client:
class PushwooshService {
private string $appCode;
private string $apiAccessToken;
private string $apiUrl = 'https://cp.pushwoosh.com/json/1.3/';
public function createMessage(array $recipientHwids, string $content, array $extra = []): array {
$payload = [
'request' => [
'application' => $this->appCode,
'auth' => $this->apiAccessToken,
'notifications' => [[
'send_date' => 'now',
'ignore_user_timezone' => false,
'content' => $content,
'devices' => $recipientHwids,
'data' => $extra['data'] ?? [],
'ios_title' => $extra['title'] ?? '',
'android_header' => $extra['title'] ?? '',
'link' => $extra['url'] ?? '',
]],
],
];
return $this->request('createMessage', $payload);
}
public function sendMessageToUser(int $userId, string $content, string $title = '', string $url = ''): void {
$hwids = PushwooshDeviceTable::getHwidsByUserId($userId);
if (empty($hwids)) return;
$this->createMessage($hwids, $content, ['title' => $title, 'url' => $url]);
}
public function createMessageByTag(string $tagName, string $tagValue, string $content): array {
$payload = [
'request' => [
'application' => $this->appCode,
'auth' => $this->apiAccessToken,
'notifications' => [[
'send_date' => 'now',
'content' => $content,
'conditions' => [[$tagName, 'EQ', $tagValue]],
]],
],
];
return $this->request('createMessage', $payload);
}
private function request(string $method, array $data): array {
$ch = curl_init($this->apiUrl . $method);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($data),
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
return $response ?? [];
}
} תגיות Pushwoosh לפילוח
Pushwoosh תומך בתגיות — מאפייני מכשיר מותאמים אישית. זה מאפשר שליחת התראות לפי פלחים ללא העברת רשימת hwids.
public function setUserTags(string $hwid, int $userId): void {
$user = \Bitrix\Main\UserTable::getById($userId)->fetch();
$tags = [];
$groups = \CUser::GetUserGroup($userId);
if (in_array(7, $groups)) {
$tags[] = ['tagName' => 'loyalty_level', 'tagValue' => 'gold'];
}
if (!empty($user['PERSONAL_CITY'])) {
$tags[] = ['tagName' => 'city', 'tagValue' => $user['PERSONAL_CITY']];
}
$totalOrders = $this->getUserOrdersTotal($userId);
$tags[] = ['tagName' => 'orders_total', 'tagValue' => (int)$totalOrders];
$this->request('setTags', [
'request' => [
'application' => $this->appCode,
'auth' => $this->apiAccessToken,
'tags' => $tags,
'hwid' => $hwid,
],
]);
} טיפול באירועים מ-Bitrix
AddEventHandler('sale', 'OnSaleStatusOrder', function(string $statusId, \Bitrix\Sale\Order $order) {
$userId = (int)$order->getUserId();
$notifications = [
'O' => ['Заказ #' . $order->getField('ACCOUNT_NUMBER'), 'Заказ принят, передаём в обработку'],
'D' => ['Заказ отправлен', 'Посылка уже в пути — отслеживайте доставку'],
'F' => ['Заказ выполнен', 'Спасибо за покупку! Оставьте отзыв — нам важен ваш опыт'],
];
if (!isset($notifications[$statusId])) return;
[$title, $content] = $notifications[$statusId];
$url = '/personal/order/detail/' . $order->getField('ACCOUNT_NUMBER') . '/';
(new PushwooshService())->sendMessageToUser($userId, $content, $title, $url);
}); סטטיסטיקה ו-Inbox
Pushwoosh מספק API לסטטיסטיקה (PushwooshDeviceTable) והתראות inbox (class PushwooshService { private string $appCode; private string $apiAccessToken; private string $apiUrl = 'https://cp.pushwoosh.com/json/1.3/'; public function createMessage(array $recipientHwids, string $content, array $extra = []): array { $payload = [ 'request' => [ 'application' => $this->appCode, 'auth' => $this->apiAccessToken, 'notifications' => [[ 'send_date' => 'now', 'ignore_user_timezone' => false, 'content' => $content, 'devices' => $recipientHwids, 'data' => $extra['data'] ?? [], 'ios_title' => $extra['title'] ?? '', 'android_header' => $extra['title'] ?? '', 'link' => $extra['url'] ?? '', ]], ], ]; return $this->request('createMessage', $payload); } public function sendMessageToUser(int $userId, string $content, string $title = '', string $url = ''): void { $hwids = PushwooshDeviceTable::getHwidsByUserId($userId); if (empty($hwids)) return; $this->createMessage($hwids, $content, ['title' => $title, 'url' => $url]); } public function createMessageByTag(string $tagName, string $tagValue, string $content): array { $payload = [ 'request' => [ 'application' => $this->appCode, 'auth' => $this->apiAccessToken, 'notifications' => [[ 'send_date' => 'now', 'content' => $content, 'conditions' => [[$tagName, 'EQ', $tagValue]], ]], ], ]; return $this->request('createMessage', $payload); } private function request(string $method, array $data): array { $ch = curl_init($this->apiUrl . $method); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_POSTFIELDS => json_encode($data), CURLOPT_HTTPHEADER => ['Content-Type: application/json'], ]); $response = json_decode(curl_exec($ch), true); curl_close($ch); return $response ?? []; } } ) — רשימת התראות אחרונות שהמשתמש אולי פספס. ה-Inbox מוצג בחשבון האישי. קוד JavaScript לקבלת inbox:
Pushwoosh.push(function(api) { api.getInboxMessages().then(function(messages) { renderInbox(messages); }); }); אילו יתרונות מציע Pushwoosh על פני אינטגרציה ישירה עם FCM?
| קריטריון | FCM ישיר | Pushwoosh |
|---|---|---|
| API אחיד לכל הפלטפורמות | לא (Web, Android, iOS נפרדים) | כן |
| פילוח מובנה | לא | כן (תגיות, קבוצות) |
| בדיקות A/B | לא | כן |
| התראות Inbox | לא | כן |
| זמן התקנה (ימי אדם) | 5–7 | 1–2 |
טעויות אינטגרציה נפוצות
- אי אחסון hwid למשתמשים לא מאומתים — התראות לא יגיעו לאחר ההרשמה.
- שליחת התראות ללא בדיקת הסכמה (נדרש לפי 54-FZ). השתמשו ב-
public function setUserTags(string $hwid, int $userId): void { $user = \Bitrix\Main\UserTable::getById($userId)->fetch(); $tags = []; $groups = \CUser::GetUserGroup($userId); if (in_array(7, $groups)) { $tags[] = ['tagName' => 'loyalty_level', 'tagValue' => 'gold']; } if (!empty($user['PERSONAL_CITY'])) { $tags[] = ['tagName' => 'city', 'tagValue' => $user['PERSONAL_CITY']]; } $totalOrders = $this->getUserOrdersTotal($userId); $tags[] = ['tagName' => 'orders_total', 'tagValue' => (int)$totalOrders]; $this->request('setTags', [ 'request' => [ 'application' => $this->appCode, 'auth' => $this->apiAccessToken, 'tags' => $tags, 'hwid' => $hwid, ], ]); }. - התעלמות מתגיות: בלעדיהן פילוח בלתי אפשרי — כל המשתמשים מקבלים את אותם מסרים.
- שכחת ה-service worker ל-web push — התראות לא מגיעות כשהדפדפן סגור.
צרו קשר לייעוץ בנושא אינטגרציה — נעזור לכם להימנע מטעויות אלו.
מה כלול בעבודה
- אודיט של ארכיטקטורת Bitrix הנוכחית (infoblocks, אירועים, משתמשים)
- תיעוד API וסכמות נתונים
- התקנת Pushwoosh SDK (Web, Android, iOS)
- יישום PHP client עם כיסוי מלא של מתודות (sendMessage, setTags, getStats)
- אינטגרציה עם אירועים (הזמנות, הרשמות, עגלה)
- תיוג משתמשים ויצירת פלחים
- התקנת Inbox והצגתו בחשבון האישי
- הדרכת צוות (1–2 שעות)
- תמיכה טכנית חודש לאחר העלייה לאוויר
כיצד אנו מיישמים את Pushwoosh ב-Bitrix
תהליך האינטגרציה הוא בשלבים:
- אנליטיקה: בחינת סכמת נתונים, אירועים, קבוצות משתמשים.
- עיצוב: הגדרת מבנה אחסון hwid, תגיות, תרחישי שליחה.
- יישום: כתיבת PHP client, קוד JS, הגדרת SDK.
- בדיקות: בדיקת מסירה בכל הפלטפורמות, פילוח, תרחישים.
- פריסה: העלאה לסביבת production, עדכון service worker.
לוחות זמנים משוערים
| משימה | זמן |
|---|---|
| אתחול SDK, אחסון hwid | 2–3 ימים |
| PHP API client, טבלת מכשירים | 2–3 ימים |
| שליחה לפי אירועי הזמנות | 2–3 ימים |
| תגיות ופילוח | 2–3 ימים |
| Inbox, סטטיסטיקה, ניהול בחשבון האישי | 3–5 ימים |
| חבילה מלאה (web + מובייל) | 3–4 שבועות |
קבלו ייעוץ — נעריך את הפרויקט שלכם ונספק לוחות זמנים מדויקים לארכיטקטורה שלכם. השאירו פנייה, ונחזור אליכם.

