Evand Advertising Campaign

سلام
نمی دانم ز کجا شروع  کنم. پس شروع می کنم.

خوب، هدف این تسک بر این بوده که مشترکین بدبخت رو هم بشه مورد هدف قرار داد. ولی از آنجایی که سیستم کمپین تبلیغاتی ایوند طوری طراحی و ساخته شده که نمی شه به راحتی توسعه اش داد، تصمیم گرفتیم از صفر همان ایده های قبلی رو با ساختاری دوست داشتی و قابل توسعه، بنویسیم و کنارشان اشاره ای هم به مشترکین بدبختر از همیشه داشته باشیم.

تصمیم بر این شد که ریسورس هایی برای این منظور، مدیریت کمپین های تبلیغاتی ایجاد بشه و فرانتش هم توسط همکار گرامی اینجانب، خانم دشتی، نوشته بشه و با ریسورس های نوشته شده تعامل بشه تا به هدف شوم خویش برسیم.

این صفحه به مرور زمان آپدیت می شه تا اینکه تسکه تمام شه و مواردی که اضافه می شه امکان تغییر رو هم دارند. علاوه بر مواردی که قرار بر اضافه شدنان هست.


ایجاد کمپین جدید
اولین ریسوس نوشته شده، جهت ایجاد کمپین جدید می باشد.
برای این منظور یه سری دیتا نیازه به ریسورس مربوطه اش ارسال شود.
توجه کنید که برخی فیلدها وابسته به مقدار دیگر فیلدها خواهد بود و برخی فیلدها نسبت به شرایط دیگر فیلدها می تونه اجباری و یا اختیاری باشه.

برای ایجاد کمپین جدید درخواست زیر رو به ریسورس مربوطه ارسال می کنیم:
POST https://api.evand.com/advertising-campaigns
{
"channel" : "sms",
"description": "test",
"event_id": 1610,
"discount_code": "amir",
"utm" : "?hello-world"
"maximum_intended_receivers" : 1,
"subject": "عنوان ایمیل",
"sender_name" : "Hossein ‌aghayi",
"send_date": "2018-10-01 12:00:00",
}

خوب بریم بررسی پارامترهایی که نیازه ارسال بشه:
مورد اول channel هست. این فیلد دو مقدار email و sms می تونه داشته باشه. به این معنی که کمپین برای ارسال ایمیل خواهد بود و یا پیامک.
فیلدهای دیگری که به email وابسته هستن subject و sender_name هست. در صورتی که کانال ایمیل انتخاب شه، فیلد subject اجباری خواهد بود زیرا برای ایمیل نیازه به موضوع داریم.
فیلد sender_name هم برای ایمیل استفاده می شه که اسم ارسال کننده تعیین و مشخص بشه و در صورتی که مقداری برای این فیلد تعیین نشه، از اسم برگزار کننده رویداد استفاده می شه.
نکته بعدی اینکه برای کانال ایمیل، در صورتی که مقدار event_id تعیین نشه و کمپین بدون رویداد داشته باشیم، ارسال مقدار sender_name اجباری خواهد بود. 

فیلد description چه برای ایمیل و چه برای پیامک اجباری هست. توجه کنید که برای ایمیل مقدار این فیلد می تونه دارای تگ های html باشه ولی برای پیامک باید فقط متن ساده باشه.

فیلد event_id و discount_code و utm هر سه با هم استفاده می شه و برای این هست که لینک به رویداد همراه با کد تخفیف و البته دارای utm ایجاد و در متن کمپین ارسالی قابل دید و کلیک باشه.
البته استفاده دوم event_id هم همانطور که اشاره شد بهش، برای دسترسی به اسم سازمان رویداد برای استفاده به عنوان sender_name است. در صورتی که sender_name تعیین نشده باشه.

فیلد maximum_intended_receivers  برای تعیین حداکثر افرادی که باید کمپین براشون اجرا و ارسال بشه.

فیلد send_date هم برای تعیین زمانی که کمپین نیازه اجرا بشه.


ریسورس دریافت هر کمپین مشخص
برای دریافت اطلاعات هر کمپین، می توانید از ریسورس زیر اقدام نمایید:
GET https://api.evand.com/advertising-campaigns/{campaignId}
{
    "data": {
        "id": {campaignId},
        "channel": "email",
        "state": "pending",
        "event_id": 1610,
        "discount_code": "amir",
        "utm": "?hello-world",
        "subject": "عنوان ایمی",
        "description": "test",
        "sender_name": "",
        "maximum_intended_receivers": 1,
        "send_date": "2018-10-01T12:00:00+0330"
    }
}


ریسورس لیست کمپین ها
برای لیست کمپین و نمایش اطلاعات کلی برای هر کمپین می توانید از ریسورس زیر اقدام نمایید:
GET https://api.evand.com/advertising-campaigns
{
    "data": [
        {
            "id": 125,
            "channel": "email",
            "subject": "عنوان ایمی",
            "send_date": "2018-10-01T12:00:00+0330",
            "state": "pending",
            "event": {
                "id": 1610,
                "name": "test",
                "url": "https://evand.com/events/testasli",
                "start_date": "2019-02-10T12:00:00+0330",
                "deleted": false
            },
            "maximum_intended_receivers": 1,
            "targeted_contacts_count": 0
        }
    ],
    "meta": {
        "pagination": {
            "total": 86,
            "count": 10,
            "per_page": 10,
            "current_page": 1,
            "total_pages": 9,
            "links": {
                "next": "http://api.evand.abc/advertising-campaigns?page=2"
            }
        }
    }
}

توجه نمایید که ساختار دیتای لیست کمپین ها با ریسورس ای که بصورت تکی می شه کمپین ها رو گرفت فرق می کنه و یکسان نیستند.
دلیل این مسئله اینه که یه سری اطلاعات فقط در لیست نمایش داده می شه و بالعکس که نیاز نبود در هر دو جا در دسترسی باشه.
در صورت نیاز به دیتای خاصی، لطفا با پشتیبانی تماس حاصل نمایید.


تغییر وضعیت کمپین
می رسیم به مبحث غیر شیرین تغییر وضعیت کمپین ای.
هیچی دیگه یه درخواست می فرستین وضعیتش تغییر کنه:
PUT https://api.evand.com/advertising-campaigns/{campaignId}/state
{
"state" : "pending"
}

لیست وضعیت های موجود فعلی به این شرح است:
pending, accepted, rejected, sending, sent

چه نکته در مورد تغییر وضعیت کمپین ای:
  •  امکان تغییر به وضعیت ارسال شده (sent) در حال حاضر برای هیچ  کمپین ای وجود ندارد.
  • امکان تغییر به هیچ وضعیت دیگه ای وقتی وضعیت فعالی در حال ارسال است (sending) هم وجود ندارد.
  • در صورتی که مقدار جدید برابر با مقدار فعلی باشه هم قابل قبول نیست. این مورد آنچنان مهم نیست و در صورتی که اذیت کننده باشه می تونیم برش داریم.
  • گزینه های انتخابی از لیست فوق فقط می تونه باشه.

لیست وضعیت های موجود کمپین

این ریسورس لیست وضعیت های موجود رو در دسترس قرار می ده. دو گزینه داره یکی list که لیست خام وضعیت هاست. دیگری states_campaign_count که تعداد هر کمپین زیر اون وضعیت رو می شماره و نشان می ده. یعنی مثلا  X تا کمپین در حال ارسال هستن  تا تایید شدن و ...

GET https://api.evand.com/advertising-campaigns/states
{
    "data": {
        "list": [
            "pending",
            "accepted",
            "rejected",
            "sending",
            "sent"
        ],
        "states_campaign_count": {
            "pending": 98,
            "accepted": 1,
            "rejected": 1,
            "sending": 0,
            "sent": 1
        }
    }
}

مورد بعدی اینکه برای بدست آوردن جمع کمپین ها، می شه کل آیتم های states_campaign_count رو جمع کرد که کلش بدست بیاد.



کپی کمپین
بله، داستان از این قرار است.

برای کپی کمپین ای، کافیست تنها یک عدد درخواست COPY به ریسورس مربوطه ارسال نمایید.
بجای GET یا POST از COPY استفاده کنید.
COPY https://api.evand.com/advertising-campaigns/{campaignId}
{
    "data": {
        "id": {newly created campaign id}
    }
}

همین دیگه. یه کمپین از رو کمپین ای که در url مشخص شده تعیین و آی دی کمپین جدیده ایجاد شده هم در بدنه :) برگشتی قابل دسترسی خواهد بود.


حذف کمپین
برای حذف کمپین ای درخواست delete رو به ریسورس مربوطه ارسال می کنیم:
DELETE https://api.evand.com/advertising-campaigns/{campaignId}

در صورتی که کمپین ای پیدا نشه خطای ۴۰۴ و در غیراینصورت کمپین حذف و کد ۲۰۴ برگشت داده می شه.


آپدیت کمپین
برای آپدیت کمپین، نیازه کل دیتاها ارسال شود. در صورتی که فیلدی ارسال نشه و اختیاری بوده باشه و یا مقدار null باشه  و از ولیدیشن رد شه، به این معنی است که مقدارش پاک خواهد شد.
در حال حاضر آپدیت فیلد خاصی پشتیبانی نمی شه و در صورت نیازه لطفا اطلاع داده شود که لحاظ شود.

پس به این نتیجه می رسیم که برای آپدیت، کل فیلدهایی که هنگام ساخت هم می فرستیم رو بفرستیم و در غیراینصورت برابر با تغییر مقدار فعلیش خواهد بود.

برای آپدیت کمپین ای درخواست زیر رو به ریسورس مربوطه اش ارسال می کنیم:
PUT https://api.evand.com/advertising-campaigns/{campaignId}
{
"description": "ttttt",
"event_id": null,
"discount_code": null,
"channel" : "email",
"maximum_intended_receivers" : 100,
"subject": "عنوان ایمی",
"sender_name" : "bala",
"send_date": "2018-10-01 12:00:00",
"utm" : "?hello-world"
}

مطلب خاص دیگه ای برای آپدیت نیست و همین.

یه نکته دیگه اینکه مقدار پارامتر maximum_intended_receivers باید بزرگتر از تعداد ارسالی های فعلی کمپین باید باشه. یعنی اگه مقدار فیلد targeted_contacts_count برابر ۱۰۰ باشه، باید برای پارامتر maximum_intended_receivers مقداری بزرگتر از ۱۰۰ رو تعیین کنید.


تست کمپین
بله، نوبت تست فرا می رسد. تستی که درش هیچ گونه شکی نیست. اگر هم باشد شک نیست.

برای تست کافیست اطلاعات تماس، ایمیل و یا موبایل بسته به نوع کانال ارتباطی کمپین، به ریسورس مربوطه ارسال گردد.

برای درخواست تست اینگونه عمل می کنیم:
POST https://api.evand.com/advertising-campaigns/{campaignId}/test
{
"contact_info": "a_valid_email@gmail.com"
}

و یا

{
"contact_info": "a valid phone number"
}

برای موبایل گزینه های زیر قابل قبول هست:
  • +989XXXXXXXXX
  • 9XXXXXXXXX
  • 09XXXXXXXXX


و در نهایت با یک عدد ایمیل و یا پیامک خوشمزه ای، مهمان ما خواهید بود.


آمار کمپین
یه آماری داریم دارای جزئیات بیشتری از تعداد ارسالی اینا که روی کمپین قرار داره، هست.
دو نوع آمار می تونیم بدیم.
یه آمار ایوندی که ساده است. تعداد فیل شده ها و تعداد ارسالی موفق.
یه آمار هم مربوط به سرویس دهنده هست که فعلا برای ایمیل دیتا می دیم و برای پیامک ها روش کار نشده و دیتایی در دسترسی نداریم که قرار بدیم در نتیجه در صورتی که کمپین کانالش پیامک باشه مقدار این فیلد همیشه خالی خواهد بود.

برای دریافت آمار مربوطه به این شکل عمل می کنیم:

GET https://api.evand.com/advertising-campaigns/{campaignId}/statistics
{
    "data": {
        "service_provider": [
            {
                "date": "2018-11-04T00:00:00+0330",
                "bounce": 0,
                "open": 295,
                "unique_open": 272,
                "dropped": 2,
                "click": 43,
                "spam": 0,
                "sent": 3495,
                "invalid": 0
            },
            {
                "date": "2018-11-05T00:00:00+0330",
                "bounce": 1,
                "open": 594,
                "unique_open": 526,
                "dropped": 27,
                "click": 39,
                "spam": 0,
                "sent": 16474,
                "invalid": 0
            }
        ],
        "evand": {
            "targeted_contacts_count": 0,
            "failed_targeted_contacts_count": 0
        }
    }
}

همونطور که می بینید دو نوع evand و service_provider داریم.

از evand شروع می کنیم که ساده تریشنش همین هست. دو فیلد targeted_contacts_count که تعداد ارسال های موفق و failed_targeted_contacts_count که تعداد ارسال های ناموفق رو نشان می ده.

مورد بعدی service_provider هست که دیتاهاش از سرویس دهنده  می یاد. فعلا ایمیل رو پشتیبانی می کنیم که دیتاهاش مستقیم از Pepipost گرفته می شه. و بخاطر همین مقداری کاهش سرعت پاسخ از ریسورس مربوطه رو خواهیم داشت.
این فیلد service_provider بصورت آرایه هست. دلیل این امر هم اینه که ممکنه یه کمپین ای چندین بار اجرا و ارسال شده باشه که سرویس دهنده لطف کرده و هر کدام رو جداگانه برامون در دسترس قرار می ده. یه سری از دیتاهاش رو اینجا لیست کردیم. به غیر از مواردی مثل soft bounce و hard bounce و اینا که بنظر مهم نمی آمد. خواسته شود می شه بعدا هم اضافه شون کرد.

فیلدهاشم باید مشخص باشه و نیازی به توضیح نباشه. فقط برای هر آیتم یه فیلد date داریم که بهتره اونم به کاربر نهایی نشان داده شود و طرف بدونه آمارها برای کدام ارسالی هست که اینطوری از هم متمایز بشن.


فیلتر لیست کمپین‌ها با وضعیت کمپین

یه فیلتر ساده برای اینکه کمپین هایی که ارسال شده باشن، در حال ارسال، منتظر و … رو فقط لیست کرد.

برای فیلتر مقداری state رو به عنوان پارامتری در query string تعیین و به ریسورس مربوطه ارسال کنید:

GET https://api.evand.com/advertising-campaigns?state={DESIRED_STATE}

خرجیش هم مثل لیست کمپین خواهد بود و فقط کمپین با وضعیت تعیین شده خواهد بود.
دو حالت دیگه هم که وجود داره اینه که در صورتی که مقدار state خالی باشه، اتفاق خاصی نمی افته و کل کمپین ها لیست می شه و بصورت عادی.

ولی در صورتی که مقدار state تعیین شده و اشتباه باشه فریادی بر سر کشیده خواهد شد که لرزه بر تن آدم و عالم وارد شود. البته با صدای طنین انداز ۵۰۰.

لیست وضعیت های موجود به این شرح است:


  • pending
  • accepted
  • rejected
  • sending
  • sent

فیلترها
فیلتر ها برای اینه که سیستم تشخیص بده چه کسی رو مورد هدف خود قرار بده و بهشون پیام های عاشقانه بفرسته. مثلا از لیست کاربران ایوند در فلان شهر باشه و به فلان موضوع علاقمند باشه.

فعلا دو نوع فیلتر داریم. کاربران ایوند، مشترکین بدبخت.

برای مدیریت فیلترها یه ریسورس داریم که عمل حذف و اضافه و آپدیت اینا همه توشون خلاصه شده.
کارش اینه که فیلترهای ارسالی بهش رو با هر چی داره جایگزین می کنه. در نتیجه برای حذف و آپدیت و ایجاد و یا هرچی، فقط کافیه آخرین نسخه از فیلترها به ریسورس مربوطه ارسال شه.

توجه کنید که فیلترها نیازه به صورت لیست به ریسورس مربوطه ارسال بشه. چه یه فیلتر باشه چه بیش از یدونه.

برای ارسال فیلترها بدین صورت عمل می کنیم:
POST https://api.evand.com/advertising-campaigns/{campaignId}/filters
[]

باعث پاک شدن فیلترها می شه.

POST https://api.evand.com/advertising-campaigns/{campaignId}/filters
[
{
"filter_type": "evand_users",
"filter_params": {
"total_contact": -1,
"provinces": [1],
"categories": [-1]
}
},
{
"filter_type": "subscribers",
"filter_params": {
"provinces": [1, 2],
"categories": [1]
}
}
]

الان دو فیلتر ارسال شدن و دو فیلتر برای کمپین مربوطه ثبت می شه.


ساختار دیتایی که قراره به ریسورس ارسال شه بدین شرح می باشد:
آرایه ای که شامل آبجکت های قشنگ مشنگ می باشد.
آبجکت ها هم دارای دو پارامتر می باشند. یکی نوع فیلتر رو تعیین می کنه (filter_type) که ریسورس بهش احساسه و چک می شه که مقدارش معتبر باشه.

پارامتر بعدی پارامترهای فیلتر هستن که اختیاری هستن و البته مقدارش توسط سرور بررسی آن چنانی نمی شه. از آنجایی هم که پارامترهای فیلتر ها هم اختیاری هست می تونید نفرستیدشون و اتفاق خاصی نباید بیفته و مقدار پیش فرض در نظر گرفته می شه.

خوب یه توضیح در مورد فیلترها بدم:


فیلتر کاربران ایوند (evand_users)
برای اینه که بتونیم کاربران ایوند خود را مورد هدف قرار دهیم.
پارامترهاشم بدین صورته که می شه تعداد کاربران ای که از این فیلتر می خواهیم برداریم رو با استفاده از پارامتر total_contact محدود کنیم. مثلا فرض کنید ۱۰۰ تا کاربر ایوندی داریم ولی همش رو نمی خواهیم در نتیجه با استفاده از این پارامتر تعداد کاربران رو به عدد کمتری محدود می تونیم بکنیم.
مقدار پیش فرض پارامتر total_contact هم -1 هست که یعنی هرچی کاربر داری رو در اختیار بزار.

پارامتر بعدی مربوط به استان کاربران هست provinces که می گه کاربران رو با استان فلان فیلتر کنه و فقط فلان استان ها رو برداره. مقدار این فیلد آرایه هست. خالی بودنش یعنی همه رو بیار. -1 (منفی یک) تو لیست باشه، کاربران آواره (بدون شهر و مکان) رو هم لیست می کنه.

مورد بعدی پارامتر مربوط به موضوعاتی (categories) هست که کاربره دوست داره و عاشقشه که در موردش بدونه. همونایی که از پنل کاربر می شه به عنوان علاقه مندی انتخاب کرد. عدد -۱ (منفی یک) هم برای اینه که کاربرانی که موضوعی انتخاب نکرده اند مورد هدف گلوله ایوندی قرار بگیرن.

فیلتر مشترکین بدبخت (subscribers)
اینم مثل فیلتر قبلی هست، پارامتر total_contact داره که خسته نباشه. و البته مقدار پیش فرضش هم منفی یک هست.
البته دو پارامتر provinces و categories رو هم داره، با این تفاوت که مقدار -۱ (منفی یک) نداره و براش معنی نداره.


لیست فیلترهای کمپین

GET http://api.evand.abc/advertising-campaigns/{campaignId}/filters
[
    {
        "filter_type": "evand_users",
        "filter_params": {
            "total_contact": -1,
            "provinces": [
                1
            ],
            "categories": [
                -1
            ]
        }
    },
    {
        "filter_type": "subscribers",
        "filter_params": {
            "provinces": [
                1,
                2
            ],
            "categories": [
                1
            ]
        }
    }
]

همین دیگه. ساده و خوشمزه. مزمز.



می مونه آمارگیری فیلترها که بحث بسیار بسیار شیرین بعدی مان خواهد بود.


آمار فیلترهای انتخابی
در نهایت نوبت به می رسه به هدف اصلی که دلیل تسکمون بود.
چیزی در کمپین تبلیغاتی بود ولی اشاره مستقیم و واضح بهش نمی شد، مفهوم فیلتر بود.
در حقیقت قبلا فقط شهر و استان انتخاب می کردیم و پیام های عاشقانه به طرفدارانش ارسال می شد.

در این تسک قرار بود بشه برای مشترکین بدبخت هم پیام های عاشقانه ارسال شه که روحیه شون عوض شه و برای همین این مفهوم فیلترها به وجود اومد.

فیلترهایی که الان زده شده و پشتیبانی خواهد شد فعلا ۲ تاست.

  • یکی کاربران ایوند هستن
  • دیگری مشترکین بدبخت


یه نکته ای که اشاره بهش خالی از لطف نیست اینه که می شه فیلترهای جدیدی راحت به سیستم اضافه کرد.

به عنوان مثال، این چنین مواردی پیش اومده بود که نیاز بود به افرادی که در دیگر کمپین ها مورد هدف قرار گرفته بودن هم دوباره بشه مورد هدف قرار داد که می شه براش فیلتری نوشت.

مثال دیگر، اینکه برای ارسال ایمیل از سرویس های دیگری استفاده می شه که متاسفانه هزینه بالایی نیست به سرویسی که خودمون برای ارسال ایمیل استفاده می کنیم داشت و نیاز بود یه سری ایمیل و اینا آپلود بشه و بشه بهشون مورد هدف قرارشون داد. که بازم می شه براش فیلتر جدا گونه ای نوشت و راحت می شه به این سیستم اضافه کرد.

و حتی هزاران هزار فیلتر دیگر را راحت می شود در این سیستم جای داد.

خوب بریم سر اصل مطلب. موضوع بعد از انتخاب فیلترها، اجرای فیلتر ها هست که بتونیم بفهمیم فیلترهای انتخابی چه تعداد افراد رو مورد هدف قرار می دهد.

برای دریافت این عدد جادویی به این شیوه عمل می کنیم: فیلترها مون رو نیازه بفرستیم به ریسورس ای که اجرا شون کرده و خروجی رو به ما بگه.

POST https://api.evand.com/advertising-campaigns/filter-statistics
{
  "campaign_id": 2,
  "channel": "email",
  "filters": [
    {
      "filter_type": "evand_users",
      "filter_params": {
        "total_contact": -1,
        "provinces": [
          1
        ],
        "categories": [
          -1
        ]
      }
    },
    {
      "filter_type": "subscribers",
      "filter_params": {
        "provinces": [
          1,
          2
        ],
        "categories": [
          1
        ]
      }
    }
  ]
}

همونطور که می بینید ۳ پارامتر به ریسورس فوق می شه ارسال رد:
  • campaign_id
  • channel
  • filters


که از بین اینا campaign_id اختیاری می باشد.

مقدار channel می تونه email و یا sms باشه که کانل ارتباطی هست که ارتباط مستقیم به عددی که در نهایت بدست می یاد داره. چون یه عده ایمیل دارن و یه عده موبایل در نتیجه نیازه کانال ارتباطی تعیین بشه که عدده نهایی که نسبت بهش متفاوت می شه.
مقدار بعدی هم filters هست که لیست فیلترها که ساختارش دقیقا مثل وقتی هست که انگار دارید فیلتر برای کمپین ای ثبت می کنید.

یه نکته ای که در مورد فیلترها قابل ذکره اینه که در صورتی که برای هر فیلتر مقدار total_contact بدید و یا مقدارش صفر باشه (در حقیق مقدارش غیر -1 (منفی یک) باشه ) باعث می شه تو عدد نهایی تاثیر بزاره.
فرضا اگه یه فیلتر برای گرفتن آمار بفرستید که عدد total_contact منفی یک و یا نفرستید این فیلد رو و عدد نهایی ۱۰۰ باشه. یعنی ۱۰۰ نفر رو می شه مورد هدف قرار داد. حالا اگه مقدار total_contact رو صفر بزارید و یا مقداری کمتر از ۱۰۰ بدید باعث می شه همون عدد برگرده. یعنی بزارید ۰ هیچ فردی مورد هدف نمی تونه قرار بگیره و یا بزارید ۵ به هون ۵ محدود می شه در حالی که ۹۵ تا فرد دیگه رو هم می شد هدف قرار داد.

گزینه آخر campaign_id هست. همونطور که بهش اشاره کردیم، این فید اختیاری هست و می تونید این پارامتر رو ارسال نکنید.
ولی اگه بفرستید چی؟ یعنی چی می شه؟ بشینین واستون تعریف کنم چی می شه.
اگه این پارامتر رو تعیین کنین این اتفاق می افته که اگه کمپینی قبلا اجرا شده و افرادی رو مورد هدف قرار داده، باعث می شه اون تعداد افراد از لیست نهایی فیلتر ها کم شن.

در اصل:
 Final contacts = filtered contacts - already targeted contacts of a given campaign
در اصل ارسالی های کمپین کسر می شه.

و دلیل وجود این پارامتر به این دلیل هست که داخل هر کمپین هم می شه آمار گرفت که برای اون نیازه آی دی کمپین هم ارسال بشه که ارسالی های کمپینه کم بشه از آمار کل که نتیجه درست تری برای اون کمپینه داده بشه. در اصل می شه یه کمپین اجرا شده رو دوباره اجرا کرد که در اونصورت به افرادی که یبار ارسال شده دیگه ارسال نمی شه و خود به خود فیلتر می شن و این پارامتر برای همینه که اگه نیاز باشه دوباره کمپین ای اجرا بشه، بشه فهمید چند نفر دیگه رو هم می شه مورد هدف قرار داد.

نکته: در اصل دو نوع آمار داریم، یکی کلی هست و یکی برای هر کمپین که داخل هر کمپین می شه اجراش کرد. و برای هر دو use case هم از همین ریسورس می شه استفاده کرد.

خروجی ریسورس فوق هم به این شکل خواهد بود:
{
    "data": {
        "total_contacts": 27858
    }
}


کالکشن Postman

برای تست ریسورس های فوق رو تو کالکشن postman جمع کردم که لینکش رو اینجا می زارم و شاید برای تست و اینا کمک کنه.


فقط نکته ای که وجود داره، برای استفاده از این ریسورس ها باید به بخش مدیریت کمپین های تبلیغاتی دسترسی داشته باشید که در صورت نیازه کافیه اطلاع بدید.

لیست استان‌ها

در فیلتر ها نیازه لیست استان ها نیز گرفته بشه و به کاربر نشان داده بشه و نیز آی دی شون نیازه به سرور ارسال بشن که از قبل ریسورس ای برای این منظور داشتیم که اینجا براتون قرار می دم:
GET https://api.evand.com/provinces

{
  "data": [
    {
      "id": 1,
      "name": "آذربایجان شرقی",
      "slug": "آذربایجان-شرقی",
      "latitude": 37.9035733,
      "longitude": 46.2682109,
      "events_count": 0
    },
    
    ...
  ]
}


به امید موفقیت.


و سلامی دوباره



آمار سرویس دهنده کمپین های پیامکی
تا حال آمار سرویس دهنده کمپین های ایمیلی در دسترسی بود. در این بخش در مورد دیتاهایی که سرویس دهنده ارسال پیامک در اختیارمون می ده و می شه به یه سری آمار در رابطه با کمپین پیامکی اجرا شده دست یافت، صحبت خواهیم کرد.
نکته ای که وجود داره اینه که سرویس دهنده ایمیل و پیامک متفاوت بوده و اطلاعات مختلفی در اختیارمون می زارن. در نتیجه ساختار یکسانی نخواهیم داشت.
البته تا جایی که امان پذیر باشه سعی می کنیم هر دو رو شبیه هم نگه داریم و فرق نکنه ولی خوب در نهایت بصورت کامل امکان پذیر نیست. حداقل فعلا.

نحوه دریافت آمار سرویس دهنده پیامکی:
بدین منظور درخواستی بدین شکل ارسال می کنیم:
GET https://api.evand.com/advertising-campaigns/CAMPAIGN_ID/statistics
Headers:
  • Authorization: Bearer ACCESS_TOKEN
{
  "data": {
    "service_provider": [
      {
        "queued": 1,
        "failed": 0,
        "delivered": 0,
        "undelivered": 0,
        "user_blocked_ads": 0,
        "sent_to_telecommunication_company": 0
      }
    ],
    "evand": {
      "targeted_contacts_count": 1,
      "failed_targeted_contacts_count": 6
    }
  }
}

همانطوری که ملاحظه می کنید، در ریسورس فوق نیازه که CAMPAIGN_ID  رو لحاظ کنید. دیتای برگشتی نسبت به اینکه کمپین پیامکی است یا ایمیل دیتای متفاوتی برای service_provider برگشت خواهد داد. دیتای فوق مربوط به نوع پیامکی است و دیتای مربوط به ایمیل قبلا در بارش بحث شده است.

درباره اطلاعات سرویس دهنده
سرویس دهنده یه سری اطلاعاتی در رابطه با دلیور شدن پیام ها، نشدنان، در صف بودن و … در اختیارمان می گذارد که البته این اطلاعات رو با گذشت زمان بروز خواهد کرد و ممکنه هر لحظه دیتاها بروزرسانی شده و تغییر کنند.

اطلاعاتی که در اختیارمان می گذارد بدین شرح است:

  • فیلد queued: تعداد پیامک هایی که در صف کاوه نگار قرار دارد را نشان می دهد.
  • فیلد failed: تعداد پیامک هایی که با خطا روبرو شده اند را نشان می دهد.
  • فیلد delivered: تعداد پیام های رسیده به دست کاربر را نشان می دهد.
  • فیلد undelivered: تعداد پیام های نرسیده. ممکنه گوشیش را خاموش کرده باشه.
  • فیلد user_blocked_ads: تعداد افرادی که دریافت پیامک از خط تبلیغاتی را مسدود کرده اند را نشان می دهد.
  • فیلد sent_to_telecommunication_company: تعداد پیامک هایی که تحویل مخابرات داده شده اند را نشان می دهند.


توضیحات بیشتری در رابطه با این موارد فوق در خود سایت کاوه نگار قرار داده شده است که لینک صفحه مربوطه رو برای اطلاعات بیشتر قرار می دهم. برخی خطا ها ممکنه باعث برگشت هزینه پیامک بشه که در لینک مربوطه توسط کاوه نگار کامل توضیح داده شده است.
(وضعیت پیامک ها)

نظرات

پست‌های معروف از این وبلاگ

لیست کاربران نشان شده - سرویس کانکت

استفاده از Refresh Token جهت دریافت توکن‌های معتبر جدید (کانکت)

پروفایل عمومی کاربران کانکت