2012-07-26 53 views
1

我曾试图连接Five9和一个记录发送到Five9序在列表中添加如何发送记录five9

我的代码是下面

$soapUser = "[email protected]"; // username 
    $soapPassword = "password"; // 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/AddRecordToList", "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:ser="http://service.admin.ws.five9.com/"> 
<soapenv:Header /> 
<soapenv:Body> 
<ser:addRecordToList> 
<listName>some_list_name</listName> 
<listUpdateSettings> 
<fieldsMapping> 
<columnNumber>1</columnNumber> 
<fieldName>number1</fieldName> 
<key>true</key> 
</fieldsMapping> 
<fieldsMapping> 
<columnNumber>2</columnNumber> 
<fieldName>first_name</fieldName> 
<key>false</key> 
</fieldsMapping> 
<fieldsMapping> 
<columnNumber>3</columnNumber> 
<fieldName>last_name</fieldName> 
<key>false</key> 
</fieldsMapping> 
<reportEmail>[email protected]</reportEmail> 
<separator>,</separator> 
<skipHeaderLine>false</skipHeaderLine> 
<callNowMode>ANY</callNowMode> 
<cleanListBeforeUpdate>false</cleanListBeforeUpdate> 
<crmAddMode>ADD_NEW</crmAddMode> 
<crmUpdateMode>UPDATE_FIRST</crmUpdateMode> 
<listAddMode>ADD_FIRST</listAddMode> 
</listUpdateSettings> 
<record> 
<fields>5551208111</fields> 
<fields>John</fields> 
<fields>Smith</fields> 
</record> 
</ser:addRecordToList> 
</soapenv:Body> 
</soapenv:Envelope>'; 

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

请指引我连接five9并将记录发送到Five9以添加到列表中。

+0

什么是与代码的问题? – deceze 2012-07-26 08:22:51

+0

我不能接收任何身份验证,并不能在列表中添加我的记录。 – 2012-07-26 09:37:53

回答

0

问题是因为即使您将标头即User Namepassword设置为标头记录。这被纳入XML Data这是发送到WebService in doRequest

解决方案
1.如果您想使用doRequest,你需要适当头节点即发送XML。在认证节点中使用Usernamepassword
2.代替doRequest,使用__soapCall,使用$client对象与功能addRecordToList

您可以了解更多信息here

3

您可以使用以下PHP代码将记录插入到Five9拨号列表中。我意识到这个问题已有近一年的时间了,但由于它没有得到回答,并且Five9 API明显缺乏PHP示例,所以我认为这仍然是相关的。

$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); 

/* Field Mapping */ 
$arryFields = array(); 
$arryFields[0] = array("columnNumber"=>1,"fieldName" => "number1", "key" => "false"); 
$arryFields[1] = array("columnNumber"=>2,"fieldName" => "first_name", "key" => "false"); 
$arryFields[2] = array("columnNumber"=>3,"fieldName" => "last_name", "key" => "false"); 
$arryFields[3] = array("columnNumber"=>4,"fieldName" => "street", "key" => "false"); 
$arryFields[4] = array("columnNumber"=>5,"fieldName" => "city", "key" => "false"); 
$arryFields[5] = array("columnNumber"=>6,"fieldName" => "state", "key" => "false"); 
$arryFields[6] = array("columnNumber"=>7,"fieldName" => "zip", "key" => "false"); 

//$arrySettings['callNowColumnNumber'] = 0; 
$arrySettings['cleanListBeforeUpdate'] = 0; 
$arrySettings['crmAddMode'] = "ADD_NEW"; //DONT_ADD or ADD_NEW 
$arrySettings['crmUpdateMode'] = "UPDATE_FIRST"; 
$arrySettings['listAddMode'] = "ADD_FIRST"; 

$arryValues[0] = "9515551212"; 
$arryValues[1] = "FirstName"; 
$arryValues[2] = "LastName"; 
$arryValues[3] = "123 Main St."; 
$arryValues[4] = "Corona"; 
$arryValues[5] = "CA"; 
$arryValues[6] = "92881"; 

$arryParams['parameters']['listName'] = "Z-outbound-test"; 
$arryParams['parameters']['listUpdateSettings'] = $arrySettings; 
$arryParams['parameters']['record'] = $arryValues; 

try { 
    $result = $soap->__soapCall("addRecordToList", $arryParams);  
} catch (SoapFault $e) { 
    /* your error handling */ 
} 
1

我想建立在@Jesse Q的东西为我工作出色答卷....

$auth = array("login" => "your login", 
       "password" => "your password"); 

$wsdl = "https://api.five9.com/wsadmin/v2/AdminWebService?wsdl"; 
$soap = new SoapClient($wsdl, $auth); 

$fields = array("number1" => "555-666-7777", 
       "first_name" => "John", 
       "last_name" => "Doe", 
       "street" => "", 
       "city" => "", 
       "state" => "", 
       "zip" => ""); 

// these are the columns we're sending so Five9 knows what we're sending 
$columns = array(); 
$keys = array_keys($fields); 
for ($x = 0; $x < count($fields); ++$x) 
    $columns[$x] = array("columnNumber" => $x + 1, 
         "fieldName" => $keys[$x], 
         "key" => "false"); 

// assemble the settings... 
$settings = array("fieldsMapping" => $columns, 
        "cleanListBeforeUpdate" => 0, 
        "crmAddMode" => "ADD_NEW", 
        "crmUpdateMode" => "UPDATE_FIRST", 
        "listAddMode" => "ADD_FIRST", 
        "skipHeaderLine" => "false"); 

// assemble the request... 
$record = array_values($fields); 
$params = array("listName" => $list, 
       "listUpdateSettings" => $settings, 
       "record" => $record); 

$response = $soap->addRecordToList($params); 

你甚至可以进行一些检查名单的存在和添加它,它应该不存在。

$list_lookup = $soap->getListsInfo(array("listNamePattern" => $list)); 
if (!($list_lookup->return && $list_lookup->return->name)) 
    $soap->createList(array("listName" => $list)); 
0

哎这个问题是旧的,但我设法把一起上课,将记录添加到列表中根据需要编辑你的字段名。它使用AddRecordtoList();

,您可以查看有文档here

class five9{ 

    //the fields mapped to five9 
    //initialize and empty array so there are no errors with array_push 
    private static $listUpdateSettings = array("fieldsMapping" => array()); 

    //maps field to five9 columns 
    protected function mapField($index, $field, $key = false){ 
    //map the field to five9. Index must start at 1 not 0 
    //mapping fields this way allows flexibility in which order the parameter has its keys 
    array_push(self::$listUpdateSettings["fieldsMapping"], array("columnNumber" => $index + 1, "fieldName" => $field, "key" => $key)); 
    } 

    //returns data array after being scrubbed 
    protected function checkArray(array $lead){ 

    //data sent to five9 
    $data = array(); 

    //counter 
    $i = 0; 

    //five9 requires the $field names outlined below 
    foreach($lead as $field => $value){ 
     //make sure first_name is 3 characters or more 
     if(($field == 'first_name' && strlen($field) > 3)){ 
     //add field to array 
     $data[$i] = $value; 
     //map the field in five9 
     self::mapField($i, $field); 
     } 
     //make sure last_name is 3 characters or more 
     if($field == 'last_name' && strlen($field) > 3){ 
     //add field to array 
     $data[$i] = $value; 
     //map the field in five9 
     self::mapField($i, $field); 
     } 
     //if the field is a phone number 
     if($field == 'number1'){ 
     //add field to array 
     $data[$i] = preg_replace("/[^0-9]/", "", $value); 
     //map the field in five9 
     //this was they key for my instance 
     self::mapField($i, $field, true); 
     } 
     //if the field is a phone number 
     if($field == 'number2'){ 
     //add field to array 
     $data[$i] = preg_replace("/[^0-9]/", "", $value); 
     //setup column mapping in five9 
     self::mapField($i, $field); 
     } 
     //make sure the state is only two characters 
     if($field == 'state' && strlen($value) <= 2){ 
     //add field to array 
     $data[$i] = $value; 
     //setup column mapping in five9 
     self::mapField($i, $field); 
     } 
     //make sure the state is only two characters 
     if($field == 'zip' && strlen($value) <= 5){ 
     //add field to array 
     $data[$i] = $value; 
     //setup column mapping in five9 
     self::mapField($i, $field); 
     } 
     //make sure memberid is an int 
     if($field == 'member_id' && is_numeric($value)){ 
     //add field to array 
     $data[$i] = $value; 
     //setup column mapping in five9 
     self::mapField($i, $field); 
     } 
     //increase the counter 
     $i++; 
    } 
    //return the data array that is constructed 
    return $data; 

    } 

    static function sendToFive9(array $lead){ 

    //the conctructed array 
    $data = self::checkArray($lead); 

    //if the fields sent are all correct both arrays are the same size 
    if(sizeof($lead) === sizeof($data)){ 

     // Import the WSDL and authenticate the user.----------------------------- 
     $wsdl_five9 = "https://api.five9.com/wsadmin/v2/AdminWebService?wsdl&user=$username"; 

     //try to authenticate with five9 
     try{ 
      $soap_options = array('login' => '$username', 
            'password' => '$password', 
            'trace' => true); 

      $client_five9 = new SoapClient($wsdl_five9 , $soap_options); 
     }//if errors occur add the message to the response array 
     catch (Exception $e){ 
      $error_message = $e->getMessage(); 
      $response['error'] = $error_message; 
     } 


     //settings required by five9 
     self::$listUpdateSettings["skipHeaderLine"] = false; 
     self::$listUpdateSettings["cleanListBeforeUpdate"] = false; 
     self::$listUpdateSettings["crmAddMode"] = 'ADD_NEW'; 
     self::$listUpdateSettings["crmUpdateMode"] = 'UPDATE_SOLE_MATCHES'; 
     self::$listUpdateSettings["listAddMode"] = 'ADD_IF_SOLE_CRM_MATCH'; 

     //the default list for all new leads 
     $list = "test"; 

     //prepare the query used to add the record to five9 
     $query = array ('listName' => "$list", 
         'listUpdateSettings' => self::$listUpdateSettings, 
         'record' => $data); 

     //get the result from running the query 
     //this will return an object 
     $result = $client_five9->AddRecordToList($query); 

     //get the array of variables within the results object 
     $variables = get_object_vars($result); 

     //get the array of varaibles within the return array of objects 
     $resp = get_object_vars($variables['return']); 

     //if there was an error adding the record 
     if($resp['failureMessage'] != ""){ 
      $response['errors'] = $resp['failureMessage']; 
     } 
     //if it was successful either adding or updating 
     if($resp['crmRecordsUpdated'] == 1 || $resp['crmRecordsInserted'] == 1){ 
      $response['success'] = true; 
      //reset the settings array so this class can be looped without passing the lists back and forth 
      self::$listUpdateSettings = array("fieldsMapping" => array()); 
     } 

    }//end if 
    else{ 
     //return the differences in the arrays usually caused due to improper names 
     $reponse["errors"] = array_diff($lead, $data); 

    } 

    return $response; 

    }//end function 

}