نرمال سازی Caller ID در استریسک یکی از مهمترین فرآیندها در سیستمهای تلفنی VoIP برای مدیریت صحیح شماره تماسها و یکسانسازی فرمت شمارههای ورودی است. زمانی که سیستم شمارههای ورودی را با فرمتهای مختلف مانند `+98`، `0098` یا بدون صفر اولیه دریافت میکند، گزارش تماسها، اتصال به CRM و ماژولهای ارتباطی ممکن است با خطا روبهرو شوند.
برای حل این مشکل، توسعهدهندگان میتوانند در لایه AGI یا API سمت سرور یک تابع استانداردسازی ایجاد کنند تا شمارههای ورودی را یکسان کند. این فرآیند به سیستم کمک میکند شمارهها را با یک ساختار مشخص ذخیره کند و دقت تحلیل تماسها را افزایش دهد.
در این مقاله، نحوه استفاده از تابع `EditCid()` برای اصلاح فرمت شمارههای تلفنی و مدیریت بهتر Caller ID در سیستم تلفنی استریسک را بررسی میکنیم.
هدف تابع EditCid برای اصلاح Caller ID در استریسک
توسعهدهندگان این تابع را برای اصلاح و استانداردسازی شمارهها در سیستم تلفنی ایجاد کردهاند. این تابع شماره ورودی را به یک فرمت استاندارد تبدیل میکند تا شماره همیشه با صفر شروع شود . و برای تحلیل یا ذخیرهسازی مناسب باشد.استریسک (Asterisk) یک پلتفرم متنباز تلفنی است که اطلاعات کامل آن در وبسایت رسمی Asterisk نیز منتشر شده است.
کد کامل تابع اصلاح شماره تماس در استریسک
<?php
/**
* EditCid()
* Normalize and correct caller IDs for Iranian phone numbers.
* Usage: echo EditCid('+989121234567'); // returns 09121234567
*/
function EditCid($PhoneNumber) {
$PhoneNumber = preg_replace('/\D/', '', $PhoneNumber); // remove non-digits
if (substr($PhoneNumber, 0, 2) == '09' && strlen($PhoneNumber) == 11) {
return $PhoneNumber; // already correct mobile
} elseif (substr($PhoneNumber, 0, 1) == '9' && strlen($PhoneNumber) == 10) {
return "0$PhoneNumber"; // add missing 0
} elseif (substr($PhoneNumber, 0, 4) == '+989' && strlen($PhoneNumber) == 13) {
return substr_replace($PhoneNumber, "09", 0, 4); // remove +98
} elseif (substr($PhoneNumber, 0, 3) == '989' && strlen($PhoneNumber) == 12) {
return substr_replace($PhoneNumber, "09", 0, 3); // remove 98
} elseif (substr($PhoneNumber, 0, 4) == '2109' && strlen($PhoneNumber) == 13) {
return substr_replace($PhoneNumber, "09", 0, 4); // handle malformed prefixes
} elseif (substr($PhoneNumber, 0, 3) == '219' && strlen($PhoneNumber) == 12) {
return substr_replace($PhoneNumber, "09", 0, 3);
} elseif (substr($PhoneNumber, 0, 4) == '9821' && strlen($PhoneNumber) == 12) {
return substr_replace($PhoneNumber, "021", 0, 4); // Tehran numbers
} elseif (substr($PhoneNumber, 0, 2) == '21' && strlen($PhoneNumber) == 10) {
return substr_replace($PhoneNumber, "021", 0, 2); // missing 0 for landline
} elseif (strlen($PhoneNumber) == 10) {
return "0$PhoneNumber";
} elseif (substr($PhoneNumber, 0, 1) == '0' && substr($PhoneNumber, 0, 2) != '09' && strlen($PhoneNumber) == 11) {
return $PhoneNumber; // valid landline
} elseif (strlen($PhoneNumber) == 4) {
return $PhoneNumber; // extension
}
return $PhoneNumber; // fallback
}
?>
نحوه عملکرد تابع نرمال سازی Caller ID
| نوع شماره ورودی | خروجی اصلاحشده | توضیح |
|---|---|---|
+989121234567 |
09121234567 |
شماره موبایل با کد بینالمللی |
989121234567 |
09121234567 |
موبایل بدون + |
9121234567 |
09121234567 |
اضافهکردن صفر اول |
02144556677 |
02144556677 |
شماره ثابت صحیح |
2144556677 |
02144556677 |
افزودن پیششماره تهران |
4455 |
4455 |
داخلی یا شماره ۴-۵ رقمی |
اهمیت استانداردسازی شماره تماس در سیستمهای VoIP
-
جلوگیری از تکرار شمارهها در CRM — همه شمارهها در یک فرمت ذخیره میشوند.
-
تطبیق راحتتر تماسها با مشتریان — تماسهای ورودی با شمارههای ذخیرهشده مطابقت مییابند.
-
افزایش دقت گزارشگیری — در آمار تماسها و فاکتورهای فروش.
-
استفاده در AGI یا Webhook تماس — قبل از ذخیرهسازی CallerID در دیتابیس.
استفاده از تابع EditCid در استریسک AGI
مثال ساده در دیالپلن:
exten => 200,1,NoOp(Normalizing CallerID)
same => n,AGI(edit_cid.php,${CALLERID(num)})
same => n,Set(CALLERID(num)=${NEWCID})
same => n,Playback(thank-you)
same => n,Hangup()
و در فایل edit_cid.php میتوانید نتیجه را با دستور زیر برگردانید: