71 lines
6.6 KiB
JavaScript
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)
|
|
);
|
|
}
|