شحن القطر عبر الإنترنت (واجهة Gy/Ro)
واجهة نظام الشحن عبر الإنترنت (OCS)
جدول المحتويات
- نظرة عامة
- معمارية الشحن 3GPP
- أساسيات واجهة Gy/Ro
- رسائل التحكم في الائتمان
- تدفقات الشحن عبر الإنترنت
- تحكم شحن الحامل
- تحكم الائتمان لعدة خدمات
- التكوين
- تدفقات الرسائل
- معالجة الأخطاء
- التكامل مع Gx
- استكشاف الأخطاء وإصلاحها
نظرة عامة
تربط واجهة Gy (المعروفة أيضًا باسم واجهة Ro في سياقات IMS) PGW-C بنظام الشحن عبر الإنترنت (OCS) للتحكم في الائتمان في ال��قت الحقيقي. وهذا يمكّن:
- الشحن المدفوع مسبقًا - تفويض الائتمان والخصم في الوقت الحقيقي
- التحكم في الائتمان في الوقت الحقيقي - منح الحصة قبل تقديم الخدمة
- الشحن القائم على الخدمة - شحن مختلف للصوت والبيانات والرسائل القصيرة، إلخ.
- تحديثات الحساب الفورية - تحديثات رصيد الائتمان في الوقت الحقيقي
- رفض الخدمة - حظر الخدمة عند نفاد الائتمان
الشحن عبر الإنترنت مقابل الشحن غير المتصل
| الجانب | الشحن عبر الإنترنت (Gy/Ro) | الشحن غير المتصل (Gz/Rf) |
|---|---|---|
| التوقيت | في الوقت الحقيقي، قبل الخدمة | بعد تقديم الخدمة |
| حالة الاستخدام | المشتركين المدفوعين مسبقًا | المشتركين المدفوعين لاحقًا |
| تحقق الائتمان | نعم، قبل منح الخدمة | لا، يتم إصدار الفاتورة لاحقًا |
| النظام | OCS (نظام الشحن عبر الإنترنت) | CGF/CDF (وظيفة بيانات الشحن) |
| المخاطر | لا خسارة في الإيرادات | خطر الفواتير غير المدفوعة |
| التعقيد | عالٍ (متطلبات الوقت الحقيقي) | أقل (معالجة دفعات) |
| تأثير المستخدم | يتم رفض الخدمة إذا لم يكن هناك ائتمان | الخدمة متاحة دائمًا |
انظر أيضًا: تنسيق CDR للبيانات لسجلات الشحن غير المتصل (الفواتير المدفوعة لاحقًا)
انظر أيضًا: إدارة الجلسات لدورة حياة جلسة PDN الكاملة بما في ذلك تكامل الشحن
Gy في معمارية الشبكة
الوظائف الرئيسية
| الوظيفة | الوصف |
|---|---|
| تفويض الائتمان | طلب حصة من OCS قبل السماح بحركة المرور |
| إدارة الحصة | تتبع الوحدات الممنوحة (بايت، وقت، أحداث) |
| كشف استنفاد الائتمان | مراقبة الحصة المتبقية |
| إعادة التفويض | طلب حصة إضافية عند الوصول إلى العتبة |
| إنهاء الخدمة | إيقاف الخدمة عند نفاد الائتمان |
| التسوية النهائية | الإبلاغ عن الاستخدام الفعلي عند انتهاء الجلسة |
معمارية الشحن 3GPP
نقاط مرجعية للشحن
وظيفة تحفيز الشحن (CTF)
يعمل PGW-C كـ CTF (وظيفة تحفيز الشحن)، المسؤولة عن:
- كشف الأحداث القابلة للشحن - بدء الجلسة، استخدام البيانات، انتهاء الجلسة
- طلب تفويض الائتمان - قبل السماح بالخدمة
- تتبع استهلاك الحصة - مراقبة الوحدات الممنوحة
- توليد أحداث الشحن - تحفيز طلبات الائتمان
- فرض التحكم في الائتم��ن - حظر حركة المرور عند استنفاد الحصة
وظيفة الشحن عبر الإنترنت (OCF)
ينفذ OCS OCF (وظيفة الشحن عبر الإنترنت):
- إدارة رصيد الحساب - تتبع ائتمان المشترك
- التسعير - تحديد السعر لكل وحدة (لكل ميغابايت، لكل ثانية، إلخ.)
- حجز الائتمان - حجز الائتمان للحصة الممنوحة
- خصم الائتمان - الخصم عند الإبلاغ عن الاستخدام
- قرارات السياسة - منح أو رفض بناءً على الرصيد
أساسيات واجهة Gy/Ro
مرجع 3GPP
- المواصفة: 3GPP TS 32.299 (معمارية الشحن)
- البروتوكول: 3GPP TS 32.251 (شحن مجال PS)
- معرف تطبيق Diameter: 4 (Gy/Ro - تطبيق التحكم في الائتمان)
- البروتوكول الأساسي: RFC 4006 (تطبيق التحكم في الائتمان Diameter)
مفهوم الجلسة
كل اتصال PDN لـ UE يتطلب شحنًا عبر الإنترنت له جلسة Gy/Ro يتم تحديدها بواسطة Session-ID. هذه الجلسة:
- تُنشأ عندما يتطلب الحامل شحنًا عبر الإنترنت (CCR-Initial)
- تُحدث عندما يتم استهلاك الحصة (CCR-Update)
- تُنهى عندما تنتهي الجلسة (CCR-Termination)
تنسيق معرف الجلسة
Session-ID: <Origin-Host>;<high32>;<low32>[;<optional>]
مثال: omni-pgw_c.epc.mnc999.mcc999.3gppnetwork.org;9876543210;12345;gy
المكونات:
- Origin-Host: هوية Diameter لـ PGW-C
- high32: 32 بت العليا من المعرف الفريد
- low32: 32 بت السفلى من المعرف الفريد
- optional: معرف إضافي (مثل "gy" للتمييز عن Gx)
رسائل التحكم في الائتمان
أنواع الرسائل
CCR-Initial (طلب التحكم في الائتمان - أولي)
��ندما: ينشئ UE اتصال PDN ويتطلب الحامل شحنًا عبر الإنترنت
الغرض:
- طلب تفويض الائتمان الأولي من OCS
- حجز حصة لتقديم الخدمة
- إنشاء جلسة Gy/Ro
المفاتيح AVPs المرسلة بواسطة PGW-C:
| اسم AVP | رمز AVP | النوع | الوصف |
|---|---|---|---|
| Session-Id | 263 | UTF8String | معرف جلسة Gy الفريد |
| Auth-Application-Id | 258 | Unsigned32 | 4 (التحكم في الائتمان) |
| Origin-Host | 264 | DiamIdent | هوية Diameter لـ PGW-C |
| Origin-Realm | 296 | DiamIdent | مجال Diameter لـ PGW-C |
| Destination-Realm | 283 | DiamIdent | مجال OCS |
| CC-Request-Type | 416 | Enumerated | 1 = INITIAL_REQUEST |
| CC-Request-Number | 415 | Unsigned32 | رقم التسلسل (يبدأ من 0) |
| Subscription-Id | 443 | Grouped | معرف UE (IMSI/MSISDN) |
| Service-Context-Id | 461 | UTF8String | معرف سياق الشحن |
| Multiple-Services-Credit-Control | 456 | Grouped | طلبات ائتمان محددة للخدمة |
| Requested-Service-Unit | 437 | Grouped | الحصة المطلوبة (بايت، وقت، إلخ.) |
| Used-Service-Unit | 446 | Grouped | الحصة المستخدمة (0 للأولي) |
| Service-Identifier | 439 | Unsigned32 | معرف نوع الخدمة |
| Rating-Group | 432 | Unsigned32 | معرف فئة الشحن |
مثال هيكل CCR-I:
CCR (رمز الأمر: 272، طلب)
├── Session-Id: "pgw_c.example.com;123;456;gy"
├── Auth-Application-Id: 4
├── Origin-Host: "omni-pgw_c.epc.mnc999.mcc999.3gppnetwork.org"
├── Origin-Realm: "epc.mnc999.mcc999.3gppnetwork.org"
├── Destination-Realm: "epc.mnc999.mcc999.3gppnetwork.org"
├── CC-Request-Type: INITIAL_REQUEST (1)
├── CC-Request-Number: 0
├── Subscription-Id (Grouped)
│ ├── Subscription-Id-Type: END_USER_IMSI (1)
│ └── Subscription-Id-Data: "310260123456789"
├── Subscription-Id (Grouped)
│ ├── Subscription-Id-Type: END_USER_E164 (0)
│ └── Subscription-Id-Data: "15551234567"
├── Service-Context-Id: "32251@3gpp.org"
├── Multiple-Services-Credit-Control (Grouped)
│ ├── Service-Identifier: 1
│ ├── Rating-Group: 100
│ └── Requested-Service-Unit (Grouped)
│ └── CC-Total-Octets: 10000000 (طلب 10 ميغابايت)
└── Used-Service-Unit (Grouped)
└── CC-Total-Octets: 0 (لا استخدام بعد)
CCA-Initial (إجابة التحكم في الائتمان - أولية)
م��سلة بواسطة: OCS ردًا على CCR-I
الغرض:
- منح أو رفض تفويض الائتمان
- توفير حصة لتقديم الخدمة
- تحديد معايير التسعير والشحن
المفاتيح AVPs المستلمة بواسطة PGW-C:
| اسم AVP | رمز AVP | الوصف |
|---|---|---|
| Result-Code | 268 | النجاح (2001) أو رمز الخطأ |
| Multiple-Services-Credit-Control | 456 | منح ائتمان محدد للخدمة |
| Granted-Service-Unit | 431 | الحصة الممنوحة (بايت، وقت، إلخ.) |
| Validity-Time | 448 | فترة صلاحية الحصة (ثواني) |
| Result-Code | 268 | رمز نتيجة لكل خدمة |
| Final-Unit-Indication | 430 | الإجراء عند استنفاد الحصة |
| Volume-Quota-Threshold | - | العتبة لإعادة التفويض |
مثال استجابة النجاح:
CCA (رمز الأمر: 272، إجابة)
├── Session-Id: "pgw_c.example.com;123;456;gy"
├── Result-Code: DIAMETER_SUCCESS (2001)
├── Origin-Host: "ocs.example.com"
├── Origin-Realm: "example.com"
├── Auth-Application-Id: 4
├── CC-Request-Type: INITIAL_REQUEST (1)
├── CC-Request-Number: 0
└── Multiple-Services-Credit-Control (Grouped)
├���─ Result-Code: DIAMETER_SUCCESS (2001)
├── Service-Identifier: 1
├── Rating-Group: 100
├── Granted-Service-Unit (Grouped)
│ └── CC-Total-Octets: 10000000 (منح 10 ميغابايت)
├── Validity-Time: 3600 (الحصة صالحة لمدة ساعة واحدة)
└── Volume-Quota-Threshold: 8000000 (إعادة التفويض عند استخدام 8 ميغابايت، 80%)
CCR-Update (طلب التحكم في الائتمان - تحديث)
عندما:
- تم الوصول إلى عتبة الحصة الممنوحة (مثل 80% مستهلكة)
- تنتهي فترة الصلاحية
- يتطلب تغيير الخدمة إعادة التفويض
- تغيير وقت التعرفة
الغرض:
- طلب حصة إضافية
- الإبلاغ عن استخدام الحصة الممنوحة سابقًا
- تحديث معايير الشحن
الاختلافات الرئيسية عن CCR-I:
CC-Request-Type: UPDATE_REQUEST (2)CC-Request-Numberتم زيادتهUsed-Service-Unitيحتوي على الاستخدام الفعليRequested-Service-Unitلمزيد من الحصة
مثال هيكل CCR-U:
CCR (رمز الأمر: 272، طلب)
├── Session-Id: "pgw_c.example.com;123;456;gy"
├── Auth-Application-Id: 4
├── Origin-Host: "omni-pgw_c.epc.mnc999.mcc999.3gppnetwork.org"
├── Origin-Realm: "epc.mnc999.mcc999.3gppnetwork.org"
├── Destination-Realm: "epc.mnc999.mcc999.3gppnetwork.org"
├── CC-Request-Type: UPDATE_REQUEST (2)
├── CC-Request-Number: 1
└── Multiple-Services-Credit-Control (Grouped)
├── Service-Identifier: 1
├── Rating-Group: 100
├── Used-Service-Unit (Grouped)
│ └── CC-Total-Octets: 8000000 (8 ميغابايت مستخدمة حتى الآن)
└── Requested-Service-Unit (Grouped)
└── CC-Total-Octets: 10000000 (طلب 10 ميغابايت أخرى)
CCA-Update (إجابة التحكم في الائتمان - تحديث)
مرسلة بواسطة: OCS ردًا على CCR-U
الغرض:
- منح حصة إضافية (إذا كان الائتمان متاحًا)
- الاعتراف بالاستخدام
- تحديث معايير الشحن
النتائج المحتملة:
1. منح المزيد من الحصة:
CCA (تحديث)
└── Multiple-Services-Credit-Control
├── Result-Code: DIAMETER_SUCCESS (2001)
├── Granted-Service-Unit
│ └── CC-Total-Octets: 10000000 (10 ميغابايت أخرى)
└── Validity-Time: 3600
2. الحصة النهائية (استنفاد الائتمان):
CCA (تحديث)
└── Multiple-Services-Credit-Control
├── Result-Code: DIAMETER_SUCCESS (2001)
├── Granted-Service-Unit
│ └── CC-Total-Octets: 1000000 (تبقى 1 ميغابايت فقط)
└── Final-Unit-Indication
└── Final-Unit-Action: TERMINATE (0)
3. لا ائتمان متاح:
CCA (تحديث)
├── Result-Code: DIAMETER_CREDIT_LIMIT_REACHED (4012)
└── Multiple-Services-Credit-Control
├── Result-Code: DIAMETER_CREDIT_LIMIT_REACHED (4012)
└── Final-Unit-Indication
└── Final-Unit-Action: TERMINATE (0)
CCR-Termination (طلب التحكم في الائتمان - إنهاء)
عندما:
- يفصل UE
- يتم حذف اتصال PDN
- يتم إنهاء الجلسة لأي سبب
الغرض:
- تقرير الاستخدام النهائي
- إغلاق جلسة Gy/Ro
- التسوية النهائية
الاختلافات الرئيسية:
CC-Request-Type: TERMINATION_REQUEST (3)Used-Service-Unitيحتوي على الاستخدام النهائي- لا
Requested-Service-Unit(لا حاجة لمزيد من الحصة) - يتضمن
Termination-Cause
مثال هيكل CCR-T:
CCR (رمز الأمر: 272، طلب)
├── Session-Id: "pgw_c.example.com;123;456;gy"
├── Auth-Application-Id: 4
├── Origin-Host: "omni-pgw_c.epc.mnc999.mcc999.3gppnetwork.org"
├── Origin-Realm: "epc.mnc999.mcc999.3gppnetwork.org"
├── Destination-Realm: "epc.mnc999.mcc999.3gppnetwork.org"
├── CC-Request-Type: TERMINATION_REQUEST (3)
├── CC-Request-Number: 5
├── Termination-Cause: DIAMETER_LOGOUT (1)
└── Multiple-Services-Credit-Control (Grouped)
├── Service-Identifier: 1
├── Rating-Group: 100
└── Used-Service-Unit (Grouped)
└── CC-Total-Octets: 18500000 (18.5 ميغابايت إجمالي الاستخدام)
CCA-Termination (إجابة التحكم في الائتمان - إنهاء)
مرسلة بواسطة: OCS ردًا على CCR-T
الغرض:
- الاعتراف بإنهاء الجلسة
- إكمال المحاسبة
- تحرير الائتمان المحجوز
مثال CCA-T:
CCA (رمز الأمر: 272، إجابة)
├── Session-Id: "pgw_c.example.com;123;456;gy"
├── Result-Code: DIAMETER_SUCCESS (2001)
├── Origin-Host: "ocs.example.com"
├── Origin-Realm: "example.com"
├── Auth-Application-Id: 4
├── CC-Request-Type: TERMINATION_REQUEST (3)
└── CC-Request-Number: 5
تدفقات الشحن عبر الإنترنت
أنواع وحدات الخدمة
يمكن لـ OCS منح الحصة بوحدات مختلفة:
| نوع الوحدة | AVP | الوصف | حالة الاستخدام |
|---|---|---|---|
| الوقت | CC-Time | ثواني | المكالمات الصوتية، مدة الجلسة |
| الحجم | CC-Total-Octets | بايت (إجمالي صعودًا وهبوطًا) | خدمات البيانات |
| الحجم (منفصل) | CC-Input-Octets, CC-Output-Octets | بايت (منفصل) | الشحن غير المتناظر |
| محدد الخدمة | CC-Service-Specific-Units | وحدات مخصصة | الرسائل القصيرة، الرسائل متعددة الوسائط، مكالمات API |
| الأحداث | - | الأحداث المحسوبة | خدمات الدفع مقابل الاستخدام |
إدارة عتبة الحصة
المشكلة: كيف يعرف PGW-C متى يطلب المزيد من الحصة؟
الحل: يوفر OCS Volume-Quota-Threshold أو Time-Quota-Threshold. يراقب PGW-C الاستخدام عبر تقارير جلسة PFCP من PGW-U (انظر واجهة PFCP).
مثال على التدفق:
1. يمنح OCS حصة 10 ميغابايت مع عتبة 80% (8 ميغابايت)
2. يراقب PGW-C الاستخدام عبر تقارير استخدام PGW-U (تقارير جلسة PFCP)
3. عندما يصل الاستخدام إلى 8 ميغابايت:
→ يرسل PGW-C CCR-Update
→ يستمر في السماح بحركة المرور (لا تنتظر الرد)
4. يستجيب OCS بمزيد من الحصة
5. إذا تم استنفاد الحصة قبل إرسال CCR-Update:
→ يجب على PGW-C حظر حركة المرور
حساب العتبة:
Granted-Service-Unit: 10000000 بايت (10 ميغابايت)
Volume-Quota-Threshold: 8000000 بايت (8 ميغابايت)
عندما يتم استهلاك 8 ميغابايت → تحفيز CCR-Update
المخزون المتبقي: 2 ميغابايت (يسمح بالوقت لاستجابة OCS)
مراقبة PGW-C:
يراقب PGW-C الاستخدام عبر تقارير جلسة PFCP من PGW-U:
الإشارة إلى الوحدة النهائية
ماذا يحدث عندما يتم استنفاد الائتمان؟
يتضمن OCS Final-Unit-Indication AVP في CCA لتحديد الإجراء:
| Final-Unit-Action | القيمة | سلوك PGW-C |
|---|---|---|
| TERMINATE | 0 | حظر كل حركة المرور، بدء إنهاء الجلسة |
| REDIRECT | 1 | إعادة توجيه حركة المرور إلى البوابة (مثل صفحة الشحن) |
| RESTRICT_ACCESS | 2 | السماح بالوصول فقط إلى خدمات معينة (مثل خادم الشحن) |
مثال: الوحدة النهائية مع إعادة التوجيه
CCA (تحديث)
└── Multiple-Services-Credit-Control
├── Result-Code: DIAMETER_SUCCESS (2001)
├── Granted-Service-Unit
│ └── CC-Total-Octets: 1000000 (الوحدة النهائية 1 ميغابايت)
└── Final-Unit-Indication
├── Final-Unit-Action: REDIRECT (1)
└── Redirect-Server (Grouped)
├── Redirect-Address-Type: URL (2)
└── Redirect-Server-Address: "http://topup.example.com"
إجراءات PGW-C:
- TERMINATE: إرسال CCR-T، حذف الحامل
- REDIRECT: تثبيت قاعدة PFCP لإعادة توجيه HTTP إلى عنوان الشحن
- RESTRICT_ACCESS: تثبيت قواعد PFCP تسمح فقط بعناوين IP المدرجة في القائمة البيضاء
تحكم شحن الحامل
ما الذي يتحكم في ما إذا كان يتم شحن الحامل؟
مواصفة 3GPP: TS 23.203، TS 29.212، TS 32.251
يتم التحكم في شحن الحامل بواسطة قواعد PCC المجهزة بواسطة PCRF عبر واجهة Gx. انظر واجهة Diameter Gx لوثائق قواعد PCC الكاملة.
تدفق قرار الشحن:
قاعدة PCC مع معلومات الشحن
استجابة PCRF (CCA-I على Gx):
CCA (واجهة Gx)
└── Charging-Rule-Definition (Grouped)
├── Charging-Rule-Name: "prepaid_data_rule"
├── Rating-Group: 100
├── Online: 1 (تمكين الشحن عبر الإنترنت)
├── Offline: 0 (تعطيل الشحن غير المتصل)
├── Metering-Method: VOLUME (1)
├── Precedence: 100
├── Flow-Information: [...]
└── QoS-Information: [...]
المفاتيح AVPs للشحن في قواعد PCC:
| اسم AVP | رمز AVP | القيم | الوصف |
|---|---|---|---|
| Rating-Group | 432 | Unsigned32 | فئة الشحن (تتوافق مع التعرفة في OCS) |
| Online | 1009 | 0=تعطيل، 1=تمكين | تمكين الشحن عبر الإنترنت (Gy) |
| Offline | 1008 | 0=تعطيل، 1=تمكين | تمكين الشحن غير المتصل (Gz) |
| Metering-Method | 1007 | 0=المدة، 1=الحجم، 2=كلاهما | ما يجب قياسه |
| Reporting-Level | 1011 | 0=الخدمة، 1=مجموعة التصنيف | دقة تقارير الاستخدام |
مصفوفة قرار شحن الحامل
| عبر الإنترنت | غير متصل | مجموعة التصنيف | السلوك |
|---|---|---|---|
| 1 | 0 | موجودة | شحن عبر الإنترنت فقط (مدفوع مسبقًا) |
| 0 | 1 | موجودة | شحن غير متصل فقط (مدفوع لاحقًا) |
| 1 | 1 | موجودة | الشحن عبر الإنترنت وغير المتصل (متقارب) |
| 0 | 0 | - | لا شحن (خدمة مجانية) |
مجموعات تصنيف متعددة
يمكن أن يحتوي اتصال PDN واحد على عدة حوامل بمجموعات تصنيف مختلفة:
سيناريو المثال:
الحامل الافتراضي (الإنترنت)
├── مجموعة التصنيف: 100 (البيانات القياسية)
└── عبر الإنترنت: 1
الحامل المخصص 1 (بث الفيديو)
├── مجموعة التصنيف: 200 (خدمة الفيديو)
└── عبر الإنترنت: 1
الحامل المخصص 2 (صوت IMS)
├── مجموعة التصنيف: 300 (الصوت)
└── عبر الإنترنت: 1
سلوك PGW-C Gy:
- CCR-I واحد مع عدة أقسام MSCC (تحكم الائتمان لعدة خدمات):
CCR-Initial
├── Session-Id: "..."
└── Multiple-Services-Credit-Control
├── [مجموعة التصنيف: 100] → البيانات القياسية
├── [مجموعة التصنيف: 200] → خدمة الفيديو
└── [مجموعة التصنيف: 300] → الصوت
استجابة OCS:
CCA-Initial
└── Multiple-Services-Credit-Control
├── [مجموعة التصنيف: 100] → منح: 10 ميغابايت
├── [مجموعة التصنيف: 200] → منح: 5 ميغابايت (الفيديو أك��ر تكلفة)
└── [مجموعة التصنيف: 300] → منح: 60 ثانية
فرض الشحن لكل خدمة
PGW-C يتتبع الحصة لكل مجموعة تصنيف:
# كود زائف
state.charging_quotas = %{
100 => %{granted: 10_000_000, used: 0, threshold: 8_000_000},
200 => %{granted: 5_000_000, used: 0, threshold: 4_000_000},
300 => %{granted: 60_000, used: 0, threshold: 48_000} # مللي ثانية
}
مراقبة الاستخدام لكل حامل:
التحكم في الائت��ان لعدة خدمات
MSCC (تحكم الائتمان لعدة خدمات) AVP
الغرض: تجميع معلومات الشحن لخدمة/مجموعة تصنيف معينة
الهيكل:
Multiple-Services-Credit-Control (Grouped, AVP 456)
├── Service-Identifier (Unsigned32, AVP 439)
├── Rating-Group (Unsigned32, AVP 432)
├── Requested-Service-Unit (Grouped, AVP 437)
│ ├── CC-Time (Unsigned32, AVP 420)
│ ├── CC-Total-Octets (Unsigned64, AVP 421)
│ ├── CC-Input-Octets (Unsigned64, AVP 412)
│ └── CC-Output-Octets (Unsigned64, AVP 414)
├── Used-Service-Unit (Grouped, AVP 446)
│ └── [نفس الهيكل مثل Requested-Service-Unit]
├── Granted-Service-Unit (Grouped, AVP 431)
│ └── [نفس الهيكل مثل Requested-Service-Unit]
├── Validity-Time (Unsigned32, AVP 448)
├── Result-Code (Unsigned32, AVP 268)
└── Final-Unit-Indication (Grouped, AVP 430)
└── Final-Unit-Action (Enumerated, AVP 449)
Service-Identifier مقابل Rating-Group
| السمة | Service-Identifier | Rating-Group |
|---|---|---|
| الغرض | يحدد نوع الخدمة | يحدد فئة الشحن |
| المثال | 1=البيانات، 2=الصوت، 3=الرسائل القصيرة | 100=عادي، 200=مميز |
| الدقة | تصنيف واسع | تعرفة محددة |
| المطلوب | اختياري | مطلوب للشحن |
| التوافق | قد يتوافق مع عدة RGs | تعرفة واحدة في OCS |
مثال:
Service-Identifier: 1 (خدمة البيانات)
├── Rating-Group: 100 (البيانات القياسية - $0.01/ميغابايت)
└── Rating-Group: 200 (البيانات المميزة - $0.05/ميغابايت)
Service-Identifier: 2 (الصوت)
└── Rating-Group: 300 (المكالمات الصوتية - $0.10/دقيقة)
التكوين
تكوين Gy الأساسي
قم بتحرير config/runtime.exs:
config :pgw_c,
online_charging: %{
# تمكين أو تعطيل الشحن عبر الإنترنت عالميًا
enabled: true,
# مهلة اتصال OCS (بالمللي ثانية)
timeout_ms: 5000,
# الحصة الافتراضية المطلوبة (بايت) إذا لم يحددها PCRF
default_requested_quota: 10_000_000, # 10 ميغابايت
# نسبة العتبة لإعادة التفويض
# (0.8 = تحفيز CCR-Update عند استهلاك 80% من الحصة)
quota_threshold_percentage: 0.8,
# الإجراء عند حدوث مهلة OCS
# الخيارات: :block, :allow
timeout_action: :block,
# الإجراء عند عدم عودة OCS بأي ائتمان
# الخيارات: :terminate, :redirect
no_credit_action: :terminate,
# عنوان URL لإعادة التوجيه للشحن (يستخدم إذا كان no_credit_action: :redirect)
topup_redirect_url: "http://topup.example.com"
},
diameter: %{
listen_ip: "0.0.0.0",
host: "omni-pgw_c.epc.mnc999.mcc999.3gppnetwork.org",
realm: "epc.mnc999.mcc999.3gppnetwork.org",
# تكوين نظير OCS
peer_list: [
# PCRF للتحكم في السياسة (Gx)
%{
host: "pcrf.epc.mnc999.mcc999.3gppnetwork.org",
realm: "epc.mnc999.mcc999.3gppnetwork.org",
ip: "10.0.0.30",
initiate_connection: true
},
# OCS للشحن عبر الإنترنت (Gy)
%{
host: "ocs.epc.mnc999.mcc999.3gppnetwork.org",
realm: "epc.mnc999.mcc999.3gppnetwork.org",
ip: "10.0.0.40",
initiate_connection: true
}
]
}
شرح معلمات التكوين
enabled
true: الشحن عبر الإنترنت نشط، يتم إرسال رسائل CCR إلى OCSfalse: الشحن عبر الإنترنت معطل، لا توجد رسائل Gy
timeout_ms
- الوقت للانتظار لاستجابة CCA من OCS
- الموصى به: 3000-5000 مللي ثانية
default_requested_quota
- الحصة الافتراضية المطلوبة إذا لم يحددها PCRF
- القيم النموذجية: 1-100 ميغابايت
quota_threshold_percentage
- تحفيز CCR-Update عندما يتم استهلاك هذه النسبة المئوية من الحصة
- الموصى به: 0.75-0.85 (75%-85%)
- أعلى = عدد أقل من الرسائل، ولكن خطر استنفاد الحصة
- أقل = المزيد من الرسائل، ولكن أكثر أمانًا
timeout_action
:block- حظر حركة المرور إذا لم تستجب OCS (أكثر أمانًا، يمنع خسارة الإيرادات):allow- السماح بحركة المرور إذا لم تستجب OCS (أفضل تجربة مستخدم، خطر الإيرادات)
no_credit_action
:terminate- حذف الحامل عند نفاد الائتمان:redirect- إعادة التوجيه إلى بوابة الشحن
تكوين محدد للبيئة
الإنتاج (المشتركين المدفوعين مسبقًا):
config :pgw_c,
online_charging: %{
enabled: true,
timeout_action: :block,
no_credit_action: :terminate,
quota_threshold_percentage: 0.8
}
الاختبار/التطوير:
config :pgw_c,
online_charging: %{
enabled: false # تعطيل للاختبار
}
الهجين (بعض المدفوعين مسبقًا، وبعض المدفوعين لاحقًا):
config :pgw_c,
online_charging: %{
enabled: true, # يتم التحكم فيه لكل مشترك بواسطة PCRF
timeout_action: :allow, # لا تحظر المدفوعين لاحقًا عند فشل OCS
no_credit_action: :terminate
}
تدفقات الرسائل
جلسة ناجحة مع الشحن عبر الإنترنت
إعادة تفويض الحصة (CCR-Update)
استنفاد الائتمان (الوحدة النهائية)
معالجة مهلة OCS
معالجة الأخطاء
رموز النتائج
رموز النجاح:
| الرمز | الاسم | الإجراء |
|---|---|---|
| 2001 | DIAMETER_SUCCESS | الاستمرار مع الحصة الممنوحة |
الأخطاء المؤقتة (4xxx):
| الرمز | الاسم | إجراء PGW-C |
|---|---|---|
| 4010 | DIAMETER_TOO_BUSY | إعادة المحاولة مع التراجع |
| 4011 | DIAMETER_UNABLE_TO_COMPLY | تسجيل الخطأ، قد تعيد المحاولة |
| 4012 | DIAMETER_CREDIT_LIMIT_REACHED | إنهاء أو إعادة توجيه |
الأخطاء الدائمة (5xxx):
| الرمز | الاسم | إجراء PGW-C |
|---|---|---|
| 5003 | DIAMETER_AUTHORIZATION_REJECTED | رفض الجلسة |
| 5031 | DIAMETER_USER_UNKNOWN | رفض الجلسة (مشترك غير صالح) |
رموز النتائج لكل خدمة
مهم: يمكن أن يظهر Result-Code في مستويين:
- مستوى الرسالة - النتيجة العامة
- مستوى MSCC - نتيجة لكل خدمة
مثال:
CCA-Initial
├── Result-Code: DIAMETER_SUCCESS (2001) ← مستوى الرسالة: OK
└── Multiple-Services-Credit-Control
├── [مجموعة التصنيف: 100]
│ └── Result-Code: DIAMETER_SUCCESS (2001) ← RG 100: OK
└── [مجموعة التصنيف: 200]
└── Result-Code: DIAMETER_CREDIT_LIMIT_REACHED (4012) ← RG 200: لا ائتمان
سلوك PGW-C:
- السماح بحركة المرور لمجموعة التصنيف 100
- حظر حركة المرور لمجموعة التصنيف 200
التكامل مع Gx
تحدد واجهة Gx (التحكم في سياسة PCRF) ما إذا كان الشحن عبر الإنترنت مطلوبًا وتوفر مجموعة التصنيف التي تحرك شحن Gy. انظر واجهة Diameter Gx لوثائق التحكم في السياسة الكاملة.
العلاقة بين Gx و Gy
تدفق التكامل
1. إعداد الحامل:
يتلقى PGW-C طلب إنشاء جلسة
↓
إرسال CCR-I إلى PCRF (Gx)
↓
استلام CCA-I مع قواعد PCC
↓
تحليل قواعد PCC:
- هل تحتوي القاعدة على مجموعة تصنيف؟
- هل عبر الإنترنت = 1؟
↓
إذا كان الجواب نعم:
إرسال CCR-I إلى OCS (Gy) مع مجموعة التصنيف
↓
استلام CCA-I مع الحصة
↓
إذا تم منح الحصة: تابع
إذا لم يكن هناك ائتمان: رفض الحامل
إذا كان الجواب لا:
تابع بدون شحن عبر الإنترنت
2. تحديث السياسة الديناميكية (RAR من PCRF):
يرسل PCRF RAR (طلب إعادة التفويض) على Gx
↓
إضافة قاعدة PCC جديدة مع عبر الإنترنت=1، مجموعة التصنيف=200
↓
يرسل PGW-C CCR-U إلى OCS (Gy)
- إضافة MSCC لمجموعة التصنيف 200
↓
يمنح OCS حصة للخدمة الجديدة
↓
تثبيت حامل مخصص مع شحن عبر الإنترنت
استكشاف الأخطاء وإصلاحها
المشكلات الشائعة
1. مهلات CCR-Initial إلى OCS
الأعراض:
- تفشل الجلسات مع "مهلة OCS"
- السجل: "مهلة CCR-Initial (Gy)"
الأسباب المحتملة:
- OCS غير قابل للوصول
- عنوان OCS غير صحيح في التكوين
- جدار الحماية يحظر منفذ Diameter (3868)
- OCS محملة
الحل:
# اختبار الاتصال الشبكي
ping <ocs_ip>
# اختبار منفذ Diameter (TCP 3868)
telnet <ocs_ip> 3868
# تحقق من التكوين
# تأكد من تكوين نظير OCS في peer_list
2. الجلسات المرفوضة بواسطة OCS
الأعراض:
- CCA-I مع Result-Code != 2001
- فشل استجابة إنشاء الجلسة
رموز النتائج الشائعة:
| رمز النتيجة | السبب المحتمل | الحل |
|---|---|---|
| 4012 | تم الوصول إلى حد الائتمان | يحتاج المشترك إلى الشحن |
| 5003 | تم رفض التفويض | تحقق من أذونات المشترك |
| 5031 | المستخدم غير معروف | توفير المشترك في OCS |
خطوات التصحيح:
- تحق�� من سجلات OCS لمعرفة سبب الرفض
- تحقق من رصيد المشترك في OCS
- تحقق من أن IMSI/MSISDN في CCR-I يتطابق مع سجل المشترك
3. عدم اكتشاف استنفاد الحصة
الأعراض:
- يواصل المستخدم استخدام البيانات بعد نفاد الرصيد
- لم يتم إرسال CCR-Update
الأسباب المحتملة:
- URR (قاعدة تقرير الاستخدام) غير مثبتة في PGW-U
- العتبة غير مكونة بشكل صحيح
- لم يتم استلام تقارير جلسة PFCP
خطوات التصحيح:
-
تحقق من URR في إنشاء جلسة PFCP:
إنشاء URR
├── URR-ID: 1
├── Measurement-Method: VOLUME
├── Volume-Threshold: 8000000 (8 ميغابايت)
└── Reporting-Triggers: VOLUME_THRESHOLD -
تحقق من سجلات PGW-U لتقارير الاستخدام
-
تحقق من
quota_threshold_percentageفي التكوين
4. مجموعة التصنيف غير الصحيحة
الأعراض:
- يرفض OCS مع "مجموعة تصنيف غير معروفة"
- تفشل الجلسات
السبب:
- مجموعة التصنيف في CCR-I لا تتطابق مع تكوين OCS
- PCRF زود مجموع�� تصنيف غير صالحة
الحل:
- تحقق من مجموعة التصنيف في قاعدة PCC من PCRF
- تحقق من تكوين OCS لمجموعات التصنيف الصالحة
- تأكد من التوافق بين قواعد PCC والتعريفات في OCS
المراقبة
المقاييس الرئيسية
# معدلات رسائل Gy
rate(gy_inbound_messages_total{message_type="cca"}[5m])
rate(gy_outbound_messages_total{message_type="ccr"}[5m])
# معدلات أخطاء Gy
rate(gy_inbound_errors_total[5m])
# أحداث استنفاد الحصة
rate(gy_quota_exhausted_total[5m])
# معدل مهلة OCS
rate(gy_timeout_total[5m])
# مدة معالجة رسائل Gy
histogram_quantile(0.95, rate(gy_inbound_handling_duration_bucket[5m]))
التنبيهات
# تنبيه على ارتفاع معدل أخطاء Gy
- alert: GyErrorRateHigh
expr: rate(gy_inbound_errors_total[5m]) > 0.1
for: 5m
annotations:
summary: "تم الكشف عن ارتفاع معدل أخطاء Gy"
# تنبيه على مهلة OCS
- alert: OcsTimeout
expr: rate(gy_timeout_total[5m]) > 0.05
for: 2m
annotations:
summary: "تحدث مهلات OCS"
# تنبيه على ارتفاع معدل استنفاد الائتمان
- alert: CreditExhaustionSpike
expr: rate(gy_quota_exhausted_total[5m]) > 10
for: 5m
annotations:
summary: "ارتفاع معدل استنفاد الائتمان"
واجهة المستخدم على الويب - محاكي التحكم في الائتمان Gy
يتضمن OmniPGW محاكي Gy/Ro مدمج لاختبار وظيفة الشحن عبر الإنترنت دون الحاجة إلى OCS خارجي.
الوصول: http://<omnipgw-ip>:<web-port>/gy_simulator

الغرض: اختبار ومحاكاة سيناريوهات الشحن عبر الإنترنت للمشتركين المدفوعين مسبقًا
الميزات:
1. معلمات الطلب
- IMSI - هوية المشترك (مثل "310170123456789")
- MSISDN - رقم الهاتف (مثل "14155551234")
- الوحدات المطلوبة - مقدار الحصة المطلوبة (بالبايت)
- معرف الخدمة - معرف نوع الخدمة
- مجموعة التصنيف - فئة الشحن
2. محاكاة CCR-I
- إرسال CCR-Initial (طلب التحكم في الائتمان الأولي)
- يحاكي طلب الحصة الأولية أثناء إنشاء الجلسة
- يختبر تكامل OCS دون حركة مرور حية
3. حالات الاستخدام
- اختبار التطوير - اختبار واجهة Gy أثناء التطوير
- تكامل OCS - التحقق من الاتصال واستجابات OCS
- اختبار الحصة - اختبار سيناريوهات حصة مختلفة
- استكشاف الأخطاء - تصحيح مشكلات الشحن
- عرض توضيحي - عرض الشحن عبر الإنترنت لأصحاب المصلحة
كيفية الاستخدام:
1. أدخل تفاصيل المشترك (IMSI، MSISDN)
2. اضبط الوحدات المطلوبة (مثل 1000000 لـ 1 ميغابايت)
3. تكوين معرف الخدمة ومجموعة التصنيف
4. انقر على "إرسال CCR-I"
5. عرض استجابة OCS والحصة الممنوحة
الفوائد:
- لا حاجة لـ OCS خارجي أثناء الاختبار
- تحقق سريع من منطق الشحن
- بيئة اختبار آمنة
- مفيدة للتدريب والعروض التوضيحية
الوثائق ذات الصلة
الشحن والسياسة
- واجهة Diameter Gx - التحكم في سياسة PCRF، قواعد PCC التي تحفز الشحن عبر الإنترنت
- تنسيق CDR للبيانات - سجلات الشحن غير المتصل للفواتير المدفوعة لاحقًا
- دليل التكوين - معلمات تكوين الشحن عبر الإنترنت الكاملة
إدارة الجلسات
- إدارة الجلسات - دورة حياة جلسة PDN، إدارة الحامل
- واجهة PFCP - تقرير الاستخدام من PGW-U عبر URRs
- واجهة S5/S8 - إعداد وتفكيك الحامل GTP-C
العمليات
- دليل المراقبة - مقاييس Gy، تتبع الحصة، تنبيهات مهلة OCS
- تخصيص IP لـ UE - تكوين مجموعة IP للجلسات المشحونة