2010-02-23 10 views
5

मैं PHP और एक एस्टेरisk सर्वर के साथ एक अनुप्रयोग विकसित कर रहा हूँ। एप्लिकेशन की विशेषताओं में से एक कॉल कॉल स्टेटस (रिंगिंग, उत्तर, लटका ...) को एक विशिष्ट कॉलर आईडी की जांच करना है, इसलिए मैं यह जानना चाहता हूं कि यह कैसे करें, क्योंकि मैं सॉकेट के साथ प्रयास कर रहा हूं और कमांड स्थिति लेकिन मुझे लगता है कि इसे करने का एक बेहतर तरीका होना चाहिए।मैं कॉल की स्थिति - एस्टेरिस्क और PHP की स्थिति कैसे जान सकता हूं?

अग्रिम धन्यवाद।

उत्तर

4

इस प्रोग्राम को लिखने के लिए आप किस एपीआई का उपयोग कर रहे हैं? एएमआई? आंदोलन? FastAGI? DeadAGI? फाइलें कॉल करें? इस जानकारी को पाने के कई तरीके हैं।

नोट: जब तक आप कॉल फ़ाइलों और/या सीडीआर एक्सेस का उपयोग नहीं कर रहे हैं तब तक आप यह नहीं बता सकते कि कोई चैनल लापता है या नहीं।

एएमआई के साथ, आप स्टेटस कमांड का उपयोग कर सकते हैं (यहां दस्तावेज: http://www.voip-info.org/wiki/view/Asterisk+Manager+API+Action+Status)।

एजीआई के साथ, आपको स्थिति पता चलेगा क्योंकि यह आपके कार्यक्रम द्वारा निर्धारित है। अगर आप अभी भी अपनी एजीआई स्क्रिप्ट में हैं, तो कॉल अभी भी प्रगति पर है और पहले से ही उत्तर दिया गया है।

यदि आप कॉल फाइल का उपयोग कर रहे हैं, और आपके पास आर्काइव विशेषता 'हां' पर सेट है, तो एक बार कॉल पूरा हो जाने के बाद आप अपनी आउटओइंग_डोन निर्देशिका (आमतौर पर/var/lib/asterisk/outgoing_done /) की जांच कर सकते हैं कॉल फ़ाइल जब आप कॉलफाइल पढ़ते हैं, तो आप देखेंगे कि एस्टेरिक्स्क ने कॉल फ़ाइल के नीचे एक स्थिति जोड़ दी है, जो आपको कॉल की अंतिम स्थिति बताएगी।

BEST इस जानकारी को प्राप्त करने के तरीके से आपकी PHP स्क्रिप्ट आपके एस्टरिस्क सर्वर पर सीडीआर रिकॉर्ड्स से पढ़ी जा रही है। अपने सीडीआर रिकॉर्ड एक MySQL डेटाबेस पर लॉग इन करें, फिर डेटाबेस से अपने कॉल के लिए रिकॉर्ड खींचें।

+0

ठीक है ... यहाँ बात है। मुझे यूआरएल से एक जीईटी पैरामीटर के रूप में बुलाया गया आईडी प्राप्त होता है ('$ _GET ['calledID']')। मुझे उस कॉलर आईडी की कॉल स्थिति प्राप्त करने की आवश्यकता है। (मैं PHP का उपयोग करके कॉल नहीं कर रहा हूं) – Harph

+0

चूंकि आपके पास कॉल की चैनल आईडी नहीं है, इसलिए इस जानकारी को सीधे प्राप्त करने का कोई तरीका नहीं है। आपको इसके बजाय एस्टेरisk सीडीआर डेटाबेस का उपयोग करना होगा। यदि आपके पास सीडीआर लॉग डेटाबेस (आमतौर पर MySQL) पर जा रहे हैं तो बस अपनी PHP स्क्रिप्ट SQL डीबी से कनेक्ट करें और अपनी स्क्रिप्ट से कॉलर आईडी के लिए एक क्वेरी करें। एक SELECT कथन का उपयोग कर दिए गए कॉलर आईडी द्वारा बनाई गई अंतिम कॉल पाएं। फिर बस अपनी आवश्यक जानकारी निकालें (जैसे कॉल टाइम, कॉल टाइम, कॉल स्टेट, इत्यादि) – rdegges

+0

हाँ, आप सही हैं, मुझे सीडीआर लॉग डेटा बेस का उपयोग करके कॉल की स्थिति मिल सकती है, लेकिन यह सिर्फ काम करता है जब कॉल समाप्त हो गया है, क्योंकि जब कॉल समाप्त होता है तो लॉग रिकॉर्ड बनाया जाता है। मुझे उन चरों का उपयोग करके वास्तविक समय पर स्थिति प्राप्त करने की आवश्यकता है जो फ़ोन मुझे यूआरएल के माध्यम से भेज सकता है। कोई उपाय? – Harph

2

Harph,

आप एक एएमआई डेमॉन तारांकन से ही स्ट्रीम एएमआई घटनाओं को सुनने के लिए बना सकते हैं। मैंने यह कई बार किया है, उनमें से एक एस्टेरisk जीयूआई के लिए है। यदि आप अपने डेटाबेस में स्थिति के लिए एक टेबल बनाते हैं, तो आप एएमआई घटनाओं को सुनने के लिए एक डिमन बना सकते हैं और स्थिति के अनुसार स्थिति अपडेट कर सकते हैं। फिर आपके वेबपृष्ठ को एस्टेरिस्क से बिल्कुल संपर्क नहीं करना पड़ेगा, इसे केवल डेटाबेस से स्थिति को पढ़ने की आवश्यकता होगी।

निम्न लिंक एस्टेरisk जीयूआई परियोजना से है। यह जावास्क्रिप्ट में लिखा गया है, इसलिए आपका PHP थोड़ा अलग होगा, लेकिन यह आपको शुरू करने के लिए एक अच्छा आधार देगा। लाइन 574.

http://svn.asterisk.org/view/asterisk-gui/branches/2.0/config/js/welcome.js?view=markup

जावास्क्रिप्ट में महत्वपूर्ण अंतर यह है के साथ शुरू करो बनाम php कि जावास्क्रिप्ट सीधे एएमआई करने के लिए एक गर्तिका कनेक्शन तारांकन के http डेमॉन का उपयोग किया गया है। इस वजह से इसे 'वाइटेंट' सामान का उपयोग करना होगा। लेकिन चूंकि आप एक टीसीपी सॉकेट कनेक्शन का उपयोग करेंगे, बस एक पठन कथन लूप रखें।

आशा है कि इससे मदद मिलती है! एस्टरिस्क से जानकारी प्राप्त करने का प्रयास करते समय यह विधि सबसे विश्वसनीय प्रतीत होती है।

1

मैं वास्तव में PHP में लिखे गए एक मिडलवेयर डिमन, एचटीएमएल 5 वेबसाकेट्स और एस्टेरक्लिक का उपयोग करता हूं।

एस्टरक्लिक है, जहां तक ​​मुझे पता है, केवल घटना ग्रह पर एचटीएमएल 5 के लिए एस्टेरिक एएमआई इंटरफ़ेस संचालित है। वहां मौजूद सभी अन्य समाधान अभी भी सर्वर पर मतदान कर रहे हैं।

मैं वास्तविक समय में कॉल की स्थिति देख सकता हूं, उत्पत्ति। मेरे ब्राउज़र में ड्रैग-एन-ड्रॉप द्वारा बस (कतार, मिलमे, पार्किंग, व्यक्तियों) के बीच स्थानांतरण। मैं डायलप्लान को लिखने के बिना डायलप्लान प्रविष्टियों को काम कर रहा हूं या मूल रूप से कुछ और एस्टरिस्क एएमआई के साथ कर सकता हूं कोई भी कभी नहीं।

जावास्क्रिप्ट में मैं एक addEventListener() फ़ंक्शन का उपयोग कर सकता हूं जो वास्तव में पैरामीटर के रूप में AMI ईवेंट के नाम लेता है। कोई पॉलिगिंग है, लेकिन जब एस्टरिस्क एएमआई एक ईवेंट उत्सर्जित करता है तो यह वेब ब्राउज़र पर मेरे ब्राउज़र पर भेजा जाता है जो डेटा को संसाधित करता है और ब्राउज़र के भीतर अधिक घटनाओं को उत्सर्जित करता है।

मेरे पास डब्लूबीईए नामक एक उपकरण भी है जो मुझे उन एचटीएमएल 5 एस्टरक्लिक अनुप्रयोगों को विंडोज और लिनक्स के लिए अकेले डेस्कटॉप एक्जिक्यूटिव के रूप में तैनात करने की अनुमति देता है।

0

मैं जाँच करने के लिए चैनल status.Here php कोड है CLI आदेश का उपयोग मैं उपयोग

<?php 
    $socket = fsockopen("111.11.11.111",$portno, $errno, $errstr, $timeout); 
    fputs($socket, "Action: Login\r\n"); 
    fputs($socket, "UserName: username\r\n"); 
    fputs($socket, "Secret: secret\r\n\r\n"); 


    $channel=$_GET['value']; //pass channel through GET method 


    echo"<pre>"; 
    fwrite($socket, "Action: Status\r\n"); 
    fwrite($socket, "Command: Lists channel status ".$channel."\r\n\r\n"); 
    $wrets=""; 


    fputs($socket, "Action: Logoff\r\n\r\n"); 

    while (!feof($socket)) { 
     $wrets .= fread($socket, 8192).'</br>'; 
    } 

    echo $wrets."<br/>"; 

    fclose($socket);  

    ?> 
संबंधित मुद्दे