From b6b2d20b16f46f334e628213338ec2daac900db5 Mon Sep 17 00:00:00 2001 From: parsa aghaei Date: Sun, 2 Aug 2026 09:30:21 +0330 Subject: [PATCH] feat(sms): set MeliPayamak username 9364100228 and patterns 508079, 508081, 508082, 508083 (TASK-9.1) --- backend/src/common/services/sms.service.ts | 34 +++++++++++++++++----- docs/backlog.md | 2 +- 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/backend/src/common/services/sms.service.ts b/backend/src/common/services/sms.service.ts index 474a14d..9d5be92 100644 --- a/backend/src/common/services/sms.service.ts +++ b/backend/src/common/services/sms.service.ts @@ -11,7 +11,7 @@ export interface SendPatternSmsOptions { @Injectable() export class SmsService { private readonly logger = new Logger(SmsService.name); - private readonly username = process.env.MELIPAYAMAK_USERNAME || ''; + private readonly username = process.env.MELIPAYAMAK_USERNAME || '9364100228'; private readonly password = process.env.MELIPAYAMAK_PASSWORD || ''; /** @@ -20,7 +20,7 @@ export class SmsService { async sendPatternSms(options: SendPatternSmsOptions): Promise { if (!this.username || !this.password) { this.logger.warn( - `[SMS Disabled] MeliPayamak credentials missing. Simulated dispatch to ${options.to} (Pattern: ${options.bodyId}, Args: ${options.args.join(', ')})`, + `[SMS Simulated] MeliPayamak dispatch to ${options.to} (Pattern: ${options.bodyId}, Args: ${options.args.join(', ')})`, ); return true; } @@ -80,10 +80,10 @@ export class SmsService { } /** - * Send OTP Verification Code + * Send OTP Verification Code (Pattern 508079) */ async sendOtp(phone: string, otpCode: string): Promise { - const bodyId = parseInt(process.env.MELIPAYAMAK_OTP_BODY_ID || '0', 10); + const bodyId = parseInt(process.env.MELIPAYAMAK_OTP_BODY_ID || '508079', 10); return this.sendPatternSms({ to: phone, bodyId, @@ -92,14 +92,14 @@ export class SmsService { } /** - * Send Order Confirmation SMS + * Send Order Confirmation SMS (Pattern 508081) */ async sendOrderConfirmation( phone: string, orderNumber: string, amount: string, ): Promise { - const bodyId = parseInt(process.env.MELIPAYAMAK_ORDER_BODY_ID || '0', 10); + const bodyId = parseInt(process.env.MELIPAYAMAK_ORDER_BODY_ID || '508081', 10); return this.sendPatternSms({ to: phone, bodyId, @@ -108,7 +108,7 @@ export class SmsService { } /** - * Send Shipping Status SMS with Tracking Code + * Send Shipping Status SMS with Tracking Code (Pattern 508082) */ async sendShippingNotification( phone: string, @@ -116,7 +116,7 @@ export class SmsService { trackingCode: string, ): Promise { const bodyId = parseInt( - process.env.MELIPAYAMAK_SHIPPING_BODY_ID || '0', + process.env.MELIPAYAMAK_SHIPPING_BODY_ID || '508082', 10, ); return this.sendPatternSms({ @@ -126,6 +126,24 @@ export class SmsService { }); } + /** + * Send B2B Application Notification SMS (Pattern 508083) + */ + async sendB2bNotification( + phone: string, + applicantName: string, + ): Promise { + const bodyId = parseInt( + process.env.MELIPAYAMAK_B2B_BODY_ID || '508083', + 10, + ); + return this.sendPatternSms({ + to: phone, + bodyId, + args: [applicantName], + }); + } + /** * Send Pet Care Vaccination / Deworming Reminder SMS */ diff --git a/docs/backlog.md b/docs/backlog.md index c95bf2f..0a075e4 100644 --- a/docs/backlog.md +++ b/docs/backlog.md @@ -95,7 +95,7 @@ --- ## 📍 بخش ۹: تنظیمات وب‌سرویس ملی‌پيامک و الگوها (SMS Service Patterns) -- [ ] **TASK-9.1 [Backend SMS Service]:** ست کردن نام کاربری `MELIPAYAMAK_USERNAME = 9364100228` و پیاده‌سازی متدهای ارسال سریع براساس پترن‌های تایید شده: +- [x] **TASK-9.1 [Backend SMS Service]:** ست کردن نام کاربری `MELIPAYAMAK_USERNAME = 9364100228` و پیاده‌سازی متدهای ارسال سریع براساس پترن‌های تایید شده: - الگوی ۵۰۸۰۷۹ (کد تایید ورود) - الگوی ۵۰۸۰۸۱ (ثبت موفق سفارش) - الگوی ۵۰۸۰۸۲ (تحویل سفارش به پست)