Yealink Forums

Full Version: Problem with the call pick-up function.
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hey Guys,

i have a problem with the pick-up function.

My situation is the following:
I have 4 phones (T46G, T42G, Snom300, GigasetC610) and I'm using a free-pbx (I'm not the admin of this).
I configured the BLFs like this:
Type: BLF
Value: 1201
Name: testname
Extension: **

I tried the following combination of calls. Sometimes the pick-up worked and sometimes not.
Caller -> Callee -> Pick-Up by -> Works?
Snom300 -> C610 -> T46G/T42G -> yes
Snom300 -> T46G/T42G -> T42G/T46G -> yes
T42G -> Snom300/C610 -> T46G -> no
T46G -> Snom300/C610 -> T42G -> no

In the cases where the pick-up does not work, I observed a strange behaviour.
The phone of the caller is still ringing, the phone, which picked up the call, shows that it picked up the call and the phone of the callee says, that the call was completed elsewhere.

I don't know if i made something wrong or do i have to add something in the settings of the phones or might this be a problem with the server?

I hope you can help me identify the problem.

Thanks in regards,

Benny
Hello Benny,

Can you please get a pcap trace in T46G and T42G?
Start pcap feature under Setting-> Configuration, reproudce the issue and export them.

Regards,
Hello James,

thanks for the quick response.
I got the pcap trace and took a look into it with wireshark.

I think there is a problem with the Asterisk-Server and the setting "sendrpid".
This option is set to "pai".
If this option is set to "no", it works.
But there is no CallerID on the phone that is picking up the call.

If you still need pcap trace, let me know. I will pm it to you.

Btw these are the firmware-versions on the phones:
29.80.0.70 -> T42G
28.80.0.70 -> T46G

Greetings,

Benny
I too have the same problem.
Hello again,

I find the source of this problem. This has nothing to with the settings in Asterisk.
It is problem with the code of Asterisk.
The Admin told me, that they patched the Asterisk server, so that you can pick up calls out of a waiting loop if you are not an agent.

This is code before the patch:

Code:
if (sip_cfg.pedanticsipchecking) {
    ast_str_append(tmp, 0, "<dialog id=\"%s\" call-id=\"pickup-%s\" local-tag=\"%s\" remote-tag=\"%s\" direction=\"recipient\">\n",
            exten, p->callid, p->theirtag, p->tag);  /*Changed*/
} else {
    ast_str_append(tmp, 0, "<dialog id=\"%s\" call-id=\"pickup-%s\" direction=\"recipient\">\n",
            exten, p->callid); /*Changed*/
}
ast_str_append(tmp, 0,
        "<remote>\n"
        /* See the limitations of this above.  Luckily the phone seems to still be
           happy when these values are not correct. */
        "<identity display=\"%s\">%s</identity>\n"
        "<target uri=\"%s\"/>\n" /*Changed*/
        "</remote>\n"
        "<local>\n"
        "<identity display=\"%s\">%s</identity>\n"
        "<target uri=\"%s\"/>\n"
        "</local>\n",
        remote_display, remote_target, remote_target, local_display, local_target, local_target); /*Changed*/
} else {
    ast_str_append(tmp, 0, "<dialog id=\"%s\" direction=\"recipient\">\n", exten);
}


This is the code after the patch:

Code:
/* We create a fake call-id which the phone will send back in an INVITE
                                   Replaces header which we can grab and do some magic with. */
if (sip_cfg.pedanticsipchecking) {
    ast_str_append(tmp, 0, "<dialog id=\"%s\" direction=\"recipient\">\n",
            exten);
} else {
    ast_str_append(tmp, 0, "<dialog id=\"%s\" direction=\"recipient\">\n",
            exten);
}
ast_str_append(tmp, 0,
        "<remote>\n"
        /* See the limitations of this above.  Luckily the phone seems to still be
           happy when these values are not correct. */
        "<identity display=\"%s\">%s</identity>\n"
        "<target uri=\"sip:**%s@%s\"/>\n"
        "</remote>\n"
        "<local>\n"
        "<identity display=\"%s\">%s</identity>\n"
        "<target uri=\"%s\"/>\n"
        "</local>\n",
        remote_display, remote_target, exten, p->fromdomain, local_display, local_target, local_target);
} else {
    ast_str_append(tmp, 0, "<dialog id=\"%s\" direction=\"recipient\">\n", exten);
}

I'm trying to figure out, what exactly is causing the problem and i'm trying to find a solution with the function active.
I would be happy, if someone can help me out.

Greetings,

Benny
Reference URL's