In this example we'll show you how can you implement simple SSO for your admins in Wordpress. As result, they will be able to access LiveAgent admin panel directly from their admin menu.
Goal:
Adminstarators and editors from WordPress can go to LiveAgent panel without logging in through log-in dialog.
Requirements:
- Administrators in WordPress must have the same e-mail address as their username in LiveAgent
So here is the code of very basic WordPress plugin handling SSO for all admins and editors:
<?php
/*
Plugin Name: LiveAgent example 1
Plugin URI: https://www.qualityunit.com/liveagent
Description: Example 1 - How to use Liveagent REST API
Author: QualityUnit
Version: 1.0.0
Author URI: https://www.qualityunit.com
License: GPL2
*/
if (!class_exists('liveAgentExampleOne')) {
class liveAgentExampleOne
{
//LiveAgent url
const LIVEAGENT_URL = 'https://mysupport.exmple.com/';
//LiveAgent API key - read more about how to get it: https://support.qualityunit.com/741982-API-key
const API_KEY = '4a46eb8373c39a8d70d496a94b53fe89';
//WORDPRESS STUFF
private function currentUserHasRole($roleName)
{
$current_user = wp_get_current_user();
return in_array($roleName, $current_user->roles);
}
public function __construct( )
{
add_action('admin_menu', array(
$this,
'addPrimaryConfigMenu'
));
}
public function addPrimaryConfigMenu( )
{
//we will add one extra menu item labeled LiveAgent
add_menu_page(__('LiveAgent'), __('LiveAgent'), 'manage_categories', 'liveagentPanelLogin', array(
$this,
'printPanelLoginMenu'
));
}
//LIVEAGENT STUFF
private function getAgentInfo($agentEmail)
{
//we will ask LiveAgent for info about agent with email $agentEmail
$ch = curl_init(self::LIVEAGENT_URL . 'api/agents/' . urlencode($agentEmail) . '&apikey=' . self::API_KEY);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$rawResult = curl_exec($ch);
//very simple answer checking
if (!$rawResult) {
return null;
}
$result = json_decode($rawResult);
if (!isset($result->response)) {
return null;
}
if (isset($result->response) && isset($result->response->statuscode) && $result->response->statuscode != 0) {
return null;
}
return $result->response;
}
public function printPanelLoginMenu( )
{
$current_user = wp_get_current_user();
$agentInfo = $this->getAgentInfo($current_user->user_email);
if (($this->currentUserHasRole('administrator') || $this->currentUserHasRole('editor')) && $agentInfo != '') {
//if I am an admin or editor -> allow me to jump directly to LiveAgent panel without logging in through login dialog
echo 'You can jump directly to LiveAgent <a href="' . self::LIVEAGENT_URL . 'agent/?AuthToken=' . $agentInfo->authtoken .
'" target="_blank">here</a>';
return;
} else if (($this->currentUserHasRole('administrator') || $this->currentUserHasRole('editor')) && $agentInfo == null) {
//if I am an admin or editor, but something happes and i'm not able to get my info, allow me to log in manually
echo 'You can login to LiveAgent <a href="' . self::LIVEAGENT_URL . 'agent" target="_blank">here</a>';
return;
}
//if I am not an admin nor an editor then do not allow me to even see how to get to LiveAgnet admin panel
echo 'You do not have access to LiveAgent.';
}
}
}
$liveagent = new liveAgentExampleOne();
?>
/*
Plugin Name: LiveAgent example 1
Plugin URI: https://www.qualityunit.com/liveagent
Description: Example 1 - How to use Liveagent REST API
Author: QualityUnit
Version: 1.0.0
Author URI: https://www.qualityunit.com
License: GPL2
*/
if (!class_exists('liveAgentExampleOne')) {
class liveAgentExampleOne
{
//LiveAgent url
const LIVEAGENT_URL = 'https://mysupport.exmple.com/';
//LiveAgent API key - read more about how to get it: https://support.qualityunit.com/741982-API-key
const API_KEY = '4a46eb8373c39a8d70d496a94b53fe89';
//WORDPRESS STUFF
private function currentUserHasRole($roleName)
{
$current_user = wp_get_current_user();
return in_array($roleName, $current_user->roles);
}
public function __construct( )
{
add_action('admin_menu', array(
$this,
'addPrimaryConfigMenu'
));
}
public function addPrimaryConfigMenu( )
{
//we will add one extra menu item labeled LiveAgent
add_menu_page(__('LiveAgent'), __('LiveAgent'), 'manage_categories', 'liveagentPanelLogin', array(
$this,
'printPanelLoginMenu'
));
}
//LIVEAGENT STUFF
private function getAgentInfo($agentEmail)
{
//we will ask LiveAgent for info about agent with email $agentEmail
$ch = curl_init(self::LIVEAGENT_URL . 'api/agents/' . urlencode($agentEmail) . '&apikey=' . self::API_KEY);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$rawResult = curl_exec($ch);
//very simple answer checking
if (!$rawResult) {
return null;
}
$result = json_decode($rawResult);
if (!isset($result->response)) {
return null;
}
if (isset($result->response) && isset($result->response->statuscode) && $result->response->statuscode != 0) {
return null;
}
return $result->response;
}
public function printPanelLoginMenu( )
{
$current_user = wp_get_current_user();
$agentInfo = $this->getAgentInfo($current_user->user_email);
if (($this->currentUserHasRole('administrator') || $this->currentUserHasRole('editor')) && $agentInfo != '') {
//if I am an admin or editor -> allow me to jump directly to LiveAgent panel without logging in through login dialog
echo 'You can jump directly to LiveAgent <a href="' . self::LIVEAGENT_URL . 'agent/?AuthToken=' . $agentInfo->authtoken .
'" target="_blank">here</a>';
return;
} else if (($this->currentUserHasRole('administrator') || $this->currentUserHasRole('editor')) && $agentInfo == null) {
//if I am an admin or editor, but something happes and i'm not able to get my info, allow me to log in manually
echo 'You can login to LiveAgent <a href="' . self::LIVEAGENT_URL . 'agent" target="_blank">here</a>';
return;
}
//if I am not an admin nor an editor then do not allow me to even see how to get to LiveAgnet admin panel
echo 'You do not have access to LiveAgent.';
}
}
}
$liveagent = new liveAgentExampleOne();
?>
Explanation
The code is more or less self-explanatory, but let's focus on the LiveAgent API part:
First, we will create a curl object, and ask LiveAgent for info about agent with email $agentEmail. We will ask about specific agent entity from all agents in LiveAgent: .../agents/specific_agent@email.
Note: Do not forget to attach apikey to your request.
$ch = curl_init(self::LIVEAGENT_URL . 'api/agents/' . urlencode($agentEmail) . '?apikey=' . self::API_KEY);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$rawResult = curl_exec($ch);
If we have proper (JSON) result, then decode it and check correct answer:
$result = json_decode($rawResult); //if you want to use XML answer format, use SimpleXMLElement object in php to parse raw result
if (!isset($result->response)) {
return null;
}
if (isset($result->response) && isset($result->response->statuscode) && $result->response->statuscode != 0) {
return null;
}
return $result->response;
You can find out more about this call (complete syntax, mandatory and optional fields and example results in XML and JSON format) in our API reference.
Note: If you want the answer in XML, then you must add .xml to the end of URL address, before apikey
$ch = curl_init(self::LIVEAGENT_URL . 'api/agents/' . urlencode($agentEmail) . '.xml&apikey=' . self::API_KEY);
And use SimpleXMLElement PHP object to decode it