1. واحد سخت افزار سیاق
  2. عمومی - ایزابل، الستیکس، فری پی بی اکس ...
  3. چهارشنبه, 03 آبان 1391
با درود . بالاخره برنامه های agi ام به کار افتادند . دوستان خیلی خوبی همچون programerboy و عباس کریمی و m.habili و ... به من کمک کردند که از همه شان ممنونم .
حالا چند تا مشکل جدید دارم . من برای اتصال به MSSQL از کد زیر استفاده کردم که در xampp تحت ویندوز چک کردم و جواب گرفتم . اما زمانی که آنرا در agi اضافه کردم ، نمی دانم چرا بدون اعلام هیچ گونه خطایی ، فقط hangup رخ می دهد . کد php ام را که xampp از آن جواب گرفته ام :[LEFT][CODE]
<?php
$myServer = "192.168.0.100";
$myUser = "elastiks";
$myPass = "Aa123456";
$myDB = "s_ss8";
$conn = new COM ("ADODB.Connection";)
or die("Cannot start ADO";);
$connStr = "PROVIDER=SQLOLEDB;SERVER=".$myServer.";UID=".$myUser.";PWD=".$myPass.";DATABASE=".$myDB;
$conn->open($connStr); //Open the connection to the database

$query = "select COUNT(*) as [result] from V_SK_KartEshterak where TelNo = '80000007' or ShomarehKart = 3";
$rs = $conn->execute($query);
$num_columns = $rs->Fields->Count();

for ($i=0; $i < $num_columns; $i++) {
$fld[$i] = $rs->Fields($i);
}
echo "<table>";

while (!$rs->EOF) //carry on looping through while there are records
{
echo "<tr>";
for ($i=0; $i < $num_columns; $i++) {
echo "<td>" . $fld[$i]->value . "</td>";
}
echo "</tr>";
$rs->MoveNext(); //move on to the next record
}


echo "</table>";

//close the connection and recordset objects freeing up resources
$rs->Close();
$conn->Close();

$rs = null;
$conn = null;
?>
[/CODE]
[/LEFT]
این کد را در کد agi ام این چنین بازنویسی کردم :

[LEFT][CODE]
#!/usr/bin/php -q
<?php
$myServer = "192.168.0.100";
$myUser = "elastiks";
$myPass = "Aa123456";
$myDB = "s_ss8";

set_time_limit(60);
require('phpagi.php');
error_reporting(E_ALL);
$agi = new AGI();
$agi->answer();
$ccid=$agi->request[agi_callerid];
$agi->stream_file("custom/insert_code_moshtari","#";);
$agi->stream_file("enter-some-digits","#";);
do
{
$result = $agi->get_data('beep', 5000, 20);
$keys = $result['result'];
} while(strlen($keys) != 5);
$agi->stream_file("you-entered","#";);
$agi->say_digits($keys);

$conn = new COM ("ADODB.Connection";)
or die("Cannot start ADO";);
$agi->stream_file("good-morning","#";);
$connStr = "PROVIDER=SQLOLEDB;SERVER=".$myServer.";UID=".$myUser.";PWD=".$myPass.";DATABASE=".$myDB;
$conn->open($connStr); //Open the connection to the database
$query = "select COUNT(*) as [result] from V_SK_KartEshterak where TelNo = "+$ccid+" or ShomarehKart = "+$keys;
$rs = $conn->execute($query);
$num_columns = $rs->Fields->Count();
for ($i=0; $i < $num_columns; $i++) {
$fld[$i] = $rs->Fields($i);
}

while (!$rs->EOF) //carry on looping through while there are records
{
for ($i=0; $i < $num_columns; $i++)
{
$agi->say_digits($fld[$i]->value);
}
$rs->MoveNext(); //move on to the next record
}
//close the connection and recordset objects freeing up resources
$rs->Close();
$conn->Close();
$rs = null;
$conn = null;
$agi->stream_file("accessible-through-system","#";);
$agi->hangup();
?>
[/CODE]
[/LEFT]
در کد فوق برنامه منتظر می شود تا یک عدد 5 رقمی را بگیرد سپس آنرا رقم به رقم می خواند ( تا اینجا همه چیز به درستی انجام می شود) .به محض آنکه به خط $conn = new COM ("ADODB.Connection";) ... بدون هیچ خطایی hangup می دهد . من برای مشاهده و دیباگ در ترمینال این دستور را نوشتم : asterisk -r و سپس نمایشگر چنین شد : *CLI> . از این به بعد ، خط به خط عملیات های agi یا هر کار دیگری در elastix اینجا log می زند . با دستور reload پس از هر بار تغییر کد agi این تغییرات توسط asterisk مورد توجه قرار می گیرد . خلاصه این که اینجا در برابر کد اتصال به بانک هیچ خطایی نمی آید . آیا محیط قوی تر و بهتری برای مشاهده خطاها وجود دارد ؟
لطفا نمونه ای از خروجی را ببینید :

[LEFT][CODE]
[KElastix*CLI>
[0K -- Executing [8@from-internal:1] [1;36mAnswer [0m(" [1;35mSIP/122-0000049e [0m", " [1;35m [0m";) in new stack

[KElastix*CLI>
[0K -- Executing [8@from-internal:2] [1;36mWait [0m(" [1;35mSIP/122-0000049e [0m", " [1;35m1 [0m";) in new stack

[KElastix*CLI>
[0K -- Executing [8@from-internal:3] [1;36mAGI [0m(" [1;35mSIP/122-0000049e [0m", " [1;35magitest.php [0m";) in new stack
-- Launched AGI Script /var/lib/asterisk/agi-bin/agitest.php

[KElastix*CLI>
[0K -- Playing 'custom/insert_code_moshtari' (escape_digits=#) (sample_offset 0)

[KElastix*CLI>
[0K -- <SIP/122-0000049e> Playing 'beep.gsm' (language 'en')

[KElastix*CLI>
[0K -- Playing 'you-entered' (escape_digits=#) (sample_offset 0)

[KElastix*CLI>
[0K -- <SIP/122-0000049e> Playing 'digits/8.gsm' (language 'en')

[KElastix*CLI>
[0K -- <SIP/122-0000049e> Playing 'digits/5.gsm' (language 'en')

[KElastix*CLI>
[0K -- <SIP/122-0000049e> Playing 'digits/6.gsm' (language 'en')

[KElastix*CLI>
[0K -- <SIP/122-0000049e> Playing 'digits/9.gsm' (language 'en')

[KElastix*CLI>
[0K -- <SIP/122-0000049e> Playing 'digits/8.gsm' (language 'en')

[KElastix*CLI>
[0K -- <SIP/122-0000049e>AGI Script agitest.php completed, returning 0

[KElastix*CLI>
[0K -- Executing [8@from-internal:4] [1;36mHangup [0m(" [1;35mSIP/122-0000049e [0m", " [1;35m [0m";) in new stack

[KElastix*CLI>
[0K == Spawn extension (from-internal, 8, 4) exited non-zero on 'SIP/122-0000049e'
-- Executing [h@from-internal:1] [1;36mMacro [0m(" [1;35mSIP/122-0000049e [0m", " [1;35mhangupcall [0m";) in new stack
-- Executing [s@macro-hangupcall:1] [1;36mGotoIf [0m(" [1;35mSIP/122-0000049e [0m", " [1;35m1?endmixmoncheck [0m";) in new stack
-- Goto (macro-hangupcall,s,9)
-- Executing [s@macro-hangupcall:9] [1;36mNoOp [0m(" [1;35mSIP/122-0000049e [0m", " [1;35mEnd of MIXMON check [0m";) in new stack

[KElastix*CLI>
[0K -- Executing [s@macro-hangupcall:10] [1;36mGotoIf [0m(" [1;35mSIP/122-0000049e [0m", " [1;35m1?nomeetmemon [0m";) in new stack
-- Goto (macro-hangupcall,s,15)
-- Executing [s@macro-hangupcall:15] [1;36mNoOp [0m(" [1;35mSIP/122-0000049e [0m", " [1;35mMEETME_RECORDINGFILE= [0m";) in new stack
-- Executing [s@macro-hangupcall:16] [1;36mGotoIf [0m(" [1;35mSIP/122-0000049e [0m", " [1;35m1?noautomon [0m";) in new stack
-- Goto (macro-hangupcall,s,18)
-- Executing [s@macro-hangupcall:18] [1;36mNoOp [0m(" [1;35mSIP/122-0000049e [0m", " [1;35mTOUCH_MONITOR_OUTPUT= [0m";) in new stack
-- Executing [s@macro-hangupcall:19] [1;36mGotoIf [0m(" [1;35mSIP/122-0000049e [0m", " [1;35m1?noautomon2 [0m";) in new stack
-- Goto (macro-hangupcall,s,25)
-- Executing [s@macro-hangupcall:25] [1;36mNoOp [0m(" [1;35mSIP/122-0000049e [0m", " [1;35mMONITOR_FILENAME= [0m";) in new stack
-- Executing [s@macro-hangupcall:26] [1;36mGotoIf [0m(" [1;35mSIP/122-0000049e [0m", " [1;35m1?skiprg [0m";) in new stack
-- Goto (macro-hangupcall,s,29)
-- Executing [s@macro-hangupcall:29] [1;36mGotoIf [0m(" [1;35mSIP/122-0000049e [0m", " [1;35m1?skipblkvm [0m";) in new stack
-- Goto (macro-hangupcall,s,32)
-- Executing [s@macro-hangupcall:32] [1;36mGotoIf [0m(" [1;35mSIP/122-0000049e [0m", " [1;35m1?theend [0m";) in new stack
-- Goto (macro-hangupcall,s,34)
-- Executing [s@macro-hangupcall:34] [1;36mHangup [0m(" [1;35mSIP/122-0000049e [0m", " [1;35m [0m";) in new stack
== Spawn extension (macro-hangupcall, s, 34) exited non-zero on 'SIP/122-0000049e' in macro 'hangupcall'
== Spawn extension (from-internal, h, 1) exited non-zero on 'SIP/122-0000049e'
[/CODE]
[/LEFT]
من حتی تلاش کردم که به یک وب سرویس که نوشته بودم وصل شوم کد اتصال ام این چنین است . این کد هم متاسفانه در xampp جواب می دهد اما در php درون الستیکس بدون هیچ خطایی فقط hangup می دهد . کم کم دارم به این شک می کنم که php نویسی در agi با قابلیت های بسیار بسته و مسدودتری نسبت به نوشتن php در آپاچی یک سرور وب است !!!

[LEFT][CODE]
...
$docheck = new SoapClient("http://192.168.0.104/sxserver/sxserver.dll/wsdl/ITSl_Web_SaleService";);
$param2=array('__SessionId'=>$mysession,'EshterakCode'=>'3','TelNo'=>'80000096');
$checkresult = $docheck->__soapCall('CheckCrmEshterak',$param2);
$agi->say_digits($checkresult);
...
[/CODE]
[/LEFT]
[CENTER]ببخشید که مطلب کمی طولانی شد
[/CENTER]
نظر
هنوز هیچ نظری ارسال نشده است!
پاسخ پذیرفته شده Pending Moderation
0
رای
بازگشت
در مورد mysql شما جدولاتون داخل خود mysql استریسک هست ؟
من اینکار رو با mysql خود استریسک به راحتی انجام دادم . یه چیزی شما به فایل php سطح دسترسی 777 دادید ؟
در مورد Web service الان یکی دوروزی هست دارم باهاش کار میکنم هنوز راه حلی پیدا نکردم . اگه شما پیدا کردید یا کسی از دوستان مارو هم بی خبر نزاره .
اینم کد php برای وصل شدن به mysql
[PHP]$con = mysql_connect("localhost","root","pass";);

if (!$con)
{

$agi->stream_file('invalid');
$agi->hangup();
}


mysql_select_db("abbas", $con);
$result = mysql_query("SELECT * FROM table1 WHERE id='123'";);

[/PHP]

دیتا بیس abbas هست و جدول به نام Table1
نظر
هنوز هیچ نظری ارسال نشده است!
پاسخ پذیرفته شده Pending Moderation
0
رای
بازگشت
در مورد mssql هم شما همون کدی رو که نوشتم هرجا my بود به ms تغییر بده درست میشه :-) به همین راحتی .
در مورد debug به نظر من شما برنامه Easy php رو نصب کن اول انجا تست بگیر . تو این محیط شماره خطی رو که ایراد داره رو میگه .
نظر
هنوز هیچ نظری ارسال نشده است!
پاسخ پذیرفته شده Pending Moderation
0
رای
بازگشت
ممنون آقای کریمی . قطعا همین کار را کرده ام . متن آخر من را کامل تر مطالعه کنید . حتی نمونه کد هم گذاشته ام . اما تابع mssql_connect جواب نمی دهد . همه خطاهای ممکن را پی گیری کرده ام . extension=php_mssql.dll را در php.ini افزوده و dll را در ext آن قرار داده ام و ntwdblib.dll را در مسیرهای لازم Apache قرار داده ام . خلاصه این که آقای کریمی عزیز بر خلاف تصور شما اتصال به mssql به آسانی my sql نیست . راستش با روش ADO من به هر حال متصل می شوم اما نه از درون elastix . درباره دیباگ هم برای من مهم دیباگ agi است وگرنه نرم افزار easy php که شما امر فرمودید هم بسیار مشابه همین xampp است که خودم دارم و هردوشان appache و mysql , ... را نصب و سرویس هایشان را اجرا می کنند . اما کامپایل php توسط آپاچی خود الستیکس شرط است .
نظر
هنوز هیچ نظری ارسال نشده است!
پاسخ پذیرفته شده Pending Moderation
0
رای
بازگشت
فراموش کردم اینو بگم شما دو پکیج زیر رو نصب کردید ؟
yum install php-mssql
yum install freetds

کد php که همونی هست که بالا نوشتم فقط به جایmy شما بنویسید ms . من تست کردم و جواب گرفتم در حال حاضر هم سیستم ران هست دوست عزیز.
(البته روش اتصال به mssql رو از دوست خوبمون آقای هابیلی یاد گرفتم )
نظر
هنوز هیچ نظری ارسال نشده است!
پاسخ پذیرفته شده Pending Moderation
0
رای
بازگشت
خوشحالم دوست عزیز. شاد که شدیم ولی شیرینی رو من چیزی نمیبینماااااااااااااااااااااا :-)
نظر
هنوز هیچ نظری ارسال نشده است!
پاسخ پذیرفته شده Pending Moderation
0
رای
بازگشت
:p ای بابا آقای کریمی ، دیر تشریف آوردید ، شیرینی جات هم که به زمین نمی ماند با این همه همکار ، ماشاالله جویدن که نمی دانند ، می بلعند . ;)
دو پرسش برایم باقی مانده است ، یکی اینکه کدام تابع agi است که با آن تماس را به یک sip منتقل کنم ؟ و دیگری آنکه چطور می توانم پیش از ورود به ivr یک agi را فرا بخوانم . یعنی به محض تماس کاربر یک agi را بخوانم و در درون آن بر اساس شماره تلفن فرد که detect می شود یا به یک ivr سوییچ کنم و یا به یک داخلی خاص . راستی از نمونه وب سرویس که گذاشتم جواب گرفتید ؟
نظر
هنوز هیچ نظری ارسال نشده است!
پاسخ پذیرفته شده Pending Moderation
0
رای
بازگشت
در مورد تماس به یک sip فکر میکنم این باشه کد زیر باشه و در مورد سوال دوم نمیدونم . در مورد وب سرویس برای من همون خط اول اشکال میگیره موندم چی کار کنم :-(
[PHP]$agi->exec('Transfer','SIP/111'); [/PHP]
نظر
هنوز هیچ نظری ارسال نشده است!
پاسخ پذیرفته شده Pending Moderation
0
رای
بازگشت
معلومه ؟ ;-)
نظر
هنوز هیچ نظری ارسال نشده است!
پاسخ پذیرفته شده Pending Moderation
0
رای
بازگشت
[QUOTE=عباس کریمی;13796]معلومه ؟ ;-)[/QUOTE]

ازاقای کریمی و سایر دوستان خواهش میکنم کمکم کنند

من چه جوری میتونم اطلاعات از mysql بیرون بکشم و تو خود agi با verbose بیینم

ایا به غیر از اون تا بسته که دوست عزیز اقای کریمی کفتن باید نصب کنیم ایا چیزه دیگه ای هم باید نصب کنیم


ممنون که کمک می کنید
نظر
هنوز هیچ نظری ارسال نشده است!
پاسخ پذیرفته شده Pending Moderation
0
رای
بازگشت
[INDENT] سلام من دستورات زیر رو زدم تریس کردم به DB وصل میشه ولی دستوریو insert نمیکنه؟
ممنون میشم از اساتید
$Server = "192.168.1.52";
$ali= "";
$Pass = "1234";
$DB = "ACEDB";

//connection to the database
$dbconn = mssql_connect($Server, $User, $Pass);
// or die("Couldn't connect to SQL Server on $Server";);

//select a database to work with
$selected = mssql_select_db($DB, $dbconn);
$sql = "INSERT INTO ACEDB.dbo.tbl_Voip_order( OrderID, CustID,RegDate,Time) VALUES ('5','7','2015-01-02','23:23:10')";
$agi->stream_file("IVR/another_product";);
//or die("Couldn't open database $myDB";); [/INDENT]
نظر
هنوز هیچ نظری ارسال نشده است!
پاسخ پذیرفته شده Pending Moderation
0
رای
بازگشت
سلام آقای عباس کریمی عزیز . من این دو تا پکیج رو نصب کردم و همه جیز به خوبی انجام شد . بسیار سپاسگذارم .
خواستم شما را هم در شادی و شیرینی جواب گرفتن آن سهیم کنم .
نظر
هنوز هیچ نظری ارسال نشده است!
  • صفحه :
  • 1


هنوز به این موضوع پاسخی داده نشده است

دسته بندی ها

سیستم های تلفنی کدباز
  1. 107 پست
  2. 0 زیرمجموعه
سیسکو Cisco
  1. 61 پست
  2. 0 زیرمجموعه
سیستم تلفنی FreePBX
  1. 48 پست
  2. 0 زیرمجموعه
شبکه و زیرساخت
  1. 65 پست
  2. 0 زیرمجموعه
تازه واردین دنیای ویپ
  1. 927 پست
  2. 0 زیرمجموعه