الدرس الاول: مقدمة برمجة خارطة الاتصال Programming Dial plan

هنا سيتم شرح نظام أستريسك نظريا عن طريق سلسله من الدروس ان شاء الله تعالى.
albalawi
مدير الموقع
مشاركات: 234
اشترك في: 11 مايو 2010, 19:53
مكان: Germany
اتصال:

الدرس الاول: مقدمة برمجة خارطة الاتصال Programming Dial plan

مشاركة بواسطة albalawi »

السلام عليكم ورحمة الله وبركاته.
نظام أستريسك يتكون من العديد من الملفات التي بمساعدتها يتم التحكم به. كل واحد له وظيفه معينه سيتم شرحها تدريجيا من خلال الدروس.
الملف الرئيسي الذي سوف نكتب به برامجنا هو ملف extensions.conf . طبعا البرمجه هنا نصيه يعني لا يوجد مترجم كمبايلر بل ستنفذ فورا مثل
لغات البرمجه النصيه الاخري ب ه ب و بيرل. وهذا الملف يحتوي على العديد من التقسيمات او الاجزاء وتسمى هنا Context .فيكون بعضها لاجراء الاتصالات
او استقبالها او لتوجيه الاتصال الى اي جهه اخرى .ومنها تستطيع تحديد صلاحيات كل خط على سبيل المثال هل مسموح له بالاتصال الخارجي ام فقط
داخلي او تجبره على الاتصال مع رقم محدد.

اجزاء خارطه الاتصال:
وتتكون من اربعه اجزاء :
الاول هو Context ومعناه الجزء او الحاله.
الثاني هو Extension ومعناه هنا في هذه اللغه وصله .
الثالث هو Priority اي الاولويه.
الرابع اسم التطبيق الذي سوف نقوم بتنفيذه مثلا الاجابه او اعطاء اشاره مشغول.وسيتم شرحها بالتفصيل بالخطوه التاليه.

:Context-1
وهو عباره عن مجموعه من Extensions (وصلات) وتاتي مرتبه حسب رقم الوصله ورقم الاولويه. المثال التالي:

كود: تحديد الكل

[InComming]
exten => 1001,1,Answer()
exten => 1001,2,Playback(hello-world)
exten => 1001,3,Hangup()
قواعد كتابه ال Context:
1-يتكون الاسم من احرف وارقام ويكون داخل [] يكون متصل لايسمح بالفراغ بالاسم ويسمح باشاره الطرح .
2- ويتكون من عده وصلات كما ترون في المثال .
3-ينتهي هذ ال Context عند بدايه Context اخر.
4-يمكن ان يكون فارغا.
5-ممكن ان يحتوي على Context اخر وذالك باستعمال الامر include .

شرح المثال:
InComming هو اسم الجزء و يتكون من ثلاث وصلات ويتم تنفيذها تباعا على حسب رقم الاولويه,والبدايه تكون من رقم واحد.
<=exten ياتي في بدايه كل وصله.
1001 رقم الوصله التي سوف نتصل عليها.
1و2و3 ارقام الاولويه ويبدأ دائما من رقم واحد .
Answer تطبيق الاجابه.
Playback تطبيق تشغيل ملف صوتي.
Hangup انهاء المكالمه.
هنا في هذا المثال تم التحكم في مجرى المحادثه, عندما يتصل احد على الرقم 1001 ننتقل الى وصله ذات الاولويه رقم واحد فيتم الاجابه
ثم ننتقل الى رقم الاولويه اثنين حيث تم تشغيل الملف الصوتي وفي هذه اللحظه يسمع المتصل كلمه Hello World او او اي كلمه ترحيب اخرى من النظام وبعد الانتهاء من الملف الصوتي,
ينتقل الى الوصله الثالثه التي تحتوي على الامر انهاء المكالمه Hangup وبه ينقطع الاتصال.

كما قلت هنا يتم معالجه مسار المكالمه وتصل هنا عن طريق ملف اخر حيث يستقبلها ويحولها الى هذا ال context وفي ذالك الملف يتم فيه تعريف القناه وهي انواع سنذكرها.

Extension-2
كما قلنا سابقا كل context يحتوي على مجموعه من Extensions الوصلات بتعبيرنا هنا والتي تحتوي على اوامر يقوم استريسك بقرائتها الواحده تلوه الاخرى حسب رقم الاولويه
ثم يقوم بتنفيذها ,ويتم ذالك على الاتصال الحالي الذي جاء عن طريق قناه خارجيه او قناه داخليه,وبما ان الوصلات تتحكم في مسير الاتصال بامكاننا عمل الكثير,مثلا نوصله مع شخص اخر حتى يتكلم معه اوتشغيل ملف صوتي حتى يسمعه اوتخزين الرقم في قاعده البيانات وكذالك بامكاننا عمل العكس البحث في قاعده الييانات عن المتصل ومعرفته واشياء اخرى كثيره جدا.

قواعد كتابه الوصلات Extensions :
1-تكون الصيغه كمايلي:

كود: تحديد الكل

exten=> Extension number,Priority,Application
<=exten ياتي في بدايه كل وصله كما ذكرنا قبل قليل.
(Extension number(or name رقم الوصله او اسمها.
Application:اسم التطبيق المراد تنفيذه.
ويتم الفصل مابين هذه المكونات الثلاث بفاصله.
مثال:

كود: تحديد الكل

exten=>100,1,Answer()
2-في كل سطر يكون وصله واحده
3-للتعليق على الوصله اوكتابه معلومات عنها يجب وضع فاصله منقوطه ثم تكتب ماتشاء.
مثال:

كود: تحديد الكل

exten=>100,1,Answer();I make this method to answer the call
4-اذا اردنا ان نقوم بعده عمليات متتاليه على خط اتصال معين فيجب ان يكون رقم الوصله للجميع ثابت يتغير فقط رقم الاولويه واسم التطبيق
كما في المثال السابق

كود: تحديد الكل

exten=>100,1,Answer()
exten=>100,2,Play(Hello)
exten=>100,3,Hangup()
كما تلاحظ في في الوصله الاولى فلقد كان اسم اورقم الوصله يساوي 100وكان رقم الاولويه يساوي 1 واسم التطبيق Answer
وبا اننا نريد أستريسك ان يطبق هذه الوصلات الثلاث مره واحده فيجب ان يكون اسم الوصله فيها واحد بينهم.
وهو كذالك في مثالنا فانت ترى في الوصله الثانيه بقي اسم الوصله كما هو ولكن ازداد رقم الاولويه فاصبح 2
5-اسم الوصله ممكن ان يتكون من احرف او ارقام او كليهما وكذالك ممكن ان يتكون من نماذج (باترن) تصلح لمطابقه مجموعه من الارقام وهذه النماذج لها
فوائد عظيمه وكذالك يوجد شروط لكتابتها سيتم شرحها لاحقا.

انواع الوصلات:
1-وصلات قادمه عن طريق المستخدم اي انه عندما يقوم مستخدم بالاتصال برقم فيجب ان يمر من هنا وكذالك في استقبال اتصال خارجي فيمر هنا وهذا هو غالب استعمال الوصلات.
2-وصلات قادمه عن طريق خدمه DTMF وهذه الخدمه عباره عن الاصوات التي تحدث عندما تكون تتكلم مع شخص ما وفي حال ضغطك على لوحه المفاتيح يصدر صوت وهو يختلف من مفتاح الى اخر,يستطيع استريسك التمييز بينهم ونقلك وصلك مع الوصله المطابقه.
3-وصلات من نوع خاص وتاتي من النظام مباشره او عند تنفيذنا Macro او عند وقت ما.

Priorities-3
كما قلنا فحتى يقوم استريك بالقيام بعده عمليات اوتطبيقات على اتصال ما فيجب ان يكون اسم الوصله واحدا ويتغير رقم الاولويه دائما بازدياد المثال:

كود: تحديد الكل

exten=>100,1,Answer()
exten=>100,2,Play(Merhaba)
exten=>100,3,Hangup()
تلاحظ في المثال باننا قمنا بالاجابه على المتصل وقلنا له مرحبا وانهينا المكالمه معه وهذا التدرج جاء عن طريق استخدامنا لرقم الاولويه فكان في الاولى واحد ثم اثنين ثم تم انهاء المكالمه مع المتصل مائه عندما انتقل الى رقم ثلاث.
قواعد كتابه ارقام الاولويه:
1-يجب ان تبدأ برقم واحد.
2-الزياده تكون دائما بواحد.
3-يمكنك استخدام الحرف n عوضا عن الزياده التي يجب ان تعملها دائما فيصبح المثال السابق كالتالي:

كود: تحديد الكل

exten=>100,1,Answer()
exten=>100,n,Play(Merhaba)
exten=>100,n,Hangup()
4-يمكن استخدام معرف label مع حرف الاولويه n حتى يساعدنا في عمليات القفز.المثال:

كود: تحديد الكل

exten => 300,1,GotoIfTime(9:00-17:00|mon-fri|*|*?300,open) 
exten => 300,n, MP3Player (CallUsTommorrow)
exten => 300,n(open),answer()
exten => 300,n(open), MP3Player (wellcome)
اذا اتصل احدهم في اوقات الدوام وهي هنا من الساعه 9 وحتى 17 (الخامسه مساءا) فسوف نجيب على المتصل ونرحب به,
واذا كان خارج اوقات الدوام فسوف نسمعه رساله صوتيه تفيده بان عليه الاتصال غدا.
5-ليس شرطا ان تاتي ارقام الاولويه مرتبه.اي ان المثال التالي سوف يعمل كما في الامثله السابقه:

كود: تحديد الكل

exten=>100,2,Play(Merhaba)
exten=>100,1,Answer()
exten=>100,3,Hangup()
ولكن من الافضل ان يكون مرتبا حتى يساعدك على الفهم وتحصل على النتيجه التي تريدها.

Application-3
وهي التطبيقات التي بامكاننا استعمالها في خارطه الاتصال.
لقد رايت في الامثله السابقه بعص هذه التطبيقات فهي متنوعه وكثيره فبعضها يتم تنفيذه مباشره ليس بحاجه الى متغيرات مثل Answer و Hangup .وكذالك توجد تطبيقات بحاجه الى متغير واحد او اكثر لكي تعمل مثلا Dial.

جميع الحقوق محفوظة لموقع أستريسك للعرب
Khalid
مشاركات: 0
اشترك في: 02 يونيو 2010, 09:13

Re: الدرس الاول: مقدمة برمجة خارطة الاتصال Programming Dial

مشاركة بواسطة Khalid »

السلام عليكم. ماهي الخطوات التي احتاجها لتطبيق هذه الدروس. لقد قمت بتحميل وتنصيب trixbox
ولكن لم اعرف كيف اقوم بتنفيذ هذه الاوامر المعطاه في الدروس. اين يجب ان اكتب هذه الاوامر للتنفيذ؟؟؟
albalawi
مدير الموقع
مشاركات: 234
اشترك في: 11 مايو 2010, 19:53
مكان: Germany
اتصال:

Re: الدرس الاول: مقدمة برمجة خارطة الاتصال Programming Dial

مشاركة بواسطة albalawi »

هنا اخي خالد الخطوات:
http://www.asterisk4arab.com/viewtopic.php?f=8&t=37
mstfysn
مشاركات: 0
اشترك في: 07 أغسطس 2010, 02:13

Re: الدرس الاول: مقدمة برمجة خارطة الاتصال Programming Dial

مشاركة بواسطة mstfysn »

السلام عليكم و رحمة الله و بركاته

الف شكر على هذا المنتدى الأكثر من رائع و ان شاء الله ربنا يجعله فى ميزان حسناتك

برجاء توضيح ما المقصود بالاوليه بمثال عملى

[InComming]
exten => 1001,1,Answer()
exten => 1001,2,Playback(hello-world)
exten => 1001,3,Hangup()


و لكم جزيل الشكر
albalawi
مدير الموقع
مشاركات: 234
اشترك في: 11 مايو 2010, 19:53
مكان: Germany
اتصال:

Re: الدرس الاول: مقدمة برمجة خارطة الاتصال Programming Dial

مشاركة بواسطة albalawi »

mstfysn كتب:السلام عليكم و رحمة الله و بركاته

الف شكر على هذا المنتدى الأكثر من رائع و ان شاء الله ربنا يجعله فى ميزان حسناتك

برجاء توضيح ما المقصود بالاوليه بمثال عملى

[InComming]
exten => 1001,1,Answer()
exten => 1001,2,Playback(hello-world)
exten => 1001,3,Hangup()


و لكم جزيل الشكر
وعليكم السلام ورحمة الله وبركاته.
اخي الكريم بعد ان قمت بتركيب نظام أستريسك عندك تستطيع تطبيق هذا المثال العملي.
لقد استعملت أسرع الطرق لتركيب أستريسك مع احتياجاته الرئيسيه مثل ادارة الخطوط وغيرها وذالك باستخدام تريكس بوكس.
هنا شرح التركيب:
http://www.asterisk4arab.com/viewtopic.php?f=41&t=21

طريقة كتابة واستخدام وعمل هذا المثال الذي سالت عنه هنا في هذا الفيلم:
اذا لم تستطع مشاهدته كامل فاستعمل ملئ الشاشه.
mstfysn
مشاركات: 0
اشترك في: 07 أغسطس 2010, 02:13

Re: الدرس الاول: مقدمة برمجة خارطة الاتصال Programming Dial

مشاركة بواسطة mstfysn »

اخى الكريم

شكرا جزيلا على توضيحك الرائع و بارك الله فيك

الحمد لله انا كدا فهمت

الف شكر
Mu_Nizar
مشاركات: 6
اشترك في: 07 أكتوبر 2010, 16:22
مكان: S.A.R
اتصال:

Re: الدرس الاول: مقدمة برمجة خارطة الاتصال Programming Dial

مشاركة بواسطة Mu_Nizar »

السلام عليكم
لدي الـ extention رقمها 20000 تمثل أحد أجهزة الحواسب المتصلة على الشبكة ,( و التي يمكن لأي جهاز آخر على الشبكة أن يتصل بها )
قمت بكتابة :
[InComming]
exten => 20000,1,busy() ثم قمت بإعادة قراءة هذا الملف Re-Read Configs و من ثم جعلت الـ context في الـ extention 20000 تساوي InComming و قمت بـ apply configuration ...
أليس من المفترض الآن عندما يتصل أي جهاز موصول على الشبكة ( سواء soft phone or hard phone ) على الرقم 20000 أن يجد الخط مشغولا busy ؟

**

أيضا سؤال آخر لدي خط هاتف, أريد وصله مع النظام ,( عن طريق منافذ الكرت الموجود على سيرفر الـ trixbox ) و مبدئيا أريد عندما يتصل أحد من الخارج على هذا خط الهاتف هذا أن تحول المكالمة إلى جهاز معين موجود على الشبكة المتصلة بالسيرفر ...

و شكرا لك أخي الكريم ..
Mu_Nizar
مشاركات: 6
اشترك في: 07 أكتوبر 2010, 16:22
مكان: S.A.R
اتصال:

Re: الدرس الاول: مقدمة برمجة خارطة الاتصال Programming Dial

مشاركة بواسطة Mu_Nizar »

أيضا عندما أسجل مقاطع صوت خاصة بي .. أين يجب أن أضعها حتى أتمكن من استخدامها ?
albalawi
مدير الموقع
مشاركات: 234
اشترك في: 11 مايو 2010, 19:53
مكان: Germany
اتصال:

Re: الدرس الاول: مقدمة برمجة خارطة الاتصال Programming Dial

مشاركة بواسطة albalawi »

Mu_Nizar كتب:السلام عليكم
لدي الـ extention رقمها 20000 تمثل أحد أجهزة الحواسب المتصلة على الشبكة ,( و التي يمكن لأي جهاز آخر على الشبكة أن يتصل بها )
قمت بكتابة :
[InComming]
exten => 20000,1,busy() ثم قمت بإعادة قراءة هذا الملف Re-Read Configs و من ثم جعلت الـ context في الـ extention 20000 تساوي InComming و قمت بـ apply configuration ...
أليس من المفترض الآن عندما يتصل أي جهاز موصول على الشبكة ( سواء soft phone or hard phone ) على الرقم 20000 أن يجد الخط مشغولا busy ؟
السلام عليكم ورحمة الله وبركاته
لا يمكن ذالك لانهم على نفس السرفر

**
Mu_Nizar كتب: أيضا سؤال آخر لدي خط هاتف, أريد وصله مع النظام ,( عن طريق منافذ الكرت الموجود على سيرفر الـ trixbox ) و مبدئيا أريد عندما يتصل أحد من الخارج على هذا خط الهاتف هذا أن تحول المكالمة إلى جهاز معين موجود على الشبكة المتصلة بالسيرفر ...
و شكرا لك أخي الكريم ..
مانوع الكرت الذي تستعمله ويا حبذا صورة له.
albalawi
مدير الموقع
مشاركات: 234
اشترك في: 11 مايو 2010, 19:53
مكان: Germany
اتصال:

Re: الدرس الاول: مقدمة برمجة خارطة الاتصال Programming Dial

مشاركة بواسطة albalawi »

Mu_Nizar كتب:أيضا عندما أسجل مقاطع صوت خاصة بي .. أين يجب أن أضعها حتى أتمكن من استخدامها ?
اذا استعملت الامر التالي:

كود: تحديد الكل

exten => _X.,1,Monitor(wav,/tmp/myfile,mb)
فيكون مخزن تحت /tmp
أضف رد جديد

العودة إلى ”الجزء الاول:المقدمه والدروس Introduction and lessons“