نرمال سازی 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

“</yoastmark”>”group _tableWrapper_1rjym_13 flex w-fit flex-col-reverse” tabindex=”-1″>

نوع شماره ورودی خروجی اصلاح‌شده توضیح
+989121234567 09121234567 شماره موبایل با کد بین‌المللی
989121234567 09121234567 موبایل بدون +
9121234567 09121234567 اضافه‌کردن صفر اول
02144556677 02144556677 شماره ثابت صحیح
2144556677 02144556677 افزودن پیش‌شماره تهران
4455 4455 داخلی یا شماره ۴-۵ رقمی

اهمیت استانداردسازی شماره تماس در سیستم‌های VoIP

  1. جلوگیری از تکرار شماره‌ها در CRM — همه شماره‌ها در یک فرمت ذخیره می‌شوند.

  2. تطبیق راحت‌تر تماس‌ها با مشتریان — تماس‌های ورودی با شماره‌های ذخیره‌شده مطابقت می‌یابند.

  3. افزایش دقت گزارش‌گیری — در آمار تماس‌ها و فاکتورهای فروش.

  4. استفاده در 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 می‌توانید نتیجه را با دستور زیر برگردانید:

#!/usr/bin/php -q
<?php
require_once '/var/lib/asterisk/agi-bin/EditCid.php';

$agi = new AGI();
$number = $argv[1];
$normalized = EditCid($number);

$agi->set_variable("NEWCID", $normalized);
?>

نکات حرفه‌ای

  • اگر از این تابع در پروژه‌های CRM استفاده می‌کنی، بهتر است قبل از ذخیره در دیتابیس اجرا شود.

  • برای تماس‌های بین‌المللی، می‌توانی شرط‌های جدید اضافه کنی تا با +971 یا +964 و … هم سازگار شود.

  • حتماً preg_replace('/\D/', '', $PhoneNumber) را نگه دار تا ورودی‌های آلوده به کاراکترهای غیرعددی حذف شوند.

استفاده از نرمال سازی Caller ID در استریسک قبل از ذخیره اطلاعات تماس، دقت ارتباط بین سیستم تلفنی، CRM و دیتابیس سازمان را افزایش می‌دهد.

</div></div>

<div class=”overflow-y-auto p-4″ dir=”ltr”>

5/5 - (1 امتیاز)

دیدگاه‌ها

guest

0 نظر