title: Voicemail detection on FreeSWITCH
body: <p>I am working on a predictive dialer-like application in which I should detect whether the call was picked up by a voicemail or not. </p>
  
  <p>I am using the follwing:</p>
  
  <p>Server: I am using FreeSWITCH v1.6.11. I built and configured AVMD module.</p>
  
  <p>Client: I am using sipml5 connected to Freeswitch via WSS.</p>
  
  <p>The idea is when Freeswitch detects a beep sound, it will fire an event called AVMD_EVENT_BEEP.</p>
  
  <p>In the following log, I am using a telnet client connected to FreeSWITCH socket. I subscribed to the event via socket and here is the result:</p>
  
  <pre>
      event plain CUSTOM avmd::beep
  
      Content-Type: command/reply
      Reply-Text: +OK event listener enabled plain
      Content-Length: 737
      Content-Type: text/event-plain
  
      Event-Subclass: avmd%3A%3Abeep
      Event-Name: CUSTOM
      Core-UUID: 1c8e8e58-8b46-11e6-99c3-238295cb19cb
      FreeSWITCH-Hostname: debian
      FreeSWITCH-Switchname: debian
      FreeSWITCH-IPv4: 176.58.104.114
      FreeSWITCH-IPv6: 2a01%3A7e00%3A%3Af03c%3A91ff%3Afeae%3Ad2d6
      Event-Date-Local: 2016-10-05%2022%3A47%3A21
      Event-Date-GMT: Wed,%2005%20Oct%202016%2022%3A47%3A21%20GMT
      Event-Date-Timestamp: 1475707641468562
      Event-Calling-File: mod_avmd.c
      Event-Calling-Function: avmd_fire_event
      Event-Calling-Line-Number: 437
      Event-Sequence: 2420
      Unique-ID: a894fffc-8b4d-11e6-9aa3-238295cb19cb
      Call-command: avmd
      Beep-Status: DETECTED
      Frequency: 1001.084123
      Frequency-variance: 0.000203
      Amplitude: 12541.343475
      Amplitude-variance: 33583.241944
      Detection-time: 7320038
  </pre>
  
  <p>On FreeSwitch documentation page <a href="https://freeswitch.org/confluence/display/FREESWITCH/mod_avmd" rel="nofollow">https://freeswitch.org/confluence/display/FREESWITCH/mod_avmd</a>, they say "The event is delivered to your ESL socket listener, to command prompt and written to logs. Avmd also sets the channel variable (see "Channel variables")."</p>
  
  <p>Ok that's cool. But what is the purpose if there is no way so the client can detect the event.</p>
  
  <p>I want the client to subscribe to this event and get notified via SIP.</p>
  
  <p>I tried with subscribe Header on sipml5 as follows:</p>
  
  <p><div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false">
  <div class="snippet-code">
  <pre class="snippet-code-js lang-js prettyprint-override"><code>var onEvent = function(e){
    if(e.type == 'i_notify'){
      // process incoming NOTIFY request
      console.info('NOTIFY content = ' + e.getContentString());
      console.info('NOTIFY content-type = ' + e.getContentType());
    }
  }
  var session = this.newSession('subscribe', {
    expires: 200,
    events_listener: { events: '*', listener: onEvent },
    sip_headers: [
      { name: 'Event', value: 'AVMD_EVENT_BEEP' },
      { name: 'Accept', value: 'text/event-plain' }
    ],
    sip_caps: [
      { name: '+g.oma.sip-im', value: null },
      { name: '+audio', value: null },
      { name: 'language', value: '\"en,fr\"' }
    ]
  });
  session.subscribe('sip:xxxxx@mydomain');</code></pre>
  </div>
  </div>
  </p>
  
  <p>But the problem is, the server is reponding with a BAD EVENT status.</p>
  
  <p>Any idea how I can detect the event on my client? Maybe detecting it on the server and triggering a sip notify to the client?</p>