Help & Support
Our help database contains answers to most of the common questions regarding our products.
If you are unable to locate a satisfactory answer for your query by searching here, please contact us.
I lost my Cbox embed code. Where can I get it?
Your Cbox embed code is available at your control panel. You need this code to install your Cbox on your website.
Also on that page is your Quick Link — a URL which you can use to access your Cbox directly in your browser or on your mobile device.
How do I put my Cbox on my website?
Once you have created your Cbox account, go to the Publish page of your control panel. The code and steps for embedding your Cbox are provided there for a number of common platforms.
If you install your Cbox and all you see is code, or nothing at all, your web host may be removing or otherwise interfering with the HTML iframe tags that Cbox uses. Your Cbox code needs to be pasted into an area of your site that accepts HTML without modification. This may mean switching your editor from "rich text" or "WYSIWYG" mode into HTML-editing or "raw" mode, or you may need to open your template files in a plain-text editor like Notepad.
Remember that you always have the option of posting or sharing your Cbox Quick Link — this gives visitors direct access to your Cbox in a full-screen layout, so it's perfect as a mobile option or for stand-alone use.
How do change my Cbox's style to go with my site's design?
Go to the Theme editor in your control panel. There you can specify the fonts and colours of your Cbox, using a point-and-click editor. You can always reset your theme to one of the preset defaults there, if you would like to start again.
If you have a Premium or Pro Cbox you can edit CSS, which gives you complete control over presentation.
How do I delete messages?
If you have a Premium or Pro Cbox, you can create a moderator name for yourself at your Users page, and then log in on your Cbox using the "profile" link. You will see a delete icon [x] next to each message in your Cbox, and you will not have to log in at your control panel at all to delete messages.
Alternatively, visit your Messages page to delete messages individually or in bulk. Deleted messages are removed from your public Cbox history, but are preserved in your Archives.
Can I make my Cbox transparent?
Yes. In the Theme editor, simply delete the colour codes for the main and form background ("BG") elements. This will make the Cbox transparent, allowing whatever is behind the Cbox to show through.
Note that any pop-ups generated by a transparent Cbox will have the default background colour — usually white. If your font colour is light, it may be invisible in popups. You can fix this by editing the CSS to introduce a background-color rule for popups.
How do I change my settings?
Check out the control panel. Cbox is highly customizable, and the options are arranged in the control panel into sections. Some options are only available on paid plans. These will usually be greyed-out. Upgrading will unlock these options, but will not automatically enable them.
Most changes to settings will take effect immediately, but some will require that you refresh the page that your Cbox is on. If you have embedded your Cbox on your website, you will generally not need to reinstall it. Settings that change your embed code will notify you of this.
How do I renew my Cbox?
Renewal is straightforward — it's the same process as for upgrading, at this page.
When you renew, your paid term is extended with the additional time that you purchase, and if you have any remaining credit, it is carried forward. So for example, if you have 20 days remaining, and you purchase an additional six months, you will have six months plus 20 days' credit after renewal.
I am seeing an error saying "Private Cbox."
This is the message that shows when your Cbox is accessed from an address other than the one specified at your Publish page, when you have the option "Allow access only at this address" enabled.
A common reason for this to happen is that you have entered an address that is more specific than it needs to be — for example, including the "www." at the beginning when your visitors don't need to include that to reach your website. Most of the time "mysite.com" works just as well as "www.mysite.com", but if you have specified "www.mysite.com" as the only address to allow access at, then Cbox will show an error when you arrive at your site via "mysite.com".
The solution is to simplify the address so it covers all the legitimate routes to your page, or turn off the option "Allow access only at this address."
Bot users
You can register a bot user at your Users page. Bot users are like ordinary registered users, except that instead of a password they are issued an access token. You cannot log in via the normal profile dialog. Instead, you can use the token directly in HTTP requests to Cbox.
We do not currently support an official API, but to demonstrate how you might read and post to your Cbox using a bot, the proof-of-concept PHP script below takes a simple HTTP-based approach. Run this script on your own server, and your bot will post to your Cbox. After its initial message, it will poll for messages containing trigger words, to which it will respond.
You can run the script from a shell, or have it run automatically with a crontab entry. When it's running, test it by entering a message in your Cbox such as "hello bot", "time?", or "what is the weather in new york?"
#!/usr/bin/php
<?php
define('LISTEN', true);
define('PID_FILE', './cboxbot.pid');
// Edit these lines for your Cbox and bot user.
$box = array('srv' => 7, 'id' => 1, 'tag' => 'bOxTag');
$bot = array('name' => 'mybot', 'token' => 'XJC-bottoken-asKC', 'url' => '');
$msg = 'Hello world!';
$callmap = array(
'/\bhello bot\b/iu' => 'bot_greet',
'/\btime\?/iu' => 'bot_time',
'/\bweather in ([a-zA-Z-0-9 ,]+)/iu' => 'bot_weather',
);
// Basic reply
function bot_time ($msg) {
return date("M d Y H:i:s");
}
// An example incorporating message data.
function bot_greet ($msg) {
return "Hello ".$msg['name'];
}
// An example calling an external API
function bot_weather ($msg, $matches) {
$place = $matches[1];
if (!$place) {
return;
}
$query = 'select * from weather.forecast where woeid in (select woeid from geo.places(1) where text="'.addslashes($place).'")';
$url = 'https://query.yahooapis.com/v1/public/yql?q='.urlencode($query).'&format=json&u=c&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys';
$out = file_get_contents($url);
if (!$out) {
return;
}
$wobj = json_decode($out);
if (!$wobj->query->results) {
return;
}
$cond = $wobj->query->results->channel->item->condition;
$desc = $wobj->query->results->channel->description;
return "[b]".$cond->text." ".$cond->temp."F [/b] (".$desc." at ".$cond->date.")";
}
// Do not edit past this point.
set_time_limit(0);
$id = cbox_post($msg, $bot, $box, $error);
if (!$id) {
echo $error;
}
else {
echo "Posted ID $id\n";
}
if (!LISTEN) {
exit;
}
// Synchronization.
// PID file is not removed on exit, but it is unlocked. A locked file indicates a running process.
$fp = fopen(PID_FILE, 'a+');
if (!flock($fp, LOCK_EX | LOCK_NB)) {
echo "Could not lock PID file. Process already running?\n";
exit;
}
ftruncate($fp, 0);
fwrite($fp, posix_getpid()."\n");
fflush($fp);
do {
$msgs = cbox_get_msgs($id, $bot, $box);
if (!$msgs || !is_array($msgs)) {
sleep(5);
continue;
}
$id = (int)$msgs[0]['id'];
for ($i = 0; $i < count($msgs); $i++) {
if ($msgs[0]['name'] == $bot['name']) {
continue; // Ignore bot's own messages.
}
$msgtext = $msgs[$i]['message'];
foreach ($callmap as $expr => $func) {
$matches = array();
if (preg_match($expr, $msgtext, $matches)) {
$reply = call_user_func($func, $msgs[$i], $matches);
if ($reply) {
cbox_post($reply, $bot, $box, $error);
}
}
}
}
sleep(2);
} while (true);
function cbox_get_msgs ($id, $user, $box, &$error = '') {
$srv = $box['srv'];
$boxid = $box['id'];
$boxtag = $box['tag'];
$host = "www$srv.cbox.ws";
$path = "/box/?boxid=$boxid&boxtag=$boxtag&sec=archive";
$port = 80;
$timeout = 30;
$get = array(
'i' => (int)$id,
'k' => $user['token'],
'fwd' => 1,
'aj' => 1
);
$req = '';
$res = '';
foreach ($get as $k => $v) {
$path .= "&$k=".urlencode($v);
}
$hdr = "GET $path HTTP/1.1\r\n";
$hdr .= "Host: $host\r\n\r\n";
$fp = fsockopen ($host, $port, $errno, $errstr, $timeout);
if (!$fp) {
$error = "Could not open socket: $errno - $errstr\n";
return;
}
fputs ($fp, $hdr);
while (!feof($fp)) {
$res .= fgets ($fp, 1024);
}
fclose ($fp);
if (!$res || !strpos($res, "200 OK")) {
$error = "Bad response:\r\n $res";
return;
}
$matches = array();
preg_match_all('/\n([^\t\n]*)\t([^\t]*)\t([^\t]*)\t([^\t]*)\t'
.'([^\t]*)\t([^\t]*)\t([^\t]*)\t([^\t]*)\t/', $res, $matches);
$msgs = array();
$map = array('id', 'time', 'date', 'name', 'group', 'url', 'message');
for ($m = 0; $m < count($map); $m++) {
for ($i = 0; $i < count($matches[$m+1]); $i++) {
$msgs[$i][$map[$m]] = $matches[$m+1][$i];
}
}
return $msgs;
}
function cbox_post ($msg, $user, $box, &$error = '') {
$srv = $box['srv'];
$boxid = $box['id'];
$boxtag = $box['tag'];
$host = "www$srv.cbox.ws";
$path = "/box/?boxid=$boxid&boxtag=$boxtag&sec=submit";
$port = 80;
$timeout = 30;
$post = array(
'nme' => $user['name'],
'key' => $user['token'],
'eml' => $user['url'],
'pst' => $msg,
'aj' => '1'
);
$req = '';
$res = '';
foreach ($post as $k => $v) {
$req .= "$k=".urlencode($v)."&";
}
$req = substr($req, 0, -1);
$hdr = "POST $path HTTP/1.1\r\n";
$hdr .= "Host: $host\r\n";
$hdr .= "Content-Type: application/x-www-form-urlencoded\r\n";
$hdr .= "Content-Length: ".strlen($req)."\r\n\r\n";
$fp = fsockopen ($host, $port, $errno, $errstr, $timeout);
if (!$fp) {
$error = "Could not open socket: $errno - $errstr\n";
return;
}
fputs ($fp, $hdr.$req);
while (!feof($fp)) {
$res .= fgets ($fp, 1024);
}
fclose ($fp);
if (!$res || !strpos($res, "200 OK")) {
$error = "Bad response:\r\n $res";
return;
}
$matches = array();
preg_match('/1(.*)\t(.*)\t(.*)\t(.*)\t(.*)\t(.*)/', $res, $matches);
$err = $matches[1];
$id = $matches[6];
if ($err) {
$error = "Got error from Cbox: $err";
return;
}
return $id;
}
?>
Can I have more than one Cbox?
Yes, you can have as many as you like! Create a separate account for each Cbox. You will need a unique account name for each, but we recommend using the same email address.
If you need a large number of Cboxes, you might want to be on our Cbox Pro plan. Cbox Pro supports channels, which are independent conversation threads. Each channel can be embedded or linked as if it were a separate Cbox, and will host a separate conversation. Channels share the same theme, settings and users, and you only need one control panel login to manage them.