2012-11-24 20 views
7

का उपयोग करके रिपोर्ट कैसे खींचें हम रिपोर्टिंग एपीआई का उपयोग करके पांच 9 सर्वर से डेटा तक पहुंचने का प्रयास कर रहे हैं। हमने नीचे कोड लिखा है लेकिन कोई परिणाम नहीं मिल रहा है। मेरे लिए ऐसा लगता है कि प्रमाणीकरण के साथ पांच 9 सर्वर पर समस्या है। कृपया हमें यह समझने में सहायता की जांच करें कि हम समय के नियमित अंतराल पर किसी विशिष्ट अभियान के लिए डेटा कैसे खींच सकते हैं और डेटा वेयरहाउस में स्टोर कर सकते हैं।पांच 9 का एपीआई: एसओएपी एपीआई और बेसिक प्रमाणीकरण

<?php 
$soapUser = "USERNAME"; // username 
$soapPassword = "DEMOPASSWORD"; // password 

$soap_options = array('login' => $soapUser, 'password' => $soapPassword); 
$auth_details = base64_encode($soapUser.":".$soapPassword); 

$client = new SoapClient("https://api.five9.com/wsadmin/v2/AdminWebService?wsdl",  $soap_options); 
$header = new SoapHeader("https://api.five9.com/wsadmin/v2/AdminWebService/getCallLogReport", "authentication", "Basic $auth_details"); 
//echo "Response:\n" . $client->__getLastResponse() . "\n"; 
$client->__setSoapHeaders($header); 

$xml_data = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v2="http://service.admin.ws.five9.com/v2/AdminWebService/getCallLogReport"> 
<soapenv:Header/> 
<soapenv:Body> 
    <v2:getCallLogReport> 
     <campaigns>Campaign1</campaigns> 
    </v2:getCallLogReport> 
</soapenv:Body> 
</soapenv:Envelope>'; 

echo $result = $client->getCallLogReport($xml_data, "https://api.five9.com/wsadmin/v2/AdminWebService?wsdl", "https://api.five9.com/wsadmin/v2/AdminWebService/getCallLogReport",0); 


?> 

नमूना XML

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v2="http://service.admin.ws.five9.com/v2/"> 
<soapenv:Header/> 
<soapenv:Body> 
    <v2:getCallLogReport> 
    <!--Optional:--> 
    <time> 
     <!--Optional:--> 
     <end>?</end> 
     <!--Optional:--> 
     <start>?</start> 
    </time> 
    <!--Optional:--> 
    <criteria> 
     <!--Optional:--> 
     <ANI>?</ANI> 
     <!--Zero or more repetitions:--> 
     <agents>?</agents> 
     <!--Zero or more repetitions:--> 
     <callTypes>?</callTypes> 
     <!--Zero or more repetitions:--> 
     <campaigns>?</campaigns> 
     <!--Optional:--> 
     <DNIS>?</DNIS> 
     <!--Zero or more repetitions:--> 
     <dispositions>?</dispositions> 
     <!--Zero or more repetitions:--> 
     <lists>?</lists> 
     <!--Zero or more repetitions:--> 
     <skillGroups>?</skillGroups> 
    </criteria> 
    </v2:getCallLogReport> 
    </soapenv:Body> 
</soapenv:Envelope> 

उत्तर

4

ऐसा लगता है कि आपकी समस्या की तरह है कि अपने साबुन शीर्षक में अपने बेस 64 भेजने इनकोडिंग नाम/पासवर्ड है। इसे वास्तव में http शीर्षलेख में शामिल करने की आवश्यकता है। मेरा समाधान रूबी में है लेकिन उम्मीद है कि यह आपकी मदद कर सकता है।

soap_client = Savon.client(
    endpoint: "https://api.five9.com/wsadmin/AdminWebService/", 
    namespace: "http://service.admin.ws.five9.com/", 
    headers: { "Authorization" => "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==" }, 
    env_namespace: :soapenv, 
    namespace_identifier: :ser, 
    ssl_verify_mode: :none 
) 

message = { 
    "lookupCriteria" => { 
"criteria" => { 
     "field" => "email_address", 
     "value" => "[email protected]" 
    } 
    } 
} 

response = soap_client.call(:getContactRecords, message: message) 
p response.body 

तो आपका एक्सएमएल इस तरह दिख रहा है।

SOAP request: https://api.five9.com/wsadmin/AdminWebService/ 
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==, SOAPAction: "getContactRecords", 
Content-Type: text/xml;charset=UTF-8, Content-Length: 471 

<?xml version="1.0" encoding="UTF-8"?> 
<soapenv:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ser="http://service.admin.ws.five9.com/" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soapenv:Body> 
    <ser:getContactRecords> 
     <lookupCriteria> 
     <criteria> 
      <field>email_address</field> 
      <value>[email protected]</value> 
     </criteria> 
     </lookupCriteria> 
    </ser:getContactRecords> 
    </soapenv:Body> 
</soapenv:Envelope> 

HTTPI POST request to api.five9.com (httpclient) 
SOAP response (status 200) 

<env:Envelope xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'> 
    <env:Header></env:Header> 
    <env:Body> 
    <ns2:getContactRecordsResponse xmlns:ns2="http://service.admin.ws.five9.com/" xmlns:ns3="http://service.admin.ws.five9.com/v1/"> 
     <return> 
     <fields>number1</fields> 
     <fields>email_address</fields> 
     <records> 
      <values> 
      <data>5555555555</data> 
      <data>[email protected]</data> 
      </values> 
     </records> 
     </return> 
    </ns2:getContactRecordsResponse> 
    </env:Body> 
</env:Envelope> 
6

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

$soap = null; 
$wsdl = "https://api.five9.com/wsadmin/v2/AdminWebService?wsdl"; 

$user = "yourloginid"; 
$pass = "yourpassword"; 

$soap_options = array("login" => $user, "password" => $pass); 

$soap = new SoapClient($wsdl, $soap_options); 

/* create the callLogReportCriteria data selection structure */ 
$arryParams['time'] = array("start" => "2013-05-05T00:00:01", 
          "end" => "2013-05-05T09:00:00"); 
$arryParams['criteria'] = array("callTypes" => array("INBOUND","OUTBOUND")); 

/************ Entire Structure for selection criteria *************/ 
/*$arryParams['criteria'] = array("ANI" => "6178752803", 
           "Agents" => "", 
           "callTypes" => array("INBOUND","OUTBOUND"), 
           "campaigns" => "", 
           "dispositions" => "", 
           "Lists" => "", 
           "skillGroups" => "" 
           );*/ 

$result = $soap->getCallLogReport($arryParams); 

if(isset($result->return->records)) { 
    /* you have records returned */ 
    $objRecords = $result->return->records; 

    for($i=0 ; $i < sizeof($objRecords) ; $i++) { 
     /* do your processing */ 
     printf("ANI: %s<br />", $objRecords[$i]->values->data[3]); //4th element has ANI 
    } 

} 

कोड की कुछ पंक्तियों को जोड़ा जा सकता है, लेकिन समझदारी के लिए मैंने उन्हें तोड़ दिया। आप त्रुटि प्रबंधन के लिए वास्तविक SOAP कॉल के आस-पास एक प्रयास/पकड़ का भी उपयोग करना चाहेंगे।

उम्मीद है कि इससे किसी के सीखने की वक्र को कम करने में मदद मिलेगी। मुझे पता है कि मुझे यह एक महीने पहले होना अच्छा लगेगा !!

1

@ जेसेक्यू महान उदाहरण! मुझे एक टन मदद की। यहां बताया गया है कि मैंने इसे अपने शस्त्रागार में किसी भी पांच 9 रिपोर्ट को चलाने के लिए कैसे सेट किया है, जिसमें आप स्वयं को बनाते हैं। कस्टम रिपोर्ट के लिए, आपको एक नया फ़ोल्डर/रिपोर्ट बनाना होगा और इसे पांच 9 वेब पोर्टल पर "कस्टम रिपोर्ट" अनुभाग में रखना होगा। उम्मीद है की यह मदद करेगा।

MySQL डाटाबेस कनेक्शन (dbConnect.php)

<?php 
    $mysqli = new mysqli("your db's IP address", "your db user", "your db password", "your db"); 
    if ($mysqli->connect_error) { 
     die('Connect Error: (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error); 
    } 
?> 

Five9/MySQL डाटाबेस आयात

<?php 
    require_once("../include/dbConnect.php"); 
    $startDate = new DateTime(); 
    $endDate = new DateTime(); 
    $startDate->setDate(2015, 07, 22); 
    $endDate->setDate(2015, 07, 22); 
    $five9 = "https://api.five9.com/wsadmin/v2/AdminWebService?wsdl"; 
    $five9Credentials = array("login" => "your Five9 username", "password" => "your Five9 password"); 
    $soap = new SoapClient($five9, $five9Credentials); 
    $runReportParam["criteria"]["time"] = array("start" => $startDate->format("Y-m-d\T00:00:00"), "end" => $endDate->format("Y-m-d\T23:59:59")); 
    $runReportParam["folderName"] = "My Custom Reports"; 
    $runReportParam["reportName"] = "My First Report"; 
    $runReportResult = $soap->runReport($runReportParam); 
    if(isset($runReportResult->return)){ 
     $runReportData = $runReportResult->return; 
     $isReportRunningParam["identifier"] = $runReportData; 
     $isReportRunningParam["timeout"] = 10; 
     $isReportRunningResult = $soap->isReportRunning($isReportRunningParam); 
     if(empty($isReportRunningResult->return)){ 
      $getReportResultParam["identifier"] = $runReportData; 
      $getReportResult = $soap->getReportResult($getReportResultParam); 
      if(isset($getReportResult->return->records)){     
       $getReportResultData = $getReportResult->return->records; 
       echo "[" . date("Y-m-d h:i:s") . "] " . $runReportData . "\n"; 
       for($x = 0; $x < $xx = count($getReportResultData); $x++){ 
        $query = "REPLACE INTO MyTable(
         CallDate, CallTime, DNIS, Disposition, Zip, AreaCode, ANI) 
         VALUES (?,?,?,?,?,?,?)"; 
        $result = $mysqli->prepare($query); 
        $result->bind_param("sssssss", 
         $getReportResultData[$x]->values->data[0], 
         $getReportResultData[$x]->values->data[1], 
         $getReportResultData[$x]->values->data[2], 
         $getReportResultData[$x]->values->data[3], 
         $getReportResultData[$x]->values->data[4], 
         $getReportResultData[$x]->values->data[5], 
         $getReportResultData[$x]->values->data[6] 
        ); 
        $result->execute(); 
        $result->store_result(); 
        if ($result->error){ 
         die('Connect Error: (' . $result->errno . ') ' . $result->error); 
        } 
        echo "[" . date("Y-m-d h:i:s") . "] " . $x . "\n"; 
       } 
      } else { 
       echo "Error: " . $runReportData . " returned no data"; 
      } 
     } else { 
      echo "Error: " . $runReportData . " exceeded the report runtime limit"; 
     } 
    } else { 
     echo "Error: " . $runReportParam["reportName"] . " wasn't found"; 
    } 
    $mysqli->close(); 
?>