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.


Topics - qmax

Pages: [1] 2
1
I'm trying to setup websocket softphone.
Using queuemetrics-15.10.1, asterisk-11.7.0~dfsg-1ubuntu1

In sip.conf:
Code: [Select]
[callcenterW](!)
type=friend
host=dynamic
nat=force_rport,comedia
permit=0.0.0.0/0.0.0.0
context=callcenter
allow=all
callcounter=yes
busylevel=1
qualify=yes
transport=wss
avpf=yes
encryption=yes
srtpcapable=yes
icesupport=yes
videosupport=no

[agent007](callcenterW)
secret=1234567

In http.conf:
Code: [Select]
tlsenable=yes
tlscertfile=/etc/ssl/certs/ast-host.crt
tlsprivatekey=/etc/ssl/private/ast-host.key   

Related config in configuration.properties:
Code: [Select]
default.sipaddress=ast.host
default.websocketurl=wss://ast.host/ws
default.rtcWebBreaker=true ; also tried false

Certificate is issued by self-signed CA with subj CN:ast-host
The CA is imported into browsers.
All https connections work well.

When agent page opened in Chrome(50.0) or Firefox(43.0) new ws-connections constantly appear, and later get timeouted.
No data frames sent.

Console shows:
Code: [Select]
s_websocket_server_url=wss://ast-host:8089/ws
VM73:1 s_sip_outboundproxy_url=(null)
VM73:1 b_rtcweb_breaker_enabled=no
VM73:1 b_click2call_enabled=no
VM73:1 b_early_ims=yes
VM73:1 b_enable_media_stream_cache=yes
VM73:1 o_bandwidth={"audio":"64"}
VM73:1 o_video_size={"minWidth":"640","minHeight":"480","maxWidth":"640","maxHeight":"480"}
VM73:1 SIP stack start: proxy='ns313841.ovh.net:13060', realm='<sip:ast-host>', impi='a001', impu='"Пупкин Вася"<sip:a001@ast-host>'
VM73:1 Connecting to 'wss://ast-host:8089/ws'

In asterisk log:
Code: [Select]
[Jun  4 11:54:01] DEBUG[4064] http.c: HTTP Request URI is /ws
[Jun  4 11:54:01] DEBUG[4064] http.c: match request [ws] with handler [httpstatus] len 0
[Jun  4 11:54:01] DEBUG[4064] http.c: match request [ws] with handler [amanager] len 10
[Jun  4 11:54:01] DEBUG[4064] http.c: match request [ws] with handler [arawman] len 8
[Jun  4 11:54:01] DEBUG[4064] http.c: match request [ws] with handler [manager] len 7
[Jun  4 11:54:01] DEBUG[4064] http.c: match request [ws] with handler [rawman] len 7
[Jun  4 11:54:01] DEBUG[4064] http.c: match request [ws] with handler [static] len 6
[Jun  4 11:54:01] DEBUG[4064] http.c: match request [ws] with handler [amxml] len 6
[Jun  4 11:54:01] DEBUG[4064] http.c: match request [ws] with handler [mxml] len 5
[Jun  4 11:54:01] DEBUG[4064] http.c: match request [ws] with handler [ws] len 4
[Jun  4 11:54:01] VERBOSE[4064] res_http_websocket.c:   == WebSocket connection from '85.118.225.90:46250' for protocol 'sip' accepted using version '13'
[Jun  4 11:57:16] VERBOSE[4064] res_http_websocket.c:   == WebSocket connection from '85.118.225.90:46250' closed

Nothing else happens.
And the peer do not register.

Is there anything wrong in provided configs and logs?
What else to debug?

2
Hi.

We need to synchronize database of QM agents with QM users and database of third party application.
That is:
creating an agent should automatically create related user and a record in another database.
deleting an agent should delete all related records.

Is there any hooks or whatever tricks to achieve this?

3
Running QueueMetrics / more unicode issues, now with ajax
« on: November 12, 2009, 13:25:45 »
in 1.5.5
ajax pages reloaded in wrong encoding

4
Running QueueMetrics / creating agents/users from script
« on: November 12, 2009, 13:13:33 »
Hello.
We maintain our agents in external database tables
(not asterisk).
I want to automate creating agents from these tables.

Can you please provide SQL to create agents and users directly in mysql database ?

5
Oggi è l'ultimo set queuemetrics-1.5.5
Quando l'agente tenta di entrare nella pagina di errore.
Quote
The following error occurred in the Transaction handler:
"Il verbo '' non e stato trovato tra quelli caricati."
Purtroppo, non capisco italiano e non può capire cosa stava succedendo.
JDBC MySQL o funzionino correttamente.
 
I registri non sono molto più informativo:
Quote
[E92A803154287801EEB74E3AA6D160ED] 200911121621 Tempo totale esecuzione verbo 'qm_agente_live': 39 m
[7FE83467A267AF7957F814EC94FF6034] [ERR] Il verbo '' non ? stato trovato tra quelli caricati.
[7FE83467A267AF7957F814EC94FF6034] 200911121622 Tempo totale esecuzione verbo '': 0 ms
[7FE83467A267AF7957F814EC94FF6034] [ERR] Il verbo '' non ? stato trovato tra quelli caricati.
[7FE83467A267AF7957F814EC94FF6034] 200911121622 Tempo totale esecuzione verbo '': 1 ms
[7FE83467A267AF7957F814EC94FF6034] [ERR] Il verbo '' non ? stato trovato tra quelli caricati.
[7FE83467A267AF7957F814EC94FF6034] 200911121622 Tempo totale esecuzione verbo '': 1 ms

Questo problema appare solo in alcuni luoghi di lavoro.
Vale a dire - per i terminali che si collegano a un server Linux.
Termini di gioco che non capisco.

P.S.
Forse, se solo i messaggi di errore ei log sono in inglese, la situazione bylaby molto più chiara.

6
Running QueueMetrics / license limits on reports
« on: August 20, 2009, 10:25:12 »
Hello.

Configuration of our callcenter is 1 asterisk server and 20+ operators workstations. (other then 20 are reserved)
Thus, no more then 20 operators could work simultaneously,
thus we purchased a license for 1 server/20 agents.

However, total staff of the callcenter is not permanent.
We hire operators on per-hour wage, thus some operator may work for a while and then no more appear.
Total number of operators that had been working at various periods is about 140 persons.

Now, when attempted to build a report spanning for a period, during which more then 20 operators appeared in total,
QM tells that it is not allowed by license.

Could this issue be solved?

7
in queues.conf we do not configure any members - they are all added dynamically.
config wizard rejects loading such file, saying "no queues configured"

8
That's not a functionality lack,
But periodically reloading pages look not very user-friendly in the age of web-2.0
Browser moves page to top, while user may be looking at the bottom.
When an alarm is sounded, browser may popup annoying alarm window, if there's no builting wav player.
And obvious drawback is absence of real-time notifications for real-time pages like agent live, online monitor, wallboard, and for "realtime live".

Turning all these in real live will significantly improve QM usability.

P.S.
There exist several comet-solutions, for such style of notifications.

9
We'd like to integrate QM with another system we use (CATI).

Basically, we need:
- provide some data, known to QM (but not to asterisk) to that system:
- access and display some call details, known to that system
(or, maybe - stored in cdr.userfield[1-9])

Are there some ways to achieve this ?


10
Here is dialplan we developed for our call-center.
I'm not sure it works perfectly in all cases, but for last months it showed no problems.
I'm publishing it here in hope that it may appear useful for someone else,
and may be improved by community.

Features are:
  • agents do register on the line using special dial-code
  • all outbound calls from registered line assigned to that agent and queue
  • calls w/out agent registration are prohibited
  • agents are marked on pause between calls
  • agents do release line using another dial-code
  • dialplan handles bogus registration/deregistration
  • registration data stored in astdb and thus stay persistent
  • there's one easter egg inside

This example uses:
  • code 08*agentnum*queuenum - for registering line, agentnum is exact 3 digits. im not sure if pattern with "*.*." will work
  • code 09 - for releasing line
  • code 22 - as pause code between calls
  • Dial(Local/...@outbound-allroutes) for making external calls. the context outbound-allroutes is taken from dialplan generated by FreePBX outbound calls routing. it simply selects appropriate trunk for call.
  • playing "agent-music" while dialing
  • various custom speech files from directory callcenter/ for audial status and actions confirmation
  • recording all calls into /var/spool/asterisk/monitor/q${QUEUEID}-${UNIQUEID}.wav
All this stuff could and probably should be adjusted.

Code: [Select]
[callcenter]
; NB: adjust terminal devices to do not handle '*'-containg codes
exten => _08*XXX*.,1,Answer
exten => _08*XXX*.,n,Macro(register-outque,${CALLERID(num)},${EXTEN:3:3},${EXTEN:7})
exten => _08*XXX*.,n,Hangup

exten => _09,1,Answer
exten => _09,n,Macro(unregister-outque,${CALLERID(num)})
exten => _09,n,Hangup

exten => _NXXXXX.,1,Answer
exten => _NXXXXX.,n,GotoIf($[${DB_EXISTS(outques/${CALLERID(num)}/agent)}]?:notregistered)
exten => _NXXXXX.,n,Macro(outbound-queue-call,${CALLERID(num)},${EXTEN})
exten => _NXXXXX.,n,Hangup
exten => _NXXXXX.,n(notregistered),Playback(callcenter/agent-registration-required)
exten => _NXXXXX.,n,Hangup

; telling the line number
exten => *65,1,Answer()
exten => *65,n,Playback(callcenter/nomer-linii)
exten => *65,n,SayDigits(${CALLERID(num)})
exten => *65,n,Hangup()

; telling the line agent and queue
exten => *64,1,Answer()
exten => *64,n,GotoIf($[${DB_EXISTS(outques/${CALLERID(num)}/agent)}]?:notregistered)
exten => *64,n,Set(AGENTID=${DB(outques/${CALLERID(num)}/agent)})
exten => *64,n,Set(QUEUEID=${DB(outques/agent${AGENTID}/queue)})
exten => *64,n,Playback(callcenter/line-registered-&callcenter/for-agent-)
exten => *64,n,SayDigits(${AGENTID})
exten => *64,n,Playback(callcenter/in-queue-)
exten => *64,n,SayDigits(${QUEUEID})
exten => *64,n,Hangup
exten => *64,n(notregistered),Playback(callcenter/line-is-not registered)
exten => *64,n,Hangup

[macro-register-outque]
exten => s,1,NoOp(CC: registering line ${ARG1} for agent ${ARG2} in queue ${ARG3})
exten => s,n,MacroIf($[${DB_EXISTS(outques/${ARG1}/agent)}]?unregister-outque,${ARG1})
exten => s,n,MacroIf($[${DB_EXISTS(outques/agent${ARG2}/line)}]?unregister-outque,${DB(outques/agent${ARG2}/line)})
exten => s,n,Set(LINE=${ARG1})
exten => s,n,Set(AGENTID=${ARG2})
exten => s,n,Set(QUEUEID=${ARG3})
exten => s,n,Set(DB(outques/${LINE}/agent)=${AGENTID})
exten => s,n,Set(DB(outques/agent${AGENTID}/queue)=${QUEUEID})
exten => s,n,Set(DB(outques/agent${AGENTID}/line)=${CALLERID(num)})
exten => s,n,QueueLog(${QUEUEID},${UNIQUEID},Agent/${AGENTID},ADDMEMBER)
exten => s,n,QueueLog(NONE,NONE,Agent/${AGENTID},PAUSEALL)
exten => s,n,QueueLog(NONE,${UNIQUEID},Agent/${AGENTID},PAUSEREASON,22)
exten => s,n,Playback(callcenter/line-registered-&callcenter/for-agent-)
exten => s,n,SayDigits(${AGENTID})
exten => s,n,Playback(callcenter/in-queue-)
exten => s,n,SayDigits(${QUEUEID})

[macro-unregister-outque]
exten => s,1,NoOp(CC: releasing line ${ARG1})
exten => s,n,Set(LINEID=${ARG1})
exten => s,n,Set(AGENTID=${DB(outques/${LINEID}/agent)})
exten => s,n,GotoIf($["${AGENTID}"=""]?skip)
exten => s,n,Set(QUEUEID=${DB(outques/agent${AGENTID}/queue)})
exten => s,n,DbDel(outques/${LINEID}/agent)
exten => s,n,DbDel(outques/agent${AGENTID}/line)
exten => s,n,DbDel(outques/agent${AGENTID}/queue)
exten => s,n,QueueLog(${QUEUEID},${UNIQUEID},Agent/${AGENTID},REMOVEMEMBER)
exten => s,n,Playback(callcenter/line-released)
exten => s,n,MacroExit()
exten => s,n(skip),Playback(callcenter/line-was-not-registered)
exten => s,n,MacroExit()

[macro-outbound-queue-call]
exten => s,1,NoOp(CC: outbound call from ${ARG1} to ${ARG2})
exten => s,n,Set(CALLER=${ARG1})
exten => s,n,Set(DIALNUM=${ARG2})
exten => s,n,Set(AGENTID=${DB(outques/${CALLER}/agent)})
exten => s,n,Set(QUEUEID=${DB(outques/agent${AGENTID}/queue)})
exten => s,n,QueueLog(NONE,NONE,Agent/${AGENTID},UNPAUSEALL)
exten => s,n,QueueLog(${QUEUEID},${UNIQUEID},Agent/${AGENTID},CALLOUTBOUND,-,${DIALNUM})
exten => s,n,Dial(Local/${DIALNUM}@outbound-allroutes,30,m(agent-music)M(outbound-answer^${CALLER}^${UNIQUEID}^${QUEUEID}^${AGENTID}^${EPOCH})g)
exten => s,n,NoOp(CC: outbound call from ${CALLER} to ${DIALNUM} canceled: ${DIALSTATUS})
exten => s,n,QueueLog(NONE,NONE,Agent/${AGENTID},PAUSEALL)
exten => s,n,QueueLog(NONE,${UNIQUEID},Agent/${AGENTID},PAUSEREASON,22)
exten => s,n,GotoIf($["${DIALSTATUS}" == "ANSWER"]?answered)
exten => s,n(failed),QueueLog(${QUEUEID},${UNIQUEID},Agent/${AGENTID},ABANDON,1,1,${DIALEDTIME})
exten => s,n,Playback(callcenter/${DIALSTATUS})
exten => s,n,MacroExit()
exten => s,n(answered),QueueLog(${QUEUEID},${UNIQUEID},Agent/${AGENTID},COMPLETEAGENT,$[${DIALEDTIME} - ${ANSWEREDTIME}],${ANSWEREDTIME})
exten => s,n,Playback(callcenter/CANCEL)
exten => s,n,Wait(3)
exten => s,n,Playback(callcenter/how-vexing-excl)
exten => s,n,MacroExit()

exten => h,1,NoOp(CC: outbound call from ${CALLER} to ${DIALNUM} completed: ${DIALSTATUS})
exten => h,n,QueueLog(NONE,NONE,Agent/${AGENTID},PAUSEALL)
exten => h,n,QueueLog(NONE,${UNIQUEID},Agent/${AGENTID},PAUSEREASON,22)
exten => h,n,GotoIf($["${DIALSTATUS}" == "ANSWER"]?answered)
; CHANUNAVAIL | CONGESTION | NOANSWER | BUSY | CANCEL
exten => h,n(failed),QueueLog(${QUEUEID},${UNIQUEID},Agent/${AGENTID},ABANDON,1,1,${DIALEDTIME})
exten => h,n,MacroExit()
; ANSWERED
exten => h,n(answered),QueueLog(${QUEUEID},${UNIQUEID},Agent/${AGENTID},COMPLETECALLER,$[${DIALEDTIME} - ${ANSWEREDTIME}],${ANSWEREDTIME})
exten => h,n,MacroExit()

[macro-outbound-answer]
exten => s,1,NoOp(CC: connection in outbound queue: caller:${ARG1} uid:${ARG2} queue:${ARG3} agent:${ARG4} time:${ARG5})
exten => s,n,MixMonitor(/var/spool/asterisk/monitor/q${ARG3}-${ARG2}.wav)
exten => s,n,QueueLog(${ARG3},${ARG2},Agent/${ARG4},CONNECT,$[${EPOCH} - ${ARG5}])

11
as in documentation, i've set
audio.server=it.loway.app.queuemetrics.callListen.listeners.LocalFilesByDay

i've tried to separate monitor files into:
/var/spool/asterisk/queue/
or
/var/spool/asterisk/year/queue/

set this up with:
default.monitored_calls=/var/spool/asterisk/%QU/
or
default.monitored_calls=/var/spool/asterisk/%YY/%QU/

retrieving call datails still cannot find record

$Id: LocalFilesByDay.java,v 1.2 2009/02/16 11:40:28 lenz-mobile Exp $ is searching.... found 0 files
[D965F3B96481F3C48E4F5597A4819650] Tempo totale esecuzione verbo 'qm_popup_call': 30 ms
[D965F3B96481F3C48E4F5597A4819650] Tempo totale esecuzione verbo 'qm_qa_popup': 40 ms

files could be found using command line utility:
astra:~ # find /var/spool/asterisk/monitor/ -name '*1247813990.28938*'
/var/spool/asterisk/monitor/2009/6/q6-1247813990.28938.wav

what's wrong here?

12
Running QueueMetrics / [major bug] unicode issues
« on: July 15, 2009, 11:03:06 »
Installation:

mysql server is configured to use utf8 by all defaults:
character-set-client-handshake    TRUE
character-set-filesystem          binary
character-set-server              utf8
default-character-set             utf8

all database tables were created or converted to:
CREATE TABLE ... ( ... ) DEFAULT CHARSET=utf8

mysql jdbcdriver is set up like following:
jdbc:mysql://localhost/queuemetrics?...&amp;useUnicode=true&amp;characterEncoding=utf8&amp;characterSetResults=utf8


file agents.conf are like following:
agent=>001,,"Василий Пупкин
(here is utf-8 string after quote)

Content-Type of all pages is: text/html; charset=UTF-8

User selected Language is "Russian"

Issues:

1. Setup Wizard
when loading agents from file agents.conf, after specifying filenames,
after page "The specified sources have been succesfully read."
on stage "Source > Agents" it displays unicode strings incorrectly.
(a string of invalid chars 2 times longer then initial)

if to proceed further, on last stage it produces error:
Quote
Fail: Problema update DB: java.sql.SQLException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INVALID CHARS' at line 1
the "INVALID CHARS" is string invalid chars (4 times longer then initial string.)

when agent name is put into database tables directly, using mysql-tools, then quemetrics displays it correctly everywhere.

2. Track QA
when track QA window is opened, and there comment put, it saves in database incorrectly,
and then redisplayed in the wrong way.

when comment is put into database tables directly, using mysql-tools, then quemetrics displays it correctly

3. Exporting
Exporting just any table into XLS or CSV replaces all unicode characters into "?"
Only XML export works.

13
Running QueueMetrics / loading agents.conf in utf8
« on: July 07, 2009, 12:47:22 »
we really want to keep and refer our agents by their names.
and their names are not of latin1 language.

when agents.conf contains utf-8 agents names,
it is read incorrectly and qm fails to update database.

can it be fixed ?



14
Translations / translation of user manual
« on: July 02, 2009, 13:01:34 »
is it planned to be translated?

15
when agents imported from agents.conf, their default terminal is set to null.
this does not allow to monitor their calls.
we now have to hack SQL database to put terminal into '-' for all agents.

it would be nice to set them to '-' bu default when importing

Pages: [1] 2