feat: update SMS templates and logic to ensure required tokens are present for Kavenegar integration
This commit is contained in:
@@ -29,10 +29,10 @@ class SmsMessageTemplate
|
||||
],
|
||||
SmsLog::TAG_PAYMENT => [
|
||||
'title' => 'تأیید پرداخت و نوبت',
|
||||
'body' => 'نوبت شما با {doctor} در تاریخ {date} ثبت و تأیید شد.',
|
||||
'variables' => ['doctor', 'date'],
|
||||
'body' => 'نوبت شما با {doctor} در تاریخ {date} ساعت {time} ثبت و تأیید شد.',
|
||||
'variables' => ['doctor', 'date', 'time'],
|
||||
'kavenegar_template' => 'clinicpro-payment',
|
||||
'token_map' => ['doctor' => 'token10', 'date' => 'token20'],
|
||||
'token_map' => ['date' => 'token', 'time' => 'token2', 'doctor' => 'token10'],
|
||||
],
|
||||
SmsLog::TAG_CLINIC_INVITATION => [
|
||||
'title' => 'دعوت پزشک به کلینیک',
|
||||
@@ -67,14 +67,14 @@ class SmsMessageTemplate
|
||||
'body' => "نوبت جدید ثبت شد.\nبیمار: {patient}\nتاریخ: {date} ساعت {time}\n\nبرای مدیریت نوبتهای خود بهصورت رایگان به سایت clinic-pro.ir مراجعه کنید.\nکلینیک پرو",
|
||||
'variables' => ['patient', 'date', 'time'],
|
||||
'kavenegar_template' => 'clinicpro-doctor-appt',
|
||||
'token_map' => ['patient' => 'token10', 'date' => 'token2', 'time' => 'token3'],
|
||||
'token_map' => ['date' => 'token', 'time' => 'token2', 'patient' => 'token10'],
|
||||
],
|
||||
SmsLog::TAG_WELCOME => [
|
||||
'title' => 'خوشآمدگویی',
|
||||
'body' => '{name} عزیز، به {site} خوش آمدید. پروفایل شما توسط نماینده ثبت شد.',
|
||||
'variables' => ['name', 'site'],
|
||||
'kavenegar_template' => 'clinicpro-welcome',
|
||||
'token_map' => ['name' => 'token10', 'site' => 'token20'],
|
||||
'token_map' => ['name' => 'token', 'site' => 'token10'],
|
||||
],
|
||||
];
|
||||
|
||||
|
||||
@@ -43,6 +43,17 @@ class KavehNegarProvider implements SmsProviderInterface
|
||||
}
|
||||
}
|
||||
|
||||
// token/token2/token3 مقدارِ دارای فاصله را رد میکنند؛ فاصله را با نیمفاصله (ZWNJ) جایگزین میکنیم.
|
||||
private const NO_SPACE_SLOTS = ['token', 'token2', 'token3'];
|
||||
|
||||
private function forSlot(string $slot, string $value): string
|
||||
{
|
||||
if (!in_array($slot, self::NO_SPACE_SLOTS, true)) {
|
||||
return $value;
|
||||
}
|
||||
return preg_replace('/\s+/u', "\u{200C}", $value) ?? $value;
|
||||
}
|
||||
|
||||
public function sendTemplate(string $mobile, string $templateCode, array $vars): bool
|
||||
{
|
||||
try {
|
||||
@@ -54,11 +65,12 @@ class KavehNegarProvider implements SmsProviderInterface
|
||||
if ($vars !== [] && array_keys($vars) !== range(0, count($vars) - 1)
|
||||
&& array_diff(array_keys($vars), $slots) === []) {
|
||||
foreach ($vars as $slot => $v) {
|
||||
$params[$slot] = $v;
|
||||
$params[$slot] = $this->forSlot($slot, (string) $v);
|
||||
}
|
||||
} else {
|
||||
foreach (array_values($vars) as $i => $v) {
|
||||
$params['token' . ($i > 0 ? $i + 1 : '')] = $v;
|
||||
$slot = 'token' . ($i > 0 ? $i + 1 : '');
|
||||
$params[$slot] = $this->forSlot($slot, (string) $v);
|
||||
}
|
||||
}
|
||||
$resp = $this->httpClient->request('POST',
|
||||
|
||||
Reference in New Issue
Block a user