adding
This commit is contained in:
@@ -0,0 +1,210 @@
|
||||
import datetime
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
ARTICLES = [
|
||||
{
|
||||
"slug": "peyam-goruhi-ba-shomare",
|
||||
"title": "پیام گروهی با شماره چیست و چطور بدون مسدود شدن ارسال کنیم؟",
|
||||
"meta_description": "راهنمای ارسال پیام گروهی با شماره: فرق روش رسمی (Business/Bot API) با روشهای غیررسمی، و چرا روش دوم دیر یا زود منجر به مسدود شدن میشود.",
|
||||
"excerpt": "فرق ارسال گروهی رسمی با روشهای غیررسمی، و چرا مسیر Business/Bot API تنها راه پایدار است.",
|
||||
"read_minutes": 4,
|
||||
"content_html": """
|
||||
<p>
|
||||
«پیام گروهی با شماره» یعنی ارسال یک پیام (پیامک، واتساپ، تلگرام و…) به
|
||||
لیستی از شمارهها، معمولاً با متنی که برای هر گیرنده کمی شخصیسازی
|
||||
شده — مثلاً با نام یا یک اطلاعات اختصاصی دیگر. سوالی که همیشه پشت این
|
||||
نیاز میآید این است: چطور این کار را انجام بدهیم بدون اینکه شماره یا
|
||||
اکانت فرستنده مسدود شود؟
|
||||
</p>
|
||||
|
||||
<h2>چرا اکانتها مسدود میشوند</h2>
|
||||
<p>
|
||||
واتساپ، تلگرام، بله و ایتا همه یک سیستم ضدهرزنامه دارند که رفتار
|
||||
غیرطبیعی (ارسال حجم بالا از یک شمارهی معمولی، چرخاندن چند دستگاه/سشن،
|
||||
شبیهسازی رفتار انسانی برای فرار از تشخیص) را شناسایی و مسدود میکند.
|
||||
این محدودیت تصادفی نیست — دقیقاً همان مکانیزمی است که جلوی اسپم واقعی
|
||||
را میگیرد.
|
||||
</p>
|
||||
|
||||
<h2>راه پایدار: مسیر رسمی هر پلتفرم</h2>
|
||||
<p>
|
||||
هر پلتفرم یک راه رسمی برای ارسال حجمی به کسبوکارها دارد:
|
||||
</p>
|
||||
<p>
|
||||
<strong>پیامک</strong> از طریق درگاههای بالک اپراتور، <strong>واتساپ</strong>
|
||||
از طریق WhatsApp Business Platform (نیاز به تایید Template پیام دارد)،
|
||||
و <strong>تلگرام/بله/ایتا</strong> از طریق Bot API — با یک محدودیت مهم:
|
||||
بات فقط میتواند به کسانی پیام بدهد که خودشان قبلاً چت را با بات شروع
|
||||
کردهاند (opt-in).
|
||||
</p>
|
||||
|
||||
<h2>یعنی چه چیزی امکانپذیر نیست؟</h2>
|
||||
<p>
|
||||
ارسال خودکار به هر شمارهی دلخواه در تلگرام/بله/ایتا بدون اینکه آن
|
||||
شخص قبلاً با بات تعامل داشته باشد، از مسیر رسمی امکانپذیر نیست — و
|
||||
هیچ روش «دور زدن» پایداری هم برایش وجود ندارد. کاسبیار برای این
|
||||
موارد بهجای اتوماسیون مخفی، یک صف ارسال دستیِ یکلمسی نشان میدهد:
|
||||
اپلیکیشن مقصد را با متن آماده باز میکند، خودت دستی میزنی ارسال.
|
||||
</p>
|
||||
|
||||
<h2>جمعبندی</h2>
|
||||
<p>
|
||||
پیام گروهی پایدار یعنی حجم را از مسیر رسمی هر پلتفرم رد کنی، نه اینکه
|
||||
رفتار انسانی را شبیهسازی کنی. کندتر شروع میشود (چون باید Template یا
|
||||
Bot تاییدشده داشته باشی) ولی هرگز اکانتت را به خطر نمیاندازد.
|
||||
</p>
|
||||
""",
|
||||
},
|
||||
{
|
||||
"slug": "field-sefareshi-dar-template",
|
||||
"title": "فیلد سفارشی در قالب پیام یعنی چه؟",
|
||||
"meta_description": "چطور برای هر گروه مخاطب فیلدهای سفارشی مثل شماره گذرنامه یا کد ملی تعریف کنی و در قالب پیام همان گروه استفاده کنی.",
|
||||
"excerpt": "چطور برای هر گروه مخاطب، فیلدهای مخصوص خودش را تعریف کنی و در متن پیام استفاده کنی.",
|
||||
"read_minutes": 3,
|
||||
"content_html": """
|
||||
<p>
|
||||
قالب پیام معمولی یک متن ثابت با چند جایخالی است، مثلاً «سلام {نام}
|
||||
عزیز». اما خیلی از کسبوکارها به بیشتر از نام و شماره نیاز دارند — یک
|
||||
آژانس مسافرتی به «شماره گذرنامه» نیاز دارد، یک کلینیک به «تاریخ نوبت»،
|
||||
یک باشگاه به «کد عضویت». اینجاست که فیلد سفارشی وارد میشود.
|
||||
</p>
|
||||
|
||||
<h2>فیلد سفارشی مال یک گروه است، نه کل مخاطبین</h2>
|
||||
<p>
|
||||
در کاسبیار، مخاطبین را در گروههایی مثل «تور»، «مشتریان VIP» یا
|
||||
«دانشجویان» دستهبندی میکنی. هر گروه فیلدهای سفارشی مخصوص خودش را
|
||||
دارد — یعنی گروه «تور» میتواند «شماره گذرنامه» داشته باشد بدون اینکه
|
||||
این فیلد بیربط در گروه «دانشجویان» هم ظاهر شود.
|
||||
</p>
|
||||
|
||||
<h2>گروه عمومی برای وقتی که پیچیدگی لازم نیست</h2>
|
||||
<p>
|
||||
اگر نیازی به فیلد سفارشی نداری، همان گروه «عمومی» پیشفرض کافیست —
|
||||
فقط نام و شماره. هیچ فیلدی مجبور نیستی اضافه کنی.
|
||||
</p>
|
||||
|
||||
<h2>استفاده در قالب پیام</h2>
|
||||
<p>
|
||||
بعد از تعریف فیلد در یک گروه، هنگام نوشتن قالب پیام برای همان گروه،
|
||||
اسم فیلد بهعنوان یک تگ قابلدرج (مثل <code>{شماره گذرنامه}</code>)
|
||||
کنار فیلدهای پایه (نام، شماره) نمایش داده میشود. برای هر گیرنده، اپ
|
||||
خودکار مقدار واقعی همان مخاطب را جایگزین میکند.
|
||||
</p>
|
||||
""",
|
||||
},
|
||||
{
|
||||
"slug": "merge-mokhatebin-ganoshi",
|
||||
"title": "مرج مخاطبین گوشی با اپ",
|
||||
"meta_description": "سریعترین راه برای شروع ارسال گروهی: مخاطبین گوشیات را بدون تایپ دستی وارد کاسبیار کن و به گروه دلخواه اضافه کن.",
|
||||
"excerpt": "سریعترین راه برای شروع: مخاطبین گوشیات را بدون تایپ دستی وارد کاسبیار کن.",
|
||||
"read_minutes": 2,
|
||||
"content_html": """
|
||||
<p>
|
||||
اگر لیست مخاطبینت همین حالا در دفترچهتلفن گوشیات است، نیازی به
|
||||
تایپ دوبارهی تکتک شمارهها نیست. کاسبیار میتواند مستقیم به
|
||||
مخاطبین گوشیات دسترسی بگیرد (با اجازهی خودت) و هرکدام را که خواستی
|
||||
یکجا وارد اپ کند.
|
||||
</p>
|
||||
|
||||
<h2>چطور کار میکند</h2>
|
||||
<p>
|
||||
از صفحهی «مخاطبین» گزینهی «مرج از مخاطبین گوشی» را بزن. اپ لیست
|
||||
مخاطبین گوشیات را نشان میدهد (فقط آنهایی که هنوز در کاسبیار
|
||||
نیستند)، هرکدام را انتخاب میکنی، یک گروه مقصد مشخص میکنی، و همه
|
||||
یکجا اضافه میشوند.
|
||||
</p>
|
||||
|
||||
<h2>دوبارهکاری نمیشود</h2>
|
||||
<p>
|
||||
مخاطبینی که شمارهشان از قبل در اپ ثبت شده، دوباره در لیست مرج نشان
|
||||
داده نمیشوند — تطبیق بر اساس شمارهی نرمالشده انجام میشود، نه اسم.
|
||||
</p>
|
||||
|
||||
<h2>حریم خصوصی</h2>
|
||||
<p>
|
||||
دسترسی به مخاطبین فقط برای همین عملیات استفاده میشود؛ چیزی خودکار یا
|
||||
در پسزمینه آپلود نمیشود — فقط همان مخاطبینی که خودت تیک میزنی.
|
||||
</p>
|
||||
""",
|
||||
},
|
||||
{
|
||||
"slug": "sms-ya-whatsapp-business",
|
||||
"title": "پیامک یا واتساپبیزینس؟ کدام برای ارسال گروهی بهتر است",
|
||||
"meta_description": "مقایسهی پیامک و واتساپبیزینس برای ارسال پیام گروهی: هزینه، نرخ باز شدن، محدودیت Template، و کدام برای چه کسبوکاری مناسبتر است.",
|
||||
"excerpt": "مقایسهی هزینه، نرخ باز شدن، و محدودیتهای هرکدام برای پیام گروهی کسبوکارها.",
|
||||
"read_minutes": 5,
|
||||
"content_html": """
|
||||
<p>
|
||||
هر دو کانال جای خودشان را دارند و در کاسبیار میتوانی همزمان از
|
||||
هردو (بهعلاوهی تلگرام، بله و ایتا) استفاده کنی. اما اگر مجبوری یکی
|
||||
را اول انتخاب کنی، این تفاوتها کمک میکند:
|
||||
</p>
|
||||
|
||||
<h2>پیامک</h2>
|
||||
<p>
|
||||
به هر شمارهای میرسد، حتی بدون اینترنت یا اپ نصبشده — قابلاطمینانترین
|
||||
کانال از نظر تحویل. هزینهی هر پیام مشخص و قابلپیشبینی است. محدودیت:
|
||||
طول پیام (پیامکهای بلند چند-قسمتی حساب میشوند) و نداشتن تصویر/دکمه.
|
||||
</p>
|
||||
|
||||
<h2>واتساپبیزینس</h2>
|
||||
<p>
|
||||
نرخ باز شدن پیام معمولاً بالاتر از پیامک است و امکاناتی مثل دکمه و
|
||||
رسانه دارد. اما برای ارسال گروهی (business-initiated) باید از یک
|
||||
Template از پیش تاییدشده در Meta Business Manager استفاده کنی —
|
||||
یعنی نمیتوانی هر متن دلخواهی را بیمحدودیت به هرکسی بفرستی؛ باید
|
||||
ساختار پیام از قبل تایید شده باشد.
|
||||
</p>
|
||||
|
||||
<h2>تلگرام، بله، ایتا</h2>
|
||||
<p>
|
||||
اینها فقط به کسانی میرسند که قبلاً با بات کسبوکارت چت را شروع
|
||||
کردهاند. برای مخاطبینی که این کار را نکردهاند، کاسبیار یک صف
|
||||
ارسال دستیِ یکلمسی نشان میدهد.
|
||||
</p>
|
||||
|
||||
<h2>جمعبندی</h2>
|
||||
<p>
|
||||
اگر تحویل تضمینی برایت مهمتر است، پیامک را انتخاب کن. اگر مخاطبینت
|
||||
بیشتر واتساپی هستند و Template تاییدشده داری، واتساپبیزینس گزینهی
|
||||
بهتری است. بهترین نتیجه معمولاً ترکیب چند کانال است — دقیقاً همان
|
||||
چیزی که کاسبیار از یک صفحه انجام میدهد.
|
||||
</p>
|
||||
""",
|
||||
},
|
||||
]
|
||||
|
||||
|
||||
def seed_articles(apps, schema_editor):
|
||||
Article = apps.get_model("landing", "Article")
|
||||
published_at = datetime.date(2025, 8, 23)
|
||||
for data in ARTICLES:
|
||||
Article.objects.update_or_create(
|
||||
slug=data["slug"],
|
||||
defaults={
|
||||
"title": data["title"],
|
||||
"meta_description": data["meta_description"],
|
||||
"excerpt": data["excerpt"],
|
||||
"content_html": data["content_html"],
|
||||
"read_minutes": data["read_minutes"],
|
||||
"is_published": True,
|
||||
"published_at": published_at,
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
def remove_articles(apps, schema_editor):
|
||||
Article = apps.get_model("landing", "Article")
|
||||
Article.objects.filter(slug__in=[a["slug"] for a in ARTICLES]).delete()
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
("landing", "0001_initial"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RunPython(seed_articles, remove_articles),
|
||||
]
|
||||
Reference in New Issue
Block a user