In freeswitch you have the uuid_hold, etc api: 
https://www.freeswitch.org/confluence/plugins/servlet/mobile?contentId=1966741#content/view/1966741

You call the API uuid_hold [uuid] or uuid_hold off  [uuid] to take the channel out of hold.

UUID in freeswitch is what uniquely identifies a given channel.

When you say: 

“ However, my understanding of a B2BUA is that *it* would then start handling 
the state of the calls itself - whether they're on hold, routing the 
transfers, etc.” 

This is correct, that’s how B2BUA works, but you can send an API to fs via ESL (tcp connection on port 8021
https://freeswitch.org/confluence/plugins/servlet/mobile?contentId=15696286#content/view/1048916
 ) to put on hold not just your channel, since that would simply send a reconly to your app, but also the B-leg of the call.



On Wed, 18 Aug 2021 at 09:45, Antony Stone <Antony.Stone@kamailio.open.source.it> wrote:
On Wednesday 18 August 2021 at 00:20:20, Raúl Alexis Betancor Santana wrote:

> On Tuesday 17 August 2021 at 21:22:37, Antony Stone wrote:
> > On Tuesday 17 August 2021 at 21:55:15, Fred Posner wrote:
> > > On 8/17/21 2:20 PM, Antony Stone wrote:
> > > > If not, can anyone suggest something else which could sit in between
> > > > a very basic SIP client and a PBX server, in order to inject these
> > > > sorts of commands into the path and thereby give me these sorts of
> > > > extra call capabilities?
> > >
> > > This really sounds like a better use case for Asterisk, FreeSWITCH,
> > > SEMS, or PJSIP.
> >
> > I know Asterisk pretty well.
> >
> > When you use it as a SIP client to register to another PBX, it is
> > extremely basic - it can place a call and it can receive a call, but it
> > has no concept of presence, it cannot send a REINVITE to put a call on
> > hold, it cannot send a REFER to transfer a call...
> >
> > I don't understand how placing this in between my simple client and the
> > PBX which is handling the call can possibly inject the commands I need.
>
> Sorry for telling you this, but if you think that, you don't know Asterisk
> at all.

No problem - I'm very prepared to learn from experts.

> You don't need to send a REINVITE to put a call on hold, just change how
> you handle the RTP of the call if you SIP endpoint doesn't support
> REINVITES/UPDATES.

So, for such a simple thing, how could I get Asterisk to change the handling
of the RTP of the call, so that the remote PBX server starts playing its music
on hold to the other party?

If you can just show me the basics of what dialplan commands I should be
looking at, I can work out the rest (or ask the Asterisk people).

> Asterisk knows about presence, it doesn't have full implementation,

Asterisk certainly knows about presence *when it is the server* telling
clients *about* the presence of other clients / extensions.

It knows zero about presence when *it* is a client *asking* for the state of
other extensions on another PBX (at least, that's according to Joshua Colp,
Asterisk developer, when I asked on the Asterisk mailing list).

> The thing you need it's a B2BUA, and Asterisk, FreeSwitch, YATE, SEMS,
> either a simple python script using pjsua2 or any of the dozens SIP
> frameworks out there, will allow you to acomplish your goals
>
> If you go the Asterisk road, any of the AMI/ARI documentation will explain
> to you how to handle ongoing calls.

There is no AMI command to put a call on hold.  There are AMI notifications to
tell you that a call has been put on hold (or resumed) but there is no command
to cause this to happen.  To quote from Joshua Colp: "I know of no way from
AMI to control putting a call on and off hold."

> You could take any road you like, but not Kamailio, as it's not a B2BUA.

Okay, thank you for confirming that I'm looking in the wrong place here, and
that Kamailio is not the solution to my needs.

However, my understanding of a B2BUA is that *it* would then start handling
the state of the calls itself - whether they're on hold, routing the
transfers, etc.

I need something which can *tell the existing PBX* to do these things, in the
same way that a competent hardware SIP telephone would tell it.


If there are multiple ways of achieving what I'm trying to do (even if
Kamailio isn't one of them), please just point me at something specific which
shows me *how* - telling me "it's simple" or "there are lots of ways of doing
it" doesn't help me to find out *how* I can do it, and the suggestions
regarding Asterisk are simply in conflict with the advice I've had from people
on the Asterisk list, who say it can't be done.


I hope someone can point me at just one example of how this requirement can be
achieved - I've tried to keep it as simple as possible, by focusing on call
hold - once I've got that, I can build up the more complex stuff.

To reiterate, a SIP client places a call to a SIP server; I then need a way to
tell that SIP server to put the call on hold, given that the client itself
cannot do it.


Thanks,


Antony.

--
3 logicians walk into a bar. The bartender asks "Do you all want a drink?"
The first logician says "I don't know."
The second logician says "I don't know."
The third logician says "Yes!"

                                                   Please reply to the list;
                                                         please *don't* CC me.

__________________________________________________________
Kamailio - Users Mailing List - Non Commercial Discussions
  * sr-users@lists.kamailio.org
Important: keep the mailing list in the recipients, do not reply only to the sender!
Edit mailing list options or unsubscribe:
  * https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users
--
Regards,

David Villasmil
email: david.villasmil.work@gmail.com
phone: +34669448337