Files
nobat724_front/lib/staticPageIntro.js
T

71 lines
6.6 KiB
JavaScript

// متن شهریِ صفحات «درباره ما» و «تماس با ما».
//
// این دو صفحه تا پیش از این به دامنهٔ اصلی canonical می‌شدند، چون متنشان روی همهٔ
// دامنه‌ها یکی بود. حالا self-canonical‌اند و باید واقعاً متفاوت باشند، وگرنه همان
// duplicate با شکل تازه برمی‌گردد.
//
// داده‌ای که واقعاً بین شهرها فرق می‌کند: نام شهر، نام استان، و شعار شهر.
// تلفن و ایمیل روی هر ۳۵ شهر یکسان است، پس سیگنال تمایز نیستند.
function hash(value) {
let out = 0;
for (let i = 0; i < value.length; i++) out = (out * 31 + value.charCodeAt(i)) >>> 0;
return out;
}
const pick = (variants, seed) => variants[(seed >>> 0) % variants.length];
const ABOUT_INTROS = (city, province, brand) => [
`${brand} سرویس نوبت‌دهی آنلاین شهر ${city} است. پزشکان عمومی و متخصصی که در ${city} پذیرش دارند اینجا پروفایل دارند و می‌توانید بدون تماس تلفنی نوبتشان را بگیرید. پوشش ما ${province} است و فهرست پزشکان همین استان به‌مرور کامل‌تر می‌شود.`,
`اگر ساکن ${city} هستید، ${brand} کوتاه‌ترین مسیر تا نوبت پزشک است. جست‌وجو بر اساس تخصص یا نام پزشک انجام می‌شود و نتیجه فقط پزشکان همین شهر و اطراف آن در ${province} را نشان می‌دهد، نه فهرستی سراسری که به کارتان نمی‌آید.`,
`${brand} بخشی از شبکه‌ای است که برای هر شهر یک سایت مستقل دارد. این نسخه مخصوص ${city} است: پزشکان، مراکز درمانی و برنامهٔ نوبت‌دهی همه از ${city} و ${province} می‌آیند. همین باعث می‌شود نتیجهٔ جست‌وجو کوتاه و مرتبط بماند.`,
`هدف ${brand} این است که مراجعهٔ حضوری برای گرفتن نوبت در ${city} حذف شود. برنامهٔ کاری پزشک، بازه‌های خالی و هزینهٔ خدمت پیش از تأیید نهایی نمایش داده می‌شود. دامنهٔ کاری ما ${province} است و مراکز درمانی همین استان به سامانه اضافه می‌شوند.`,
`${brand} برای مردم ${city} ساخته شده است. به‌جای گشتن میان شماره‌های پراکنده، اینجا پزشک را بر اساس تخصص پیدا می‌کنید، نوبت آزادش را می‌بینید و همان لحظه رزرو می‌کنید. پزشکان ${province} به‌تدریج به همین فهرست اضافه می‌شوند.`,
`این صفحه دربارهٔ ${brand} است، سامانهٔ نوبت‌دهی آنلاین ${city}. کار ما ساده است: نشان دادن اینکه کدام پزشک ${city} چه زمانی نوبت آزاد دارد و ثبت نوبت بدون تماس تلفنی. تمرکز جغرافیایی ما روی ${province} است.`,
];
const CONTACT_INTROS = (city, province, brand) => [
`برای ارتباط با ${brand} از راه‌های زیر استفاده کنید. پاسخ‌گویی مربوط به کاربران ${city} و ${province} از همین کانال‌ها انجام می‌شود: پیگیری نوبت، لغو نوبت و مشکلات ورود به حساب.`,
`اگر در ${city} با نوبتی که رزرو کرده‌اید مشکلی داشتید، از همین صفحه با ${brand} تماس بگیرید. برای هماهنگی مستقیم با مطب، شمارهٔ خود پزشک روی صفحهٔ پروفایلش در ${province} آمده است.`,
`${brand} پشتیبانی کاربران ${city} را از راه‌های زیر انجام می‌دهد. برای درخواست افزودن مطب یا مرکز درمانی در ${province} هم از همین کانال‌ها می‌توانید اقدام کنید.`,
`این‌ها راه‌های تماس با ${brand} است. سؤال‌های مربوط به رزرو، لغو و بازگشت وجه کاربران ${city} از همین‌جا پیگیری می‌شود و برای پزشکان ${province} هم مسیر جداگانه‌ای برای ثبت‌نام وجود دارد.`,
`ارتباط با ${brand} برای کاربران ${city} از طریق تلفن، واتساپ و ایمیل ممکن است. اگر پزشک یا مسئول مرکز درمانی در ${province} هستید و می‌خواهید به سامانه اضافه شوید، از همین صفحه هماهنگ کنید.`,
`اگر سؤالی دربارهٔ نوبت‌دهی آنلاین در ${city} دارید، تیم ${brand} از راه‌های زیر در دسترس است. برای موضوع‌های مربوط به خودِ مطب — تغییر ساعت ویزیت یا آدرس — تماس با مطب در ${province} سریع‌تر جواب می‌دهد.`,
];
/**
* جملهٔ پایانی که به متن می‌چسبد.
*
* با ۶ variant و ۳۵ شهر، جفت‌های هم‌variant اجتناب‌ناپذیرند — سنجیده شد: بهبهان و
* یاسوج روی هر دو صفحه یک variant گرفتند و تفاوتشان فقط جای‌گذاری نام شهر بود.
* شعار شهر این را می‌شکند چون در city.json برای هر ۳۵ شهر یکتاست.
*/
const sloganSentence = (slogan) =>
slogan ? ` شعار ما همین است: ${slogan}.` : "";
/**
* seed از نام شهر می‌آید تا متن هر شهر ثابت بماند ولی بین شهرها واگرا شود.
* دو مجموعه seed متفاوت می‌گیرند، وگرنه یک شهر در هر دو صفحه ساختار یکسان می‌گرفت.
*/
export function buildAboutIntro(cityName, provinceName, siteName, slogan = "") {
if (!cityName) return "";
const province = provinceName || cityName;
const brand = siteName || `${cityName} نوبت`;
return (
pick(ABOUT_INTROS(cityName, province, brand), hash(cityName) >>> 3) +
sloganSentence(slogan)
);
}
export function buildContactIntro(cityName, provinceName, siteName, slogan = "") {
if (!cityName) return "";
const province = provinceName || cityName;
const brand = siteName || `${cityName} نوبت`;
return (
pick(CONTACT_INTROS(cityName, province, brand), hash(cityName) >>> 7) +
sloganSentence(slogan)
);
}