یکی از بخشهای رایگانی که پیامرسان بله برای کسب و کارها به وجود آورده است امکان ارسال کدتایید OTP به صورت رایگان میباشد. در این نوشته با استفاده از افزونه دیجیتس این عملیات را انجام خواهیم داد.
ارسال کدتایید OTP با پیامرسان بله در وردپرس
با کد زیر میتوانید OTP افزونه Digits را پس از ارسال موفق پیامک، از طریق سرویس سفیر برای کاربر در بله نیز ارسال کنید.
کد زیر را در فایل functions.php قالب فعال سایت وردپرسی خود اضافه کنید. دقت کنید قبل از انجام اینکار باید افزونهی دیجیتس Digits را در سایت وردپرسی خود نصب کرده باشید:
add_filter(
'digit_send_message_result',
'my_send_digits_otp_to_bale_after_sms',
10,
8
);
function my_send_digits_otp_to_bale_after_sms(
$result,
$gateway,
$country_code,
$mobile,
$message,
$otp,
$flag_1 = false,
$flag_2 = false
) {
if ($result) {
my_send_digits_otp_to_bale(
$country_code,
$mobile,
$message,
$otp,
$flag_1,
$flag_2
);
}
return $result;
}
function my_send_digits_otp_to_bale(
$country_code,
$mobile,
$message,
$otp,
$flag_1 = false,
$flag_2 = false
) {
$country_code = preg_replace('/[^0-9]/', '', (string) $country_code);
$mobile = preg_replace('/[^0-9]/', '', (string) $mobile);
$otp = preg_replace('/[^0-9]/', '', (string) $otp);
if ($otp === '' || strlen($otp) < 4 || strlen($otp) > 10) {
return;
}
if (substr($mobile, 0, 2) === '98') {
$phone_number = $mobile;
} else {
$mobile = ltrim($mobile, '0');
$phone_number = $country_code . $mobile;
}
if (
substr($phone_number, 0, 2) !== '98' ||
strlen($phone_number) !== 12
) {
return;
}
$duplicate_key = 'my_bale_otp_' . md5(
$phone_number . '|' . $otp
);
if (get_transient($duplicate_key)) {
return;
}
set_transient($duplicate_key, 1, 60);
$request_body = array(
'request_id' => wp_generate_uuid4(),
'bot_id' => (int) MY_BALE_BOT_ID,
'phone_number' => $phone_number,
'message_data' => array(
'otp_message' => array(
'otp' => $otp,
),
),
);
$response = wp_remote_post(
'https://safir.bale.ai/api/v3/send_message',
array(
'timeout' => 8,
'headers' => array(
'api-access-key' => MY_BALE_API_ACCESS_KEY,
'Content-Type' => 'application/json',
),
'body' => wp_json_encode($request_body),
)
);
if (is_wp_error($response)) {
delete_transient($duplicate_key);
error_log(
'Bale OTP connection failed: ' .
$response->get_error_message()
);
return;
}
$status_code = wp_remote_retrieve_response_code($response);
$response_data = json_decode(
wp_remote_retrieve_body($response),
true
);
if (
$status_code < 200 ||
$status_code >= 300 ||
empty($response_data['message_id'])
) {
delete_transient($duplicate_key);
error_log(
'Bale OTP failed. HTTP status: ' .
$status_code
);
}
}
سپس قطعه کد زیر را در فایل wp-config.php سایت وردپرس خود قرار دهید:
define('MY_BALE_API_ACCESS_KEY', 'test');
define('MY_BALE_BOT_ID', 1234);
مقدارهای YOUR_API_ACCESS_KEY و MY_BALE_BOT_ID را با اطلاعات دریافتی از پنل کسبوکار بله جایگزین کنید. کلید API را در سایت یا آموزش عمومی منتشر نکنید.
اگر در ارتباط با آموزش بالا سوالی دارید در بخش نظرات این نوشته برای ما بنویسید.















اگه کاربر دو بار پشت سر هم درخواست کد بده اون محدودیت 60 ثانیه باعث مشکل نمیشه؟
Transient موجود در کد برای جلوگیری از ارسال تکراری همان OTP به همان شماره در بازه کوتاه استفاده شده است. اگر OTP جدید تولید شود، کلید ساختهشده نیز متفاوت خواهد بود.
برای گرفتن Bot ID باید حتما ربات جداگانه داخل بله بسازیم؟
برای استفاده از سرویس سفیر باید اطلاعات موردنیاز از پنل کسبوکار بله دریافت شود. Bot ID و کلید دسترسی هم از همان اطلاعاتی هستند که در تنظیمات کد استفاده میشوند.
میشه کاری کرد کد فقط از بله ارسال بشه و هزینه پیامک کلا حذف بشه؟
برای این حالت باید منطق ارسال Digits تغییر کند، چون کد فعلی بله را بهعنوان مسیر تکمیلی بعد از ارسال موفق پیامک استفاده میکند.
اگه پیامک دیجیتس ارسال نشه کد بله هم دیگه برای کاربر فرستاده نمیشه؟
بله، در این پیادهسازی ارسال به بله بعد از موفق بودن نتیجه ارسال پیامک انجام میشود. اگر ارسال اصلی ناموفق باشد، تابع ارسال بله اجرا نمیشود.
این روش فقط برای شماره های ایران کار میکنه یا میشه شماره خارجی هم باهاش استفاده کرد؟
در کد فعلی شماره با پیششماره ایران بررسی میشود، بنابراین برای پشتیبانی از شمارههای کشورهای دیگر باید بخش اعتبارسنجی شماره تغییر کند.