شما می توانید با ارسال ایمیل خود ، بصورت رایگان مشترک شده و از بروزسانی مطلع شوید.

ایمیل خود را وارد کنید:

 WebRTC چیست؟ یکی از تکنولوژی های بسیار مهم در دنیای مخابرات امروز WebRTC ست. با استفاده از این تکنولوژی، می توان در بستر وب و تنها با استفاده از مرورگر، ارتباطات صوتی و تصویری برقرار کرد؛ که این به معنی امکان برقراری ارتباط از طریق هر گجت (Gadget) بدون نیاز به نصب نرم افزار خاص [...]

یکی دیگر از ماژول های کاربردی مورد استفاده در FreePBX ماژول Boss Secretary می باشد که متاسفانه از نسخه ی ۱۲ دیگر بروزرسانی نشده اما به دلیل کاربرد زیاد آن برای مشتریان، در نهایت این ماژول توسط تیم فنی شرکت ساعیان ارتباط بهینه سازی و مشکلات آن مرتفع شده است. در ادامه به معرفی این [...]

یکی از مواردی که پس از نصب فری پی بی ایکس ( FreePBX ) برای کاربران بوجود می آید این است که ارتباط تجهیزاتی مانند گیت وی Gateway با استریسک، پس از دقایقی قطع می شود. در ادامه ابتدا به بررسی علت این مسئله و سپس راهکار آن می پردازیم. نحوه کار قابلیت Intrusion Detection [...]

یکی از سناریوهای رایج و متداولی که بسیاری از همکاران با آن سروکار دارند، ارتباط میان گیت وی های سنگوما Sangoma Vega Gateway و سرور ایزابل Issabel می باشد که در نتیجه ارتباط با شبکه مخابرات PSTN را میسر می نماید. در این مقاله قصد داریم برقراری این ارتباط را به زبانی ساده، آموزش دهیم. [...]

یکی از نیازمندی های اصلی در سیستم های تلفنی تغییر فایل های صوتی مربوط به اعلان های سیستم می باشد. همچنین ممکن است نیاز باشد تا در منوی صوتی از چند زبان مختلف پشتیبانی کنید. برای تغییر prompt های سیستم تلفنی استریسک و همچنین تعریف زبان های مختلف، روش های گوناگونی وجود دارد که ساده [...]

یکی از مباحثی که در راه اندازی شبکه های VoIP رایج است، برقراری ارتباط میان دو سرور تلفنی می باشد. به عنوان مثال دو سرور تلفنی را در نظر بگیرید که در دو مکان مجزا در حال سرویس دهی به کاربران خود می باشند و لازم است تا کاربران این دو سیستم نیز بتوانند با [...]

در FreePBX سه روش جهت راه اندازی فکس وجود دارد: ماژول تجاری Fax Pro، استفاده از اپلیکیشن های استریسک و سرور فکس Hylafax. هر یک از این روش ها ویژگی هایی دارند؛ ماژول Fax Pro قابلیت ارسال و دریافت فکس را برای کاربران از طریق UCP فراهم می کند. یعنی کاربران با ورود به محیط [...]

یکی از نیازمندی های اصلی در یک سیستم تلفنی، امکان ارسال و دریافت فکس می باشد. البته امروزه با توسعه بیش از پیش ابزار های ارتباطی همچون ایمیل، روش های سنتی مانند فکس کمتر مورد استفاده قرار می گیرند؛ ولی هنوز کاملا جایگزین نشده اند. بنابراین با بکارگیری سیستم های تلفنی مبتنی بر VoIP نیز [...]

صندوق صوتی از نیازمندی های مهم IP-PBX ها بوده و می تواند میزان سرویس دهی و همچنین در دسترس بودن را برای کاربران افزایش دهد. علاوه بر این، امکان ارسال پیام های صندوق صوتی از طریق ایمیل، این قابلیت را کاربردی تر می نماید. این قابلیت را در FreePBX می توانید به سادگی برای کابران [...]

در مقاله های قبلی نحوه ضبط پیام صوتی در  ماژول System Recording و بکارگیری آن در ساخت منوی صوتی شرح داده شد. علاوه بر این قابلیت، در برخی موارد نیاز است تا برای تماس گیرنده یک پیام صوتی خاص پخش شود و سپس به مقصد دیگری هدایت شود. به عنوان مثال اطلاع رسانی درباره یک [...]

کار با AGI در الستیکس

در این مقاله نگاهی بر  AGI نویسی در Asterisk و همین طور قابلیت های آن خواهیم داشت.

بسته‌های مورد نیاز :

phpagi-2.2x –> http://phpagi.sourceforge.net/

سناریو:

یک شرکت خدماتی قصد دارد برای واحد گارانتی قطعات خود از سیستم Elastix به منظور اطلاع رسانی وضعیت گارانتی استفاده کند

مشتریان بعد از تحویل قطعه خود به شرکت، اپراتور یک کد رهگیری به آنها می‌دهد تا بعدا از طریق تلفن گویا بتوانند وضعیت قطعه خود را پیگیری کنند (کد رهگیری می‌تواند توسط CRM “سیستم مدیریت ارتباط با مشتری” یا هر نرم افزار دیگری بر روی Database ثبت شود).

 

برای راه اندازی این سناریو در سیستم Elastix می‌توان تماس ورودی را به صورت مستقیم یا از طریق IVR (منوی صوتی) به یک AGI فرستاد و در آنجا کد رهگیری از مشتری گرفته شود و با توجه به وضعیت فعلی قطعه، فایل متناسب با آن پخش شود.

 

ماژول dialplan injection را از آدرس زیر دریافت کرده و آن را بر روی freepbx نصب کنید.

https://github.com/POSSA/freepbx-dialplan-injection

سپس در قسمت Dialplan Injection بر روی Add Injection کلیک کنید.

در قسمت Description و Extension ، اسم و شماره مناسبی را انتخاب کنید و در قسمت command نیز دستور زیر را وارد کنید

AGI(track.php)

با این کار در هنگام تعریف IVR در قسمت Destination می‌توانید Injection تعریف شده را نیز انتخاب کنید تا با زدن کلید تعریف شده در IVR تماس به AGI دلخواه ما متصل شود.

 

برای این سیستم شما می‌توانید از CRM موجود در الستیکس و یا هر نرم افزار دیگری برای تولید کد رهگیری هنگام تحویل کالا استفاده کنید و در ضمن باید قابلیت تغییر قابلیت وضعیت دستگاه نیز به اپراتور داده شود.

در زیر یک نمونه ساده database برای این موضوع در نظر گرفته شده که البته برای تغییر وضعیت قطعه باید به صورت دستی و با استفاده از دستورات SQL آن را تغییر داد.

CREATE TABLE IF NOT EXISTS `tracking` (
  `track_number` int(11) NOT NULL AUTO_INCREMENT,
  `track_status` enum('Progress','done','Conflict','Finished') NOT NULL,
  PRIMARY KEY (`track_number`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=10001 ;

 

حال فایل track.php را در مسیر var/lib/asterisk/agi-bin/ با مجوز اجرا درست کرده و محتویات زیر را درون بریزید.

#!/usr/bin/php -q
<?php
        define("AGI_PATH" , "/var/lib/asterisk/agi-bin/") ;
        define("AGIBIN_DIR", AGI_PATH . "phpagi");
        include(AGIBIN_DIR."/phpagi.php");

        $agi = new AGI();

        $agi->answer();
        $agi->set_music(true, "default");

        // $filename, $timeout=NULL, $max_digits=NULL
        $track_number = $agi->get_data('beep', 5000, 5);
        $agi->verbose("track number is: ". $track_number["result"]);

        $link = mysql_connect('localhost', 'simple_user', 'simple_password');
        if (!$link) {
                $agi->verbose("Could not connect to Database: " . mysql_error());
                exit;
        }
        mysql_select_db("tracking");
        $sql = "SELECT * FROM tracking WHERE  track_number = ". $track_number["result"];
        $result = mysql_query($sql);
        if($result) {
                $row = mysql_fetch_array($result, MYSQL_ASSOC);

                $charge_status = $row['track_status'];

                switch ($charge_status){
                case 'Progress':
                        $chargeStatusNum = 1 ;
                        break;
                case 'done':
                        $chargeStatusNum = 2 ;
                        break;
                case 'Conflict':
                        $chargeStatusNum = 3 ;
                        break;
                case 'Finished':
                        $chargeStatusNum = 4 ;
                        break;
                default:
                        $chargeStatusNum = 0 ;
                }
                }else{
                        $chargeStatusNum = 0 ;
                }
                $agi->verbose('CHARGE_STATUS: '. $charge_status) ;

                $agi->exec('Playback', "custom/tracking/". $chargeStatusNum);
                $agi->set_variable('CHARGE_STATUS', $chargeStatusNum) ;
                $agi->hangup();
?>

 

در زیر برخی از متودهای پر کاربرد به اختصار توضیح داده شده است.

در اسکریپت بالا تماس بعد از فرستاده شدن به اجرا کردن فایل track.php با استفاده از متود answer تماس که هیچ پارامتری نمی‌گیرد به تماس پاسخ می‌دهد

$track_number = $agi->get_data('beep', 5000, 5);

متود get_data و سه پارامتر آن منتظر دریافت ورودی از شخص تماس گیرنده می‌شود

پارامتر اول: نام فایل برای پخش

پارامتر دوم: مدت زمان Timeout به میلی ثانیه

پارامتر سوم: تعداد حداکثر ارقام وارد شده

کد وارد شده برابر است با:

$track_number["result"]

در خطهای بعدی به دیتابیس وصل شده و وضعیت کالا را توسط کد رهگیری گرفته شده به دست می‌آوریم.

استفاده از متود verbose برای debug کردن و همین طور نمایش بعضی از متغیرهای مهم در cli پیشنهاد می‌شود.

در پایان نیز با توجه به وضعیت کالای مورد نظر می‌توان فایل مناسب با آن را برای مشتری پخش کرد تا از وضعیت کالای خود مطلع شوند برای این کار ما با استفاده از متود exec و عدد به دست آمده در دستور switch می‌توان فایل مورد نظر پخش کرد. برای مثال اگر وضعیت کالای مورد نظر done باشد فایل custom/tracking/2.wav برای مشتری پخش خواهد شد.

پارامتر های exec :

پارامتر اول: نام application مورد نظر

پارامتر دوم: option های application مورد نظر

دیدگاه خود را به ما بگویید.