[Freeswitch-users] mod_erlang_event
Andrew Thompson
andrew at hijacked.us
Tue Feb 23 14:49:02 PST 2010
Comments inline.
On Tue, Feb 23, 2010 at 03:00:46PM -0600, Mark Sobkow wrote:
> It's become clear that I need to use Erlang event processing to do what
> I need to do with Freeswitch, but I can't even get the most basic of
> tasks working yet. (i.e. Answer the call and collect the PIN code from
> the operator.)
>
> The dialplan version of what I'm trying to do is:
>
>
> <extension name=\"OpCallsIn\">
> <condition field=\"destination_number\" expression=\"^6100$\">
> <action application=\"answer\" />
> <action application=\"play_and_get_digits\" data=\"4 4 1 5000 #
> /opt/freeswitch/sounds/en/us/callie/conference/8000/conf-pin.wav
> /opt/freeswitch/sounds/en/us/callie/conference/8000/conf-bad-pin.wav
> operator_pin \\d+\" />
> <action application=\"log\" data=\"INFO operator_pin is
> ${operator_pin}\" />
> <action application=\"log\" data=\"INFO Queueing operator to
> fifo\" />
> <action application=\"fifo\" data=\"6100@${domain_name} in\" />
> </condition>
> </extension>
>
> Attached is the Erlang that's attempting to do the same thing. The
> Erlang is invoked by the following dialplan fragment:
>
> <extension name=\"ErlangCallback\">
> <condition field=\"destination_number\" expression=\"^6200$\">
> <action application=\"erlang\" data=\"pbx_callback
> pursuit at testsrv\" />
> </condition>
> </extension>
>
> Any suggestions?
Why not request the pin in the dialplan and then yield call control to
erlang? That's what I do most of the time.
> %% Author: mark
> %% Created: Feb 23, 2010
> %% Description: TODO: Add description to pbx_callback
> -module(pbx_callback).
>
> %%
> %% Include files
> %%
>
> %%
> %% Exported Functions
> %%
> -export([start/0, run/0, launch/1]).
>
> start() ->
> Pid = spawn( ?MODULE, run, [] ),
> register( ?MODULE, Pid ),
> { ok, Pid }.
>
> run() ->
> receive
> { call, Data } ->
> { event, [UUID | Rest]} = Data,
> syslog:debug( "pbx_callback:run() New call received, UUID=~p, Rest=~p~n", [UUID, Rest] ),
> AnswerResults = pbx:api( eval, "uuid:" ++ UUID ++ " answer" ),
> syslog:debug( "pbx_callback:run() AnswerResults=~p~n", [AnswerResults] ),
> GetPinResults = pbx:api( eval, "uuid:" ++ UUID ++ " play_and_get_digits 4 4 1 5000 # /opt/freeswitch/sounds/en/us/callie/conference/8000/conf-pin.wav /opt/freeswitch/sounds/en/us/callie/conference/8000/conf-bad-pin.wav operator_pin \\d+" ),
> syslog:debug( "pbx_callback:run() GetPinResults=~p~n", [GetPinResults] ),
> GetPinVarResults = pbx:api( uuid_getvar, UUID ++ " operator_pin" ),
> syslog:debug( "pbx_callback:run() GetPinVarResults=~p~n", [GetPinVarResults] ),
> run();
> {call_event, Data} ->
> { event, [UUID | Rest]} = Data,
> Name = proplists:get_value( "Event-Name", Rest ),
> syslog:debug( "pbx_callback:run() call_event UUID=~p, Name=~p, Rest=~p~n", [UUID, Name, Rest] ),
> run();
> {get_pid, UUID, Ref, Pid} ->
> NewPid = spawn( ?MODULE, run, [] ),
> syslog:debug( "pbx_callback:run() Request to spawn new handler process, returning PID ~p~n", [NewPid] ),
> Pid ! { Ref, NewPid },
> run()
> end.
>
> launch( Ref ) ->
> NewPid = spawn( ?MODULE, run, [] ),
> syslog:debug( "pbx_callback:launch() Returning new PID ~p~n", [NewPid] ),
> {Ref, NewPid}.
I don't know what your 'pbx' module is doing so I can't really help you
there. Are you doing a sendmsg for play_and_get_digits or what? You
should be using a uuid_getvar to get the result of the
play_and_get_digits in any case. How far does this code get before
failing?
Andrew
More information about the FreeSWITCH-users
mailing list