Queue Breaks Dynamic_Features On Attended Transfer

Home » Asterisk Users » Queue Breaks Dynamic_Features On Attended Transfer
Asterisk Users 5 Comments

Hi,

I think I’ve identified an issue and just want to check before completing a bug report.

Prior to a call entering a Queue, I set __DYNAMIC_FEATURES=NewRecordApp. AgentA answers and is able to use that feature code. If AgentA performs an attended transfer of a call from a queue to AgentB, the feature code no longer works.

Cases that do work are as follows… Calls using both Queue() and Dial() applications, prior to transfer, feature code works. Calls using the Dial() application, both Blind and Attended transfers still allow the feature code to work. Calls using the Queue() application where AgentA performs a Blind transfer to AgentB still allow the feature to work.

It only doesn’t work when using Queue() and an Attended transfer is performed.

Is this a bug or is there something that needs to be set to allow the DYNAMIC_FEATURES to be inherited after an attended transfer from a queue?

Many thanks, Dan

5 thoughts on - Queue Breaks Dynamic_Features On Attended Transfer

  • Doing some more tests, this reads like a bug to me. Using a hanguphandler with DumpChan in the dialplan context that executes the Queue, I can see that DYNAMIC_FEATURES is set. After the attended transfer when the call is ended, the hanguphandler still shows that DYNAMIC_FEATURES is set. It’s just not accessible.

    Any thoughts?
    Thanks Dan

  • It likely depens on how you are doing the attended transfer. Via DTMF?
    Via SIP or channel technology protocol?
    Does the Agent B channel have the DYNAMIC_FEATURES channel variable set on it?

    Richard

  • PiBEb2luZyBzb21lIG1vcmUgdGVzdHMsIHRoaXMgcmVhZHMgbGlrZSBhIGJ1ZyB0byBtZS4NCj4g VXNpbmcgYSBoYW5ndXBoYW5kbGVyIHdpdGggRHVtcENoYW4gaW4gdGhlIGRpYWxwbGFuIGNvbnRl eHQgdGhhdCBleGVjdXRlcw0KPiB0aGUgUXVldWUsIEkgY2FuIHNlZSB0aGF0IERZTkFNSUNfRkVB
    VFVSRVMgaXMgc2V0Lg0KPiBBZnRlciB0aGUgYXR0ZW5kZWQgdHJhbnNmZXIgd2hlbiB0aGUgY2Fs bCBpcyBlbmRlZCwgdGhlIGhhbmd1cGhhbmRsZXIgc3RpbGwNCj4gc2hvd3MgdGhhdCBEWU5BTUlD
    X0ZFQVRVUkVTIGlzIHNldC4gSXQncyBqdXN0IG5vdCBhY2Nlc3NpYmxlLg0KPg0KPiBBbnkgdGhv dWdodHM/DQo+IEl0IGxpa2VseSBkZXBlbnMgb24gaG93IHlvdSBhcmUgZG9pbmcgdGhlIGF0dGVu ZGVkIHRyYW5zZmVyLiAgVmlhIERUTUY/ICBWaWEgU0lQDQo+IG9yIGNoYW5uZWwgdGVjaG5vbG9n eSBwcm90b2NvbD8NCj4gRG9lcyB0aGUgQWdlbnQgQiBjaGFubmVsIGhhdmUgdGhlIERZTkFNSUNf RkVBVFVSRVMgY2hhbm5lbCB2YXJpYWJsZSBzZXQNCj4gb24gaXQ/DQo+DQoNClRoYW5rcyBmb3Ig dGhlIHJlcGx5Lg0KDQpUbyBhbnN3ZXIgeW91ciBxdWVzdGlvbiwgdGhlIGF0dGVuZGVkIHRyYW5z ZmVycyBhcmUgZG9uZSB2aWEgdGhlIGVuZHBvaW50J3MgZmVhdHVyZSBidXR0b25zLiBTbyBJIGFz c3VtZSBpdCdzIHZpYSBTSVAgcmVxdWVzdHMuDQoNCkkndmUgYmVlbiBkb2luZyBzb21lIHRlc3Rz IGFuZCByZXZpZXdpbmcgdGhlIGRlYnVnIGxvZ3MgdG8gdHJ5IHRvIHVuZGVyc3RhbmQgdGhlIHBy b2JsZW0gYW5kIHN0aWxsIHRoaW5rIGl0J3MgYSBidWcgYXQgdGhpcyBwb2ludC4NCg0KRmlyc3Rs eSwgbW9zdCBvZiBteSBpbmJvdW5kIGNhbGxzIGFyZSBhbnN3ZXJlZCBhbmQgdGhlbiBEaWFsKCkg TG9jYWwgY2hhbm5lbHMuIFRoZXNlIExvY2FsIGNoYW5uZWxzIHNldCBfX0RZTkFNSUNfRkVBVFVS
    RVMgYW5kIHZhcmlvdXMgb3RoZXIgdGhpbmdzLiBUaGV5IGFyZSBhbHNvIG5lZWRlZCB0byBlbnN1
    cmUgZnVuY3Rpb25hbGl0eSBsaWtlIE1peE1vbml0b3IgY2FuIGJlIHN0YXJ0ZWQgb24gdGhlIExv Y2FsIGNoYW5uZWwgYW5kIHRoZW4gbm90IGFmZmVjdGVkIGJ5IGFueSB0cmFuc2ZlcnMuIFRoZSBM
    b2NhbCBjaGFubmVscyB0aGVuIGVpdGhlciBEaWFsKCkgc29tZSBwZWVycyB2aWEgb3RoZXIgbG9j YWwgY2hhbm5lbHMgKGFzIHNvbWUgcGVlcnMgYXJlIHJlcXVpcmVkIHRvIHByZXNzIDEgdG8gYWNj ZXB0IHRoZSBjYWxsKSBvciBhIExvY2FsIGNoYW5uZWwgdGhhdCBkaWFscyBhIFF1ZXVlKCkuDQoN
    CkZvciBub24tUXVldWUgY2FsbHMgdGhhdCBhcmUgZ29pbmcgdmlhIHRoZSBMb2NhbCBDaGFubmVs cyB0aGF0IG9ubHkgdXNlIERpYWwoKS4NCldoZW4gZW5kcG9pbnRfMjAxIGRpYWxzICoxLCBpdCBp cyBtYXRjaGVkIHdpdGggdGhlaXIgb3duIGNoYW5uZWwuDQo+IERUTUYgZmVhdHVyZSBob29rIDB4
    N2YxOGQ4MDNhOTc4IG1hdGNoZWQgRFRNRiBzdHJpbmcgJyoxJyBvbiAweDdmMThjMDAwYjA4MChQ
    SlNJUC9lbmRwb2ludF8yMDEtMDAwMGNiNTUpDQoNCkludGVyZXN0aW5nbHksIGFmdGVyIHRoZSBh dHRlbmRlZCB0cmFuc2ZlciBmcm9tIGVuZHBvaW50XzIwMSB0byBlbmRwb2ludF8yMDIsIHdoZW4g ZW5kcG9pbnRfMjAyIGRpYWxzICoxLCBpdCBjYW4gbm8gbG9uZ2VyIG1hdGNoIGFuZCBwYXNzZXMg aXQgYmFjayB0byB0aGUgTG9jYWwgY2hhbm5lbCB0aGF0IG9yaWdpbmFsbHkgZGlhbGxlZCBlbmRw b2ludF8yMDEuDQpBdCB0aGF0IHBvaW50LCBpdCBjYW4gbWF0Y2ggdGhlIGxvY2FsIGNoYW5uZWwg c2luY2UgdGhhdCdzIHdoZXJlIERZTkFNSUNfRkVBVFVSRVMgd2FzIG9yaWdpbmFsbHkgc2V0Lg0K
    PiBObyBEVE1GIGZlYXR1cmUgaG9va3Mgb24gMHg3ZjE4OWMwNjYwYjAoUEpTSVAvZW5kcG9pbnRf MjAyLTAwMDBjYjViKSBtYXRjaCAnKjEnDQo+IERUTUYgZmVhdHVyZSBob29rIDB4N2YxODk0YWJk NDA4IG1hdGNoZWQgRFRNRiBzdHJpbmcgJyoxJyBvbiAweDdmMTg2YzA0ZWZhMChMb2NhbC9mcm9t ZmVhdHVyZV8yMDFAcGhvbmVzLTAwMDA1YTE3OzEpDQpTbyBhbHRob3VnaCB0aGUgdHJhbnNmZXIg Y2F1c2VkIHRoZSB2YXJpYWJsZSB0byBiZSBsb3N0LCB0aGUgTG9jYWwgY2hhbm5lbCwgYXMgdGhl IHBhcmVudCwgcmVtYWluZWQgYW5kIHN0ZXBwZWQgaW4gdG8gY29tcGxldGUgdGhlICoxIHJlcXVl c3QuDQpQcm9iYWJseSB3b3JrcyBieSBhY2NpZGVudC4NCg0KQnV0IGNhbGxzIHBhc3NpbmcgdGhy b3VnaCBhIExvY2FsIGNoYW5uZWwgdGhhdCBlbmRzIGluIFF1ZXVlKCkgZG9uJ3QgYWN0IHRoZSBz YW1lIHdheS4NCg0KVGhlIFF1ZXVlJ3MgaW5pdGlhbCBkaWFsIG9mIHRoZSBxdWV1ZW1lbWJlcnMg aW5jbHVkZXMgdGhlIGluaGVyaXRhbmNlIGFzIGV4cGVjdGVkLg0KU28gd2hlbiBlbmRwb2ludF8y MDEgYW5zd2VycyBhbmQgdGhleSBkaWFsICoxLCB0aGlzIGlzIHRoZSByZXN1bHQuDQo+IERUTUYg ZmVhdHVyZSBob29rIDB4N2YxOGM0MDE4Mjc4IG1hdGNoZWQgRFRNRiBzdHJpbmcgJyoxJyBvbiAw eDdmMThiMDAwMmNhMChQSlNJUC9lbmRwb2ludF8yMDEtMDAwMGNhY2MpDQoNCkJ1dCBmb2xsb3dp bmcgYSB0cmFuc2ZlciwgdXNpbmcgdGhlIHNhbWUgU0lQIG1lc3NhZ2luZyBhcyB0aGUgbm9uLXF1
    ZXVlIGNhbGxzLCB0aGlzIGlzIHRoZSByZXN1bHQuLi4NCj4gRFRNRiBmZWF0dXJlIHN0cmluZyBv biAweDdmMThiZDM2OTcyMChQSlNJUC9lbmRwb2ludF8yMDItMDAwMGNhZTgpIGlzIG5vdyAnKjEn DQo+IE5vIERUTUYgZmVhdHVyZSBob29rcyBvbiAweDdmMThiZDM2OTcyMChQSlNJUC9lbmRwb2lu dF8yMDItMDAwMGNhZTgpIG1hdGNoICcqMScNCj4gUGxheWluZyBEVE1GIHN0cmVhbSAnKjEnIG91
    dCB0byAweDdmMThlNDExMjk4MChMb2NhbC9xdWV1ZV9kaWFscGxhbl8xMDFAcXVldWUtMDAwMDU5
    YjI7MikgPC0tLS0gdGhpcyBjaGFubmVsIHN0aWxsIGhhcyBEWU5BTUlDX0ZFQVRVUkVTIHNldCAo c2VlIGJlbG93KSBidXQgaXQganVzdCBwYXNzZXMgdGhlIERUTUYgdGhyb3VnaD8NCj4gRFRNRiBi ZWdpbiAnKicgcmVjZWl2ZWQgb24gTG9jYWwvcXVldWVfZGlhbHBsYW5fMTAxQHF1ZXVlLTAwMDA1
    OWIyOzENCj4gRFRNRiBiZWdpbiBwYXNzdGhyb3VnaCAnKicgb24gTG9jYWwvcXVldWVfZGlhbHBs YW5fMTAxQHF1ZXVlLTAwMDA1OWIyOzENCmFuZCBpdCdzIHBhc3NlZCBhbGwgdGhlIHdheSBiYWNr IGFuZCBwbGF5ZWQgdG8gdGhlIGNhbGxlci4NCg0KVGhpcyBpcyBpbiBzcGl0ZSBvZiB0aGUgZmFj dCB0aGF0IExvY2FsL3F1ZXVlX2RpYWxwbGFuXzEwMUBxdWV1ZS0wMDAwNTliMjsyIGhhcyBEWU5B
    TUlDX0ZFQVRVUkVTIHNldCBlYXJsaWVyIGluIHRoZSBkaWFscGxhbi4NCj4gU2V0KCJMb2NhbC9x dWV1ZV9kaWFscGxhbl8xMDFAcXVldWUtMDAwMDU5YjI7MiIsICJfX0RZTkFNSUNfRkVBVFVSRVM9
    TmV3UmVjb3JkQXBwIikNCkFuZCBzdGlsbCBzZXQgYXQgdGhlIGVuZCBvZiB0aGUgY2FsbCwgY29u ZmlybWVkIHVzaW5nIER1bXBDaGFuIHdpdGhpbiB0aGUgY2hhbm5lbHMgaGFuZ3VwIGhhbmRsZXIu DQoNCj4gRHVtcGluZyBJbmZvIEZvciBDaGFubmVsOiBMb2NhbC9xdWV1ZV9kaWFscGxhbiAxMDFA
    cXVldWUtMDAwMDU5YjI7MjoNCj4gVmFyaWFibGVzOg0KPiBEWU5BTUlDX0ZFQVRVUkVTPU5ld1Jl Y29yZEFwcA0KDQpJIGNhbid0IHJlYWxseSBleHBsYWluIHdoeSB0aGUgY2hhbm5lbCBjYW4gc3Rp bGwgaGF2ZSBEWU5BTUlDX0ZFQVRVUkVTLCBidXQgaXQncyBub3QgcGVyZm9ybSBtYXRjaGluZyBh cGFydCBmcm9tIHRoaW5raW5nIGl0J3MgYSBidWcuDQoNCkkgaG9wZSB0aGF0IHdhc24ndCB0b28g bG9uZyB3aW5kZWQhDQoNClRoYW5rcyBmb3IgdGhlIGhlbHAgYW5kIHRpbWUhDQpEYW4NCg=

  • Does Local/queue_dialplan_101@queue-000059b2;1 have DYNAMIC_FEATURES set on it?

    It does seem like a bug. However, you have a complicated dialplan with a lot of pieces happening at once so it may not actually be an Asterisk bug but a problem with your dialplan. To unravel this is going to take some bookkeeping on your part.

    Here are some pointers to help:

    It will help you to see what is going on by drawing out the channel chains. For instance I think your initial non-queue call chain looks like:
    PJSIP/caller –> Bridge1 –> L/caller;1 — L/caller;2 –> Bridge2 –>
    L/feature;1 — L/feature;2 –> Bridge3 –> PJSIP/201

    DTMF feature hooks match DTMF coming from a channel toward a bridge. They do not match DTMF
    going in the other direction. (This is why Local/queue_
    dialplan_101@queue-000059b2;2 does not act on the DTMF above.)

    SIP attended transfers involve two calls. One call is placed on hold while the endpoint initiates another call. When you complete the transfer the two remote parties get bridged together. For example:
    A (PJSIP/A-1) calls B (PJSIP/B-1) and talk in Bridge1
    B (PJSIP/B-1) places A (PJSIP/A-1) on hold to start an attended transfer B (PJSIP/B-2) calls C (PJSIP/C-2) in another call and talk in Bridge2
    When B completes the transfer A (PJSIP/A-1) is bridged with C (PJSIP/C-2).
    * Note the A and C channels could wind up in either Bridge1 or Bridge2
    depending upon circumstances.
    * Note that there are two different PJSIP/B channels involved.
    * Note that until the attended transfer is completed the second call B
    makes has no connection with the first call and thus inherits no channel variables from the first call.
    * Note that if the A and C parties are connected to B through local channels it is the local channels which represent the A and C parties that are involved in the transfer.

    Local channels always come in pairs. When you dial a local channel it is the ;1 channel that acts as an outgoing channel and the ;2 channel executes dialplan and acts as an incoming channel. This is the initial role between the two channels in a local channel pair. In the transfer scenario I describe above
    (the answering channel initiates the transfer) the local channels maintain the relationships after the transfer.

    Richard

  • PiBJdCBkb2VzIHNlZW0gbGlrZSBhIGJ1Zy4gIEhvd2V2ZXIsIHlvdSBoYXZlIGEgY29tcGxpY2F0
    ZWQgZGlhbHBsYW4gd2l0aCBhIGxvdCBvZiBwaWVjZXMgaGFwcGVuaW5nIGF0DQo+IG9uY2Ugc28g aXQgbWF5IG5vdCBhY3R1YWxseSBiZSBhbiBBc3RlcmlzayBidWcgYnV0IGEgcHJvYmxlbSB3aXRo IHlvdXIgZGlhbHBsYW4uICBUbyB1bnJhdmVsIHRoaXMgaXMNCj4gZ29pbmcgdG8gdGFrZSBzb21l IGJvb2trZWVwaW5nIG9uIHlvdXIgcGFydC4NCg0KSGkgUmljaGFyZCwNCg0KVGhhbmtzIGZvciB0
    aGUgZGV0YWlsZWQgcmVzcG9uc2UuIE5lZWQgdG8gZ2V0IG15IGhlYWQgYXJvdW5kIGl0IGEgYml0
    IQ0KDQpJ4oCZbSBnb2luZyB0byB0cnkgdG8gc2V0IHVwIGEgdGVzdCByaWcgd2l0aCBhIGxlc3Mg Y29tcGxleCBkaWFscGxhbi4NCknigJlsbCB0aGVuIHJ1biBzb21lIHRlc3RzIGFuZCB3aWxsIGJl IGFibGUgdG8gc3VwcGx5IHNhbXBsZSBmaWxlcyBpZiB0aGUgcHJvYmxlbSBwZXJzaXN0cy4NCg0K
    SeKAmW0ganVzdCBhIGxpdHRsZSBjb25mdXNlZCB3aGF0IHRoZSBkaWZmZXJlbnQgaXMgd2hpY2gg dHJhbnNmZXJzIG9mIGluYm91bmQgcXVldWVkIGNhbGxzIGFuZCB0cmFuc2ZlcnMgb2YgaW5ib3Vu ZCBEaWFsbGVkIGNhbGxzLg0KSSB3b25kZXIgaWYgaXQgd291bGQgbWFrZSBhIGRpZmZlcmVuY2Ug aWYgdGhlIHF1ZXVlIG1lbWJlcnMgd2VyZSBMb2NhbC9EaWFsVGhpc0VuZHBvaW50XzIwMCwgaW5z dGVhZCBvZiBQSlNJUC9lbmRwb2ludF8yMDAuDQoNClNpbmNlIHRoZSBxdWV1ZSBkaWFscyB0aGUg bWVtYmVycyBhbmQgdGhlIG1lbWJlciBjaGFubmVscyBpbmhlcml0IHRoZSB2YXJpYWJsZXMgY29y cmVjdGx5LCB0aGF0IHdvdWxkIG1lYW4gdGhhdCBMb2NhbC9EaWFsVGhpc0VuZHBvaW50XzIwMCB3
    b3VsZCBpbmhlcml0IHRoZSBEWU5BTUlDX0ZFQVRVUkVTLg0KVGhlIExvY2FsIGNoYW5uZWwgd291
    bGQgZGlhbCB0aGUgZW5kcG9pbnQsIGFuZCB3aGVuIHRoZSBlbmRwb2ludCBwZXJmb3JtcyBhIHRy YW5zZmVyIGFuZCBsb3NlcyBpdHMgdmFyaWFibGVzLCB0aGUgTG9jYWwgY2hhbm5lbCwgYXMgdGhl IHBhcmVudCwgd291bGQgc3RpbGwgaGF2ZSBpdHMgdmFyaWFibGVzIHNldCBhbmQgdGhlIGZlYXR1
    cmUgY29kZXMgd291bGQgc3RpbGwgd29yay4NCg0K