<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: AgentCallBackLogin Alternative</title>
	<atom:link href="http://bahjons.com/stuff/agentcallbacklogin-alternative/feed" rel="self" type="application/rss+xml" />
	<link>http://bahjons.com/stuff/agentcallbacklogin-alternative</link>
	<description></description>
	<lastBuildDate>Tue, 13 Jul 2010 13:58:40 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
	<item>
		<title>By: Connecting Two Asterisk Servers via SIP &#124; bahjons.com</title>
		<link>http://bahjons.com/stuff/agentcallbacklogin-alternative/comment-page-1#comment-166</link>
		<dc:creator>Connecting Two Asterisk Servers via SIP &#124; bahjons.com</dc:creator>
		<pubDate>Wed, 19 May 2010 14:37:37 +0000</pubDate>
		<guid isPermaLink="false">http://hostseries.com/agentcallbacklogin-alternative/#comment-166</guid>
		<description>[...] (I&#8217;m assuming that you have your agents context created based on my article discussed here.)  We also have a &#8216;remote&#8217; context which is what makes the connection to ServerB if we [...]</description>
		<content:encoded><![CDATA[<p>[...] (I&#8217;m assuming that you have your agents context created based on my article discussed here.)  We also have a &#8216;remote&#8217; context which is what makes the connection to ServerB if we [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Solving:Transferring Calls from Queues, Agents stay busy &#124; bahjons.com</title>
		<link>http://bahjons.com/stuff/agentcallbacklogin-alternative/comment-page-1#comment-161</link>
		<dc:creator>Solving:Transferring Calls from Queues, Agents stay busy &#124; bahjons.com</dc:creator>
		<pubDate>Fri, 14 May 2010 18:01:42 +0000</pubDate>
		<guid isPermaLink="false">http://hostseries.com/agentcallbacklogin-alternative/#comment-161</guid>
		<description>[...] it is&#8230; basically you have agents (whether you are using AgentCallBackLogin, or a setup like my alternative.)  The problem was that if the Agent transferred the call to another agent, Asterisk qould still [...]</description>
		<content:encoded><![CDATA[<p>[...] it is&#8230; basically you have agents (whether you are using AgentCallBackLogin, or a setup like my alternative.)  The problem was that if the Agent transferred the call to another agent, Asterisk qould still [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: AgentLogin powered by MySQL &#124; bahjons.com</title>
		<link>http://bahjons.com/stuff/agentcallbacklogin-alternative/comment-page-1#comment-158</link>
		<dc:creator>AgentLogin powered by MySQL &#124; bahjons.com</dc:creator>
		<pubDate>Fri, 14 May 2010 17:56:57 +0000</pubDate>
		<guid isPermaLink="false">http://hostseries.com/agentcallbacklogin-alternative/#comment-158</guid>
		<description>[...] a previous article, I showed an alternative method of AgentCallBackLogin. In that example, the agents were [...]</description>
		<content:encoded><![CDATA[<p>[...] a previous article, I showed an alternative method of AgentCallBackLogin. In that example, the agents were [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: AgentCallBackLogin() ? Asterisk 1.6.x ????? &#124; Asterisk PBX HK</title>
		<link>http://bahjons.com/stuff/agentcallbacklogin-alternative/comment-page-1#comment-135</link>
		<dc:creator>AgentCallBackLogin() ? Asterisk 1.6.x ????? &#124; Asterisk PBX HK</dc:creator>
		<pubDate>Thu, 29 Apr 2010 03:26:02 +0000</pubDate>
		<guid isPermaLink="false">http://hostseries.com/agentcallbacklogin-alternative/#comment-135</guid>
		<description>[...] ??:http://hostseries.com/agentcallbacklogin-alternative/ [...]</description>
		<content:encoded><![CDATA[<p>[...] ??:http://hostseries.com/agentcallbacklogin-alternative/ [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Author</title>
		<link>http://bahjons.com/stuff/agentcallbacklogin-alternative/comment-page-1#comment-134</link>
		<dc:creator>Author</dc:creator>
		<pubDate>Thu, 12 Nov 2009 14:30:02 +0000</pubDate>
		<guid isPermaLink="false">http://hostseries.com/agentcallbacklogin-alternative/#comment-134</guid>
		<description>Hi Jacques,

You&#039;re incorrect in your statement. The &quot;\n&quot; at the end of the Local extension causes the agent to report to the queue as busy or &#039;in use&#039; when it&#039;s on a call. Yes, you will still get the error that the agent was &#039;not in use&#039; - but it quickly will report them as busy. However, this causes other issues. For example, with the &quot;\n&quot; at the end, the caller can&#039;t do an attended transfer. Blind transfers work just fine. Even so, with v1.6.x (and via a backport in 1.4.x) there is a state_interface that will allow you to bypass this. I&#039;ve explained the state_interface here: http://hostseries.com/solvingtransferring-calls-from-queues-agents-stay-busy/ -- However I have had some issues with getting it to function 100% of the time on v1.4.26.x

I&#039;m glad that you have found a solution that works for you. However, you&#039;re solution still has one major problem. You are still using AgentCallBackLogin, which has been removed in v1.6.x, so you are only causing yourself more headache down the road when you go to upgrade.

I hope that helps.</description>
		<content:encoded><![CDATA[<p>Hi Jacques,</p>
<p>You&#8217;re incorrect in your statement. The &#8220;\n&#8221; at the end of the Local extension causes the agent to report to the queue as busy or &#8216;in use&#8217; when it&#8217;s on a call. Yes, you will still get the error that the agent was &#8216;not in use&#8217; &#8211; but it quickly will report them as busy. However, this causes other issues. For example, with the &#8220;\n&#8221; at the end, the caller can&#8217;t do an attended transfer. Blind transfers work just fine. Even so, with v1.6.x (and via a backport in 1.4.x) there is a state_interface that will allow you to bypass this. I&#8217;ve explained the state_interface here: <a href="http://hostseries.com/solvingtransferring-calls-from-queues-agents-stay-busy/" rel="nofollow">http://hostseries.com/solvingtransferring-calls-from-queues-agents-stay-busy/</a> &#8212; However I have had some issues with getting it to function 100% of the time on v1.4.26.x</p>
<p>I&#8217;m glad that you have found a solution that works for you. However, you&#8217;re solution still has one major problem. You are still using AgentCallBackLogin, which has been removed in v1.6.x, so you are only causing yourself more headache down the road when you go to upgrade.</p>
<p>I hope that helps.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: jacques robinson</title>
		<link>http://bahjons.com/stuff/agentcallbacklogin-alternative/comment-page-1#comment-133</link>
		<dc:creator>jacques robinson</dc:creator>
		<pubDate>Wed, 11 Nov 2009 15:13:24 +0000</pubDate>
		<guid isPermaLink="false">http://hostseries.com/agentcallbacklogin-alternative/#comment-133</guid>
		<description>Running asterisk 1.4.24

This approach to working around AgentCallbackLogin has one very serious issue: AgentCallbackLogin not only handles the agent login functionality but includes the needed code to detect the device state.  Therefore when you remove it from the equation, you can add members to the queue and use alternatives [whether a VM workaround or a robust database solution] only to find that the extensions on the queue always show up \&quot;not in use\&quot; even when agents are talking on them.  This has profound consequences since the queue sees all extensions as available and only when it rings the extension does it realize the queue is busy.  From the agents point of view, this generally means that while they are talking to a customer, the \&quot;second line\&quot; on the phone is ringing all the time with new calls.  From the system point of view, it is wasting huge amounts of time and resources ringing extensions that it should know are already in use.

I have found that the best workaround using a database lookup for agent authentication is to then perform the AddQueueMember and then follow that with a call to AgentCallBackLogin with a dummy agent but the correct extension.  This then allows the extension to be accurately montored for its device state, stopping the \&quot;second line ring\&quot; and wasted motion by the queue itself.</description>
		<content:encoded><![CDATA[<p>Running asterisk 1.4.24</p>
<p>This approach to working around AgentCallbackLogin has one very serious issue: AgentCallbackLogin not only handles the agent login functionality but includes the needed code to detect the device state.  Therefore when you remove it from the equation, you can add members to the queue and use alternatives [whether a VM workaround or a robust database solution] only to find that the extensions on the queue always show up \&#8221;not in use\&#8221; even when agents are talking on them.  This has profound consequences since the queue sees all extensions as available and only when it rings the extension does it realize the queue is busy.  From the agents point of view, this generally means that while they are talking to a customer, the \&#8221;second line\&#8221; on the phone is ringing all the time with new calls.  From the system point of view, it is wasting huge amounts of time and resources ringing extensions that it should know are already in use.</p>
<p>I have found that the best workaround using a database lookup for agent authentication is to then perform the AddQueueMember and then follow that with a call to AgentCallBackLogin with a dummy agent but the correct extension.  This then allows the extension to be accurately montored for its device state, stopping the \&#8221;second line ring\&#8221; and wasted motion by the queue itself.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: HostSeries &#187; Solving:Transferring Calls from Queues, Agents stay busy</title>
		<link>http://bahjons.com/stuff/agentcallbacklogin-alternative/comment-page-1#comment-132</link>
		<dc:creator>HostSeries &#187; Solving:Transferring Calls from Queues, Agents stay busy</dc:creator>
		<pubDate>Sat, 24 Oct 2009 14:04:16 +0000</pubDate>
		<guid isPermaLink="false">http://hostseries.com/agentcallbacklogin-alternative/#comment-132</guid>
		<description>[...] it is&#8230; basically you have agents (whether you are using AgentCallBackLogin, or a setup like my alternative.)  The problem was that if the Agent transferred the call to another agent, Asterisk qould still [...]</description>
		<content:encoded><![CDATA[<p>[...] it is&#8230; basically you have agents (whether you are using AgentCallBackLogin, or a setup like my alternative.)  The problem was that if the Agent transferred the call to another agent, Asterisk qould still [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Author</title>
		<link>http://bahjons.com/stuff/agentcallbacklogin-alternative/comment-page-1#comment-131</link>
		<dc:creator>Author</dc:creator>
		<pubDate>Wed, 21 Oct 2009 16:55:27 +0000</pubDate>
		<guid isPermaLink="false">http://hostseries.com/agentcallbacklogin-alternative/#comment-131</guid>
		<description>Hi Paul,

This system is for allowing agents to login and logout of the queue and receive calls. To force the “Agent” Number as the source for the CDR on outbound calls - I’m not sure that’s easily possible. However, for outbound calls, you can always write your outbound dialplans to input that details for the outbound call to a database. I like the CDR, but there’s alot of data that I would like to have that isn’t there. Here’s a quick outbound dialplan:



&lt;blockquote&gt;   [out-bound]
    exten =&gt; main,1,VMAuthenticate(@agent&#124;)
    exten =&gt; main,2,Set(agent=${AUTH_MAILBOX})
    exten =&gt; main,3,set(starttime=${EPOCH})

    exten =&gt; main,4,Read(phonenumber&#124;/home/Sounds/outbound/phonenumber&#124;n&#124;2&#124;5)
    exten =&gt; main,5,Dial(SIP/${phonenumber}@outbound-trunk,60)
    exten =&gt; main,6,Congestion()
    exten =&gt; main,103,Busy()

    exten =&gt; h,1,set(endtime=${EPOCH})
    exten =&gt; h,2,NoOp(Started - ${starttime} - Ended - ${endtime})
    exten =&gt; h,3,MYSQL(Connect connid localhost asterisk_user yourpassword asterisk_db)
    exten =&gt; h,4,MYSQL(Query resultid ${connid} INSERT\ INTO\ outbound\ VALUES\ (’\&#039;\’, \’${phonenumber}\’, \’${starttime}\’, \’${endtime}\’, \’${agent}\’))
    exten =&gt; h,5,MYSQL(Disconnect ${connid}) &lt;/blockquote&gt;



The above example is very rough. Consider the key elements:
1) Agent Authentication on all outbound calls. It’s requiring the same details that the agent enters when they login to the phones. This is added protection to prevent people from abusing the outbound service. At the sametime, you can capture the “Agent Number”.
2) Dialplan collects a start time of the call, and end time of the call. It also collects the phone number the Agent dialed.
3) All information is saved to a database. You can easily query that database for calls made by a certain agent, made during a certain time period, etc.

I hope that helps. Again, it’s very rough.

To get VMAuthenticate to play different audio prompts you can record the following file:
/var/lib/asterisk/sounds/vm-login.alaw (or .gsm)
And there are other vm-* sounds as well. You might want to record those to change behaviors. However, if you are overwriting these files, please keep in mind that if you upgrade Asterisk, it will overwrite these.

The above option will change the behavior or audio for the voicemail application. If you don’t want to do that, another option is simply not playing “Comedian Mail.” You can disable this within the VMAuthenticate application. The option is: ’s’ ….. so:


&lt;blockquote&gt;exten =&gt; main,1,VMAuthenticate(@agent&#124;s)
&lt;/blockquote&gt;


You might want to play your custom prompt for agent ID before that:


&lt;blockquote&gt;exten =&gt; main,1,Playback(/home/Sounds/enter-agent-id)
exten =&gt; main,2,VMAuthenticate(@agent&#124;s)&lt;/blockquote&gt;



I hope all of this helps.</description>
		<content:encoded><![CDATA[<p>Hi Paul,</p>
<p>This system is for allowing agents to login and logout of the queue and receive calls. To force the “Agent” Number as the source for the CDR on outbound calls &#8211; I’m not sure that’s easily possible. However, for outbound calls, you can always write your outbound dialplans to input that details for the outbound call to a database. I like the CDR, but there’s alot of data that I would like to have that isn’t there. Here’s a quick outbound dialplan:</p>
<blockquote><p>   [out-bound]<br />
    exten => main,1,VMAuthenticate(@agent|)<br />
    exten => main,2,Set(agent=${AUTH_MAILBOX})<br />
    exten => main,3,set(starttime=${EPOCH})</p>
<p>    exten => main,4,Read(phonenumber|/home/Sounds/outbound/phonenumber|n|2|5)<br />
    exten => main,5,Dial(SIP/${phonenumber}@outbound-trunk,60)<br />
    exten => main,6,Congestion()<br />
    exten => main,103,Busy()</p>
<p>    exten => h,1,set(endtime=${EPOCH})<br />
    exten => h,2,NoOp(Started &#8211; ${starttime} &#8211; Ended &#8211; ${endtime})<br />
    exten => h,3,MYSQL(Connect connid localhost asterisk_user yourpassword asterisk_db)<br />
    exten => h,4,MYSQL(Query resultid ${connid} INSERT\ INTO\ outbound\ VALUES\ (’\&#8217;\’, \’${phonenumber}\’, \’${starttime}\’, \’${endtime}\’, \’${agent}\’))<br />
    exten => h,5,MYSQL(Disconnect ${connid}) </p></blockquote>
<p>The above example is very rough. Consider the key elements:<br />
1) Agent Authentication on all outbound calls. It’s requiring the same details that the agent enters when they login to the phones. This is added protection to prevent people from abusing the outbound service. At the sametime, you can capture the “Agent Number”.<br />
2) Dialplan collects a start time of the call, and end time of the call. It also collects the phone number the Agent dialed.<br />
3) All information is saved to a database. You can easily query that database for calls made by a certain agent, made during a certain time period, etc.</p>
<p>I hope that helps. Again, it’s very rough.</p>
<p>To get VMAuthenticate to play different audio prompts you can record the following file:<br />
/var/lib/asterisk/sounds/vm-login.alaw (or .gsm)<br />
And there are other vm-* sounds as well. You might want to record those to change behaviors. However, if you are overwriting these files, please keep in mind that if you upgrade Asterisk, it will overwrite these.</p>
<p>The above option will change the behavior or audio for the voicemail application. If you don’t want to do that, another option is simply not playing “Comedian Mail.” You can disable this within the VMAuthenticate application. The option is: ’s’ ….. so:</p>
<blockquote><p>exten => main,1,VMAuthenticate(@agent|s)
</p></blockquote>
<p>You might want to play your custom prompt for agent ID before that:</p>
<blockquote><p>exten => main,1,Playback(/home/Sounds/enter-agent-id)<br />
exten => main,2,VMAuthenticate(@agent|s)</p></blockquote>
<p>I hope all of this helps.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Author</title>
		<link>http://bahjons.com/stuff/agentcallbacklogin-alternative/comment-page-1#comment-130</link>
		<dc:creator>Author</dc:creator>
		<pubDate>Wed, 21 Oct 2009 16:51:09 +0000</pubDate>
		<guid isPermaLink="false">http://hostseries.com/agentcallbacklogin-alternative/#comment-130</guid>
		<description>Hi Paul,

Sorry for the delay.
The important thing to remember when using MYSQL queries within your dialplan is that you have to make sure you have the same number of columns in the dialplan as the table has. You have to still mention all columns in your dialplan, even if it’s blank. Otherwise, it won’t insert the data.

By the way, you can using find the error from the Asterisk CLi.</description>
		<content:encoded><![CDATA[<p>Hi Paul,</p>
<p>Sorry for the delay.<br />
The important thing to remember when using MYSQL queries within your dialplan is that you have to make sure you have the same number of columns in the dialplan as the table has. You have to still mention all columns in your dialplan, even if it’s blank. Otherwise, it won’t insert the data.</p>
<p>By the way, you can using find the error from the Asterisk CLi.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Paul B</title>
		<link>http://bahjons.com/stuff/agentcallbacklogin-alternative/comment-page-1#comment-129</link>
		<dc:creator>Paul B</dc:creator>
		<pubDate>Fri, 28 Aug 2009 14:52:51 +0000</pubDate>
		<guid isPermaLink="false">http://hostseries.com/agentcallbacklogin-alternative/#comment-129</guid>
		<description>Hi there, Me again!

I was looking at the login/out MySQL entry, for some strange reason it isn&#039;t actually updating (or Inserting) the data into the table...

I&#039;m reasonably sure I&#039;ve created the table correctly, it just doesn&#039;t seem to update the table...

Any ideas?</description>
		<content:encoded><![CDATA[<p>Hi there, Me again!</p>
<p>I was looking at the login/out MySQL entry, for some strange reason it isn&#8217;t actually updating (or Inserting) the data into the table&#8230;</p>
<p>I&#8217;m reasonably sure I&#8217;ve created the table correctly, it just doesn&#8217;t seem to update the table&#8230;</p>
<p>Any ideas?</p>
]]></content:encoded>
	</item>
</channel>
</rss>
