I am using Asterisk version 18 and JSSIP 3.9. I am experiencing an issue with the Feature Attended Transfer (code: *402) function during a normal call. Occasionally, it seems that the function does not work properly. When I checked the logs, I noticed that the DTMF signals were sent successfully from the user, but Asterisk returned the message “DTMF feature string collection timed out.” I have attached the log for reference.
Can you please suggest any solutions to this issue? I appreciate any help or advice you can provide.
DTMF by INFO is the requirement from our customer so we must use it.
;transferretrysound = beep ; Sound to play when a transferer fails to dial a valid extension.
;transferinvalidsound = beeperr ; Sound to play when a transferer fails to dial a valid extension and is out of retries.
atxferabort = *401 ; cancel the attended transfer
;atxfercomplete = *2 ; complete the attended transfer, dropping out of the call
atxferthreeway = *403 ; complete the attended transfer, but stay in the call. This will turn the call into a multi-party bridge
atxferswap = *404 ; swap to the other party. Once an attended transfer has begun, this options may be used multiple times
; Note that the DTMF features listed below only work when two channels have answered and are bridged together.
; They can not be used while the remote party is ringing or in progress. If you require this feature you can use
; chan_local in combination with Answer to accomplish it.
blindxfer => #1 ; Blind transfer (default is #) -- Make sure to set the T and/or t option in the Dial() or Queue() app call!
disconnect => #000 ; Disconnect (default is *) -- Make sure to set the H and/or h option in the Dial() or Queue() app call!
;automon => *1 ; One Touch Record a.k.a. Touch Monitor -- Make sure to set the W and/or w option in the Dial() or Queue() app call!
atxfer => *402 ; Attended transfer -- Make sure to set the T and/or t option in the Dial() or Queue() app call!
;parkcall => #72 ; Park call (one step parking) -- Make sure to set the K and/or k option in the Dial() app call!
;automixmon => *3 ; One Touch Record a.k.a. Touch MixMonitor -- Make sure to set the X and/or x option in the Dial() or Queue() app call!
The pcap timestamps are from when the packet gets queued, not when they are read by the application code. I’m pretty sure that even chan_pjsip has only one socket for a UDP transport, so I’d suspect something is blocking the handling of that socket, e.g. some database activity, or paging in code, if you are short on real memory.