ورود با شماره موبایل وردپرس: دیجیتس چه درخواستی به پنل پیامک می‌فرستد؟

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

دیجیتس (Digits) افزونه ورود با شماره موبایل وردپرس است. نسخه ۹٫۲٫۵ آن را، همان نسخه‌ای که فروشگاه می‌فروشد، روی وردپرس ۷٫۱٫۲ فارسی نصب کردیم و به‌جای پنل پیامک، یک سرور کوچک گذاشتیم که هر درخواست رسیده را ثبت می‌کند و از این‌جا سرور نمونه می‌نامیمش. پیامکی به هیچ گوشی نرفت و با هیچ پنل واقعی کار نکردیم. آنچه سنجیدیم این است که دیجیتس به پنل چه می‌فرستد.

از ۲۰۲ گزینه فهرست «درگاه پیامکی»، ملی‌پیامک (Melipayamak) تنها نام ایرانی است که بدون افزونه جانبی آماده است. کاوه‌نگار، SMS.ir و چند پنل دیگر افزونه‌ای جدا می‌خواهند. گزینه «سفارشی» هر پنلی را که با یک درخواست ساده HTTP کار کند صدا می‌زند، و تنظیم‌هایش تعیین می‌کند پنل چه می‌گیرد: قالب شماره، انکد (Encode) پیام و شکل درخواست، یعنی متد و بدنه. هیچ‌کدام از سه قالب شماره صفر اول را نمی‌فرستد، و پیام با تنظیم پیش‌فرض به‌صورت متن کدشده با علامت درصد می‌رسد.

از ۲۰۲ گزینه، ۱۷۰ تا افزونه جانبی می‌خواهند و ملی‌پیامک نمی‌خواهد

زبانه «درگاه پیامکی» در تنظیمات دیجیتس ۲۰۲ گزینه دارد: «Disabled»، ۱۷۰ گزینه‌ای که افزونه Additional Gateways سازنده را می‌خواهند، ۳۰ پنل که بدون افزونه جانبی انتخاب‌شدنی‌اند، و «سفارشی». ملی‌پیامک تنها نام ایرانی میان آن ۳۰ تاست. کاوه‌نگار (Kavenegar)، SMS.ir، قاصدک (Ghasedak) و فراپیامک (Farapayamak) از آن ۱۷۰ گزینه‌اند و با انتخابشان جمله‌ای انگلیسی روی صفحه فارسی می‌آید: «Please install Additional Gateways addon to use this gateway».

زبانه درگاه پیامکی در تنظیمات دیجیتس با کاوه‌نگار انتخاب‌شده و جمله انگلیسی «Please Install Additional Gateways Addon To Use This Gateway» زیر آن
انتخاب کاوه‌نگار در دیجیتس ۹٫۲٫۵

این افزونه در بخش «اضافات» خود دیجیتس هم، با دکمه GET، آمده است. در فروشگاه جست‌وجوی چهار عبارت مربوط به آن نتیجه‌ای نداد و «دیجیتس» فقط دو محصول داد: خود افزونه و «ورود و ثبت‌نام سریع با یک کلیک»، که افزودنی دیگری است. در مخزن وردپرس هم افزونه‌ای رایگان به نام Akay Digits Add-on (نسخه ۱٫۱، دی ۱۴۰۳) هست که در توضیحش ملی‌پیامک، IPPanel و ارسال با پترن را می‌آورد. آن را نصب نکردیم.

ورودی ملی‌پیامک در دیجیتس متن پیام را همان‌طور که نوشته‌اید، به‌صورت متن ساده، به آدرس REST ملی‌پیامک می‌فرستد و صفر را خودش پیش از شماره می‌گذارد. مستندات REST ملی‌پیامک همین درخواست را نمونه آورده است. همان مستندات برای کد تأیید یک روش جدا (SendOtp، با متنی ثابت) و یک سرویس پترن دارد؛ در کتابخانه‌ای که همراه این نسخه دیجیتس است اثری از آن‌ها نبود. ملی‌پیامک نسخه‌ای از دیجیتس را هم با نام خودش در سایتش گذاشته که ارسال پترن را در امکاناتش آورده است؛ دو نسخه را با هم مقایسه نکردیم.

درگاه سفارشی هشت فیلد و چهار جای‌نگهدار دارد، و اولین درخواستش چندبخشی بود

با انتخاب «سفارشی» هشت فیلد باز می‌شود: آدرس URL درگاه پیامکی، HTTP Header، نوع (متد) HTTP، پارامترهای درگاه پیامکی، ارسال از داده‌ها، انکد پیغام، شماره تلفن و شناسه فرستنده. در پارامترها جفت‌های «نام:مقدار» را با کاما جدا می‌کنید. در آدرس و مقدارها چهار جای‌نگهدار کار می‌کند: to برای شماره، message برای متن پیام، sender_id برای شناسه فرستنده و otp برای کد.

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

CODE
وردپرس نیاز
POST /send
Content-Type: multipart/form-data
to=+989121234567
message=Your+OTP+is+763829+%0D%0A%40127.0.0.1+%23763829
sender=3000TEST
otp=763829

بدنه چندبخشی (multipart) است و حتی پیام انگلیسی هم با علامت جمع به‌جای فاصله و کدهای درصدی به‌جای خط جدید رسیده. فرم تازه با متد GET و «انکد پیغام» روی «URL Encode» باز می‌شود؛ متد را ما روی POST گذاشتیم. اگر پنل پیام را خودش انکدگشایی نکند، همین نشانه‌ها در پیامک می‌ماند.

هیچ‌کدام از سه قالب شماره صفر اول را نمی‌فرستد

فیلد «شماره تلفن» سه گزینه دارد. با کد کشور ۹۸ و شماره ۹۱۲۱۲۳۰۰۶۰ در جعبه «ارسال تست»، سرور نمونه این‌ها را گرفت:

گزینهشماره‌ای که به سرور نمونه رسید
با + و کد کشورعلامت + و بعد از آن 989121230060
with only country code989121230060
without country code9121230060

مستندات ملی‌پیامک شماره را 09123456789 می‌نویسد. کاوه‌نگار در مستنداتش چهار قالب درست را فهرست کرده است: 09121234567، 00989121234567، شماره با علامت جمع و کد کشور، و 9121234567. قالب اول و سوم دیجیتس در این فهرست هست و قالب دوم، با کد کشور و بی‌علامت، نیست. برای پنلی که مستنداتش فقط شماره با صفر نشان می‌دهد، گزینه سوم را بگذارید و در پارامترها پیش از جای‌نگهدار شماره یک صفر بنویسید. مثالش در بخش «نمونه» پایین‌تر است و درخواست ثبت‌شده‌اش receptor=09121230051 داشت. کاوه‌نگار این صفر را لازم ندارد، چون قالب سوم در فهرستش هست؛ آن مثال فقط نشان می‌دهد پارامتر شماره را چطور می‌سازد.

جعبه «ارسال تست» صفری را که تایپ کنید نگه می‌دارد: با کد کشور ۹۸ و شماره 09121230001 سرور نمونه شماره‌ای با کد کشور و بعد از آن همان صفر گرفت. شماره را بدون صفر بنویسید. این جعبه ارقام فارسی را هم رد کرد و گفت «لطفا شماره موبایل معتبر وارد کنید». فرم ثبت‌نام اما ارقام فارسی را خودش به لاتین برمی‌گرداند: برای ۰۹۱۲۱۲۳۰۰۱۱ شماره 989121230011 را فرستاد، با علامت جمع پیش از آن. رفتار فرم‌سازها با ارقام فارسی در فیلد موبایل را در نوشته فرم‌ساز سنجیده‌ایم.

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

متن پیام را، در فیلد «نمونه متن»، فارسی کردیم، «کد ورود شما به {NAME}: {OTP}»، و چهار گزینه «انکد پیغام» را با بدنه چندبخشی امتحان کردیم. پیام در سه گزینه این شد:

CODE
وردپرس نیاز
URL Encode          %DA%A9%D8%AF+%D9%88%D8%B1%D9%88%D8%AF+%D8%B4...+WP+Needs+test%3A+152436
URL Raw Encode      %DA%A9%D8%AF%20%D9%88%D8%B1%D9%88%D8%AF%20...%20WP%20Needs%20test%3A%20828229
Convert To Unicode  0020002000200020005700500020004E00650065...003A0020003900380037003700380035

با «خیر» همان متن بی‌تغییر رسید، «کد ورود شما به WP Needs test: 148292»، و فقط همین متن فارسی را خوانا رساند. گزینه آخر حرف‌های فارسی متن را انداخت و فقط فاصله‌ها، «WP Needs test»، دو نقطه و رقم‌ها ماندند، چون کدش پیام را بایت‌به‌بایت می‌خواند و حرف فارسی در UTF-8 دو بایت است.

اما «خیر» همیشه درست نیست. شکل درخواست را متد، فیلد «ارسال از داده‌ها» و پارامترها تعیین می‌کنند، و هر شکل جای انکد خودش را دارد:

شکل درخواستانکد پیغامآنچه به سرور نمونه رسید
POST با پارامترهای جدا با کاماخیرمتن فارسی خوانا در بدنه چندبخشی
GETخیریک بار انکد؛ با URL Encode دو بار انکد شد
POST با «ارسال از داده‌ها» برابر Yes و هدر Content-Type: application/jsonخیرJSON که حرف‌های فارسی را به شکل کد یونیکد می‌نویسد
POST با یک رشته پارامتر بدون کاما، با علامت & میان آن‌هاURL Encodeبدنه application/x-www-form-urlencoded

مستندات کاوه‌نگار برای فراخوان ارسال ساده می‌نویسد پیام در حالت POST یا GET حتماً باید انکد شود. از شکل‌هایی که ثبت کردیم، GET با «خیر» و رشته پارامتر با «URL Encode» پیام را یک بار انکدشده رساندند؛ پذیرفتن یا نپذیرفتن آن‌ها را روی پنل واقعی نسنجیدیم.

نمونه: تنظیمی که شکل فراخوان Lookup کاوه‌نگار را می‌سازد

کاوه‌نگار برای کد تأیید روشی جدا دارد، Lookup، و درباره‌اش می‌نویسد بالاترین اولویت را دارد و به گیرندگانی که پیامک تبلیغاتی را بسته‌اند هم فیلتر نمی‌شود، فرستنده لازم نیست، و الگوی پیام را باید پیشتر در پنل بسازید. مقدارها را این‌طور گذاشتیم، با میزبان سرور نمونه به‌جای api.kavenegar.com:

  • آدرس URL درگاه پیامکی: مسیر v1/API-KEY/verify/lookup.json
  • نوع (متد) HTTP: GET
  • پارامترهای درگاه پیامکی: receptor:0{to}, token:{otp}, template:login
  • شماره تلفن: without country code
  • انکد پیغام: «خیر»

سرور نمونه این را گرفت: GET /v1/API-KEY/verify/lookup.json?receptor=09121230051&token=829454&template=login. شکلش همان مثال مستندات است؛ میزبان و کلید کاوه‌نگار را جایش بگذارید. «login» را ما فقط به‌عنوان نام الگو در پارامتر نوشتیم و الگویی با این نام در هیچ پنلی نساخته‌ایم. مستندات کاوه‌نگار برای نامی که پیدا نشود یا الگویی که هنوز تأیید نشده، خطای ۴۲۴ می‌نویسد. متن فارسی این‌جا در الگوی پنل می‌ماند و فیلد «نمونه متن» دیجیتس در این تنظیم به پنل نمی‌رسد. اطلاعات ورود به پنل، کلید یا نام کاربری و رمز، در این درخواست‌ها می‌رود، و در کد این نسخه هر دو فراخوان curl (درگاه سفارشی و ملی‌پیامک) بررسی گواهی TLS را خاموش کرده‌اند؛ یعنی هویت سرور مقصد سنجیده نمی‌شود.

جعبه نوع متد و پارامترهای درگاه سفارشی در دیجیتس با متد Get و پارامترهای Receptor و Token و Template
پارامترهای درگاه سفارشی در دیجیتس ۹٫۲٫۵

فرم در نصب آزمایشی ما با کشور آمریکا باز شد و بخشی از متن‌ها انگلیسی است

فرم ورود در نصب آزمایشی ما با پرچم آمریکا و کد ۱ باز شد. دیجیتس کشور را از تنظیم «کد کشور پیشفرض» می‌خواند و اگر آن نبود، از موقعیت‌یابی ووکامرس، سرایند کشور کلودفلر و یک پرس‌وجوی بیرونی حدس می‌زند و در نبودشان روی ۱ می‌ماند.

نصب ما هیچ‌کدام را نداشت، و نسنجیدیم که بازدیدکننده‌ای از ایران روی سایت زنده چه کشوری می‌بیند. با کد ۱، شماره ۰۹۱۲۱۲۳۴۵۶۷ خطای «لطفا یک شماره تلفن همراه معتبر وارد کنید!» داد و چیزی ارسال نشد. فهرست کشورها فقط انگلیسی است: با «ایران» در جست‌وجویش ردیفی پیدا نشد و با «Iran» ردیف «Iran (+98)» آمد. با کد ۹۸ فرم صفر اول را خودش حذف می‌کند.

متن‌های انگلیسی روی صفحه فارسی از جاهای دیگری هم می‌آید: «Use» پیش از «آدرس ایمیل»، «or»، «Passwordless login»، «Add Email (Optional)»، «Skip for now» و «Verify Phone». بسته فارسی دیجیتس ۲٬۵۰۹ ترجمه کامل و ۶۲۵ ترجمه علامت‌خورده با fuzzy دارد، و روی صفحه فقط همان ۲٬۵۰۹ مورد می‌آید. «Verify Phone»، «Add Email (Optional)»، «Skip for now» و «or» از موردهای علامت‌خورده‌اند؛ متن «Skip for now» در آن فایل «جست و خیز در حال حاضر» و متن «or» «برای» است. برای «Passwordless login» در فایل ردیفی نیست.

دو مرحله فرم دیجیتس: فرم ورود با پرچم ایران و کد ۹۸ و شماره‌ای که با ارقام فارسی تایپ شده و به ۹۱۲ ۱۲۳ ۴۵۶۷ برگشته، با «Use» و «Or» و «Passwordless Login» به انگلیسی؛ و مرحله تأیید تلفن با عنوان «Verify Phone»
فرم ورود و مرحله تأیید تلفن در دیجیتس با کشور ایران

متن پیش‌فرض پیامک هم انگلیسی است:

CODE
وردپرس نیاز
Your OTP is {OTP}
@{DOMAIN} #{OTP}

خط دوم، با دامنه بعد از @ و کد بعد از #، همان شکل پیام یک‌بارمصرف وابسته به دامنه است که مشخصه WebOTP به مشخصه sms-one-time-codes می‌سپارد؛ آن مشخصه می‌گوید دامنه و کد در آخرین خط پیام می‌آیند و متن توضیحی پیش از آن. پس متن فارسی را پیش از آن خط بنویسید.

پیش از وصل کردن پنل واقعی، این‌ها را تنظیم و روی خودتان امتحان کنید

شماره، انکد و Content-Type را اول با نمونه مستندات پنل خودتان بسنجید، و بعد:

  • شماره: گزینه سوم، و اگر مستندات پنل با صفر شروع می‌شود، یک صفر پیش از جای‌نگهدار شماره.
  • انکد پیغام: طبق جدول، «خیر» برای بدنه چندبخشی، GET و JSON و «URL Encode» برای رشته پارامتر.
  • ثبت‌نام: کشور را «Iran» انتخاب کنید و با شماره‌ای که می‌شناسید تا مرحله کد بروید.
  • جعبه «ارسال تست»: شماره را بدون صفر بنویسید و زیر «Gateway Response» پاسخ خام پنل را بخوانید. فهرست خطاهای ملی‌پیامک «الزام تنظیم IP مجاز» را هم دارد؛ اگر پاسخ این بود، IP سرور سایتتان را در پنل ثبت کنید. قاعده‌ای از همین جنس در نوشته زرین‌پال آمده است.

تکمیل خودکار، فیلد جایگزینی «OTP» در زبانه «ترجمه‌ها»، افزونه Additional Gateways، گزینه Firebase که روی نصب تازه انتخاب‌شده است، و تسویه حساب ووکامرس را هم نسنجیدیم. اگر نمی‌خواهید خودتان درخواست را تنظیم کنید، درخواست توسعه را ثبت کنید.

پرسش‌های متداول

با دیجیتس کدام پنل پیامک ایرانی بدون افزونه جانبی آماده است؟

در دیجیتس ۹٫۲٫۵ که وردپرس نیاز می‌فروشد، از ۳۰ پنلی که بدون افزونه جانبی انتخاب‌شدنی‌اند، ملی‌پیامک تنها نام ایرانی است. کاوه‌نگار، SMS.ir، قاصدک و فراپیامک از ۱۷۰ گزینه‌ای‌اند که افزونه Additional Gateways را می‌خواهند. گزینه «سفارشی» پنل‌هایی را که با درخواست ساده HTTP کار کنند صدا می‌زند؛ ما فقط درخواستی را که دیجیتس می‌فرستد روی سرور نمونه دیدیم، نه ارسال به گوشی را.

دیجیتس شماره موبایل را با چه قالبی به پنل می‌فرستد؟

در درگاه سفارشی سه قالب دارد و در آزمون ما برای شماره ۹۱۲۱۲۳۰۰۶۰ سه خروجی داد: با علامت + و کد کشور، با کد کشور بدون علامت و بدون کد کشور. هیچ‌کدام صفر اول ندارد. مستندات کاوه‌نگار قالب اول و سوم را از قالب‌های درست شماره می‌شمارد و قالب دوم را نه. برای پنلی که مستنداتش فقط شماره با صفر نشان می‌دهد، گزینه سوم را بگذارید و در پارامترها پیش از جای‌نگهدار شماره یک صفر بنویسید.

چرا پیامک فارسی دیجیتس با علامت درصد به پنل می‌رسد؟

در آزمون ما، با POST و بدنه چندبخشی و «انکد پیغام» روی «URL Encode» (گزینه نخست آن فیلد)، متن فارسی با علامت جمع به‌جای فاصله و کدهای درصدی رسید. در همان بدنه، «خیر» متن خوانا رساند. در GET هم «خیر» یک بار انکد کرد و «URL Encode» دو بار.

چرا فرم دیجیتس در وردپرس فارسی نیمه انگلیسی است؟

در بسته فارسی دیجیتس ۹٫۲٫۵، ۶۲۵ ترجمه علامت fuzzy دارند و فایل کامپایل‌شده فقط ۲٬۵۰۹ ترجمه کامل را دارد. «Verify Phone»، «Skip for now» و «or» از موردهای علامت‌خورده‌اند و «Passwordless login» ردیفی در فایل ندارد؛ این‌ها انگلیسی روی صفحه می‌آیند.

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

دیدگاه یا پرسش خود را بنویسید