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

raj singh rajictdialer at gmail.com
Sat Jul 27 06:16:23 MSD 2013


Tried with the following with no luck, seems like the callback never gets
called

 elif (what == "event" and obj.getHeader("Event-Name") == "CUSTOM"):
        session.execute("avmd", "stop")
        consoleLog("info", "Voicemail Detected\n")
        session.execute("speak", "flite|kal|'Hi this is '")



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

> 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/792c00eb/attachment-0001.html 


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