אוטומציה מלאה של משלוחי CDEK: מחישוב ועד מעקב

שילוב CDEK באתר מביא עמו לא פעם אתגרים: חישובי משלוח שגויים, הזמנות שאבדו וסטטוסים שאינם מעודכנים. אנחנו מטפלים במחזור החיים המלא—מחיבור ה-API ועד מעקב אחר חבילות—ומקימים הכל במפתח אחד. הצוות שלנו מבטיח פעילות יציבה של השירות ותמיכה שוטפת, כך שהמשלוחים הופכים לחלק אמין בעסק שלכם.

פיתוח ותחזוקה של כל סוגי האתרים:

אתרי מידע או יישומי אינטרנט
אתרי תדמית, דפי נחיתה, אתרי חברה, קטלוגים מקוונים, חידונים, אתרי קידום, בלוגים, מקורות חדשות, פורטלי מידע, פורומים, אגרגטורים
אתרי מסחר אלקטרוני או יישומי אינטרנט
חנויות מקוונות, פורטלי B2B, שווקים, בורסות מקוונות, אתרי קאשבק, בורסות, פלטפורמות דרופשיפינג, מנתחי מוצרים
יישומי אינטרנט לניהול תהליכים עסקיים
מערכות CRM, מערכות ERP, פורטלים ארגוניים, מערכות ניהול ייצור, מנתחי מידע
אתרי שירות אלקטרוני או יישומי אינטרנט
פלטפורמות מודעות, בתי ספר מקוונים, בתי קולנוע מקוונים, בוני אתרים, פורטלים לשירותים אלקטרוניים, פלטפורמות אירוח וידאו, פורטלים נושאיים

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

השירותים שאנו מציעים
מציג 1 מתוך 1כל 2062 השירותים
אוטומציה מלאה של משלוחי CDEK: מחישוב ועד מעקב
בינוני
~2-3 ימים

הכישורים שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1359
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113
  • פיתוח אתר עבור SBH Partners
    פיתוח אתר עבור SBH Partners
    1201
  • פיתוח אתר עבור Red Pear
    פיתוח אתר עבור Red Pear
    619

שילוב משלוחי CDEK מקצה לקצה עבור האתר שלך

אנו מספקים שירות שילוב CDEK באתר שלך במפתח מלא. שילוב ה-CDEK באתר שלנו מבטיח פעולה חלקה. אנו מספקים חישוב עלויות משלוח עם כל התעריפים (136–139), הצגת נקודות איסוף על מפה, יצירת הזמנות בבקשה אחת, וסנכרון סטטוסים בזמן אמת באמצעות webhook. הגרסה הבסיסית מוכנה תוך 5–7 ימי עסקים. צור קשר — נבחן את הפרויקט שלך.

בפועל, שילוב עם API של CDEK גורם לעיתים קרובות לבעיות: חישוב שגוי עקב קודי ערים (במאגר יש >100,000 ערים) או אובדן הזמנות עקב כשלי בקשות. אנו פותרים זאת באמצעות שמירת מדריכים במטמון, ניסיונות חוזרים אוטומטיים (retry עם השהיה אקספוננציאלית), ורישום לוגים מפורט. כתוצאה מכך, שיעור הכשלים יורד ל-0.1% — מאושר על ידי לקוחותינו עם למעלה מ-15 פרויקטי שילוב משלוחים. שילוב טיפוסי מחזיר את עצמו תוך חודשיים, וחוסך מעל $500 בחודש בעיבוד ידני. השילוב שלנו מקצר את זמן עיבוד ההזמנות ב-95% (מ-15 דקות ל-45 שניות) ומפחית שגיאות הזנת נתונים לפחות מ-0.1%. אנו מבטיחים 99.9% זמינות אספקת webhook.

מה שילוב CDEK מספק

רכיב תוצאה
חישוב עלות משלוח תעריפים עדכניים בהתחשב במשקל, ממדים וסוג משלוח (דלת/PVZ)
נקודות איסוף על מפה מפה אינטראקטיבית עם סינון לפי עיר, משקל, זמינות מזומן
יצירת הזמנה יצירת הזמנה אוטומטית ב-CDEK בעת תשלום באתר שלך
מעקב אחר חבילה סטטוסים בזמן אמת באמצעות webhook (CREATED, ACCEPTED, READY, DELIVERED)
תיעוד והדרכה תיאור API, דוגמאות קוד, הוראות למפעילים

אוטומציית משלוחים מפחיתה מאמץ ידני ושגיאות.

מה כלול בחבילת השילוב

  • תיעוד: תיאור API מפורט, מדריך שילוב ודוגמאות קוד.
  • אישורי API: גישה מלאה ל-API של CDEK עם אסימוני OAuth 2.0.
  • הדרכה: הוראות למפעילים והדרכה לטיפול בהזמנות ונקודות איסוף.
  • תמיכה: חודש תמיכה חינם לאחר השילוב, כולל הגדרת ניטור ופתרון תקלות.
  • זמינות מובטחת: 99.9% אחריות לאספקת webhook עם ניסיונות חוזרים אוטומטיים.

כיצד לשלב CDEK ב-5 שלבים

  1. קבל אישורי API: הירשם ב-CDEK, השג client_id ו-client_secret.
  2. הטמע אימות: הגדר שמירת אסימון OAuth 2.0 במטמון (כפי שמוצג בדוגמת הקוד).
  3. הוסף חישוב עלויות: שלב את נקודת הקצה של המחשבון כדי להציג תעריפים בדף התשלום שלך.
  4. הצג נקודות איסוף: השתמש בנקודת הקצה deliverypoints כדי להציג PVZs זמינים על מפה.
  5. צור הזמנות וטפל ב-webhooks: הטמע יצירת הזמנות וסנכרון סטטוסים באמצעות webhook.

כיצד אנו מבטיחים סנכרון סטטוסים אמין?

אנו משתמשים בהתראות webhook של CDEK. לאחר יצירת הזמנה, CDEK שולח בקשת POST לכתובת ה-URL שלך בכל שינוי סטטוס. זה מהיר וזול יותר מאשר בדיקה תקופתית. פשוט החזר HTTP 200 — אחרת CDEK ינסה שוב עד 3 פעמים. אנו גם מוסיפים ניטור: אם לא מתקבלת התראה תוך 5 דקות, אנו שולחים התראת אזהרה.

אילו נתונים נדרשים לחישוב עלויות?

לחישוב, פשוט העבר את קודי הערים של השולח והמקבל, משקל וממדים של החבילה, וסוג משלוח (דלת/PVZ). ה-API מחזיר רשימת תעריפים עם זמני משלוח מינימליים ומקסימליים. אנו מסננים אוטומטית תעריפים עם שגיאות (למשל, קוד עיר CDEK לא נמצא) ומחזירים רק אפשרויות תקפות. תעריפי CDEK כוללים את כל הסוגים העיקריים.

השוואה בין עיבוד הזמנות ידני ואוטומטי

קריטריון עיבוד ידני השילוב שלנו
זמן לכל הזמנה 15–20 דקות 2–3 שניות
שגיאות הזנת נתונים עד 5% <0.1%
עדכוני סטטוס בדיקה ידנית תקופתית webhook אוטומטי
עלות תמיכה גבוהה (שכר מפעיל) מינימלית (הגדרה חד-פעמית)

טכנולוגיות וכלים

  • אימות CDEK API v2: אישורי לקוח OAuth 2.0, אסימון חי 3600 שניות, נשמר במטמון ב-Redis.
  • חישוב עלויות: שיטה /v2/calculator/tarifflist.
  • PVZ: שיטה /v2/deliverypoints עם סינון לפי עיר, משקל וסוג.
  • הזמנות: שיטה /v2/orders עם סט מלא של שדות.
  • Webhook: רישום פעם אחת, טיפול בסטטוסים מרכזיים.

אנו משתמשים ב-CDEK API v2 לכל הפעולות. דוגמה לאימות ושמירת אסימון במטמון:

class CdekAuthService {
    private const TOKEN_URL = 'https://api.cdek.ru/v2/oauth/token';
    private const CACHE_KEY = 'cdek_access_token';

    public function getToken(): string {
        return Cache::remember(self::CACHE_KEY, 3500, function () {
            $response = Http::asForm()->post(self::TOKEN_URL, [
                'grant_type' => 'client_credentials',
                'client_id' => config('services.cdek.client_id'),
                'client_secret' => config('services.cdek.client_secret'),
            ]);

            if ($response->failed()) {
                throw new CdekAuthException('Failed to obtain CDEK token: ' . $response->body());
            }

            return $response->json('access_token');
        });
    }
}

דוגמה לחישוב עלויות:

class CdekCalculatorService {
    public function calculateTariffList(
        string $fromCityCode,
        string $toCityCode,
        array $packages,
        int $deliveryType = 1
    ): array {
        $response = Http::withToken($this->auth->getToken())
            ->post('https://api.cdek.ru/v2/calculator/tarifflist', [
                'type' => $deliveryType,
                'from_location' => ['code' => (int)$fromCityCode],
                'to_location' => ['code' => (int)$toCityCode],
                'packages' => $packages,
            ]);

        if ($response->failed()) {
            throw new CdekApiException($response->body());
        }

        return collect($response->json('tariff_codes'))
            ->filter(fn($t) => empty($t['errors']))
            ->map(fn($t) => [
                'code' => $t['tariff_code'],
                'name' => $t['tariff_name'],
                'cost' => $t['delivery_sum'],
                'min_days' => $t['period_min'],
                'max_days' => $t['period_max'],
            ])
            ->values()
            ->toArray();
    }
}

דוגמה לקבלת נקודות איסוף:

public function getPickupPoints( string $cityCode, float $weightKg, bool $cashAllowed = false ): array {
    $response = Http::withToken($this->auth->getToken())
        ->get('https://api.cdek.ru/v2/deliverypoints', [
            'city_code' => $cityCode,
            'weight_max' => (int)($weightKg),
            'have_cash' => $cashAllowed ? 'true' : null,
            'type' => 'PVZ',
            'is_handout' => 'true',
        ]);

    return collect($response->json())
        ->map(fn($p) => [
            'code' => $p['code'],
            'name' => $p['name'],
            'address' => $p['location']['address'],
            'lat' => $p['location']['latitude'],
            'lng' => $p['location']['longitude'],
            'work_time' => $p['work_time'],
            'cash_allowed'=> $p['have_cash'],
        ])
        ->toArray();
}

דוגמה ליצירת הזמנה:

public function createOrder(Order $order): string {
    $payload = [
        'tariff_code' => $order->cdek_tariff_code,
        'from_location' => [
            'code' => config('services.cdek.warehouse_city_code'),
            'address' => config('services.cdek.warehouse_address'),
        ],
        'to_location' => [
            'code' => $order->cdek_city_code,
            'address' => $order->delivery_address,
        ],
        'recipient' => [
            'name' => $order->recipient_name,
            'phones' => [['number' => $order->recipient_phone]],
            'email' => $order->recipient_email,
        ],
        'packages' => [[
            'number' => 'p' . $order->id,
            'weight' => (int)($order->total_weight_kg * 1000),
            'length' => $order->package_length,
            'width' => $order->package_width,
            'height' => $order->package_height,
            'comment' => 'Заказ #' . $order->id,
            'items' => $order->items->map(fn($item) => [
                'name' => $item->product->name,
                'ware_key'=> (string)$item->product_id,
                'payment' => ['value' => 0],
                'cost' => $item->price,
                'amount' => $item->quantity,
                'weight' => (int)($item->product->weight_g),
            ])->toArray(),
        ]],
    ];

    if ($order->pickup_point_code) {
        $payload['delivery_point'] = $order->pickup_point_code;
    }

    $response = Http::withToken($this->auth->getToken())
        ->post('https://api.cdek.ru/v2/orders', $payload);

    $orderId = $response->json('entity.uuid');

    if (!$orderId) {
        throw new CdekOrderException(
            'Failed to create CDEK order: ' . json_encode($response->json('requests.0.errors'))
        );
    }

    return $orderId;
}

דוגמה לטיפול ב-webhook:

public function handleWebhook(Request $request): Response
{
    $data = $request->json()->all();
    if ($data['type'] !== 'ORDER_STATUS') {
        return response('ok', 200);
    }
    $cdekOrderUuid = $data['attributes']['uuid'];
    $statusCode = $data['attributes']['status']['code'];
    $order = Order::where('cdek_uuid', $cdekOrderUuid)->first();
    if ($order) {
        $order->update([
            'cdek_status' => $statusCode,
            'cdek_status_at' => now(),
        ]);
        if (in_array($statusCode, ['READY_FOR_PICKUP', 'DELIVERED'])) {
            dispatch(new NotifyCustomerDeliveryStatus($order, $statusCode));
        }
    }
    return response('ok', 200);
}

שלבי העבודה

שלב מה אנו עושים תוצאה
אנליזה לומדים את האתר שלך, דרישות, בוחרים תעריפים ושיטות שילוב אופטימליות מפרט טכני
עיצוב מעצבים ארכיטקטורה: שירותים, מטמון, טיפול בשגיאות תיעוד
יישום כותבים קוד שילוב: אימות, חישוב, PVZ, הזמנות, webhook קוד עובד בטכנולוגיה שלך
בדיקות בודקים בסביבת הבדיקה של CDEK, מדמים את כל התרחישים, מתקנים באגים דוח בדיקות
השקה מעבר לאישורי ייצור, הגדרת ניטור שילוב בייצור

לוח זמנים משוער

שילוב בסיסי (חישוב עלות משלוח + נקודות איסוף על מפה + יצירת הזמנות) — 5–7 ימי עסקים. הוספת מעקב חבילות באמצעות webhook, סנכרון סטטוסים והדפסת תוויות — עוד 3–4 ימים. בדיקות בסביבת הבדיקה של CDEK הן חובה. העלות מחושבת באופן אישי; שילוב בסיסי טיפוסי מתחיל מ-$1,250. חיסכון שנתי: מעל $6,000.

טעויות נפוצות וכיצד להימנע מהן
  • קוד עיר CDEK שגוי. השתמש בשיטה class CdekAuthService { private const TOKEN_URL = 'https://api.cdek.ru/v2/oauth/token'; private const CACHE_KEY = 'cdek_access_token'; public function getToken(): string { return Cache::remember(self::CACHE_KEY, 3500, function () { $response = Http::asForm()->post(self::TOKEN_URL, [ 'grant_type' => 'client_credentials', 'client_id' => config('services.cdek.client_id'), 'client_secret' => config('services.cdek.client_secret'), ]); if ($response->failed()) { throw new CdekAuthException('Failed to obtain CDEK token: ' . $response->body()); } return $response->json('access_token'); }); } } ושמור את המדריך במטמון.
  • פגיית אסימון. שמור את האסימון במטמון עם מרווח של 100 שניות, כמו בדוגמה.
  • ממדים שגויים. כל הממדים בס"מ, משקל בגרמים, אחרת החישוב שגוי.
  • webhook שאבד. הגדר ניסיונות חוזרים וניטור: אם CDEK לא מקבל 200, הוא מנסה לשלוח שוב.

לצוות שלנו יש למעלה מ-10 פרויקטים מוצלחים עם שילוב CDEK ו-5 שנות ניסיון בעבודה עם APIs של שירותי משלוחים. תיעוד ה-API הרשמי של CDEK זמין ב-תיעוד API של CDEK. בקש ייעוץ — נעזור לך לשלב משלוחים במהירות וללא שגיאות.