اطلاعیه

بستن
No announcement yet.

ODBC writesql نیاز مبرم

بستن
X
 
  • فیلتر کردن
  • زمان
  • نمایش
Clear All
پست های جدید

    ODBC writesql نیاز مبرم

    دوستان اگر این مشکلم با agi حل میشه ممنون میشم بگید چطوری چون من agi تاحالا کار نکردم...

    پروژه ای که دارم روش کارم میکنم ثبت شماره تماس همراه با تاریخوساعت همون لحظس.
    من عملیات زیر رو انجام دادم ولی به مشکل برخوردم:

    کد PHP:
    dbnamemobile
    Table
    user_mobile

    mysql
    select from user_mobile;
    +----+---------------------+-------------+
    id date mobile |
    +----+---------------------+-------------+
    2014-02-14 1652 | 09132367096 |
    2014-02-14 1625 | 09132357777 |
    2014-02-14 1612 | 09132357777 |
    2014-02-14 1612 | 09132357777 |
    2014-02-15 0853 | 09132007777 |
    2014-02-15 0825 | 09133347777 |
    2014-02-15 09:28:18 | 09133347777 |
    2014-02-15 09:28:29 | 09133347777 |
    2014-02-15 09:28:29 | 09133347777 |
    +----+---------------------+-------------+
    9 rows in set (0.00 sec

    فیلد id از جنس autonumber هست که خودش اتوماتیک عدد میده
    فیلد تاریخ هم از جنس تاریخ کامل همراه با ساعت و روز هست
    فیلد موبایل رو کراکتر گذاشتم


    با این دستور زیر هم اطلاعات رو دستی وارد میکنم:
    کد PHP:
    insert into user_mobile (date,mobilevalues (now(),"09132367096"); 

    حالا میخوام اینو در فایل func_odbc.conf وارد کنم :
    کد PHP:
    [MOBILE]
    dsn=asterisk
    writesql
    =insert into user_mobile (date,mobilevalues (now(),${mobile}) 
    ​اینم هم از dialplan که براش تعریف کردم:

    کد PHP:
    [office]
    exten => 600,1,Playback(mark-student-id)

    exten => 600,n,read(mobile)
    exten => 600,n,NoOp(${ODBC_MOBILE()})
    exten => 600,n,Hangup() 
    قاعدتا طبق تحقیقاتی که توی نت داشتم این باید کار کنه ولی با پیغام های زیر مواجه شدم:

    کد PHP:
    Connected to Asterisk 11.7.0 currently running on srv18903 (pid 1220)
    == 
    Using SIP RTP CoS mark 5
    -- Executing [600@office:1Playback("SIP/payampersa-00000004""mark-student-id"in new stack
    0x7f81d8007340 -- Probation passed setting RTP source address to **3***.****:8000
    -- <SIP/payampersa-00000004Playing 'mark-student-id.slin' (language 'en')
    -- 
    Executing [600@office:2Read("SIP/payampersa-00000004""mobile"in new stack
    -- User entered '09132367096'
    [Feb 15 0905] WARNING[1590][C-0000001d]: func_odbc.c:191 generic_executeSQL Execute returned an error -142000: [MySQL][ODBC 5.1 Driver][mysqld-5.1.71]You have an error in your SQL syntaxcheck the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 (185)
    [
    Feb 15 0905] WARNING[1590][C-0000001d]: func_odbc.c:199 generic_executeSQL Exec Direct failed (-1)![select mobile from user_mobile22 where id = ]
    [
    Feb 15 0905] WARNING[1590][C-0000001d]: res_odbc.c:608 ast_odbc_direct_executeSQL Execute errorVerifying connection to asterisk [asterisk-connector]...
    [
    Feb 15 0905] WARNING[1590][C-0000001d]: func_odbc.c:191 generic_executeSQL Execute returned an error -142000: [MySQL][ODBC 5.1 Driver][mysqld-5.1.71]You have an error in your SQL syntaxcheck the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 (185)
    [
    Feb 15 0905] WARNING[1590][C-0000001d]: func_odbc.c:199 generic_executeSQL Exec Direct failed (-1)![select mobile from user_mobile22 where id = ]
    [
    Feb 15 0905] ERROR[1590][C-0000001d]: func_odbc.c:538 acf_odbc_readUnable to execute query [select mobile from user_mobile22 where id = ]
    -- 
    Executing [600@office:3NoOp("SIP/payampersa-00000004"""in new stack
    -- Executing [600@office:4Hangup("SIP/payampersa-00000004"""in new stack
    == Spawn extension (office6004exited non-zero on 'SIP/payampersa-00000004' 



    ​اساتید عزیز ممنون میشم راهنماییم کنید و بگید ایراد کار من کجاست...

    یه چیزه دیگه اینکه میخوام وقتی شماره موبایل وارد شد با وارد کردن دکمه * شماره ثبت بشه


    ممنون میشم بهم بگید


    سپاسگذارم​
    درصورتی که نیاز به دسترسی داشتید میدم برام پیغام بزارید
    آخرین ویرایش توسط Habili; در تاریخ/ساعت 01-13-2020, 02:45 AM.

    #2
    سلام . مرکز تماس تون چیه ؟ کد پی اچ پی که زدین رو توی چه مسیری گذاشتین ؟ پرمیژن دادین به کد پی اچ پی تون ؟

    کامنت


      #3
      این دو تا پست انواع روش های اتصال به دیتابیس رو توضیح داده :
      آخرین ویرایش توسط Habili; در تاریخ/ساعت 01-12-2020, 01:16 AM.

      کامنت


        #4
        سلام
        ببینین بهترین و ساده ترین راه اینه که یه agi بنویسین حالا با هر زبونی که بلدین مثلا php , perl یا python ,...
        اطلاعات تماس در دیتابیس خود استریسک ذخیره میشه که mysql هستش
        اگه کامندی براتون سخته که دیتابیس رو چک کنین میتونین webmin رو نصب کنین و دیتابیس ، نام فیلد ها و .. رو بررسی کنید
        ببینین اگه درست فهمیده باشم ، تماس از بیرون میاد داخل سیستمتون حالا براش یه سری اتفاقها میفته بعدش هم در پایان تماسش قراره یه جایی ثبت بشه
        شما فقط کافیه آخر کانتکس ورودیتون خط زیر رو بنویسین :
        کد PHP:
        exten => s,n,Agi(sabt.php
        حالا میرید agi مینویسین
        فایل sabt.php رو تو مسیر
        /var/lib/asterisk/agi-bin
        ایجاد میکنین (یادتون نره بهش پرمیژن بدین)
        حالا من با php راهنماییتون میکنم که چه جوری agi بنویسین

        کد PHP:
        #!/usr/bin/php -q
        <?php

        require('phpagi.php');  
        error_reporting(E_ALL);

        $agi = new AGI();
          
        $agi->answer();

            if(!
        mysql_connect('192.168.1.100','root','123456789!@#'))
                echo 
        "Cannot connect to Database".mysql_error();
            if(!
        mysql_select_db('asteriskcdrdb'))
                echo 
        "cannot select database";

        $result mysql_query("SELECT
                     `cdr`.`id`
                    , `cdr`.`date`
                    , `cdr`.`source`
                    , `cdr`.`destination`
                    , `cdr`.`duration`
                    , `cdr`.`type`
                     , `call_type`.`title`
                    FROM `cdr`  
         ;"
        );
        $date date('d F Y - G:s');
        $source mysql_result('source');

        ?>
        وسپس مثلا نمایش این دو متغیر date و source

        البته میتونین با دستور زیر هم در agi کالر آیدی مخاطب رو داشته باشین:
        کد PHP:
          $callerid $agi->request['agi_callerid']; 
        آخرین ویرایش توسط masome vahid; در تاریخ/ساعت 02-19-2014, 09:58 PM.
        Telegram : https://telegram.me/linuxzone

        voip trainer - Asterisk - Elastix - Agi Programming- NewRock

        Voip Expert :ASTERISK-ELASTIX-NewRock Certified-With Experience of Working With
        Sangoma-Digium-Openvox-Synway-Atcom-Quintum Tenor-Polycom-Yealink-Rtx-Snom
        Cisco Collaboration - CME-CUCM-CUPs-CUC-WEBEX
        LPI ( Fundamental - LPI1 and LPI2 ) - Monitoring: ZABBIX-VOIPMONITOR-NAGIOS - CCNA

        Linkedin Profile : https://www.linkedin.com/in/masuma-vahid-26b17b66/

        کامنت


          #5
          دوستان عزیزم واقعا ممنونم از راهنماییتون...
          فقط یه نکته اینکه من میخوام خود کاربر شماره تلفن رو وارد بکنه و بعد با فشوردن # در بانک در table موبایل و ثبت بشه!
          کد PHP:
          $result mysql_query("SELECT             `cdr`.`id`            , `cdr`.`date`            , `cdr`.`mobile`                  FROM `cdr` ;");$date now();$mobile mysql_result('mobile'); 
          من توی dialplan چی باید بنویسم؟!
          ببینید این درسته؟

          exten => 700,1,Answer()
          exten => 700,n,Wait(1)
          exten => 700,n,Read(mobile)
          exten => 700,n,AGI(mobile.php)
          exten => 700,n,Hangup()

          کامنت


            #6
            دوست عزیزم واقعا از این راهنماییت ممنونم
            میخوام که با دستور read در dialplan شماره موبایل رو بگیره و در database ذخیره کنه
            توی agi باید چی بنویسم؟
            آخرین ویرایش توسط SAEEDPERSA; در تاریخ/ساعت 02-20-2014, 12:03 PM.

            کامنت


              #7
              سلام
              نیاز نیست تو دایل پلن چیزی وارد کنی
              تو فایل agi کد زیر رو وارد کن :
              کد PHP:
              $MobileNumResult $agi->get_data('custom/Lotfan-shomare-hamrahe-khod-ra-vared-konid',15000,11);
              $MobileNum $MobileNumResult['result']; 
              فایل صوتی که قراره برای تماس گیرنده پخش بشه که میگه شماره موبایلتونو وارد کنین باید بذارین در مسیر زیر(پرمیژن یادتون نره) :
              /var/lib/asterisk/sounds/custom/

              مشکلی داشتین پست بذارین
              موفق باشید
              آخرین ویرایش توسط masome vahid; در تاریخ/ساعت 02-20-2014, 06:28 PM.
              Telegram : https://telegram.me/linuxzone

              voip trainer - Asterisk - Elastix - Agi Programming- NewRock

              Voip Expert :ASTERISK-ELASTIX-NewRock Certified-With Experience of Working With
              Sangoma-Digium-Openvox-Synway-Atcom-Quintum Tenor-Polycom-Yealink-Rtx-Snom
              Cisco Collaboration - CME-CUCM-CUPs-CUC-WEBEX
              LPI ( Fundamental - LPI1 and LPI2 ) - Monitoring: ZABBIX-VOIPMONITOR-NAGIOS - CCNA

              Linkedin Profile : https://www.linkedin.com/in/masuma-vahid-26b17b66/

              کامنت


                #8
                در تکمیل پست backtrack باید اضافه کنم که
                برای اینکه متغیر $MobileNum رو در دیتابیس وارد کنین میتونین داخل همون agi به دیتابیس query بزنین و اطلاعات رو واردش کنین
                یه کم بیشتر از سناریوتون بگین تا بهتر راهنماییتون کنیم
                الان این جدول دیتابیس دقیقا چه فیلدهایی داره؟
                mysql استفاده میکنین یا mssql ؟

                ببینین به نظرمن یه mssql راه بندازید و توش دیتابیس موبایلتون رو بسازید
                بعد تو agi اول شماره موبایل از مخاطب بگیرید و در mssql وارد کنین
                در آخر agi هم وقتی مخاطب تماس رو قطع کرد به mysql خود استریسک کانکت بشین و مدت زمان تماس رو ازش بگیرین و بریزین تو یه متغیر
                و بعد اون متغیر رو وارد mssql خودتون بذارید

                به هر حال توضیح بیشتر بدین بهتر میتونیم کمکتون کنیم

                کامنت


                  #9
                  راستی شما تاریخ تماس رو میخواستین نه مدت زمان تماس
                  خوب این خیلی ساده تر میشه
                  از طریق php تاریخ و ساعت رو به راحتی میتونین به دست بیارید
                  و دیگه نیازی به اتصال به دیتابیس خود استریسک ندارین

                  کامنت


                    #10
                    ممنونم از راهنماییتون
                    ببینید دقیقا پیزی که من میخوام اینه:
                    کاربر تماس میگیره:
                    مثلا کلید 5 رو میزنه
                    سیستم میگه لطفا شماره موبایل خود را وارد کنید و سپس کلید # را فشار دهید
                    بعد که وارد کرد شماره موبایل با تاریخ اون روز توی دیتابیس ثبت بشه!
                    ......
                    از همراهیتون ممنونم
                    من
                    $MobileNumResult = $agi->get_data('custom/Lotfan-shomare-hamrahe-khod-ra-vared-konid',15000,11);
                    $MobileNum = $MobileNumResult['result'];
                    کجایی این باید وارد بکنم؟
                    [/QUOTE]
                    #!/usr/bin/php -q
                    <?php

                    require('phpagi.php');
                    error_reporting(E_ALL);

                    $agi = new AGI();
                    $agi->answer();

                    if(!
                    mysql_connect('192.168.1.100','root','123456789!@#'))
                    echo
                    "Cannot connect to Database".mysql_error();
                    if(!
                    mysql_select_db('asteriskcdrdb'))
                    echo
                    "cannot select database";

                    $result = mysql_query("SELECT
                    `cdr`.`id`
                    , `cdr`.`date`
                    , `cdr`.`source`
                    , `cdr`.`destination`
                    , `cdr`.`duration`
                    , `cdr`.`type`
                    , `call_type`.`title`
                    FROM `cdr`
                    ;"
                    );
                    $date = date('d F Y - G:s');
                    $source = mysql_result('source');

                    ?>
                    [/QUOTE]

                    کامنت


                      #11
                      من mysql استفاده میکنم
                      id : که از جنس autonumber هست
                      date: که تاریخ کامل همراه با ساعت و تاریخ هست
                      mobile : که از جنس char گذاشتم

                      اسم دیتابیس: mobile
                      اسم تیبل: user_mobile

                      کامنت

                      درباره انجمن منطقه لینوکسی ها

                      انجمن منطقه لینوکسی ها با هدف ارتقاء سطح علمی کاربران در سطح جهانی و همچنین کمک به بالا بردن سطح علمی عمومی در زمینه های تخصصی فوق پایه گذاری شده است. انجمن منطقه لینوکسی ها از طریق کارشناسان و متخصصان پاسخگوی سوالات گوناگون کاربران مبتدی یا پیشرفته میباشد تا حد امکان تلاش شده که محیطی متنوع و کاربر پسند و به دور از هرگونه حاشیه جهت فعالیت کاربران در این انجمن ایجاد شود. لذا ما به صورت مستمر برای پیشرفت کمی و کیفی محتوی و اطلاعات انجمنمان میکوشیم که این برای ما ارزشمند و حائز اهمیت است. کلیه حقوق،اطلاعات و مقالات در این انجمن متعلق به سایت منطقه لینوکسی ها میباشد، و هرگونه نسخه برداری بدون ذکر منبع مورد پیگرد قانونی خواهد شد.

                      شبکه های اجتماعی

                      ایمیل مدیریت

                      Habili@linux-zone.org

                      در حال انجام ...
                      X