<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>HostSeries</title>
	<atom:link href="http://hostseries.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://hostseries.com</link>
	<description></description>
	<pubDate>Mon, 17 Nov 2008 17:46:30 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>AgentLogin powered by MySQL</title>
		<link>http://hostseries.com/agentlogin-powered-by-mysql/</link>
		<comments>http://hostseries.com/agentlogin-powered-by-mysql/#comments</comments>
		<pubDate>Mon, 11 Aug 2008 17:15:14 +0000</pubDate>
		<dc:creator>Author</dc:creator>
		
		<category><![CDATA[Asterisk PBX]]></category>

		<guid isPermaLink="false">http://hostseries.com/?p=45</guid>
		<description><![CDATA[In a previous article, I showed an alternative method of AgentCallBackLogin. In that example, the agents were authenticated via voicemail.conf. I made a comment that I would create a dialplan with it authenticating against a MySQL database.
So let&#8217;s start by creating our database:
CREATE TABLE IF NOT EXISTS `asterisk`.`agent_users` (
`id` int(11) NOT NULL auto_increment,
`user` varchar(10) NOT [...]]]></description>
			<content:encoded><![CDATA[<p>In a previous <a href="http://hostseries.com/agentcallbacklogin-alternative/" >article,</a> I showed an alternative method of AgentCallBackLogin. In that example, the agents were authenticated via voicemail.conf. I made a <a href="http://hostseries.com/agentcallbacklogin-alternative/#comment-535" >comment</a> that I would create a dialplan with it authenticating against a MySQL database.</p>
<p><span id="more-45"></span>So let&#8217;s start by creating our database:</p>
<pre><code>CREATE TABLE IF NOT EXISTS `asterisk`.`agent_users` (
`id` int(11) NOT NULL auto_increment,
`user` varchar(10) NOT NULL default '',
`pass` varchar(32) NOT NULL default '',
`name` varchar(50) NOT NULL default '',
PRIMARY KEY  (`id`)
) ENGINE=MyISAM</code></pre>
<p>And I&#8217;ll go ahead and drop same data into that database:</p>
<pre><code>INSERT INTO `asterisk`.`agent_users` (`id`, `user`, `pass`, `name`) VALUES
(1, '1050', '1234', 'Robert');</code></pre>
<p>Now for our dialplan:</p>
<pre><code>exten =&gt; login,1,Answer()
exten =&gt; login,2,Read(user|/home/Sounds/user-id)  ; I created an audio file which asks for the user id.
exten =&gt; login,3,Read(pass|/home/Sounds/user-pass) ; I created an audio file which asks for the user password.
exten =&gt; login,4,MYSQL(Connect connid localhost dbuser dbpassword asterisk)
exten =&gt; login,5,MYSQL(Query resultid ${connid} SELECT\ 'pass'\ FROM\ 'agent_users'\ WHERE\ 'user'\='${user}'\)
exten =&gt; login,6,MYSQL(Fetch fetchid ${resultid} password)
exten =&gt; login,7,NoOp(Password is: ${password}) ; This line isn't required, but I have it here to output the results of our query.
exten =&gt; login,8,MYSQL(Clear ${resultid})
exten =&gt; login,9,MYSQL(Disconnect ${connid})
exten =&gt; login,10,GotoIf($["${password}" = "${pass}"]?incorrect,1:login,11)
exten =&gt; login,11,AddQueueMember(SALES|local/${user}@agents/n)
exten =&gt; login,12,AddQueueMember(SUPPORT|local/${user}@agents/n)
exten =&gt; login,13,Playback(goodbye)
exten =&gt; login,14,Hangup()

exten =&gt; incorrect,1,Playback(/home/Sounds/incorrect-pass) ; This is an audio file to tell that the password is incorrect
exten =&gt; incorrect,2,Goto(login,1)</code></pre>
<p>Yes, this dialplan is a little longer. But you won&#8217;t have to worry with voicemail.conf being your authentication method, or of VMAuthenticate depreciating.</p>
<p>In addition to the above, you can always port voicemail.conf to MySQL via Asterisk Realtime. You can learn more Asterisk Realtime <a href="http://hostseries.com/asterisk-realtime-installation-guide/" >here.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://hostseries.com/agentlogin-powered-by-mysql/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Opinions of Parallels Recent Activity</title>
		<link>http://hostseries.com/opinions-of-parallels-recent-activity/</link>
		<comments>http://hostseries.com/opinions-of-parallels-recent-activity/#comments</comments>
		<pubDate>Tue, 20 May 2008 14:20:24 +0000</pubDate>
		<dc:creator>Author</dc:creator>
		
		<category><![CDATA[Hosting]]></category>

		<guid isPermaLink="false">http://hostseries.com/?p=42</guid>
		<description><![CDATA[So I wanted to share my thoughts on Parallel&#8217;s recent activity, or perhaps it&#8217;s not so recent.
SWSoft is renamed Parallels.
I have mixed feelings about this move by Parallels. To me, I think they will always be SWSoft. And why not? SWSoft makes me think of a software company, which is basically what Parallels is. Other [...]]]></description>
			<content:encoded><![CDATA[<p>So I wanted to share my thoughts on Parallel&#8217;s recent activity, or perhaps it&#8217;s not so recent.</p>
<p><strong>SWSoft is renamed Parallels.</strong><br />
I have mixed feelings about this move by Parallels. To me, I think they will always be SWSoft. And why not? SWSoft makes me think of a software company, which is basically what Parallels is. Other obvious reasons that I wouldn&#8217;t have left the brand behind is of course the massive amount of money was was poured into building the previous brand name.</p>
<p>I understand Parallel&#8217;s reasons for the change. They want to unify their offerings. It seems they are renaming everything to &#8220;Parallels BlahBlah.&#8221;  Seems like another way to confuse customers with your offerings. Anyway, more power to them, they seem to know what they are doing. And with over $100Million in revenues last year, I&#8217;m not going to question their tactics.</p>
<p><strong>Parallels Aquires ModernBill.</strong><br />
This is a rather interesting move for Parallels. In my honest opinion Modernbill had alot to be desired before the acquisition. Their support was fairly useless, with their rather confusing documentation. Shortly after the acquisition, the site is moved, and the old documentation is taken offline. They have started to put a new one online, but even after weeks it&#8217;s still mainly incomplete.</p>
<p>I only hope that Modernbill turns around from it&#8217;s previous self. At Parallels Summit 2008, they announced ModernBill will be integrated more fully into other Parallels products. Maybe at the sametime they will start reworking the core product, without losing support for the other control panels - namely cPanel.</p>
<p><strong>Parallels Summit 2008</strong><br />
Overall I think it&#8217;s a good conference. The speakers most be good, as the exhibit hall was only full during the coffee breaks and during lunch. Otherwise, it was rather slow. The number in attendance was around 500-600 including Parallels employees. The food was good, and the boat ride Monday evening was entertaining.</p>
<p>You can really tell from the conference that Parallels is really working to improve their image and their company relationships. They repeatedly mentioned they want to help their customers and partners grow their business - not worrying about Parallels pocket books - which I find hard to believe, but I&#8217;m buying into it. I&#8217;m still rather bias to cPanel, but will be keeping a closer eye on Parallels and what they are doing for the next coming years. The industry is moving forward, and Parallels is keeping right up with it I believe.</p>
<p>Feel free to post your comments and opinions on Parallels as well.</p>
]]></content:encoded>
			<wfw:commentRss>http://hostseries.com/opinions-of-parallels-recent-activity/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Linksys SPA941 IP Phones</title>
		<link>http://hostseries.com/linksys-spa941-ip-phones/</link>
		<comments>http://hostseries.com/linksys-spa941-ip-phones/#comments</comments>
		<pubDate>Tue, 29 Apr 2008 19:11:29 +0000</pubDate>
		<dc:creator>Author</dc:creator>
		
		<category><![CDATA[IP Phones]]></category>

		<guid isPermaLink="false">http://hostseries.com/?p=18</guid>
		<description><![CDATA[So we bought some Grandstream GXP2000 IP Phones first for the office.  They were fine for starting out, however as our call center grew, we found increasing issues with them - primarily with transferring calls to external Asterisk boxes. So we purchased a box of Linksys SPA941 IP Phones. These were about the same [...]]]></description>
			<content:encoded><![CDATA[<p>So we bought some <a href="http://www.voipsupply.com/idevaffiliate/idevaffiliate.php?id=298_24_21_1" target="_blank" onclick="javascript:urchinTracker ('/outbound/article/www.voipsupply.com');">Grandstream GXP2000</a> IP Phones first for the office.  They were fine for starting out, however as our call center grew, we found increasing issues with them - primarily with transferring calls to external Asterisk boxes. So we purchased a box of <a href="http://www.voipsupply.com/idevaffiliate/idevaffiliate.php?id=298_400_21_1" target="_blank" onclick="javascript:urchinTracker ('/outbound/article/www.voipsupply.com');">Linksys SPA941</a> IP Phones. These were about the same money at <a href="http://www.voipsupply.com/idevaffiliate/idevaffiliate.php?id=298" target="_blank" onclick="javascript:urchinTracker ('/outbound/article/www.voipsupply.com');">VOIPSupply</a> as the Grandstream Phones. I think now the Grandstreams are a bit cheaper. However, comparing apples to oranges, Linksys has put out another great product.<br />
<br />
Some basic features that you can expect with the Linksys SPA941:</p>
<p>4 Lines (or extensions)<br />
DND (Do Not Disturb) Button<br />
Transfer Button<br />
Hold and Mute Button<br />
Caller ID<br />
Call Timer<br />
Custom Ring Tones<br />
2.5mm Headset Jack<br />
And Much More!</p>
<p>
One great thing I love about the Linksys phones are that I&#8217;m in full control. From within the Advanced GUI, I can disable buttons if I want. For example, we opted to disable the DND button. We didn&#8217;t want employees misusing the DND button, so we simply disabled it. We have enough wrapup time on the queue, to allow them to finish up a call before getting the next.<br />
<br />
I think with our next purchase order, we&#8217;ll get the Linksys SPA942 model. It&#8217;s basically the same, but has 2 Ethernet ports, so the PC can be plugged into the phone. I&#8217;ll post about the SPA942 once we get some of those in the office. <img src='http://hostseries.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><img class="alignnone size-medium wp-image-27" title="LinksysSPA941" src="http://hostseries.com/wp-content/uploads/2007/11/spa941_lrg.jpg" alt="" width="292" height="300" /></p>
]]></content:encoded>
			<wfw:commentRss>http://hostseries.com/linksys-spa941-ip-phones/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Asterisk Apps: OrderlyStats</title>
		<link>http://hostseries.com/asterisk-apps-orderlystats/</link>
		<comments>http://hostseries.com/asterisk-apps-orderlystats/#comments</comments>
		<pubDate>Fri, 07 Mar 2008 14:07:15 +0000</pubDate>
		<dc:creator>Author</dc:creator>
		
		<category><![CDATA[Asterisk PBX]]></category>

		<guid isPermaLink="false">http://hostseries.com/asterisk-apps-orderlystats/</guid>
		<description><![CDATA[In my previous article, I made mention of using the CDR Database to generate reports. Unless you have the time, resources, and skills to develop some killer apps, you might begin looking at 3rd party applications to make your reports &#8220;pretty&#8221; and presentation worthy.
OrderlyQ has put together some rather great software.
OrderlyStats is a free product [...]]]></description>
			<content:encoded><![CDATA[<p>In my previous article, I made mention of using the CDR Database to generate reports. Unless you have the time, resources, and skills to develop some killer apps, you might begin looking at 3rd party applications to make your reports &#8220;pretty&#8221; and presentation worthy.</p>
<p><a href="http://orderlyq.com" target="_blank" onclick="javascript:urchinTracker ('/outbound/article/orderlyq.com');">OrderlyQ</a> has put together some rather great software.<span id="more-37"></span></p>
<p>OrderlyStats is a free product that they offer, kinda as a lost leader, in hopes that you will signup for their paid service: OrderlyQ. OrderlyStats basically connects via Asterisk Manager, and intelligently discovers your agents and queues. You have a realtime monitor of the queues, agents logged into the queues, and calls being answered and waiting to be answered. You can also generate reports for each queue. Reports give you details like: holdtimes, percentage of answered calls, average call lengths, number of repeat calls, etc. You even get a daily email with the number of answered calls for that day, etc.</p>
<p>Sounds almost too good to be true right? Well it is to some degree. It&#8217;s a free application, but you will find OrderlyQ bugging you about signing up for their paid service. And rightfully so, but still&#8230;.  Another disadvantage is that it&#8217;s connecting to your server. If you have your Asterisk box running on the LAN, you are hopeless. And depending on how secure you have your system, (and how secure OrderlyQ&#8217;s system is), you open yourself up to security risks. OrderlyQ COULD have complete control over your phone system.</p>
<p>Nonetheless, it&#8217;s great for the reports. I like making use of OrderlyQ. Give it a try!</p>
<p><a href="http://hostseries.com/wp-content/uploads/2008/03/orderlyq_queue.jpg" title="OrderlyQ Queue" ><img src="http://hostseries.com/wp-content/uploads/2008/03/orderlyq_queue.jpg" alt="OrderlyQ Queue" height="130" width="662" /></a></p>
<p><a href="http://hostseries.com/wp-content/uploads/2008/03/orderlyq_reports.jpg" title="OrderlyQ Report" ><img src="http://hostseries.com/wp-content/uploads/2008/03/orderlyq_reports.jpg" alt="OrderlyQ Report" height="366" width="519" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://hostseries.com/asterisk-apps-orderlystats/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Asterisk - Getting Results from CDR Database!</title>
		<link>http://hostseries.com/asterisk-getting-results-from-cdr-database/</link>
		<comments>http://hostseries.com/asterisk-getting-results-from-cdr-database/#comments</comments>
		<pubDate>Tue, 05 Feb 2008 00:32:15 +0000</pubDate>
		<dc:creator>Author</dc:creator>
		
		<category><![CDATA[Asterisk PBX]]></category>

		<guid isPermaLink="false">http://hostseries.com/asterisk-getting-results-from-cdr-database/</guid>
		<description><![CDATA[So in my previous article, I said I would provide some sample scripts to view information from our CDR database.  My script is written in PHP, and we&#8217;re just going to do a quick query of the database for answered calls.  
To make things neat, I like to write the mysql connection string [...]]]></description>
			<content:encoded><![CDATA[<p>So in my <a href="http://hostseries.com/asterisk-cdr-logging-in-mysql/" >previous article</a>, I said I would provide some sample scripts to view information from our CDR database.  My script is written in PHP, and we&#8217;re just going to do a quick query of the database for answered calls.  <span id="more-33"></span></p>
<p>To make things neat, I like to write the mysql connection string and variables in seperate files. So my config.php will maintain the database connection information:</p>
<pre class="code"><code>&lt;?php
// This is an example of config.php
$dbhost = 'localhost';
$dbuser = 'asterisk';
$dbpass = 'yourpassword';
$dbname = 'asterisk';
?&gt;</code></pre>
<p>Now the mysql connection strings, first to open the connection, the second to close the connection:</p>
<pre class="code"><code>&lt;?php
// This is an example opendb.php
$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die
('Error connecting to mysql');
mysql_select_db($dbname);
?&gt;</code></pre>
<pre class="code"><code>&lt;?php
// an example of closedb.php
// it does nothing but closing
// a mysql database connection
mysql_close($conn);
?&gt;</code></pre>
<p>The above files will be included or used in any script we use to query the database. Now let&#8217;s get to the queries&#8230;<br />
To gather the information of what I&#8217;m querying for, I put together a simple HTML form.  You can view the form <a href="http://hostseries.com/wp-content/uploads/2008/02/cdr_html.html" >here.</a> And download it&#8217;s code <a href="http://hostseries.com/wp-content/uploads/2008/02/cdr_html.txt" >here.</a>   The form will POST to our process.php which will be discussed in a moment.  You will notice several fields on the html form. The only fields that are required are the start date/time and the end date/time.</p>
<p>The PHP that queries the database and outputs the results can be found <a href="http://hostseries.com/wp-content/uploads/2008/02/process.php.txt" >here.</a></p>
<p>And the results are something like this:</p>
<p><a href="http://hostseries.com/wp-content/uploads/2008/02/cdr_results.png" title="CDR Results" ><img src="http://hostseries.com/wp-content/uploads/2008/02/cdr_results.png" alt="CDR Results" height="383" width="749" /></a></p>
<p>That&#8217;s it! You can download the files mentioned in this article <a href="http://hostseries.com/wp-content/uploads/2008/02/cdr_script.zip" >here.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://hostseries.com/asterisk-getting-results-from-cdr-database/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Asterisk - CDR Logging in MySQL</title>
		<link>http://hostseries.com/asterisk-cdr-logging-in-mysql/</link>
		<comments>http://hostseries.com/asterisk-cdr-logging-in-mysql/#comments</comments>
		<pubDate>Fri, 01 Feb 2008 18:18:55 +0000</pubDate>
		<dc:creator>Author</dc:creator>
		
		<category><![CDATA[Asterisk PBX]]></category>

		<guid isPermaLink="false">http://hostseries.com/asterisk-cdr-logging-in-mysql/</guid>
		<description><![CDATA[Okay, so you have got your asterisk box online. You have all the configuration done according to your needs. And now you are starting to develop applications to generate graphs and reports based on your call volume and flow. You&#8217;ll probably want to have your CDR logs entered into a database for easier management.
Assuming that [...]]]></description>
			<content:encoded><![CDATA[<p>Okay, so you have got your asterisk box online. You have all the configuration done according to your needs. And now you are starting to develop applications to generate graphs and reports based on your call volume and flow. You&#8217;ll probably want to have your CDR logs entered into a database for easier management.<span id="more-28"></span></p>
<p>Assuming that you already have the Asterisk Addons installed, as per my <a href="http://hostseries.com/asterisk-my-quick-installation-guide/" >installation guide</a>, we can proceed with quickly enabling this. First we&#8217;ll copy our configuration file over to the Asterisk directory:</p>
<pre class="code"><code>cp /usr/src/asterisk-addons/configs/cdr_mysql.conf.sample /etc/asterisk/cdr_mysql.conf</code></pre>
<p>Once this is complete, we&#8217;ll edit to to match the database settings for our asterisk database:</p>
<pre class="code"><code>[global]
hostname=localhost
dbname=asterisk
password=yourpassword
user=asterisk
loguniqueid=yes</code></pre>
<p>And now we setup our tables within the database&#8230;</p>
<pre class="code"><code>CREATE TABLE `cdr` (
`calldate` datetime NOT NULL default '0000-00-00 00:00:00',
`clid` varchar(80) NOT NULL default '',
`src` varchar(80) NOT NULL default '',
`dst` varchar(80) NOT NULL default '',
`dcontext` varchar(80) NOT NULL default '',
`channel` varchar(80) NOT NULL default '',
`dstchannel` varchar(80) NOT NULL default '',
`lastapp` varchar(80) NOT NULL default '',
`lastdata` varchar(80) NOT NULL default '',
`duration` int(11) NOT NULL default '0',
`billsec` int(11) NOT NULL default '0',
`disposition` varchar(45) NOT NULL default '',
`amaflags` int(11) NOT NULL default '0',
`accountcode` varchar(20) NOT NULL default '',
`userfield` varchar(255) NOT NULL default '',
</code><code>`uniqueid` varchar(100) NOT NULL default ''</code>
<code>);

ALTER TABLE `cdr` ADD INDEX ( `calldate` );
ALTER TABLE `cdr` ADD INDEX ( `dst` );
ALTER TABLE `cdr` ADD INDEX ( `accountcode` );</code></pre>
<p>Now just reload Asterisk from the Asterisk Cli:</p>
<pre class="code"><code>reload</code></pre>
<p>You&#8217;re done! Now you can write applications to query the database for the data you need. I&#8217;ll include some examples of this shortly.</p>
]]></content:encoded>
			<wfw:commentRss>http://hostseries.com/asterisk-cdr-logging-in-mysql/feed/</wfw:commentRss>
		</item>
		<item>
		<title>AgentCallBackLogin Alternative</title>
		<link>http://hostseries.com/agentcallbacklogin-alternative/</link>
		<comments>http://hostseries.com/agentcallbacklogin-alternative/#comments</comments>
		<pubDate>Tue, 01 Jan 2008 02:12:36 +0000</pubDate>
		<dc:creator>Author</dc:creator>
		
		<category><![CDATA[Asterisk PBX]]></category>

		<guid isPermaLink="false">http://hostseries.com/agentcallbacklogin-alternative/</guid>
		<description><![CDATA[Compared to my other articles, this one is a bit more indepth. I&#8217;m sorry for that. I just finally found a workaround to a world of pain. If you are a user of the AgentCallBackLogin dialplan application, then you are probably aware that it&#8217;s set to be depreciated come version 1.6 of Asterisk. This is [...]]]></description>
			<content:encoded><![CDATA[<p>Compared to my other articles, this one is a bit more indepth. I&#8217;m sorry for that. I just finally found a workaround to a world of pain. If you are a user of the AgentCallBackLogin dialplan application, then you are probably aware that it&#8217;s set to be depreciated come version 1.6 of Asterisk. This is a major shame, as it&#8217;s a useful application especially to call centers. The guys are Digium said that everything can be done from the dialplan. And while that is true, they fail to give us any &#8220;guidance&#8221; in getting this setup. There was a doc located in /doc/queues-with-callback-members.txt  - But in order to use this guide, you basically have to move to a new way of writing your extensions, that is via extensions.ael.   AEL is great, and makes things easy to keep organized. But let&#8217;s face it, we hate too much change at once.   So I&#8217;ve done ALOT of research into the alternative for AgentCallBackLogin, and how to do it, with very little pain.</p>
<p><span id="more-30"></span>The major advantage of AgentCallBackLogin, is that each agent logs in to the system, set what phone they are sitting at, and start receiving calls from the queue. My method makes use of AstDB, the voicemail.conf and a few dialplan applications.   I make use of the voicemail.conf to setup each agent, and with a PIN or password.  So here&#8217;s my voicemail.conf:</p>
<pre><code>[agent]
1050 =&gt; 1234,Robert,agents@hostseries.com,attach=yes|saycid=yes|envelope=yes|delete=yes|nextaftercmd=no</code></pre>
<p>Within my extensions.conf I created the agent login and logout script and call back:</p>
<pre><code>[internal]
exten =&gt; 701,1,VMAuthenticate(@agent|)
exten =&gt; 701,n,AddQueueMember(SALES|local/${AUTH_MAILBOX}@agents/n)
exten =&gt; 701,n,AddQueueMember(SUPPORT|local/${AUTH_MAILBOX}@agents/n)
exten =&gt; 701,n,Read(AGENT_SIP|agent-newlocation)
exten =&gt; 701,n,Set(DB(agent_sip/${AUTH_MAILBOX})=${AGENT_SIP})
exten =&gt; 701,n,Playback(agent-loginok)
exten =&gt; 701,n,Playback(goodbye)
exten =&gt; 701,n,Hangup

exten =&gt; 702,1,VMAuthenticate(@agent|)
exten =&gt; 702,n,RemoveQueueMember(SALES|local/${AUTH_MAILBOX}@agents/n)
exten =&gt; 702,n,RemoveQueueMember(SUPPORT|local/${AUTH_MAILBOX}@agents/n)
exten =&gt; 702,n,Set(oldvar=${DB_DELETE(agent_sip/${AUTH_MAILBOX})})
exten =&gt; 702,n,Playback(agent-loggedoff)
exten =&gt; 702,n,Playback(goodbye)
exten =&gt; 702,n,Hangup

[agents]
exten =&gt; 1050,1,Set(AGENT_SIP=${DB(agent_sip/1050)})
exten =&gt; 1050,n,Dial(SIP/${AGENT_SIP})</code></pre>
<p>Extension 701 is what logs the agent in. VMAuthenticate prompts them for their agent number, and then their PIN or password, which is from the voicemail.conf. Then they are added to the Queue, with the callback being an extension within another context (local/1050@agents/n).  We then READ the new &#8220;location&#8221;, which we enter into the AstDB for agent 1050.   You will notice when the queue dials 1050@agents it pulls the data from AstDB, to know which SIP extension the agent is sitting at. Extension 702 is how the agent logs out of course. It will remove the agent from the Queues, and delete the AstDB entry.</p>
<p>So there we have it, a seemingly easy AgentCallBackLogin Alternative. Why couldn&#8217;t the guys at Digium give us some enlightenment on this? Or why couldn&#8217;t they make a replacement for AgentCallBackLogin? We&#8217;ll never know. Maybe we&#8217;ll see something in the future. In the meantime, I hope I created something that is useful.</p>
]]></content:encoded>
			<wfw:commentRss>http://hostseries.com/agentcallbacklogin-alternative/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Asterisk - Realtime Installation Guide</title>
		<link>http://hostseries.com/asterisk-realtime-installation-guide/</link>
		<comments>http://hostseries.com/asterisk-realtime-installation-guide/#comments</comments>
		<pubDate>Fri, 23 Nov 2007 17:55:40 +0000</pubDate>
		<dc:creator>Author</dc:creator>
		
		<category><![CDATA[Asterisk PBX]]></category>

		<guid isPermaLink="false">http://hostseries.com/asterisk-realtime-installation-guide/</guid>
		<description><![CDATA[By default, you rely heavily on Asterisk .conf file for creating your dialplans, iax and sip users and peers, as well as voicemail users. And after making changes to the configuration files, you have to reload Asterisk to apply them. However, the guys at Asterisk have made it easier. With Asterisk Realtime, you can add [...]]]></description>
			<content:encoded><![CDATA[<p>By default, you rely heavily on Asterisk .conf file for creating your dialplans, iax and sip users and peers, as well as voicemail users. And after making changes to the configuration files, you have to reload Asterisk to apply them. However, the guys at Asterisk have made it easier. With Asterisk Realtime, you can add new users and modify your dialplans on the fly. Everything is neatly stored in a database, and loaded on the fly. So in this article, we will discuss how to get started so that you can make use of Asterisk Realtime.<br />
<span id="more-29"></span><br />
You are going to begin by installing Asterisk. You can check out my quick install guide <a href="http://hostseries.com/asterisk-my-quick-installation-guide/" >here.</a><br />
Once you have that all complete, you will want to make sure that MYSQL is running. So we can start it by issuing the following command from ssh:</p>
<pre class="code"><code>/etc/init.d/mysqld start</code></pre>
<p>We need to create our Asterisk database, and setup our tables now, from the mysql command line:</p>
<pre class="code"><code>CREATE DATABASE asterisk;
GRANT ALL PRIVILEGES ON asterisk.* TO 'asterisk'@'localhost' IDENTIFIED BY 'yourpassword' WITH GRANT OPTION;</code></pre>
<p>A table for your sip users and peers:</p>
<pre class="code"><code>
CREATE TABLE `asterisk`.`sip_buddies` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(80) NOT NULL default '',
`accountcode` varchar(20) default NULL,
`amaflags` varchar(7) default NULL,
`callgroup` varchar(10) default NULL,
`callerid` varchar(80) default NULL,
`canreinvite` char(3) default 'yes',
`context` varchar(80) default NULL,
`defaultip` varchar(15) default NULL,
`dtmfmode` varchar(7) default NULL,
`fromuser` varchar(80) default NULL,
`fromdomain` varchar(80) default NULL,
`fullcontact` varchar(80) default NULL,
`host` varchar(31) NOT NULL default '',
`insecure` varchar(20) default NULL,
`language` char(2) default NULL,
`mailbox` varchar(50) default NULL,
`md5secret` varchar(80) default NULL,
`nat` varchar(5) NOT NULL default 'no',
`deny` varchar(95) default NULL,
`permit` varchar(95) default NULL,
`mask` varchar(95) default NULL,
`pickupgroup` varchar(10) default NULL,
`port` varchar(5) NOT NULL default '',
`qualify` char(3) default NULL,
`restrictcid` char(1) default NULL,
`rtptimeout` char(3) default NULL,
`rtpholdtimeout` char(3) default NULL,
`secret` varchar(80) default NULL,
`type` varchar(6) NOT NULL default 'friend',
`username` varchar(80) NOT NULL default '',
`disallow` varchar(100) default 'all',
`allow` varchar(100) default 'g729;ilbc;gsm;ulaw;alaw',
`musiconhold` varchar(100) default NULL,
`regseconds` int(11) NOT NULL default '0',
`ipaddr` varchar(15) NOT NULL default '',
`regexten` varchar(80) NOT NULL default '',
`cancallforward` char(3) default 'yes',
PRIMARY KEY  (`id`),
UNIQUE KEY `name` (`name`),
KEY `name_2` (`name`)
) ENGINE=MyISAM;</code></pre>
<p>And a table for extensions - the backbone of Asterisk:</p>
<pre class="code"><code>CREATE TABLE `asterisk`.`extensions` (
`id` int(11) NOT NULL auto_increment,
`context` varchar(20) NOT NULL default '',
`exten` varchar(20) NOT NULL default '',
`priority` tinyint(4) NOT NULL default '0',
`app` varchar(20) NOT NULL default '',
`appdata` varchar(128) NOT NULL default '',
PRIMARY KEY  (`context`,`exten`,`priority`),
KEY `id` (`id`)
) ENGINE=MyISAM;</code></pre>
<p>And a table for the voicemail users:</p>
<pre class="code"><code>CREATE TABLE `asterisk`.`voicemessages` (
`id` int(11) NOT NULL auto_increment,
`msgnum` int(11) NOT NULL default '0',
`dir` varchar(80) default '',
`context` varchar(80) default '',
`macrocontext` varchar(80) default '',
`callerid` varchar(40) default '',
`origtime` varchar(40) default '',
`duration` varchar(20) default '',
`mailboxuser` varchar(80) default '',
`mailboxcontext` varchar(80) default '',
`recording` longblob,
PRIMARY KEY  (`id`),
KEY `dir` (`dir`)
) ENGINE=MyISAM;</code></pre>
<p>And the table for queues:</p>
<pre class="code"><code>CREATE TABLE </code><code>`asterisk`.</code><code>`queues` (
  `name` varchar(128) NOT NULL,
  `musiconhold` varchar(128) default NULL,
  `announce` varchar(128) default NULL,
  `context` varchar(128) default NULL,
  `timeout` int(11) default NULL,
  `monitor_type` varchar(50) NOT NULL,
  `monitor_format` varchar(128) default NULL,
  `queue_youarenext` varchar(128) default NULL,
  `queue_thereare` varchar(128) default NULL,
  `queue_callswaiting` varchar(128) default NULL,
  `queue_holdtime` varchar(128) default NULL,
  `queue_minutes` varchar(128) default NULL,
  `queue_seconds` varchar(128) default NULL,
  `queue_lessthan` varchar(128) default NULL,
  `queue_thankyou` varchar(128) default NULL,
  `queue_reporthold` varchar(128) default NULL,
  `announce_frequency` int(11) default NULL,
  `announce_round_seconds` int(11) default NULL,
  `announce_holdtime` varchar(128) default NULL,
  `retry` int(11) default NULL,
  `wrapuptime` int(11) default NULL,
  `maxlen` int(11) default NULL,
  `servicelevel` int(11) default NULL,
  `strategy` varchar(128) default NULL,
  `joinempty` varchar(128) default NULL,
  `leavewhenempty` varchar(128) default NULL,
  `eventmemberstatus` varchar(4) default NULL,
  `eventwhencalled` varchar(4) default NULL,
  `reportholdtime` tinyint(1) default NULL,
  `memberdelay` int(11) default NULL,
  `weight` int(11) default NULL,
  `timeoutrestart` tinyint(1) default NULL,
  `periodic_announce` varchar(50) default NULL,
  `periodic_announce_frequency` int(11) default NULL,
  `ringinuse` tinyint(1) default NULL,
  PRIMARY KEY  (`name`)
) ENGINE=MyISAM
</code></pre>
<p>And the queue members:</p>
<pre class="code"><code>CREATE TABLE </code><code>`asterisk`.</code><code>`queue_members` (
`uniqueid` int(10) unsigned NOT NULL auto_increment,
`membername` varchar(40) default NULL,
`queue_name` varchar(128) default NULL,
`interface` varchar(128) default NULL,
`penalty` int(11) default NULL,
`paused` tinyint(1) default NULL,
PRIMARY KEY  (`uniqueid`),
UNIQUE KEY `queue_interface` (`queue_name`,`interface`)
) ENGINE=MyISAM</code></pre>
<p>So now we need to make the needed configuration changes so Asterisk knows to use the database. Assuming that you followed my installation guide (or that you have asterisk-addons installed) we need to copy the res_mysql.conf file, so:</p>
<pre class="code"><code>cd /usr/src/asterisk-addons/configs/
cp res_mysql.conf.sample /etc/asterisk/res_mysql.conf</code></pre>
<p>And we can edit that new /etc/asterisk/res_mysql.conf file to show your database settings:</p>
<pre class="code"><code>[general]
dbhost = localhost
dbname = asterisk
dbuser = asterisk
dbpass = yourpassword
dbport = 3306
dbsock = /var/lib/mysql/mysql.sock</code></pre>
<p>Next we&#8217;ll edit the /etc/asterisk/extconfig.conf to show as follows:</p>
<pre class="code"><code>[settings]
sipusers =&gt; mysql,asterisk,sip_buddies
sippeers =&gt; mysql,asterisk,sip_buddies
extensions =&gt; mysql,asterisk,extensions
voicemail =&gt; mysql,asterisk,voicemessages
queues =&gt; mysql,asterisk,queues
queue_members =&gt; mysql,asterisk,queue_members</code></pre>
<p>For extensions to be loaded of the database, we need to edit the /etc/asterisk/extensions.conf file as well. Each context that will be getting their information from the database, will need the following: switch =&gt; Realtime/@extensions  - For example:</p>
<pre class="code"><code>[incoming]

switch =&gt; Realtime/@extensions</code></pre>
<p></p>
<p>Restart Asterisk and you&#8217;re all set. Now you just need to load your data into the database.  Let&#8217;s have a look at an example of that. So here&#8217;s my extension:</p>
<pre class="code"><code>exten =&gt; 105,1,Dial(SIP/105)</code></pre>
<p>Here&#8217;s my database insert for the  above extension:</p>
<pre class="code"><code>INSERT into extensions (id, context, exten, priority, app, appdata)

VALUES ('','incoming','105','1','Dial','SIP/105');</code></pre>
<p>And for an example of my sip user, I had the following in my sip.conf at one time:</p>
<pre class="code"><code>[105]
type=friend
context=internal
callerid=105
host=dynamic
secret=password
canreinvite=no
insecure=port,invite
allow=all
nat=yes</code></pre>
<p>Here is my insert code for the database:</p>
<pre class="code"><code>INSERT into sip_buddies (id, name, callerid, context, canreinvite, insecure, type, host, secret, allow, nat)

VALUES ('','105','Robert','incoming','no','port,invite','friend','dynamic','bob123','all','yes');</code></pre>
<p>I hope this example works well for you. I got it working fairly easy. It is important to note, that I haven&#8217;t been able to successfully setup the connection I have with my carrier in the realtime database. So I have to define those in my sip.conf or iax.conf  - which isn&#8217;t a big deal. Another note is that any general conf settings, I always set those within the conf file, instead of within the realtime database.</p>
]]></content:encoded>
			<wfw:commentRss>http://hostseries.com/asterisk-realtime-installation-guide/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Web Hosting Overselling - A Necessary Evil?</title>
		<link>http://hostseries.com/web-hosting-overselling-a-necessary-evil/</link>
		<comments>http://hostseries.com/web-hosting-overselling-a-necessary-evil/#comments</comments>
		<pubDate>Thu, 15 Nov 2007 17:44:44 +0000</pubDate>
		<dc:creator>Author</dc:creator>
		
		<category><![CDATA[Hosting]]></category>

		<guid isPermaLink="false">http://hostseries.com/web-hosting-overselling-a-necessary-evil/</guid>
		<description><![CDATA[What is Overselling?
This is a great question. And it&#8217;s important that a consumer know what overselling is. Overselling is basically the practice of selling more hard drive space, bandwidth, and other resources that the web host has. Why would a webhost do this? Simple - to maximize profits.
As an example: A webhost may have a [...]]]></description>
			<content:encoded><![CDATA[<p><strong>What is Overselling?</strong><br />
This is a great question. And it&#8217;s important that a consumer know what overselling is. Overselling is basically the practice of selling more hard drive space, bandwidth, and other resources that the web host has. Why would a webhost do this? Simple - to maximize profits.<span id="more-26"></span></p>
<p>As an example: A webhost may have a server which has a 250GB hard drive, and let&#8217;s say dual Xeon 2.0ghz, 2gb ram.<br />
And they sell a hosting plan with 5GB Space, 100GB Bandwidth.  So realistically you would only be able to put 50 accounts on the server, just because of hard drive limitations. However, the webhost might put 300-500 accounts on this server, because they know that most customers aren&#8217;t going to use the full 5GB alotted to them. That&#8217;s just one area of overselling.</p>
<p></p>
<p><strong>What&#8217;s the big deal?</strong><br />
Other than the fact that it&#8217;s &#8220;dishonest&#8221; in a sense - there isn&#8217;t a problem. That is, unless the webhosting company oversells too much. There&#8217;s more than just disk space to consider when a webhost oversells. CPU and ram should be considered, as well as the amount of network bandwidth that&#8217;s available. So if done right, overselling can be to the advantage of the consumer and the webhost. Consumers usually get alot more bang for their buck (whether they use them or not) and the webhost can be more profitable.  Unfortunately, alot of webhosts don&#8217;t properly oversell, and it ends up costing the customer - mainly in performance, because the server ends up being overloaded.</p>
<p><strong>Is Overselling Okay?</strong><br />
This is a long debated question. And I&#8217;m sure that it will continue to be debated as long as the hosting industry exists.<br />
My personal opinion&#8230; Yes it&#8217;s good to give customers loads of &#8220;stuff&#8221; with their account. Knowing that most customers don&#8217;t use the resources that they are given, doesn&#8217;t change the fact that you are &#8220;giving&#8221; them someone that you can&#8217;t reasonably give them. And knowing that customers don&#8217;t use the resources given - why give it to them? Why give them empty promises?  Give them a little more resources then the average user uses, and give them over bundled services to make their experience good. And educate customers about overselling.</p>
<p>I hope this article has provided some incite into overselling. I would love to hear your feedback!</p>
]]></content:encoded>
			<wfw:commentRss>http://hostseries.com/web-hosting-overselling-a-necessary-evil/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Types of Web Hosting</title>
		<link>http://hostseries.com/types-of-web-hosting/</link>
		<comments>http://hostseries.com/types-of-web-hosting/#comments</comments>
		<pubDate>Tue, 13 Nov 2007 17:34:22 +0000</pubDate>
		<dc:creator>Author</dc:creator>
		
		<category><![CDATA[Hosting]]></category>

		<guid isPermaLink="false">http://hostseries.com/types-of-web-hosting/</guid>
		<description><![CDATA[What is Web Hosting?
So if you don&#8217;t already know what web hosting is, you are probably wondering - What is it?
To explain it in simple terms - it&#8217;s a service that allows you to put your website on the internet.
Now to explain it in more detail - The web hosting company maintains a network of [...]]]></description>
			<content:encoded><![CDATA[<p><strong>What is Web Hosting?</strong><br />
So if you don&#8217;t already know what web hosting is, you are probably wondering - What is it?<br />
To explain it in simple terms - it&#8217;s a service that allows you to put your website on the internet.<br />
Now to explain it in more detail - The web hosting company maintains a network of servers (or computers) which have a nice fast internet connection. These servers have software running on them, which allow them to divide up the servers hard drive space (along with other resources) and offer them to its customers. As a customer, you are buying an allotted amount of resources. And there are different levels of hosting, which will be discussed below.<span id="more-25"></span></p>
<p><strong>Types of Web Hosting</strong><br />
Okay so now we can discuss the types of hosting.</p>
<ul>
<li><strong>Shared Hosting</strong> - This is probably the most common form of hosting found. This is basically as mentioned above. You are sharing the server with many other users. And for most users/customers this type if hosting is sufficient.  Problems that you may run into with shared hosting include (but not limited to):<br />
Spam Complaints - Because you are sharing the server with other users, the server might be blacklisted by ISP&#8217;s for spamming, even if you didn&#8217;t send the spam. It might be another user on the server.<br />
Slower Performance - Again, if there&#8217;s one user that&#8217;s using alot of resources on the server, it can effect the rest on the server.</li>
<li><a href="http://www.webhostingsearch.com/reseller-web-hosting.php" onclick="javascript:urchinTracker ('/outbound/article/www.webhostingsearch.com');"><strong>Reseller Hosting</strong></a> - This is a step up from the shared hosting account. You are still sharing the server with many other users. However, with the reseller account you can host more than 1 domain, and sometimes give each domain their own control panel. As a reseller, you can control how much resources is alloted to each of the domains/accounts under your reseller account.</li>
<li><strong>VPS Hosting</strong> - A VPS means &#8220;Virtual Private Server.&#8221; They are also called a VDS. With a VPS, you are sharing a server with fewer users than you would in a shared or reseller hosting package. With a VPS, it is like having your own mini server. You generally have full root access, and can configure and install things as you want, without effecting other users sharing the VPS Node (server.)</li>
<li><a href="http://www.webhostingsearch.com/dedicated-server.php" onclick="javascript:urchinTracker ('/outbound/article/www.webhostingsearch.com');"><strong>Dedicated Hosting</strong></a> - As the name implies, it&#8217;s dedicated. In this setting, you aren&#8217;t sharing the server with anyone. You have full root access to the server, and can take full advantage of the resources purchased.</li>
<li><strong>Colocation Hosting</strong> - With colocation, you own the hardware (servers, routers, switches, etc.) You simply are using the network of the provider (their power, internet connection, AC, etc) This can be a cost effective means of setting up your server. But keep in mind, that the initial cost of the hardware can be expensive.</li>
</ul>
<p>The above are the basic types of hosting. Over the years, new forms of the above have been born. For example, from Dedicated and Colo Hosting you will find Managed Hosting - where the provider manages the server for you. You&#8217;ll also find Grid Hosting and Cluster Hosting, which is typically a more redundant than traditional dedicated and colocation hosting. You&#8217;ll also find: image hosting, file hosting, blog hosting, forum hosting, and so much more. These are all just different variations of the traditional hosting types.</p>
<p>I hope you found this article useful. It&#8217;s important that when you are searching for hosting, you seriously consider your needs. Is uptime the most important thing to you? Can&#8217;t afford to not have your email? Then you might want to consider a dedicated solution. Or perhaps a backup mail solution. Whatever the case, make sure you do plenty of research on the hosting company that you choose. Make sure they have good reviews and from more than one source.</p>
<p>You can find reviews of Reseller Hosting and Dedicated Hosting at <a href="http://webhostingsearch.com" onclick="javascript:urchinTracker ('/outbound/article/webhostingsearch.com');">webhostingsearch.com</a></p>
<p></p>
]]></content:encoded>
			<wfw:commentRss>http://hostseries.com/types-of-web-hosting/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
