Discussion:
[asterisk-users] Pre-Dial Handler return something like GOSUB_RESULT?
John Kiniston
2017-07-18 23:49:55 UTC
Permalink
I'm messing around with pre-dialer handlers today and running into a wall.

Dial has the U option where I can execute a Gosub when the channels bridge
and there I can set the variable GOSUB_RESULT to BUSY to make Dial act like
the channel I called was Busy.

I want to do something similar with a Pre-Dial handler but don't see a way
I can Set a variable or return a value that will cause Dial to act like the
channel I called was Busy?

Use case:
Endpoint 100 calls Extension 101

Extension 101 has a Pre-Dial Handler that checks how many calls Endpoint
101 has in progress and if it's greater than X returns a Busy.

Dial acts like it got a Busy back from the Endpoint, Sets DIALSTATUS and
continues through it's dial-plan.

I've tried using the BUSY() Application inside my Pre-Dial handler.
I've tried sending BUSY back as a Value with Return() to be picked up in
GOSUB_RETVAL
I've tried setting DIALSTATUS to BUSY.

Am I trying to use the wrong tool for the Job here?

Related, Why can we have multiple Hangup handlers but not Pre-Dial handlers?
--
A human being should be able to change a diaper, plan an invasion, butcher
a hog, conn a ship, design a building, write a sonnet, balance accounts,
build a wall, set a bone, comfort the dying, take orders, give orders,
cooperate, act alone, solve equations, analyze a new problem, pitch manure,
program a computer, cook a tasty meal, fight efficiently, die gallantly.
Specialization is for insects.
---Heinlein
Richard Mudgett
2017-07-19 00:51:06 UTC
Permalink
Post by John Kiniston
I'm messing around with pre-dialer handlers today and running into a wall.
Dial has the U option where I can execute a Gosub when the channels bridge
and there I can set the variable GOSUB_RESULT to BUSY to make Dial act like
the channel I called was Busy.
I want to do something similar with a Pre-Dial handler but don't see a way
I can Set a variable or return a value that will cause Dial to act like the
channel I called was Busy?
Endpoint 100 calls Extension 101
Extension 101 has a Pre-Dial Handler that checks how many calls Endpoint
101 has in progress and if it's greater than X returns a Busy.
Dial acts like it got a Busy back from the Endpoint, Sets DIALSTATUS and
continues through it's dial-plan.
I've tried using the BUSY() Application inside my Pre-Dial handler.
I've tried sending BUSY back as a Value with Return() to be picked up in
GOSUB_RETVAL
I've tried setting DIALSTATUS to BUSY.
Am I trying to use the wrong tool for the Job here?
Why don't you do the how many calls the endpoint has check before Dial()?
You can use the LOCK/UNLOCK functions as shown in [1] on the calling
channel pre-dial
routine to prevent reentrancy issues while doing the check. The called
channel pre-dial
routine is only to setup the channels you have decided to dial.
Post by John Kiniston
Related, Why can we have multiple Hangup handlers but not Pre-Dial handlers?
* There is only one dial to execute the called channel pre-dial handler
while there are many opportunities to specify hangup handlers.
* How do you think you could associate different pre-dial handlers to
different called channels?

Richard

[1]
http://blogs.asterisk.org/2017/03/29/dialplan-handler-routines-allow-customization/
Loading...