[Freeswitch-users] Issues with using avmd from python script

raj singh rajictdialer at gmail.com
Sat Jul 27 05:32:00 MSD 2013


Forgot to mention, i bought the cookbook, good stuff, i hope there could
some python examples in the next version. Thanks


On Fri, Jul 26, 2013 at 6:28 PM, raj singh <rajictdialer at gmail.com> wrote:

> 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/35a63986/attachment-0001.html 


Join us at ClueCon 2011 Aug 9-11, 2011
More information about the FreeSWITCH-users mailing list