Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - QueueMetrics

Pages: 1 ... 164 165 [166] 167 168 ... 202
2476
Lost licences / Re: Need Licence key
« on: June 07, 2008, 13:45:47 »
The key was sent on June,3 and resent today.
If you do not receive it, please contact us and give an alternate email address for delivery.
Sorry for the inconvenience.

2477
Outbound and QueueMetrics / Pure scripting solution version 1.1
« on: June 07, 2008, 13:09:09 »
This piece of dialplan should be final and address all concerns.

Code: [Select]
[queuedial]
; this piece of dialplan is just a calling hook into the [qm-queuedial] context that actually does the
; outbound dialing - replace as needed - just fill in the same variables.
exten => _XXX.,1,Set(QDIALER_QUEUE=q-${EXTEN:0:3})
exten => _XXX.,n,Set(QDIALER_NUMBER=${EXTEN:3})
exten => _XXX.,n,Set(QDIALER_AGENT=Agent/${CALLERID(num)})
exten => _XXX.,n,Set(QDIALER_CHANNEL=SIP/${QDIALER_NUMBER})
exten => _XXX.,n,Set(QueueName=${QDIALER_QUEUE})
exten => _XXX.,n,MixMonitor(Q-${QDIALER_QUEUE}-${UNIQUEID}.WAV|b|)
exten => _XXX.,n,Goto(qm-queuedial,s,1)

[qm-queuedial]
; We use a global variable to pass values back from the answer-detect macro.
; STATUS = U unanswered
;        = A answered    (plus CAUSECOMPLETE=C when callee hung up)
; The 'g' dial parameter must be used in order to track callee disconnecting.
; Note that we'll be using the 'h' hook in any case to do the logging when channels go down.
; We set the CDR(accountcode) for live monitoring by QM.
;
exten => s,1,NoOp,Outbound call -> A:${QDIALER_AGENT} N:${QDIALER_NUMBER} Q:${QDIALER_QUEUE} Ch:${QDIALER_CHANNEL}
exten => s,n,Set(CDR(accountcode)=QDIALAGI)
exten => s,n,Set(ST=${EPOCH})
exten => s,n,Set(GM=QDV-${QDIALER_AGENT})
exten => s,n,Set(GLOBAL(${GM})=U)
exten => s,n,Set(GLOBAL(${GM}ans)=0)
exten => s,n,Macro(queuelog,${ST},${UNIQUEID},${QDIALER_QUEUE},${QDIALER_AGENT},ENTERQUEUE,-,${QDIALER_NUMBER})
exten => s,n,Dial(${QDIALER_CHANNEL},30,gM(queuedial-answer^${UNIQUEID}^${GM}^${QDIALER_QUEUE}^${QDIALER_AGENT}^${ST}))
exten => s,n,Set(CAUSECOMPLETE=${IF($["${DIALSTATUS}" = "ANSWER"]?C)})

; Trapping call termination here
exten => h,1,NoOp( "Call exiting: status ${GLOBAL(${GM})} answered at: ${GLOBAL(${GM}ans)} DS: ${DIALSTATUS}"  )
exten => h,n,Goto(case-${GLOBAL(${GM})})
exten => h,n,Hangup()

; Call unanswered
exten => h,n(case-U),Set(WT=$[${EPOCH} - ${ST}])
exten => h,n,Macro(queuelog,${EPOCH},${UNIQUEID},${QDIALER_QUEUE},${QDIALER_AGENT},ABANDON,1,1,${WT})
exten => h,n,Hangup()

; call answered: agent/callee hung
exten => h,n(case-A),Set(COMPLETE=${IF($["${CAUSECOMPLETE}" = "C"]?COMPLETECALLER:COMPLETEAGENT)})
exten => h,n,Set(WT=$[${GLOBAL(${GM}ans)} - ${ST}])
exten => h,n,Set(CT=$[${EPOCH} - ${GLOBAL(${GM}ans)}])
exten => h,n,Macro(queuelog,${EPOCH},${UNIQUEID},${QDIALER_QUEUE},${QDIALER_AGENT},${COMPLETE},${WT},${CT})
exten => h,n,Hangup()


[macro-queuedial-answer]
; Expecting $ARG1: uniqueid of the caller channel
;           $ARG2: global variable to store the answer results
;           $ARG3: queue name
;           $ARG4: agent name
;           $ARG5: enterqueue
;
exten => s,1,NoOp("Macro: queuedial-answer UID:${ARG1} GR:${ARG2} Q:${ARG3} A:${ARG4} E:${ARG5}")
exten => s,n,Set(NOW=${EPOCH})
exten => s,n,Set(WD=$[${NOW} - ${ARG5}])
exten => s,n,Macro(queuelog,${NOW},${ARG1},${ARG3},${ARG4},CONNECT,${WD})
exten => s,n,Set(GLOBAL(${ARG2})=A)
exten => s,n,Set(GLOBAL(${ARG2}ans)=${NOW})
exten => s,n,NoOp("Macro queuedial-answer terminating" )

[macro-queuelog]
; The advantage of using this macro is that you can choose whether to use the Shell version
; (where you have complete control of what gets written) or the Application version (where you
; do not need a shellout, so it's way faster).
;
; Expecting  $ARG1: Timestamp
;            $ARG2: Call-id
;            $ARG3: Queue
;            $ARG4: Agent
;            $ARG5: Verb
;            $ARG6: Param1
;            $ARG7: Param2
;            $ARG8: Param3
;
;exten => s,1,System( echo "${ARG1}|${ARG2}|${ARG3|${ARG4}|${ARG5}|${ARG6}|${ARG7}|${ARG8}" >> /var/log/asterisk/queue_log )
exten => s,1,QueueLog(${ARG3},${ARG2},${ARG4},${ARG5},${ARG6}|${ARG7}|${ARG8})

Please note we separated the [queuedial] context that prepares parameters, sets call recordings, etc., from the [qm-queuedial] context, that is the actual workhorse doing the calling and the logging. This makes it easy for you to change the calling parameters if you need to do so.

We now use a macro for logging so that you can easily switch between using the QueueLog asterisk application (way faster, but the timestamp is implicit, so it might be a second after the call completed) versus the standard echo to shellout. This also makes the code cleaner and neater.

We mark outbound calls under the CDR account code of QDIALAGI. This is needed for QueueMetrics to know that those channels are not "regular" channels but are actually outgoing calls and need to be shown as such on the Live page. If you se third-party CDR processing apps, you might need to configure them to accept this change.

We changed the function parameters to use commas instead of pipes, so we expect this to be compatible with 1.6 as well.

Overall, we expect this code to be quite an advancement in terms of speed, ease of setup and configuration and reporting over the old QueueDial.agi script, so using this pure.dialplan solution will be the preferred way to implement outbound campaigns in QM 1.4.5.





2478
How about the following

....
exten => _X.,n,Dial(${MY_TECH}${MY_NUM},30,M(queuedial-answer^${UNIQUEID}^${GM}^${MY_QUE}^${MY_AGENT}^${ST})g)
exten => _X.,n,Set(REMOTEHANGUP=YES)
....


It is a bit more complex than that, as you can go to the line after the Dial() either because callee hung up or because the call did not complete. Likely one should test for the ${DIALSTATUS} and if it is OK it should be cosidered callee hung, else call not completed.

Anyway what's cool is that it's feasible to have all of this logic implemented in the dialplan.



2479
We tried TB 2.6.x and there is actually an important problem with AgentCallBackLogin -> see http://forum.queuemetrics.com/index.php?topic=276.0 to fix it.

2480
QueueMetrics installation / Re: QM 1.4 and Trixbox 2.6.1
« on: June 06, 2008, 18:00:55 »
We just tried TrixBox 2.6.1.0 - I confirm there is no problem in changing the dialplan at [from-internal-custom] and adding the 298 extension (unless you use 298 for some other extension on the system).

There is instead an important problem with AgentCallBackLogin -> see http://forum.queuemetrics.com/index.php?topic=276.0 to fix it.

2481
QueueMetrics installation / Installing on TrixBox 2.6.x
« on: June 06, 2008, 17:58:16 »
We are running a few tests of the latest QM installed on TrixBox 2.6, and we are noticing that the chan_agents module, while loaded, is not immediatly working. This is because there is no agents.conf file.

To check if this is the case, try running the command:
Code: [Select]
core show application AgentCallbackLoginIf you get an error message, this means that the module has not loaded correctly.


In order to activate AgentCallBackLogin, you can do the following:

1. Create the file /etc/asterisk/agents.conf
Code: [Select]
echo > /etc/asterisk/agents.conf
chown asterisk.asterisk /etc/asterisk/agents.conf

2. Edit the file /etc/asterisk/agents.conf (you can use a text editor or the TrixBox PBX -> Config Edit tool) and set it like this:

Code: [Select]
[general]
persistentagents=yes

[agents]
ackcall=no

agent => 300,,Alice
agent => 301,,Bob

You can create your own agents, of course, instead of the given ones.

Now the tricky part - log on to Asterisk and type:

Code: [Select]
module unload chan_agent.so
module load chan_agent.so

Or just reboot....  8)

At this point, the module should have been loaded correctly.
You can try it by typing:

Code: [Select]
agent show
You should get something like:

Code: [Select]
300          (Alice) available at '400@from-internal' (musiconhold is 'default')
301          (Bob) not logged in (musiconhold is 'default')
2 agents configured [1 online , 1 offline]

This should be it.  ;D

2482
Filed as bug #400.

2483
That's very interesting. An dnice to know it's working.

2484
Yes this does make sense :)
Please note that at the moment you're using Local/xxxx channels and not agent/xxx codes in TB.

2485
QueueMetrics installation / Re: QM 1.4 and Trixbox 2.6.1
« on: June 06, 2008, 09:25:21 »
You can try an older version of TB, like a 2.5.x.

2486
The CLI error does not look like there was an error with AGENTCALLBACKLOGIN.... we will check the Trixbox 2.6.0 to see if anything strange happens.


2487
Can you post a screenshot of what happens? maybe it's a bug.

2488
I am getting this in the asterisk log....

[Jun 4 11:49:12] WARNING[18423] app_queue.c: The device state of this queue member, Agent/206, is still 'Not in Use' when it probably should not be! Please check UPGRADE.txt for correct configuration settings


I quote this from the UPGRADE.txt file in Asterisk 1.4.8:

* Queues depend on the channel driver reporting the proper state
  for each member of the queue. To get proper signalling on
  queue members that use the SIP channel driver, you need to
  enable a call limit (could be set to a high value so it
  is not put into action) and also make sure that both inbound
  and outbound calls are accounted for.

  Example:

       [general]
       limitonpeer = yes

       [peername]
       type=friend
       call-limit=10

Is this your case?

2489
I think it's an Asterisk problem - QM does not see audio data or the like. Are you sure you are not running into a codec problem? if you run a SHOW CHANNEL when the call is ongoing, what do you see?

2490
QueueMetrics installation / Re: QM 1.4 and Trixbox 2.6.1
« on: June 05, 2008, 10:31:02 »
If you run an ACD system, having things like features disabled is a bonanza.  ;D So dont worry about that. You just need to understand how to get a free hook in the dialplan so you have a number to call to login.

Pages: 1 ... 164 165 [166] 167 168 ... 202