[Freeswitch-users] Issues with using avmd from python script
raj singh
rajictdialer at gmail.com
Sat Jul 27 05:28:37 MSD 2013
I went through all the Lua and Javascripts i could find on the net
regarding AVMD, i tried different combinations including the one you
suggested but no luck, it seems simple thats the frustrating part :( , i
appreciate your response and i am trying hard to get it to work and i will
keep doing the research, below is the log after the changes you suggested:
2013-07-26 18:17:05.888113 [DEBUG] mod_avmd.c:536 <<< AVMD v=0.001063
f=0.728471 927.518323Hz sma=0.701958 sqa=0.493808 >>>
2013-07-26 18:17:05.888113 [DEBUG] mod_avmd.c:536 <<< AVMD v=0.000980
f=0.691887 880.938146Hz sma=0.698135 sqa=0.488372 >>>
2013-07-26 18:17:05.888113 [DEBUG] mod_avmd.c:559 <<< AVMD - Beep Detected
>>>
2013-07-26 18:17:17.708529 [INFO] switch_cpp.cpp:1288 AVMD status TRUE
EXECUTE dingaling/gtalk/+xxxxxxxxxx at voice.google.com avmd(stop)
2013-07-26 18:17:17.708529 [DEBUG] switch_core_media_bug.c:808 Removing BUG
from dingaling/gtalk/+xxxxxxxxxx at voice.google.com
2013-07-26 18:17:17.708529 [INFO] switch_cpp.cpp:1288 AVMD stop
2013-07-26 18:17:17.708529 [DEBUG] switch_cpp.cpp:670 CoreSession::hangup
2013-07-26 18:17:17.708529 [NOTICE] switch_cpp.cpp:672 Hangup
dingaling/gtalk/+xxxxxxxxxx at voice.google.com [CS_EXECUTE] [NORMAL_CLEARING]
2013-07-26 18:17:17.708529 [DEBUG] switch_channel.c:3135 Send signal
dingaling/gtalk/+xxxxxxxxxx at voice.google.com [KILL]
2013-07-26 18:17:17.708529 [DEBUG] mod_dingaling.c:2095 dingaling/gtalk/+
xxxxxxxxxx at voice.google.com CHANNEL KILL
2013-07-26 18:17:17.708529 [DEBUG] switch_core_session.c:1341 Send signal
dingaling/gtalk/+xxxxxxxxxx at voice.google.com [BREAK]
2013-07-26 18:17:17.708529 [DEBUG] mod_dingaling.c:2095 dingaling/gtalk/+
xxxxxxxxxx at voice.google.com CHANNEL KILL
2013-07-26 18:17:17.708529 [INFO] switch_cpp.cpp:1288 hangup hook for RAJ
hangup!!
2013-07-26 18:17:17.708529 [DEBUG] mod_python.c:284 Finished calling python
script
2013-07-26 18:17:17.708529 [DEBUG] switch_cpp.cpp:1051 dingaling/gtalk/+
xxxxxxxxxx at voice.google.com destroy/unlink session from object
Any suggestions?
Thanks
On Fri, Jul 26, 2013 at 5:34 PM, Michael Collins <msc at freeswitch.org> wrote:
> I don't know Python but if it works like other languages then when an
> event comes in the input callback is called:
>
>
> def input_callback(session, what, obj):
>
> if (what == "dtmf"):
> consoleLog("info", what + " from callback " + obj.digit + "\n")
> return
> elif (what == "event" and session.getVariable('avmd_detect') ==
> "TRUE"):
> consoleLog("info", "Voicemail Detected\n")
>
>
> The "what" tells you the type of input. In this case you test for
> what=="dtmf" (for when the user presses a dtmf key) and for what=="event"
> for when an event comes in. In your specific case you check for an event
> and to see if the variable avmd_detect is true. If so then you are assuming
> that this is the mod_avmd event that it's detected a beep. (This is not the
> optimal method because you can actually check the event headers to make
> sure it's the correct event. I'll leave that as a research project for you.)
>
> Again, I'm not a Python guy so if someone else could verify my
> logic/syntax that would be good. Under the elif you have a consoleLog
> function call. After that line you could put all your code for handling the
> voicemail. Keep in mind that avmd is non-block, i.e. you aren't forced to
> sleep while detecting the beep. You could be playing a message or whatnot.
> As soon as the avmd detects a beep it will send the event and the
> inputcallback will be called and in your case the elif block will get
> executed. In that block of code you could stop the playback of your sound
> file and then initiate a new playback. (I'm assuming that you want to play
> a message after the beep?) Something like this:
>
>
> def input_callback(session, what, obj):
>
> if (what == "dtmf"):
> consoleLog("info", what + " from callback " + obj.digit + "\n")
> return
> elif (what == "event" and session.getVariable('avmd_detect') ==
> "TRUE"):
> session.execute("avmd", "stop")
> consoleLog("info", "Voicemail Detected\n")
> session.execute("speak", "flite|kal|'Hi this is '")
>
> return "TRUE"
>
> def handler(session, args):
>
> session.answer()
> # session.setVariable("hangup_after_bridge", "false")
> callback = session.setInputCallback("input_callback")
> session.execute("avmd", "start")
> consoleLog("info", "AVMD start\n")
> session.execute("sleep", "18000") # this could be a playback
> consoleLog("info", "AVMD status %s\n" % session.getVariable('avmd_
> detect'))
> session.execute("avmd", "stop")
> consoleLog("info", "AVMD stop\n")
> session.setHangupHook(hangup_hook)
> session.hangup() #hangup the call
>
>
> I don't think it's any more complicated than that.
>
> I highly recommend that you read up in the wiki and in the new FreeSWITCH
> book about events. Also, the FreeSWITCH Cookbook has good information about
> events. (Full disclosure: I'm co-author of both of those books). Also,
> don't be afraid of checking out all the Lua examples. Lua is easy to read
> if you're familiar with any scripting language and you can borrow ideas
> from existing scripts.
>
> Start by trying to understand setInputCallback<https://wiki.freeswitch.org/index.php?title=Special%3ASearch&search=setInputCallback>and go from there.
>
> Hope this helps,
> MC
>
>
> On Fri, Jul 26, 2013 at 2:46 PM, raj singh <rajictdialer at gmail.com> wrote:
>
>> Can you please tell how callback works, my understanding is that it
>> handles user input, not sure how it works when we are trying to catch
>> voicemails?
>>
>> Thanks
>>
>>
>> On Fri, Jul 26, 2013 at 1:25 PM, Michael Collins <msc at freeswitch.org>wrote:
>>
>>> I would do your "voicemail" stuff in the callback where you detect that
>>> the avmd detected true. I would also put the avmd_stop app in that code
>>> block.
>>> -MC
>>>
>>>
>>> On Thu, Jul 25, 2013 at 7:33 PM, Raghu <srraghu45 at gmail.com> wrote:
>>>
>>>> Thanks for checking it Michael. I thought i was trying execute 'speak'
>>>> when AVMD detects a beep as below, but may be i am missing something.
>>>> Please review the code and let me know if i am missing anything:
>>>>
>>>> from freeswitch import *
>>>>
>>>> # WARNING: known bugs with hangup hooks, use with extreme caution
>>>> def hangup_hook(session, what):
>>>> %s!!\n\n" % what)
>>>> return
>>>>
>>>> def input_callback(session, what, obj):
>>>>
>>>> if (what == "dtmf"):
>>>> consoleLog("info", what + " from callback " + obj.digit + "\n")
>>>> return
>>>> elif (what == "event" and session.getVariable('avmd_detect') ==
>>>> "TRUE"):
>>>> consoleLog("info", "Voicemail Detected\n")
>>>>
>>>> return "TRUE"
>>>>
>>>> def handler(session, args):
>>>>
>>>> session.answer()
>>>> # session.setVariable("hangup_after_bridge", "false")
>>>> callback = session.setInputCallback("input_callback")
>>>> session.execute("avmd", "start")
>>>> consoleLog("info", "AVMD start\n")
>>>> session.execute("sleep", "18000")
>>>> consoleLog("info", "AVMD status %s\n" %
>>>> session.getVariable('avmd_detect'))
>>>>
>>>> if session.getVariable('avmd_detect'):
>>>> consoleLog("info", "Beep Detected\n")
>>>> session.execute("speak", "flite|kal|'Hi this is '")
>>>> session.execute("avmd", "stop")
>>>>
>>>> session.execute("speak", "flite|kal|'Hi this is '")
>>>> consoleLog("info","callback returned %s!!\n\n" % callback)
>>>> session.execute("avmd", "stop")
>>>> consoleLog("info", "AVMD stop\n")
>>>> session.setHangupHook(hangup_hook)
>>>> session.hangup() #hangup the call
>>>>
>>>> Appreciate it!
>>>>
>>>>
>>>>
> --
> Michael S Collins
> Twitter: @mercutioviz
> http://www.FreeSWITCH.org
> http://www.ClueCon.com
> http://www.OSTAG.org
>
>
> _________________________________________________________________________
> Professional FreeSWITCH Consulting Services:
> consulting at freeswitch.org
> http://www.freeswitchsolutions.com
>
>
>
>
> Official FreeSWITCH Sites
> http://www.freeswitch.org
> http://wiki.freeswitch.org
> http://www.cluecon.com
>
> FreeSWITCH-users mailing list
> FreeSWITCH-users at lists.freeswitch.org
> http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
> http://www.freeswitch.org
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.freeswitch.org/pipermail/freeswitch-users/attachments/20130726/9f642634/attachment.html
Join us at ClueCon 2011 Aug 9-11, 2011
More information about the FreeSWITCH-users
mailing list