<?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://hostseries.com/agentcallbacklogin-alternative/feed/" rel="self" type="application/rss+xml" />
	<link>http://hostseries.com/agentcallbacklogin-alternative/</link>
	<description></description>
	<lastBuildDate>Tue, 24 Nov 2009 12:09:54 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Author</title>
		<link>http://hostseries.com/agentcallbacklogin-alternative/comment-page-1/#comment-1052</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-1052</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://hostseries.com/agentcallbacklogin-alternative/comment-page-1/#comment-1051</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-1051</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://hostseries.com/agentcallbacklogin-alternative/comment-page-1/#comment-1031</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-1031</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://hostseries.com/agentcallbacklogin-alternative/comment-page-1/#comment-1025</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-1025</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://hostseries.com/agentcallbacklogin-alternative/comment-page-1/#comment-1019</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-1019</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://hostseries.com/agentcallbacklogin-alternative/comment-page-1/#comment-1008</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-1008</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>
	<item>
		<title>By: Paul</title>
		<link>http://hostseries.com/agentcallbacklogin-alternative/comment-page-1/#comment-905</link>
		<dc:creator>Paul</dc:creator>
		<pubDate>Wed, 13 May 2009 19:01:55 +0000</pubDate>
		<guid isPermaLink="false">http://hostseries.com/agentcallbacklogin-alternative/#comment-905</guid>
		<description>Very useful stuff!  Now I do have a question :-)

After an &quot;Agent&quot; has logged in, and they make an outbound call, is there a way (easy one preferably!) to have Asterisk use the &quot;Agent&quot; Number as the source for the CDR?

Also, is there a way of getting VMAuthenticate to play different audio prompts? (I&#039;ve still got the &quot;Comedian Mail&quot; prompts!)

Think I&#039;ll bookmark your blog for future reference! :-)

Thanks &amp; Regards</description>
		<content:encoded><![CDATA[<p>Very useful stuff!  Now I do have a question <img src='http://hostseries.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>After an &#8220;Agent&#8221; has logged in, and they make an outbound call, is there a way (easy one preferably!) to have Asterisk use the &#8220;Agent&#8221; Number as the source for the CDR?</p>
<p>Also, is there a way of getting VMAuthenticate to play different audio prompts? (I&#8217;ve still got the &#8220;Comedian Mail&#8221; prompts!)</p>
<p>Think I&#8217;ll bookmark your blog for future reference! <img src='http://hostseries.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Thanks &amp; Regards</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Author</title>
		<link>http://hostseries.com/agentcallbacklogin-alternative/comment-page-1/#comment-894</link>
		<dc:creator>Author</dc:creator>
		<pubDate>Tue, 05 May 2009 00:57:05 +0000</pubDate>
		<guid isPermaLink="false">http://hostseries.com/agentcallbacklogin-alternative/#comment-894</guid>
		<description>Great to hear Erik. :-)</description>
		<content:encoded><![CDATA[<p>Great to hear Erik. <img src='http://hostseries.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Erik</title>
		<link>http://hostseries.com/agentcallbacklogin-alternative/comment-page-1/#comment-892</link>
		<dc:creator>Erik</dc:creator>
		<pubDate>Fri, 01 May 2009 14:37:34 +0000</pubDate>
		<guid isPermaLink="false">http://hostseries.com/agentcallbacklogin-alternative/#comment-892</guid>
		<description>Silly me I had the wrong authentication context defined in the VMAuthenticate() command. Thanks for the great writeup</description>
		<content:encoded><![CDATA[<p>Silly me I had the wrong authentication context defined in the VMAuthenticate() command. Thanks for the great writeup</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Erik</title>
		<link>http://hostseries.com/agentcallbacklogin-alternative/comment-page-1/#comment-891</link>
		<dc:creator>Erik</dc:creator>
		<pubDate>Fri, 01 May 2009 14:33:42 +0000</pubDate>
		<guid isPermaLink="false">http://hostseries.com/agentcallbacklogin-alternative/#comment-891</guid>
		<description>I\&#039;m unable to authenticate to with the VMAuthenticate command. The only thing I can think of is that I\&#039;m using the voicemail configuration from within a mysql database. Is there a seperate command or something that I need make this form of authentication work?

 Great writeup otherwise!

-Erik</description>
		<content:encoded><![CDATA[<p>I\&#8217;m unable to authenticate to with the VMAuthenticate command. The only thing I can think of is that I\&#8217;m using the voicemail configuration from within a mysql database. Is there a seperate command or something that I need make this form of authentication work?</p>
<p> Great writeup otherwise!</p>
<p>-Erik</p>
]]></content:encoded>
	</item>
</channel>
</rss>
