بمساعده هذه الهياكل نستطيع ان نتحكم في مسير الاتصال,من حيث عامل التارخ او الوقت او اي شرط اخر وكذالك بامكاننا القفز الى مكان ما داخل خارطه الاتصال,وكذالك بامكاننا اجراء عمليات متكره.
تقسم الى شرطيه قفز والدوران.
الشرطيه:
وهي نوعين زمنيه وغير زميه
1-الزمنيه:
المقصود بالزمنيه هنا انه يتم التحقق من الوقت,على سبيل المثال اذا اردنا استقبال المكالمات فقط في ايام الدوام الرسمي
اوفي يوم محدد اوفي ساعه محدده فبامكاننا عمل ذالك .وذالك باستعمال الاقترانات التاليه:
IFTIME,GotoIfTime,ExecIfTime
IFTIME:وظيفه هذا الاقتران ارجاع القيمه التي خلف علامه ؟ اذا كان الوقت ضمن الوقت الموضوع داخله واذا كان الوقت خارج هذا المجال فسوف يرجع القيمه التي خلف :.
الصيغه:
كود: تحديد الكل
IFTIME(<timespec>?[<true>][:<false>])
كود: تحديد الكل
exten=>111,1,NoOp(----------exa8------------)
exten=>111,2,Set(A=${IFTIME(9:00-17:00|mon-fri|*|*?100:200)})
exten=>111,3,NoOp(A=${A})
هذا الاقتران ان نتحكم في وقت استقبال المكالمات,حيث بامكاننا التحكم في الساعه و اليوم والشهر كماتشاهدون الصيغه:
كود: تحديد الكل
GotoIfTime(<time range>|<days of week>|<days of month>|<months>?[[context|]extension| ]pri)
- time range:مدى الوقت,اي من ساعه كذا الى ساعه كذا:
الصيغه التاليه:
<hour>':'<minute>'-'<hour>':'<minute>
القيم المحتمله:
"*"| يعني جميع الاوقات
hour:الساعات من 0 الى 23
minute:الدقائق من 0 الى 59
مثال:
9:00-17:00 - days of week:ايام الاسبوع
الصيغه التاليه:
:dayname :اي يوم معين
<dayname>'-'<dayname> |:من يوم كذا الى يوم كذا
"*" | :جميع الايام
القيم المحتمله:
"sun" | "mon" | "tue" | "wed" | "thu" | "fri" | "sat"
مثال:
mon-fri - days of month:اي ايام الشهرا
الصيغه التاليه:
<daynum> :يوم معين
<daynum>'-'<daynum> :مدى معين من الايام
"*" :كل الايام
القيم المحتمله:من 1 حتى 31
مثال:
14-1 - months:الشهر,شهر معين ام اشهر محدده ام كلها
الصيغه التاليه:
<monthname> : شهر معين
<monthname>'-'<monthname>:مدى معين من الاشهر
"*" :جميع الاشهر
القيم المحتمله:
"jan" | "feb" | "mar" | "apr" | "may" | "jun" | "jul" | "aug" | "sep" | "oct" | "nov" | "dec"
مثال:
may-aug
اسماء الايام والاشهر ليس case-sensitive اي انه اذا كان الاسم صغير الاحرف ام كبير الاحرف لافرق بينهما.
وفي حال كان الشرط صحيحا فانه ينتقل الى الى العلامه او الى الوصله مع رقم الاولويه او الى جزء ما ثم الى الوصله ثم الى رقم الاولويه.الامثله التاليه ستوضح ذالك.*:نستعمل هذه الاشاره لتدلنا على الجميع,اي جميع الساعات اوجميع الايام اوجميع الاشهروكذالك جميع ايام الشهر.
ويجب ان لا ننسى استعمال اشاره | للفصل بينهم.
في المثال التالي يسمح بدخول المكالمات في الاوقات من الساعه التاسعه وحتى الساعه العاشره ليلا في الايام من السبت وحتى الخميس.
المثال:
كود: تحديد الكل
exten => 119,1,NoOp(---------exa9------------------------)
exten => 119,2,GotoIfTime(9:00-22:00|sat-thu|*|*?open)
exten => 119,n,busy();we are closed
exten => 119,n,Hangup()
exten => 119,n(open),answer();we are open
exten => 119,n(open),Playback(welcome)
exten => 119,n,Hangup();
كود: تحديد الكل
exten => 120,1,NoOp(---------exa9------------------------)
exten => 120,2,GotoIfTime(12:00-22:00|sun|*|*?open,10,1)
exten => 120,n,busy();we are closed
exten => 120,n,Hangup()
[open]
exten => 10,1,answer();we are open
exten => 10,2,Playback(welcome)
exten => 10,3,Hangup()
كود: تحديد الكل
exten=>113,1,NoOp(----------exa10------------)
exten=>113,2,ExecIfTime(9:00-17:00|mon-sun|*|*?hangup)
exten=>113,3,Playback(welcome)
exten=>113,4,Hangup();
وهنا يكفي ان يكون الشرط صحيحا وهي:
IF,GotoIf,GosubIf,ExecIf سوف نتناول كل اقتران على حده ,وسوف نبدأ ب IF
:IFوظيفه هذا الاقتران ارجاع القيمه التي خلف علامه ؟ اذا كان الشرط صحيحا والقيمه التي خلف:اذا كان خطأ.
المثال التالي يوضح ذالك:
كود: تحديد الكل
exten=>104,1,NoOp(----------exa11------------)
exten=>104,2,set(A=1)
exten=>104,3,Set(B=${IF($[ ${A} = 1]?100:200)})
exten=>104,4,NoOp(B=${B})
الصيغه كمايلي:([GotoIf(condition?label1[:label2
فاذا كان الشرط صحيح فسيتم القفز الى label1 واذا كان خطأ الى label2 .الافضل ان يكون بصيغه ال String اي ان يكون محاطا بالمنقوطتين.
ليس شرطا ان نعرف جهتين للقفز بل يمكننا تعريف واحده فقط. ويمكن ان يكون هدف القفز علامه Label اورقم اولويه او Extension مع رقم الاولويه اوجزء Context مع وصله مع رقم اولويه.
المثال التالي يوضح استعمال label1 واحد فقط:
كود: تحديد الكل
exten=>114,1,NoOp(----------exa11------------)
exten=>114,2,set(A=5)
exten=>114,3,GotoIf($["${A}" = "5"]?ok)
exten=>114,4,hangup()
exten=>114,n(ok),NoOp(----------ok------------)
exten=>114,n(ok),hangup()
كود: تحديد الكل
exten=>115,1,NoOp(----------exa12------------)
exten=>115,2,set(A=5)
exten=>115,3,GotoIf($[${A} = 5]?5:4)
exten=>115,4,hangup()
exten=>115,5,NoOp(----------ok------------)
exten=>115,6,hangup()
كود: تحديد الكل
exten=>116,1,NoOp(----------exa13------------)
exten=>116,2,set(A=5)
exten=>116,3,GotoIf($[${A} = 5]?ok,1:4)
exten=>116,4,hangup()
exten=>ok,1,NoOp(----------ok------------)
exten=>ok,2,hangup()
كود: تحديد الكل
exten=>117,1,NoOp(----------exa14------------)
exten=>117,2,set(A=5)
exten=>117,3,GotoIf($[${A} = 5]?ok,10,1:4)
exten=>117,4,hangup()
[ok]
exten=>10,1,NoOp(----------ok------------)
exten=>10,2,hangup()
كود: تحديد الكل
exten=>118,1,NoOp(----------exa14------------)
exten=>118,2,set(A=4)
exten=>118,3,GotoIf($[${A} = 5]?ok,10,1:false,20,1)
[ok]
exten=>10,1,NoOp(----------ok------------)
exten=>10,2,hangup()
[false]
exten=>20,1,NoOp(-------false------------)
exten=>20,2,hangup()
الى (وصله ثم رقم اولويه)اوالى (جزء ثم وصله ثم رقم اولويه) اوممكن الى (علامه).
الصيغه:
GosubIf(condition?label1:label2)
المثال التالي يوضح عمل هذا الاقتران,هنا تم القفز الى (علامه)
كود: تحديد الكل
exten=>122,1,NoOp(----------exa13------------)
exten=>122,2,set(A=5)
exten=>122,3,GosubIf($[${A} = 5]?ok)
exten=>122,4,hangup()
exten=>122,n(ok),NoOp(----------ok------------)
exten=>122,n(ok),return()
الصيغه
ExecIF (<expr>|<app>|<data>)
المثال التالي يوضح ذالك:
كود: تحديد الكل
exten=>123,1,NoOp(----------exa13------------)
exten=>123,2,set(A=4)
exten=>123,3,ExecIf($[${A} = 5]|Playback|tt-weasels)
exten=>123,4,NoOp(----------ok------------)
exten=>123,5,hangup()
دوال القفز,وهي تساعدنا بالانتقال مباشره الى جزء او وصله اورقم اولويه وهما.
.Goto,Gosub
Goto:الانتقال مباشره الى مكان كما في الصيغ التاليه:
كود: تحديد الكل
Goto(context,extension,priority)
Goto(extension,priority)
Goto(priority)
Goto(context,extension,label)
Goto(extension,label)
Goto(label)
كود: تحديد الكل
exten=>122,1,NoOp(----------exa13------------)
exten=>122,2,Goto(5)
exten=>122,3,NoOp(--------------X----------------)
exten=>122,4,NoOp(---------------X---------------)
exten=>122,5,NoOp(----------ok------------)
exten=>122,6,hangup()
:Gosubوظيفته تنفيذ عده وصلات ثم العوده لتنفيذ الوصله التاليه للمكان الذي خرج منه.
صيغه الانتقال اوالقفز كمايلي:
كود: تحديد الكل
Gosub(context,extension,priority)
Gosub(extension,priority)
Gosub(priority)
كود: تحديد الكل
[Test8]
exten=>122,1,NoOp(----------exa13------------)
exten=>122,2,Gosub(subTest,100,1)
exten=>122,3,NoOp(------------continue---------------)
exten=>122,4,hangup()
[subTest]
exten=>100,1,NoOp(---------hello sub---------)
exten=>100,2,return()
دوال الدوران:اصدار 1.6 تاخذ متغيرات
يمكن كذالك في أستريسك القيام بعمليات دوران.اي تنفيذ مجموعه من الوصلات عده مرات متتاليه.ويتم ذالك عن طريق استخدام While / EndWhile .
While / EndWhile :يتم تنفيذ كل مابين EndWhile وWhile طالما كان الشرط داخلWhile صحيحا.
الصيغه:
كود: تحديد الكل
While(condition)
EndWhile
كود: تحديد الكل
مثال يوضح ذالك:
exten => 123,1,Answer()
exten => 123,n,Set(i=1)
exten => 123,n,While($[${i} < 5])
exten => 123,n,SayNumber(${i})
exten => 123,n,Set(i=$[${i} + 1])
exten => 123,n,EndWhile
exten=> 123,n,Hangup()