در سیستمهای VoIP، تماسها ممکن است از یک شماره به شماره دیگری هدایت شوند. این فرآیند معمولاً با استفاده از هدر SIP به نام Diversion انجام میشود که اطلاعات مربوط به هدایت تماس را شامل میشود. این سناریو مربوط به پردازش تماسهایی است که هدایت شدهاند؛ به این صورت که شماره مقصد نهایی و اطلاعات هدایت تماس (یعنی اینکه تماس از کجا به کجا هدایت شده) از هدر SIP استخراج میشود. این اطلاعات میتواند برای تغییر مسیر تماس به مقصد مناسب، لاگگیری، و یا تصمیمگیریهای پویا در طول تماس استفاده شود.
اهمیت سناریو:
وقتی شما با تعداد زیادی تماس VoIP سر و کار دارید، به ویژه در محیطهای سازمانی یا مراکز تماس، مدیریت تماسهای هدایتشده بسیار حیاتی است. این سناریو به شما کمک میکند تماسهای ورودی را که به صورت هدایتشده هستند به شکل بهینهتری مدیریت کنید. همچنین، میتوانید از این سناریو برای تحلیل لاگ تماسها استفاده کنید و مسیر تماسها را بررسی کنید. در نهایت، شما با این رویکرد انعطاف بیشتری در مدیریت و هدایت تماسهای ورودی خواهید داشت.
این نوع پیادهسازی در Asterisk به شما امکان میدهد که به طور پویا تماسها را براساس شماره هدایتشده در هدر SIP به مقصد جدید هدایت کنید و از ابزارهای قدرتمندی مانند CUT
برای استخراج و پردازش دادههای موجود در هدرهای SIP استفاده کنید.
کد Dialplan Asterisk:
exten => _X.,1,Set(noop={***P1***})
same => n,Set(src=${CALLERID(num)})
same => n,Set(dst=${EXTEN})
same => n,Set(Diversion=${SIP_HEADER(Diversion)})
same => n,Set(Diversion_number=${CUT(Diversion,@,1)})
same => n,Set(Diver=${CUT(Diversion_number,:,2)})
same => n,Goto(Diversion,0${EXTEN},1)
same => n,Noop($END$)
توضیح مرحله به مرحله کد:
- دریافت اطلاعات تماس:
exten => _X.,1,Set(noop={***P1***})
:
یک دیباگ اولیه با استفاده از noop
ایجاد میشود تا مطمئن شویم کد اجرا شده است.
same => n,Set(src=${CALLERID(num)})
:
شماره تماسگیرنده در متغیر src
ذخیره میشود.
same => n,Set(dst=${EXTEN})
:
شماره مقصد (اکستنشن) در متغیر dst
ذخیره میشود.
- استخراج هدر SIP و پردازش شماره هدایتشده:
same => n,Set(Diversion=${SIP_HEADER(Diversion)})
:
هدر Diversion
استخراج میشود. این هدر شامل اطلاعات هدایت تماس است.
same => n,Set(Diversion_number=${CUT(Diversion,@,1)})
:
بخش اول هدر تا قبل از @
(معمولاً شماره هدایتشده) استخراج میشود.
same => n,Set(Diver=${CUT(Diversion_number,:,2)})
:
بخش دوم شماره هدایتشده بعد از کاراکتر :
(معمولاً یک عدد خاص یا بخش دوم شماره) استخراج میشود.
- هدایت تماس به مقصد جدید:
same => n,Goto(Diversion,0${EXTEN},1)
:
تماس به کانتکست Diversion
و اکستنشن جدید که از شماره مقصد اصلی به همراه یک صفر اضافهشده تشکیل شده است، هدایت میشود.
- دیباگ نهایی:
same => n,Noop($END$)
:
یک دیباگ ساده برای پایان تماس و نمایش مقدار $$END$$ که به شما کمک میکند بدانید کد تا پایان به درستی اجرا شده است.
نکات مهم و کاربردها:
-
مدیریت تماسهای Forward شده:
تماسهای هدایتشده که با هدرDiversion
مشخص میشوند، میتوانند به مقاصد مختلف هدایت شوند. این دیالپلن به شما کمک میکند تا با استفاده از اطلاعات این هدر تماسها را به بهترین شکل مدیریت کنید. -
انعطافپذیری بالا در مدیریت تماسها:
با این کد میتوانید به طور خودکار تماسها را به مقصدهای متفاوت هدایت کرده و از پیچیدگیهای مدیریت دستی تماسها خلاص شوید. همچنین، میتوانید لاگهای تماسها را دقیقاً بررسی کنید و از اطلاعات هدایتشده در تصمیمگیریهای بیشتر استفاده کنید. -
کاربرد SIP Header Diversion در VoIP:
این هدر یکی از مؤلفههای مهم در تماسهای VoIP است، زیرا زمانی که تماس از یک شماره به شماره دیگری هدایت میشود، اطلاعات مهمی از مسیر تماس در این هدر ذخیره میشود. پردازش این اطلاعات میتواند در بسیاری از موارد به بهبود کارایی سیستم VoIP کمک کند.
این دیالپلن برای کسانی که به دنبال مدیریت هوشمند تماسهای هدایتشده هستند و میخواهند از هدرهای SIP در شبکههای VoIP بهره ببرند، یک ابزار بسیار مفید است.