Queue call recordings VitalPBX 4 using Queue Metrics

Hi again!

System Information

|Distro Debian GNU/Linux 11 (bullseye)|
|Kernel|5.10.0-21-amd64|
|Asterisk|18.16.0|
|VitalPBX|4.0.3-1|
|PHP Version|8.1.11|

We’ve found what appears to be an unexpected behavior on queue calls.
What we see happening is the following:
Inbound call comes in via inbound route (no recording on inbound route option enabled) to queue.
Queue takes the call (call recording enabled on queue), dynamic agents takes the call.
Recording does not start upon agent picking up the call (all recording options enabled on ext)
Call does not get recorded.

We’ve been able to work around this by enabling inbound route recording option, which is inefficient at a series of levels because takes up space for the time on hold, depending on the time of the day, the wait may be longer than the actual call and from QA standpoint, forces the QA agent to listen to all of the wait time as well in order to grade the call.

Anyone see this before?

1 Like

Hey there,

My system information is the same as your except for:

Asterisk 18.17.1
Vital 4.0.3-3

I have QUE record set to yes
Extension- Recording- Incoming set to yes
Inbound route- Enable recording is set to no

Incoming calls go through an IVR and the call does not get recorded until the agent answers the call. If the person is placed on hold by the agent, it will be dead air (no hold music) with the exception of any audio from the callers side.

Hope these settings help :slight_smile:

Thanks,
Fernando

Ok, so will update and retry, now planning this is going to take a while, we run a 300+ agent call center and this will require a maintenance window, emails, auths and whatnot. thanks a lot and will let you know as soon as done and results collected.

regards,

Hi again,

Today we updated to 4.0.3-4, and tested recording from the queue to no avail, we have recordings enabled in queue settings as well as the extension itself, furthermore, even though we can find the call records in queue_log, we cannot find the call in VitalPBX CDR and this is now very concerning, I’ve even exported the day’s CDR to CSV and looked for the call manually with both, dialed number and dialing number to no avail.

Here’s the inbound call info, I checked and read every single line, to no avail:

root@vitalpbx01:/var/log/asterisk# cat full | grep C-00000264
[+1CALLEDNMBR@trk-1-in:1] NoOp(“PJSIP/SBC_trunk-00000500”, “Incoming call through: SBC_trunk”) in new stack
[+1CALLEDNMBR@trk-1-in:2] Set(“PJSIP/SBC_trunk-00000500”, “__TRUNK_ID=1”) in new stack
[+1CALLEDNMBR@trk-1-in:3] Set(“PJSIP/SBC_trunk-00000500”, “CDR(trunk)=1”) in new stack
[+1CALLEDNMBR@trk-1-in:4] Set(“PJSIP/SBC_trunk-00000500”, “__DID_NUMBER=+1CALLEDNMBR”) in new stack
[+1CALLEDNMBR@trk-1-in:5] Set(“PJSIP/SBC_trunk-00000500”, “CDR(did)=+1CALLEDNMBR”) in new stack
[+1CALLEDNMBR@trk-1-in:6] Set(“PJSIP/SBC_trunk-00000500”, “DID=+1CALLEDNMBR”) in new stack
[+1CALLEDNMBR@trk-1-in:7] Goto(“PJSIP/SBC_trunk-00000500”, “default-trunk,+1CALLEDNMBR,1”) in new stack
pbx_builtins.c: Goto (default-trunk,+1CALLEDNMBR,1)
[+1CALLEDNMBR@default-trunk:1] Gosub(“PJSIP/SBC_trunk-00000500”, “set-global-tenant-vars,s,1”) in new stack
[s@set-global-tenant-vars:1] NoOp(“PJSIP/SBC_trunk-00000500”, “Setting Global Vars for vitalpbx Tenant”) in new stack
[s@set-global-tenant-vars:2] Set(“PJSIP/SBC_trunk-00000500”, “__TENANT_PATH=268f0bb96e2f8df5”) in new stack
[s@set-global-tenant-vars:3] Set(“PJSIP/SBC_trunk-00000500”, “__TENANT_PREFIX=”) in new stack
[s@set-global-tenant-vars:4] Set(“PJSIP/SBC_trunk-00000500”, “__QUEUE_AGENTS_CONTEXT=queue-call-to-agents”) in new stack
[s@set-global-tenant-vars:5] Set(“PJSIP/SBC_trunk-00000500”, “__FOLLOWME_CONTEXT=ext-followme”) in new stack
[s@set-global-tenant-vars:6] Set(“PJSIP/SBC_trunk-00000500”, “__HINTS_CONTEXT=extension-hints”) in new stack
[s@set-global-tenant-vars:7] Set(“PJSIP/SBC_trunk-00000500”, “__DEFAULT_COS=cos-all”) in new stack
[s@set-global-tenant-vars:8] Return(“PJSIP/SBC_trunk-00000500”, “”) in new stack
[+1CALLEDNMBR@default-trunk:2] Gosub(“PJSIP/SBC_trunk-00000500”, “sub-check-blacklist,s,1(268f0bb96e2f8df5,+1CALLINGNMBR)”) in new stack
[s@sub-check-blacklist:1] NoOp(“PJSIP/SBC_trunk-00000500”, “Testing if +1CALLINGNMBR is in Black List”) in new stack
[s@sub-check-blacklist:2] GotoIf(“PJSIP/SBC_trunk-00000500”, “0?banned”) in new stack
[s@sub-check-blacklist:3] Return(“PJSIP/SBC_trunk-00000500”, “”) in new stack
[+1CALLEDNMBR@default-trunk:3] Gosub(“PJSIP/SBC_trunk-00000500”, “sub-stir-shaken-verify,s,1(268f0bb96e2f8df5,+1CALLINGNMBR)”) in new stack
[s@sub-stir-shaken-verify:1] NoOp(“PJSIP/SBC_trunk-00000500”, “STIR Shaken Verify”) in new stack
[s@sub-stir-shaken-verify:2] Set(“PJSIP/SBC_trunk-00000500”, “STIR_SHAKEN_IDENTITIES=0”) in new stack
[s@sub-stir-shaken-verify:3] NoOp(“PJSIP/SBC_trunk-00000500”, “Number of STIR/SHAKEN identities: 0”) in new stack
[s@sub-stir-shaken-verify:4] GotoIf(“PJSIP/SBC_trunk-00000500”, “1?end”) in new stack
pbx_builtins.c: Goto (sub-stir-shaken-verify,s,6)
[s@sub-stir-shaken-verify:6] Return(“PJSIP/SBC_trunk-00000500”, “”) in new stack
[+1CALLEDNMBR@default-trunk:4] Gosub(“PJSIP/SBC_trunk-00000500”, “sub-setup-call-type,s,1(incoming)”) in new stack
[s@sub-setup-call-type:1] NoOp(“PJSIP/SBC_trunk-00000500”, “Determinating Call Type”) in new stack
[s@sub-setup-call-type:2] GotoIf(“PJSIP/SBC_trunk-00000500”, “0?return”) in new stack
[s@sub-setup-call-type:3] Gosub(“PJSIP/SBC_trunk-00000500”, “s-incoming,1()”) in new stack
[s-incoming@sub-setup-call-type:1] NoOp(“PJSIP/SBC_trunk-00000500”, “Incoming Call”) in new stack
[s-incoming@sub-setup-call-type:2] Set(“PJSIP/SBC_trunk-00000500”, “__CALL_TYPE=2”) in new stack
[s-incoming@sub-setup-call-type:3] Set(“PJSIP/SBC_trunk-00000500”, “__CALL_TYPE_LABEL=IN”) in new stack
[s-incoming@sub-setup-call-type:4] Return(“PJSIP/SBC_trunk-00000500”, “”) in new stack
[s@sub-setup-call-type:4] Set(“PJSIP/SBC_trunk-00000500”, “__CALL_TYPE_CONFIGURED=yes”) in new stack
[s@sub-setup-call-type:5] Set(“PJSIP/SBC_trunk-00000500”, “CDR(calltype)=2”) in new stack
[s@sub-setup-call-type:6] Return(“PJSIP/SBC_trunk-00000500”, “”) in new stack
[+1CALLEDNMBR@default-trunk:5] Gosub(“PJSIP/SBC_trunk-00000500”, “dynamic-routing-in,s,1(+1CALLINGNMBR)”) in new stack
[s@dynamic-routing-in:1] NoOp(“PJSIP/SBC_trunk-00000500”, “Test if must to apply dynamic routing”) in new stack
[s@dynamic-routing-in:2] Set(“PJSIP/SBC_trunk-00000500”, “EXTERNAL_CALLER=+1CALLINGNMBR”) in new stack
[s@dynamic-routing-in:3] Set(“PJSIP/SBC_trunk-00000500”, “DYNROUTING_DM=0”) in new stack
[s@dynamic-routing-in:4] GotoIf(“PJSIP/SBC_trunk-00000500”, “1?gd”) in new stack
pbx_builtins.c: Goto (dynamic-routing-in,s,6)
[s@dynamic-routing-in:6] GotoIf(“PJSIP/SBC_trunk-00000500”, “0?:rb”) in new stack
pbx_builtins.c: Goto (dynamic-routing-in,s,11)
[s@dynamic-routing-in:11] Return(“PJSIP/SBC_trunk-00000500”, “”) in new stack
[+1CALLEDNMBR@default-trunk:6] ExecIf(“PJSIP/SBC_trunk-00000500”, “0?Set(__DID_NUMBER=+1CALLEDNMBR):”) in new stack
[+1CALLEDNMBR@default-trunk:7] Goto(“PJSIP/SBC_trunk-00000500”, “incoming-calls,+1CALLEDNMBR,1”) in new stack
pbx_builtins.c: Goto (incoming-calls,+1CALLEDNMBR,1)
[+1CALLEDNMBR@incoming-calls:1] NoOp(“PJSIP/SBC_trunk-00000500”, “INBOUND_ROUTE: Affiliates”) in new stack
[+1CALLEDNMBR@incoming-calls:2] Set(“PJSIP/SBC_trunk-00000500”, “CHANNEL(language)=en”) in new stack
[+1CALLEDNMBR@incoming-calls:3] Set(“PJSIP/SBC_trunk-00000500”, “__INBOUND_LANGUAGE=en”) in new stack
[+1CALLEDNMBR@incoming-calls:4] Gosub(“PJSIP/SBC_trunk-00000500”, “sub-set-moh,s,1(default,YES)”) in new stack
[s@sub-set-moh:1] NoOp(“PJSIP/SBC_trunk-00000500”, “Configuring MoH Class”) in new stack
[s@sub-set-moh:2] Set(“PJSIP/SBC_trunk-00000500”, “MOH_CLASS=default”) in new stack
[s@sub-set-moh:3] Set(“PJSIP/SBC_trunk-00000500”, “MOH_FORCE=YES”) in new stack
[s@sub-set-moh:4] GotoIf(“PJSIP/SBC_trunk-00000500”, “0?end”) in new stack
[s@sub-set-moh:5] GotoIf(“PJSIP/SBC_trunk-00000500”, “1?:end”) in new stack
[s@sub-set-moh:6] Set(“PJSIP/SBC_trunk-00000500”, “CHANNEL(musicclass)=default”) in new stack
[s@sub-set-moh:7] Set(“PJSIP/SBC_trunk-00000500”, “__MOH_SET=YES”) in new stack
[s@sub-set-moh:8] Return(“PJSIP/SBC_trunk-00000500”, “”) in new stack
[+1CALLEDNMBR@incoming-calls:5] Gosub(“PJSIP/SBC_trunk-00000500”, “sub-set-call-vars,s-incoming,1(+1CALLINGNMBR,+1CALLEDNMBR,268f0bb96e2f8df5)”) in new stack
[s-incoming@sub-set-call-vars:1] NoOp(“PJSIP/SBC_trunk-00000500”, “Setting Incoming Call Vars”) in new stack
[s-incoming@sub-set-call-vars:2] Set(“PJSIP/SBC_trunk-00000500”, “__CALLID=1686681382.1432”) in new stack
[s-incoming@sub-set-call-vars:3] Set(“PJSIP/SBC_trunk-00000500”, “__INCOMING_SOURCE=+1CALLINGNMBR”) in new stack
[s-incoming@sub-set-call-vars:4] Set(“PJSIP/SBC_trunk-00000500”, “__INCOMING_DESTINATION=+1CALLEDNMBR”) in new stack
[s-incoming@sub-set-call-vars:5] Set(“PJSIP/SBC_trunk-00000500”, “__INCOMING_TENANT=268f0bb96e2f8df5”) in new stack
[s-incoming@sub-set-call-vars:6] Set(“PJSIP/SBC_trunk-00000500”, “__CALL_SOURCE=+1CALLINGNMBR”) in new stack
[s-incoming@sub-set-call-vars:7] Set(“PJSIP/SBC_trunk-00000500”, “__CS=+1CALLINGNMBR”) in new stack
[s-incoming@sub-set-call-vars:8] Set(“PJSIP/SBC_trunk-00000500”, “__CALL_DESTINATION=+1CALLEDNMBR”) in new stack
[s-incoming@sub-set-call-vars:9] Set(“PJSIP/SBC_trunk-00000500”, “__TENANT=268f0bb96e2f8df5”) in new stack
[s-incoming@sub-set-call-vars:10] Set(“PJSIP/SBC_trunk-00000500”, “CDR(tenant)=vitalpbx”) in new stack
[s-incoming@sub-set-call-vars:11] Set(“PJSIP/SBC_trunk-00000500”, “CDR(destination)=+1CALLEDNMBR”) in new stack
[s-incoming@sub-set-call-vars:12] Set(“PJSIP/SBC_trunk-00000500”, “CDR(trunk)=1”) in new stack
[s-incoming@sub-set-call-vars:13] Set(“PJSIP/SBC_trunk-00000500”, “CDR(did)=+1CALLEDNMBR”) in new stack
[s-incoming@sub-set-call-vars:14] Set(“PJSIP/SBC_trunk-00000500”, “CDR(calltype)=2”) in new stack
[s-incoming@sub-set-call-vars:15] ExecIf(“PJSIP/SBC_trunk-00000500”, “1?Set(__PJSIP_CALLID=02169D1679814000003667F4@VOICEVLAN_TS)”) in new stack
[s-incoming@sub-set-call-vars:16] Gosub(“PJSIP/SBC_trunk-00000500”, “app-incoming,1”) in new stack
[app-incoming@sub-set-call-vars:1] NoOp(“PJSIP/SBC_trunk-00000500”, “Incoming Call App CDR”) in new stack
[app-incoming@sub-set-call-vars:2] GotoIf(“PJSIP/SBC_trunk-00000500”, “1?:return”) in new stack
[app-incoming@sub-set-call-vars:3] Set(“PJSIP/SBC_trunk-00000500”, “CDR(source)=+1CALLINGNMBR”) in new stack
[app-incoming@sub-set-call-vars:4] Set(“PJSIP/SBC_trunk-00000500”, “CDR(tenant)=vitalpbx”) in new stack
[app-incoming@sub-set-call-vars:5] Set(“PJSIP/SBC_trunk-00000500”, “CDR(destination)=+1CALLEDNMBR”) in new stack
[app-incoming@sub-set-call-vars:6] Return(“PJSIP/SBC_trunk-00000500”, “”) in new stack
[s-incoming@sub-set-call-vars:17] Return(“PJSIP/SBC_trunk-00000500”, “”) in new stack
[+1CALLEDNMBR@incoming-calls:6] Set(“PJSIP/SBC_trunk-00000500”, “ICALL=yes”) in new stack
[+1CALLEDNMBR@incoming-calls:7] Goto(“PJSIP/SBC_trunk-00000500”, “ext-queues,100,1”) in new stack
pbx_builtins.c: Goto (ext-queues,100,1)
[100@ext-queues:1] NoOp(“PJSIP/SBC_trunk-00000500”, “Queue: 100 Customer Service”) in new stack
[100@ext-queues:2] Set(“PJSIP/SBC_trunk-00000500”, “__QUEUE_UID=1686681382.1432”) in new stack
[100@ext-queues:3] Set(“PJSIP/SBC_trunk-00000500”, “__QUEUE_CALL=TRUE”) in new stack
[100@ext-queues:4] Set(“PJSIP/SBC_trunk-00000500”, “__SKIP_AA=TRUE”) in new stack
[100@ext-queues:5] Set(“PJSIP/SBC_trunk-00000500”, “__FROM_QUEUE_ID=3”) in new stack
[100@ext-queues:6] Gosub(“PJSIP/SBC_trunk-00000500”, “sub-set-moh,s,1(default,YES)”) in new stack
[s@sub-set-moh:1] NoOp(“PJSIP/SBC_trunk-00000500”, “Configuring MoH Class”) in new stack
[s@sub-set-moh:2] Set(“PJSIP/SBC_trunk-00000500”, “MOH_CLASS=default”) in new stack
[s@sub-set-moh:3] Set(“PJSIP/SBC_trunk-00000500”, “MOH_FORCE=YES”) in new stack
[s@sub-set-moh:4] GotoIf(“PJSIP/SBC_trunk-00000500”, “0?end”) in new stack
[s@sub-set-moh:5] GotoIf(“PJSIP/SBC_trunk-00000500”, “1?:end”) in new stack
[s@sub-set-moh:6] Set(“PJSIP/SBC_trunk-00000500”, “CHANNEL(musicclass)=default”) in new stack
[s@sub-set-moh:7] Set(“PJSIP/SBC_trunk-00000500”, “__MOH_SET=YES”) in new stack
[s@sub-set-moh:8] Return(“PJSIP/SBC_trunk-00000500”, “”) in new stack
[100@ext-queues:7] Set(“PJSIP/SBC_trunk-00000500”, “__QUEUE_NUMBER=100”) in new stack
[100@ext-queues:8] Set(“PJSIP/SBC_trunk-00000500”, “__QUEUE_NAME=Q100”) in new stack
[100@ext-queues:9] Set(“PJSIP/SBC_trunk-00000500”, “__PBX_APP=QUEUE”) in new stack
[100@ext-queues:10] Set(“PJSIP/SBC_trunk-00000500”, “__PBX_APP_DESC=100 Customer Service”) in new stack
[100@ext-queues:11] Gosub(“PJSIP/SBC_trunk-00000500”, “sub-set-call-vars,app-incoming,1”) in new stack
[app-incoming@sub-set-call-vars:1] NoOp(“PJSIP/SBC_trunk-00000500”, “Incoming Call App CDR”) in new stack
[app-incoming@sub-set-call-vars:2] GotoIf(“PJSIP/SBC_trunk-00000500”, “1?:return”) in new stack
[app-incoming@sub-set-call-vars:3] Set(“PJSIP/SBC_trunk-00000500”, “CDR(source)=+1CALLINGNMBR”) in new stack
[app-incoming@sub-set-call-vars:4] Set(“PJSIP/SBC_trunk-00000500”, “CDR(tenant)=vitalpbx”) in new stack
[app-incoming@sub-set-call-vars:5] Set(“PJSIP/SBC_trunk-00000500”, “CDR(destination)=+1CALLEDNMBR”) in new stack
[app-incoming@sub-set-call-vars:6] Return(“PJSIP/SBC_trunk-00000500”, “”) in new stack
[100@ext-queues:12] Set(“PJSIP/SBC_trunk-00000500”, “_APP_RECORDING=yes”) in new stack
[100@ext-queues:13] NoOp(“PJSIP/SBC_trunk-00000500”, “Connecting to Queue”) in new stack
[100@ext-queues:14] Set(“PJSIP/SBC_trunk-00000500”, “ANSWER_CHANNEL=yes”) in new stack
[100@ext-queues:15] ExecIf(“PJSIP/SBC_trunk-00000500”, “0?Progress():Answer()”) in new stack
[100@ext-queues:16] NoCDR(“PJSIP/SBC_trunk-00000500”, “”) in new stack
[100@ext-queues:17] Set(“PJSIP/SBC_trunk-00000500”, “Q_RING_TIME=”) in new stack
[100@ext-queues:18] ExecIf(“PJSIP/SBC_trunk-00000500”, “0?Set(Q_RING_TIME=):”) in new stack
[100@ext-queues:19] Queue(“PJSIP/SBC_trunk-00000500”, “Q100,”) in new stack
res_musiconhold.c: Started music on hold, class ‘default’, on channel ‘PJSIP/SBC_trunk-00000500’
app_queue.c: Called PJSIP/1058
app_queue.c: PJSIP/1058-00000501 is ringing
app_queue.c: PJSIP/1058-00000501 answered PJSIP/SBC_trunk-00000500
res_musiconhold.c: Stopped music on hold on PJSIP/SBC_trunk-00000500
bridge_channel.c: Channel PJSIP/1058-00000501 joined ‘simple_bridge’ basic-bridge
bridge_channel.c: Channel PJSIP/SBC_trunk-00000500 joined ‘simple_bridge’ basic-bridge
bridge_channel.c: Channel PJSIP/1058-00000501 left ‘simple_bridge’ basic-bridge
bridge_channel.c: Channel PJSIP/SBC_trunk-00000500 left ‘simple_bridge’ basic-bridge
pbx.c: Spawn extension (ext-queues, 100, 19) exited non-zero on ‘PJSIP/SBC_trunk-00000500’
pbx.c: Executing [h@ext-queues:1] NoOp(“PJSIP/SBC_trunk-00000500”, “Ending Queue Call”) in new stack
pbx.c: Executing [h@ext-queues:2] Hangup(“PJSIP/SBC_trunk-00000500”, “”) in new stack
pbx.c: Spawn extension (ext-queues, h, 2) exited non-zero on ‘PJSIP/SBC_trunk-00000500’

I see the NoCDR although the all was answered and I was able to speak to the agent, so that makes even less sense.

Could it be some sort of bug in queue creation? could it be that something went wrong when importing the extensions?

regards,

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.