Seven Du,

 

Thanks for your response.  I eventually found a way by sending via the Event Socket Layer:

 

sendmsg <channel uuid>

call-command: execute

execute-app-name: break

 

Then sending the CUSTOM message and using the con:pop(1,5000) approach to pop the CUSTOM message of the event queue.

 

This approach solves the problem, although I wish I could send an event via ESL that will trigger the setInputCallback(…) function.  However I have not found a way to do that as yet.

 

Andrew

 

From: freeswitch-users-bounces@lists.freeswitch.org [mailto:freeswitch-users-bounces@lists.freeswitch.org] On Behalf Of Seven Du
Sent: Tuesday, 9 December 2014 10:16 AM
To: FreeSWITCH Users Help
Subject: Re: [Freeswitch-users] Re - FreeSWITCH Lua CUSTOM events interrupting session:streamFile playback - is this possible?

 

I believe the playback_terminitors chan var works, or you could try set an input callback and return “break” when dtmf detected.

 

-- 

Seven Du

http://about.me/dujinfang

http://www.dujinfang.com

http://www.freeswitch.org.cn

 

Sent with Sparrow

 

On Tuesday, December 9, 2014 at 7:00 AM, Andrew Keil wrote:

To FreeSWITCH users,

 

After progressing with Lua inside FreeSWITCH I have a question that I cannot source an answer for within the current FreeSWITCH documentation.

 

I have a requirement for an external application to process an event (via the event socket layer) then return the results back to the application while an audio file is played back in a loop to the caller.

 

From the current documentation this method allows for the event to be sent then the return event is “consumed” using a polling approach.  However the caller is listening to silence.

 

function poll()

    -- create event and listener

    local event = freeswitch.Event("CUSTOM", "ping::running?")

    local con = freeswitch.EventConsumer("CUSTOM", "ping::running!")

 

    -- add text ad libitum

    event:addHeader("hi", "there")

    -- fire event

    event:fire()

    -- and wait for reply but not very long

                local retevent = con:pop(1, 5000)

    if retevent then

        print("reply received")

                                freeswitch.consoleLog("DEBUG",  string.format("reply received: %s\n",retevent:getHeader("Result")))

        return true

    end

    print("no reply")

                freeswitch.consoleLog("DEBUG", "no reply\n")

    return false

end

 

Some questions:

Is there a way to playback audio (eg. session:streamFile(…)) while this takes place, since currently session:streamFile(…) seems to be a blocking function (ie. Finishes when the audio file is played back completely)?

Is there a way to use session:setInputCallback(…) to handle an external CUSTOM event being returned (since this would then be able to interrupt the session:streamFile(…) just like it does for DTMF or speech recognition)?

 

If you have a preferred approach to solving this then I am open to your suggestions.

 

I appreciate any assistance that you can give.

 

Kind Regards,

 

Andrew Keil

 

_________________________________________________________________________

Professional FreeSWITCH Consulting Services:

consulting@freeswitch.org

http://www.freeswitchsolutions.com

 

Official FreeSWITCH Sites

http://www.freeswitch.org

http://confluence.freeswitch.org

http://www.cluecon.com

 

FreeSWITCH-users mailing list

FreeSWITCH-users@lists.freeswitch.org

http://lists.freeswitch.org/mailman/listinfo/freeswitch-users

UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users

http://www.freeswitch.org