# إحصائيات التطبيق والمشتركين

## getAppStats

احصل على إحصائيات تطبيق معين لفترة زمنية محددة.

`POST` `https://api.pushwoosh.com/json/1.3/getAppStats`

##### معلمات جسم الطلب

| الاسم   <div style="width:150px"></div>         | مطلوب | النوع   | الوصف                                                                                      |
|--------------|----------|--------|--------------------------------------------------------------------------------------------------|
| `auth`       | نعم      | string | [رمز الوصول إلى API](/ar/developer/api-reference/api-access-token/) من لوحة تحكم Pushwoosh.   |
| `application`| نعم      | string | [رمز تطبيق Pushwoosh](/ar/developer/api-reference/api-identifiers/#application-code)                                                                    |
| `datefrom`   | نعم      | string | تاريخ ووقت بدء فترة التقرير. التنسيق: `Y-m-d H:i:s`.                            |
| `dateto`     | نعم      | string | تاريخ ووقت انتهاء فترة التقرير. التنسيق: `Y-m-d H:i:s`.                              |

##### مثال على الطلب
```json
{
  "request": {
    "auth": "yxoPUlwqm…………pIyEX4H",    // required. API access token from Pushwoosh Control Panel
    "application": "XXXXX-XXXXX",      // required. Pushwoosh application code
    "datefrom": "2013-06-04 00:00:00", // required. Date and time, start of the reporting period
    "dateto": "2013-06-07 00:00:00"    // required. Date and time, end of the reporting period
  }
}
```

##### مثال على الاستجابة

```json
{
  "status_code": 200,
  "status_message": "OK",
  "response": {
    "request_id": "c93a202f439235f9adaaa06d651548ab"
  }
}
```
### فهم الإحصائيات

تعرض الإحصائيات الإجراءات المسجلة لتطبيق أو جهاز أو رسالة ضمن الإطار الزمني المحدد.

يتم تجميع التقارير تلقائيًا باستخدام القواعد التالية:
- **سنويًا**: إذا كانت الفترة أطول من عام واحد.
- **شهريًا**: إذا كانت الفترة أطول من شهر واحد.
- **يوميًا**: إذا كانت الفترة أطول من يوم واحد.
- **ساعيًا**: إذا كانت الفترة أطول من ثلاث ساعات.
- **دقيقًا**: في جميع الحالات الأخرى.

##### أنواع الإجراءات

- **على مستوى التطبيق**: `_open_`, `_install_`
- **على مستوى الجهاز**: `_register_`, `_unregister_`
- **على مستوى الرسالة**: `_send_`, `_open_`

##### تنسيق الاستجابة
جميع كائنات الإحصائيات لها نفس التنسيق:
| الحقل   <div style="width:150px"></div>     | النوع   | الوصف                                        |
|------------|--------|----------------------------------------------------|
| `formatter`| string | مقياس التقرير: سنوي، شهري، يومي، ساعي، دقيق. |
| `rows`     | list   | يحتوي على بيانات التقرير لكل إجراء مسجل.  |

يحتوي كل صف في التقرير على:

| الحقل  <div style="width:150px"></div>     | النوع   | الوصف                              |
|-----------|--------|------------------------------------------|
| `count`   | int    | عدد الإجراءات المسجلة.           |
| `action`  | string | نوع الإجراء المسجل.          |
| `datetime`| string | تاريخ منسق: `Y-m-d H:i:s`.         |

### استرداد نتائج الطلبات المجدولة

<Aside type="caution" title="مهم">
كما هو الحال مع كل طلب مجدول، يتطلب `/getAppStats` طلبًا إضافيًا لـ [`/getResults`](/ar/developer/api-reference/scheduled-requests#getresults).
</Aside>

##### جسم الاستجابة

| الحقل   <div style="width:150px"></div>   | النوع   | الوصف                                                                                              |
|-------------|--------|----------------------------------------------------------------------------------------------------------|
| `request_id`| string | معرف الطلب المجدول. ارجع إلى [`/getResults`](/ar/developer/api-reference/scheduled-requests#getresults) لمزيد من التفاصيل. |

##### جسم الاستجابة المجدولة (/getResults)

| الحقل   <div style="width:150px"></div>        | النوع       | الوصف                       |
|--------------|------------|-----------------------------------|
| `applications`| dictionary | إحصائيات التطبيقات.    |
| `devices`     | dictionary | إحصائيات الأجهزة.         |
| `messages`    | dictionary | إحصائيات الرسائل.        |

##### مثال
```json 
{
  "error": {
    "code": 0,
    "message": "OK"
  },
  "json_data": {
    "applications": {
      "formatter": "hourly",
      "rows": [{
        "count": 0,
        "action": "open",
        "datetime": "2013-06-06 00:00:00"
      }, {
        ...
      }]
    }
  }
}
```

## getApplicationSubscribersStats

يعرض قائمة مشتركي التطبيق مجمعة حسب أنواع أجهزتهم.

`POST` `https://api.pushwoosh.com/json/1.3/getApplicationSubscribersStats`

##### جسم الطلب

| الاسم    <div style="width:150px"></div>        | مطلوب | النوع   | الوصف                                                                                      |
|--------------|----------|--------|--------------------------------------------------------------------------------------------------|
| `auth`       | نعم      | string | [رمز الوصول إلى API](/ar/developer/api-reference/api-access-token/) من لوحة تحكم Pushwoosh.   |
| `application`| نعم      | string | [رمز تطبيق Pushwoosh](/ar/developer/api-reference/api-identifiers/#application-code)                                                                     |

**مثال على الطلب**

```json
{
  "request": {
    "auth": "yxoPUlwqm…………pIyEX4H", // required. API access token from Pushwoosh Control Panel
    "application": "XXXXX-XXXXX"    // required. Pushwoosh application code
  }
}
```

<Tabs>
<TabItem label="200">
```json
{
  "status_code": 200,
  "status_message": "OK",
  "response": {
    "IOS": 1,
    "ANDROID": 1,
    "OSX": 0,
    "WINDOWS": 0,
    "AMAZON": 0,
    "SAFARI": 0,
    "FIREFOX": 0
  }
}
```
</TabItem>
</Tabs>

## getSubscribersStatistics

يسترد إحصائيات مشتركي التطبيق لفترة زمنية.

`POST` `https://api.pushwoosh.com/api/v2/statistics/application/getSubscribersStatistics`

##### الترويسات

| الاسم       <div style="width:150px"></div>        | مطلوب | الوصف                                                                                                  |
|-----------------|----------|--------------------------------------------------------------------------------------------------------------|
| Authorization   | نعم      | [رمز الوصول إلى API](/ar/developer/api-reference/api-access-token/) بالتنسيق: `Key PKX.......NHg`.          |
| Content-Type    | نعم      |  يجب أن يكون `application/json`.                                                                           |

##### معلمات جسم الطلب

| الاسم       <div style="width:150px"></div>         | مطلوب | النوع   | الوصف                                                              |
|------------------|----------|--------|--------------------------------------------------------------------------|
| application_code | نعم      | string | [رمز تطبيق Pushwoosh](/ar/developer/api-reference/api-identifiers/#application-code)                                     |
| timestamp_from   | نعم      | string | تاريخ ووقت بدء فترة الإحصائيات (التنسيق: `YYYY-MM-DD hh:mm:ss`، UTC+0). |
| timestamp_to     | نعم      | string | تاريخ ووقت انتهاء فترة الإحصائيات (التنسيق: `YYYY-MM-DD hh:mm:ss`، UTC+0).   |

**مثال على الطلب**
```shell
curl --location --request POST 'https://api.pushwoosh.com/api/v2/statistics/application/getSubscribersStatistics' \
--header 'Authorization: Key 3a2X......828JreCk48f' \
--header 'Content-Type: application/json' \
--data-raw '{
   "application_code": "12345-67890",        // Pushwoosh app code
   "timestamp_from": "2022-08-01 00:00:00",  // UTC+0
   "timestamp_to": "2022-09-01 00:00:00"     // UTC+0
}'
```

**مثال على الاستجابة**
```json
{
  "statistics": [{
    "timestamp": "YYYY-MM-DD hh:mm:ss", // UTC+0
    "platform": 1,
    "push_enabled": 100,
    "push_disabled": 100
  }]
}
```
**رموز الاستجابة**
<Tabs>
  <TabItem label="200: OK">
    ```json
    {
      "statistics": [{
        "timestamp": "YYYY-MM-DD hh:mm:ss",
        "platform": 1,
        "push_enabled": 100,
        "push_disabled": 100
      }]
    }
    ```

    **الشرح**: كان الطلب ناجحًا، وتم إرجاع الإحصائيات.
  </TabItem>

  <TabItem label="400: طلب غير صالح">
    ```json
    {
      // Response
    }
    ```

    **الشرح**: كان الطلب يحتوي على صيغة أو معلمات غير صالحة.
  </TabItem>

  <TabItem label="500: خطأ داخلي في الخادم">
    ```json
    {
      // Response
    }
    ```

    **الشرح**: واجه الخادم خطأ. حاول مرة أخرى لاحقًا.
  </TabItem>

  <TabItem label="401: غير مصرح به">
    ```json
    {
      // Response
    }
    ```

    **الشرح**: فشلت المصادقة. تحقق من مفتاح API أو الرمز المميز الخاص بك.
  </TabItem>

  <TabItem label="403: محظور">
    ```json
    {
      // Response
    }
    ```

    **الشرح**: تم رفض الوصول لرمز التطبيق المحدد.
  </TabItem>

  <TabItem label="404: غير موجود">
    ```json
    {
      // Response
    }
    ```

    **الشرح**: لم يتم العثور على رمز التطبيق أو أنه غير موجود.
  </TabItem>
</Tabs>

### قواعد الفاصل الزمني للوقت

<Aside type="note">
يرجى مراعاة أن الفواصل الزمنية بين الطوابع الزمنية في الاستجابة تعتمد على الفترة التي ترسلها في طلبك على النحو التالي:

* إذا طلبت الإحصائيات لفترة أطول من عام واحد، فسيكون الفاصل الزمني لإحصائيات الطوابع الزمنية عامًا واحدًا
* إذا كانت فترة الإحصائيات تساوي عامًا واحدًا، فإن الفاصل الزمني بين الطوابع الزمنية للاستجابة يساوي شهرًا واحدًا
* للفترات الأطول من شهر ولكن أقل من عام، سيتم إرجاع إحصائيات لكل يوم
* للفترات الأقل من شهر، ستتضمن الاستجابة إحصائيات لكل ساعة
</Aside>

| الفترة المطلوبة   <div style="width:350px"></div>    | الفاصل الزمني في الاستجابة   <div style="width:350px"></div>   |
|-------------------|--------------------|
| أكثر من عام واحد  | عام واحد              |
| عام واحد           | شهر واحد             |
| شهر واحد - عام واحد | يوم واحد               |
| أقل من شهر واحد| ساعة واحدة              |