Posts

Configure RequireJS to load the yalst live chat JavaScript Api

TL;DR

For loading outdated versions of the Visitor Chat JavaScript Api ensure the release version of RequireJS does finish loading it’s data-main script before fetching the Visitor Api.

Update – this post’s solution is now obsolete (1. Aug. 2014)

The co-existence problems of the two RequireJS libraries have been resolved with the version 2.1 of the VisitorAPI. The VisitorAPI library is distributed from now on as a single JavaScript file too. That source file is AMD loader compatible. Thus the VisitorAPI v. 2.1 no longer introduces global variables in the JavaScript context.

The whole loading code condenses down to:

The details are discussed in this tutorial.

The Original Problem

The RequireJS library adds support for Javascript modules which is missing in the current webbrowser implementations.
The yalst Visitor Api uses a renamed RequireJS (version 2.1.9 at the time of writing) for code organisation and loading, and so may the client pages themselves.
However since RequireJS does not provide a noConflict() method both versions can interfere on the page resulting in Javascript errors.

RequireJS in the Visitor Api

The Visitor Chat JavaScript Api provides the namespace LiveSupport which

  • under the namespace LiveSupport.VisitorAPI contains the documented public methods and
  • under the root contains it’s own version of RequireJS.

Thus in addition to the documented use these methods are available in the Api too:

The api is put in this namespace by the RequireJS optimiser r.js using a build.js file like this:

The Solution

The client page can use it’s own (non-namespaced) version of RequireJS, given it completes loading the data-main script before the Visitor Api’s namespaced version.

An Example

The example page index-sync.html uses RequireJS in require.min.js with the data-main script main.js to load jQuery, underscore and Lo-Dash.
In this example the <script> tag for the Visitor Api is created “by hand” [1] in a function called from the data-main script main.js. This tag loads the Visitor Api’s own namespaced RequireJS in LiveSupport.js with the data-main script LiveSupportMain.js which in turn loads the actual api source files.
Among the api files is yet an own version of underscore which by using _.noConflict() is guaranteed to be free of side effects for the client page.

The directory structure and the network activity log of a web page containing both the vanilla version of RequireJS and the namespaced version of the Visitor Api is shown here:
RequireJS NoConflict Loading NetworkLog
Here is the code to accomplish sequential loading of the libraries:

[1] To define the order in which the libraries are fetched by the browser loadScript.js could be used for dynamic injection of <script> tags into the DOM and handling of the load and readystatechange events.

New JavaScript Visitor Api for Chat Events and Actions

The JavaScript Visitor Api for Chat provides a flexible way of integrating pre-chat actions and events; as well as visitor tracking on web pages. E.g. examining the support availability, tracking chat progress and painting click-to-chat buttons are highly customisable.

Registrierte Benutzer per API via PHP hinzufügen

Registrierte Benutzer sind Besucher Ihrer Website, an die Sie spezielle Zugangsdaten (Benutzername und Kennwort) für den Live-Support vergeben haben. Sobald ein solcher Benutzer angelegt wurde, erscheint im Startfenster des Live-Supports die Schaltfläche [Chat für registrierte Benutzer], über die der jeweilige Besucher zu einem entsprechenden Anmeldefenster gelangt, in das diese Zugangsdaten eingegeben werden müssen. Support-Anfragen registrierter Besucher werden in der Operator-Konsole besonders gekennzeichnet. Somit wissen Sie genau, welche Person “am anderen Ende des Chats” zugegen ist, was bei “normalen” Anfragen ja nicht eindeutig bekannt ist. Registrierte Benutzer können mit einem Zeitguthaben versehen werden. Falls die eingestellte Zeit “abgechattet” ist, kann dieser Benutzer keine neuen Chats mehr initiieren.

Registrierte Benutzer werden standardmäßig über den yalst-Kundenbereich über ein entsprechendes Formular hinzugefügt. Dieser Vorgang kann jedoch über die integrierte Programmierschnittstelle (API) automatisiert werden, so daß z.B. aus einem Besucher, der sich auf Ihrer Website anmeldet, automatisch ein registrierter yalst-Benutzer werden kann. Das PHP-Script, um einen Benutzer hinzuzufügen, könnte etwa so aussehen:

<IHRE YALST-DOMAIN> Domain Ihres LiveSupport-Servers
<IHRE YALST-SITE> Site Ihres LiveSupport-Zugangs (z.B. 1-1)
<IHR API-KENNWORT> Kennwort für API-Zugriffe (wird in Ihrem Kundenbereich festgelegt)

<?php
include("xmlrpc.inc.php");
$passwd = md5("<IHR API-KENNWORT"); // wird im yalst-Kundenbereich festgelegt
$site = ("IHRE YALST-SITE"); // z.B. "27000-1"
// Daten des neuen Benutzers
$benutzer = "test";
$kennwort = "Yalst5";
$beschreibung = "Testbenutzer, per API hinzugefügt";
// API-Funktion aufrufen
$result = XMLRPC_request('<IHRE YALST-DOMAIN>','/yalst/api.php','reguser.add ',array(XMLRPC_prepare($site),XMLRPC_prepare($passwd),XMLRPC_prepare($ benutzer),XMLRPC_prepare($kennwort),XMLRPC_prepare($beschreibung),XMLR PC_prepare("-1")));
?>

Die Include-Datei “xmlrpc.inc.php” erhalten Sie unter
http://keithdevens.com/software/xmlrpc

LiveSupport-Status (online/offline) über PHP-Script ermitteln

Sie können direkt von Ihren Webapplikationen – z.B. PHP-Skripten – aus feststellen, ob Ihr Live-Support online oder offline ist. Dies kann z.B. sinnvoll sein, wenn Sie einzelne Inhalte Ihrer Seite danach ausrichten möchten, ob Online-Beratung zur Verfügung steht oder nicht.

Dazu stehen Ihnen zwei Möglichkeiten zur Verfügung, der Aufruf eines PHP-Skripts (online.php), welches den Online-Status als Zahl zurückgibt, oder die Nutzung einer API-Funktion.

Bitte ersetzen Sie in den folgenden Beispielen (für PHP, selbstverständlich lassen sich vergleichbare Abfragen auch in anderen Sprachen formulieren) diese Platzhalter durch Ihre entsprechenden Daten:

<IHRE YALST-DOMAIN> Domain Ihres LiveSupport-Servers
<IHRE YALST-SITE> Site Ihres LiveSupport-Zugangs (z.B. 1-1)
<IHR API-KENNWORT> Kennwort für API-Zugriffe (wird in Ihrem Kundenbereich festgelegt)

1. online.php

http://<IHRE YALST-DOMAIN>/yalst/online.php?site=<IHRE YALST-SITE>

Als Ergebnis wird eine einzige Ziffer zurückgegeben, die dann ausgewertet
werden kann:
1 – es wird zur Zeit kein Live-Support angeboten
2 – Live-Support wird angeboten
0 – es ist ein Fehler aufgetreten (z.B. unzulässiger Aufruf dieser Seite)

In PHP könnte man das so formulieren:
function yalst()
{ $fd=@fopen("http://<IHRE YALST-DOMAIN>/yalst/online.php?site=<IHRE YALST-SITE>","r");
if ($fd)
{
$buffer=trim(fgets($fd,4096));
@fclose($fd);
if ($buffer==2)
{return true;}
else
{return false;}
}
else
{return false;}
}

Durch Aufruf der Funktion yalst() können Sie dann ermitteln, ob Ihr LiveSupport online ist.

2. yalst-API

Die eingebaute Programmierschnittstelle, welche in Ihrem yalst-Kundenbereich dokumentiert ist, bietet selbstverständlich auch eine Funktion, um an diese Information zu gelangen, und zwar

“system.isOnline”

In PHP könnte man das in etwa so formulieren:

include("xmlrpc.inc.php");
$passwd = md5("<IHR API-KENNWORT");
$result =
XMLRPC_request('<IHRE YALST-DOMAIN','/yalst/api.php','system.isOnline',ar ray(XMLRPC_prepare("<IHRE YALST-SITE>"),XMLRPC_prepare($passwd)));
if ($result[1])
{echo "online<br>";}
else
{echo "offline<br>";}

Die Include-Datei “xmlrpc.inc.php” erhalten Sie unter
http://keithdevens.com/software/xmlrpc

FAQs per API direkt in den Internetauftritt integrieren

Neue API-Funktionen in yalst 3.05 und höher (faq.category und faq.article) machen es möglich, den FAQ-Bereich jetzt direkt in den Internetauftritt zu integrieren (ohne Popup-Fenster). Das hat neben der nahtlosen Integration in die Seite den Vorteil, daß die FAQs dann auch von Suchmaschinen indiziert werden.

Das Auslesen der FAQs kann zum Beispiel mit Hilfe der beliebten Skriptsprache PHP erfolgen. Ein minimalistisches Musterskript, welches unsere eigenen FAQs ausgibt, haben wir auf folgender Seite für Sie als Beispiel mit Quellcode und vielen Kommentaren publiziert:
http://www.visisoft.de/faq.php

Bei Fragen zur API-Programmierung können Sie sich selbstverständlich gerne an unseren Support wenden!