۱. یک تیکت ساده که همه چیز را شروع کرد
ساعت ۱۱ شب بود. در حال بستن لپتاپ بودم که نوتیفیکیشن یک تیکت جدید در سیستم پشتیبانی AnbarWP آمد. مشتریای که چند ماه قبل فروشگاه ووکامرسش را برایش ساخته بودم، نوشته بود:
«سلام بصیر جان. یه مشکلی داریم. خیلی از مشتریها میان محصول رو میبینن ولی چون موجود نیست، میرن و دیگه برنمیگردن. میشه یه کاری کنی که وقتی محصول موجود شد، بهشون خبر بده؟ مثل دیجیکالا که دکمه "موجود شد به من خبر بده" داره؟»
همین. یک درخواست ساده. یک نیاز واقعی. و من نمیدانستم که این تیکت قرار است تبدیل به دومین محصول نرمافزاری من شود.
۲. بررسی راهحلهای موجود: چرا هیچکدام کافی نبودند
قبل از اینکه شروع به کدنویسی کنم، رفتم سراغ مخزن وردپرس. چندین پلاگین برای «اطلاعرسانی موجودی» پیدا کردم. اما همه یک مشکل مشترک داشتند:
فقط ایمیل
اکثر پلاگینها فقط از ایمیل پشتیبانی میکردند
طراحی ضعیف
فرمهای زشت و غیرقابل سفارشیسازی
بدون گزارش
هیچ داشبورد یا آماری از عملکرد نداشتند
عدم انعطاف
قالب ایمیلها قابل تغییر نبود
و مهمتر از همه، هیچکدام از کانالهای پیامرسان مثل واتساپ و تلگرام پشتیبانی نمیکردند. در کشوری که واتساپ و تلگرام بخشی از زندگی روزمره است، این یک شکاف بزرگ بود.
۳. ساخت MVP: فقط ایمیل، فقط کار کند
قانون اول محصولسازی: با حداقل شروع کن. تصمیم گرفتم نسخه اول StockMate فقط از ایمیل پشتیبانی کند. بدون واتساپ. بدون تلگرام. بدون داشبورد. فقط یک کار را درست انجام بده: جمعآوری ایمیل و ارسال نوتیفیکیشن.
MVP چقدر ساده بود؟
// stockmate-mvp.php - نسخه ۰.۱
/**
* Plugin Name: StockMate MVP
* Description: جمعآوری ایمیل برای اطلاعرسانی موجودی
* Version: 0.1
*/
// ۱. نمایش فرم جمعآوری ایمیل در صفحه محصول ناموجود
add_action('woocommerce_single_product_summary', function() {
global $product;
if (!$product->is_in_stock()) {
echo '<div class="stockmate-form">
<input type="email" id="stockmate-email"
placeholder="ایمیل خود را وارد کنید">
<button id="stockmate-submit">
موجود شد به من خبر بده
</button>
</div>';
}
}, 35);
// ۲. ذخیره ایمیل با Ajax
add_action('wp_ajax_stockmate_subscribe', function() {
$email = sanitize_email($_POST['email']);
$product_id = intval($_POST['product_id']);
// ذخیره در دیتابیس
});
// ۳. ارسال ایمیل هنگام موجود شدن محصول
add_action('woocommerce_product_set_stock', function($product) {
if ($product->is_in_stock()) {
$subscribers = get_product_subscribers($product->get_id());
foreach ($subscribers as $email) {
wp_mail($email, 'محصول مورد نظر شما موجود شد!',
"سلام، {$product->get_name()} دوباره موجود شد.");
}
}
});
همین. کمتر از ۱۰۰ خط کد. سه کار انجام میداد: فرم نشان بده، ایمیل ذخیره کن، خبر بده. نسخه MVP را روی فروشگاه همان مشتری نصب کردم. ظرف یک هفته، ۴۳ ایمیل جمع شد.
۴. حلقه بازخورد: وقتی مشتریها مسیر را نشان میدهند
دو هفته بعد از نصب MVP، مشتری اصلیمان تماس گرفت و گفت:
«بصیر، عالیه! کلی فروش از دست رفته رو برگردوندیم. ولی مشتریها میپرسن چرا پیامک نمیدید؟ یا توی واتساپ خبر نمیدید؟»
و سپس جملهای که جهت محصول را عوض کرد:
«راستی، فلان فروشگاه دیگه هم اینو میخواد. میتونم بهشون بگم با تو تماس بگیرن؟»
واقعیت تلخ اما شیرین: من یک راهحل سفارشی برای یک مشتری ساخته بودم، اما حالا مشتریهای دیگری هم همان نیاز را داشتند. این یعنی بازار وجود دارد. وقتش بود که از یک راهحل سفارشی، به یک محصول واقعی تبدیلش کنم.
۵. چالش واتساپ: ورود به دنیای APIهای پیامرسان
اضافه کردن واتساپ، پیچیدهترین بخش پروژه بود. باید با WhatsApp Business API کار میکردم - چیزی که تا آن زمان تجربهاش را نداشتم.
مسیر یادگیری:
- مطالعه مستندات Meta (Facebook): سه روز کامل فقط مستندات خواندم. WhatsApp Cloud API نسبتاً جدید بود و منابع فارسی تقریباً صفر.
- تنظیم Webhook: باید یک endpoint در وردپرس میساختم که پیامهای دریافتی واتساپ را پردازش کند.
- مدیریت Template Messages: واتساپ برای ارسال پیامهای تجاری نیاز به Message Templates تأیید شده دارد. باید قالبهای پیام را طراحی و ثبت میکردم.
// ارسال پیام واتساپ با WhatsApp Cloud API
function send_whatsapp_notification($phone, $product_name, $product_url) {
$access_token = get_option('stockmate_whatsapp_token');
$phone_number_id = get_option('stockmate_whatsapp_phone_id');
$response = wp_remote_post(
"https://graph.facebook.com/v17.0/{$phone_number_id}/messages",
[
'headers' => [
'Authorization' => "Bearer {$access_token}",
'Content-Type' => 'application/json'
],
'body' => json_encode([
'messaging_product' => 'whatsapp',
'to' => $phone,
'type' => 'template',
'template' => [
'name' => 'stockmate_back_in_stock',
'language' => ['code' => 'fa'],
'components' => [[
'type' => 'body',
'parameters' => [
['type' => 'text', 'text' => $product_name],
['type' => 'text', 'text' => $product_url]
]
]]
]
])
]
);
return json_decode(wp_remote_retrieve_body($response));
}
۶. تلگرام: اضافه شدن کانال سوم
بعد از واتساپ، اضافه کردن تلگرام تقریباً آسان بود. Telegram Bot API بسیار توسعهدهنده-پسندتر است:
// ارسال نوتیفیکیشن تلگرام
function send_telegram_notification($chat_id, $product_name, $product_url) {
$bot_token = get_option('stockmate_telegram_token');
$message = "🎉 خبر خوب!\n\n";
$message .= "محصول «{$product_name}» دوباره موجود شد.\n\n";
$message .= "🔗 برای مشاهده و خرید کلیک کنید:\n{$product_url}";
$response = wp_remote_post(
"https://api.telegram.org/bot{$bot_token}/sendMessage",
[
'body' => [
'chat_id' => $chat_id,
'text' => $message,
'parse_mode' => 'HTML'
]
]
);
return json_decode(wp_remote_retrieve_body($response));
}
تلگرام حتی به شما اجازه میدهد دکمههای inline اضافه کنید:
// افزودن دکمههای inline به پیام تلگرام
'reply_markup' => json_encode([
'inline_keyboard' => [[
['text' => '🛒 مشاهده محصول', 'url' => $product_url],
['text' => '📦 محصولات مشابه', 'callback_data' => 'similar_' . $product_id]
]]
])
۷. معماری نهایی: چطور سه کانال را مدیریت میکنیم
حالا StockMate سه کانال ارتباطی دارد. اما معماری پشت آن ساده و clean باقی مانده است. این معماری را به صورت ماژولار طراحی کردم تا اضافه کردن کانالهای جدید (مثل SMS یا push notification) در آینده آسان باشد:
// معماری ماژولار StockMate
class StockMate_Notifier {
private $channels = [];
public function __construct() {
// ثبت کانالهای فعال
if (get_option('stockmate_email_enabled')) {
$this->channels[] = new Email_Channel();
}
if (get_option('stockmate_whatsapp_enabled')) {
$this->channels[] = new WhatsApp_Channel();
}
if (get_option('stockmate_telegram_enabled')) {
$this->channels[] = new Telegram_Channel();
}
}
public function notify($subscribers, $product) {
foreach ($this->channels as $channel) {
$channel->send($subscribers, $product);
}
}
}
// هر کانال یک کلاس مجزا
interface Notification_Channel {
public function send($subscribers, $product);
}
class WhatsApp_Channel implements Notification_Channel {
public function send($subscribers, $product) {
foreach ($subscribers as $sub) {
if (!empty($sub->phone)) {
send_whatsapp_notification($sub->phone, $product);
}
}
}
}
ویژگیهای کلیدی نسخه نهایی:
- ✅ جمعآوری خودکار ایمیل (و شماره موبایل) در صفحه محصول
- ✅ ارسال خودکار نوتیفیکیشن هنگام موجود شدن محصول
- ✅ پشتیبانی از سه کانال: ایمیل، واتساپ، تلگرام
- ✅ داشبورد مدیریت درخواستها
- ✅ سفارشیسازی قالب ایمیلها
- ✅ گزارشگیری از نرخ بازگشت مشتری
- ✅ معماری ماژولار برای اضافه کردن کانالهای جدید
۸. ۸ درسی که در مسیر محصولسازی آموختم
۱. با MVP شروع کن، نه محصول کامل
اگر از روز اول میخواستم واتساپ و تلگرام را هم اضافه کنم، احتمالاً هرگز StockMate را تمام نمیکردم. نسخه اول فقط ایمیل داشت و ۴۳ مشتری واقعی جذب کرد. همان ۴۳ نفر اعتبارسنجی بازار بودند.
۲. به حرف مشتری گوش کن، اما راهحل را تو بساز
مشتری گفت «پیامک». اما من دیدم که واتساپ و تلگرام رایگانتر، سریعتر و تعاملیتر هستند. گاهی مشتری مشکل را میگوید، راهحل را باید تو پیدا کنی.
۳. معماری ماژولار از روز اول
حتی در MVP، کد را طوری نوشتم که اضافه کردن کانال جدید فقط با ساختن یک کلاس جدید ممکن باشد. این آیندهنگری، اضافه کردن واتساپ و تلگرام را ۱۰ برابر آسانتر کرد.
۴. تحریمها یک واقعیت هستند - برایشان برنامه داشته باش
WhatsApp API برای ایران محدود است. به جای ناامید شدن، یک Proxy API ساختم که مشکل را حل کرد. در بازار ایران، انعطافپذیری در برابر محدودیتها یک مزیت رقابتی است.
۵. محصول خوب، خودش را میفروشد
من هیچ تبلیغی برای StockMate نکردم. مشتری اول به دوستانش گفت، آنها به دیگران. وقتی محصولی واقعاً مشکلی را حل کند، بازاریابی دهانبهدهان خودبهخود اتفاق میافتد.
۶. از تکنولوژیهایی که بلدی استفاده کن
StockMate با وردپرس و PHP ساخته شد - چیزهایی که قبلاً در آنها متخصص بودم. اگر میخواستم با یک تکنولوژی جدید مثل Node.js شروع کنم، زمان توسعه ۳ برابر میشد. محصول را با ابزارهایی بساز که به آنها مسلطی.
۷. قیمتگذاری را بر اساس ارزش انجام بده، نه زمان
قیمت StockMate بر اساس تعداد فروشهای بازیابیشده تعیین میشود، نه ساعتهایی که صرف کدنویسی آن کردم. اگر StockMate ماهی ۱۰ فروش از دست رفته را برگرداند، ارزش آن برای مشتری بسیار بیشتر از قیمت پلاگین است.
۸. مستندسازی، حتی اگر فقط خودت میخوانی
تمام معماری StockMate را مستند کردم. شش ماه بعد که خواستم ویژگی جدیدی اضافه کنم، مستندات خودم زندگیام را نجات داد. باور کن، «خود آیندهات» از «خود الان» تشکر خواهد کرد.
۹. جمعبندی: محصولات از دل مسئلههای واقعی متولد میشوند
StockMate با یک تیکت پشتیبانی شروع شد. یک مشتری یک مشکل داشت و من یک راهحل ساختم. اما فرق یک فریلنسر با یک محصولساز در همین جاست: فریلنسر راهحل را برای یک مشتری میسازد. محصولساز راهحل را برای یک بازار میسازد.
امروز StockMate روی دهها فروشگاه ووکامرس نصب شده. هر ماه صدها فروش از دست رفته را به فروش واقعی تبدیل میکند. و همه اینها از یک تیکت ساده در ساعت ۱۱ شب شروع شد.
«محصولات بزرگ از تختهسفیدهای استارتاپی متولد نمیشوند. آنها از دردهای واقعی انسانهای واقعی متولد میشوند. فقط کافی است گوش کنی، ببینی، و شجاعت ساختن داشته باشی.»
اگر فروشگاه ووکامرسی دارید و از مشکل از دست دادن مشتری هنگام اتمام موجودی رنج میبرید، StockMate میتواند کمکتان کند. و اگر ایدهای برای یک محصول نرمافزاری دارید، خوشحال میشوم تجربیاتم را با شما به اشتراک بگذارم.
💬 تجربه شما چیست؟
آیا شما هم تجربه تبدیل یک نیاز مشتری به محصول را داشتهاید؟ چه چالشهایی در مسیر محصولسازی تجربه کردهاید؟ خوشحال میشوم داستان شما را بشنوم.