We've Moved! Please visit our new and improved forum over at our new portal: https://portal.plumvoice.com/hc/en-us/community/topics

About answering machine detection

Questions and answers about IVR programming for Plum DEV

Moderators: admin, support

Post Reply
helix
Posts: 2
Joined: Thu Nov 01, 2018 12:20 pm

About answering machine detection

Post by helix »

Hello Team,

By utilizing the post found before viewtopic.php?f=2&t=470297&p=545205&hil ... ee#p545205
we did modification for our vxml as attached below.

The problem is the the when we speak "hello" after pick up phone, some time it detected as correctly, some time it detected as answeringmachine, some time as fax.

Any suggestion to help us to improve the accuracy will be appreciated.


<?xml version="1.0"?>
<vxml version="2.0">
<property name="recordcall" value="true" />
<form id="mainmenu">
<record name="voicemachine" finalsilence="3s" maxtime="30s">
<property name="inputmodes" value="dtmf" />
<property name="interdigittimeout" value="10ms" />
<prompt bargein="false">
<break time="1s" />
</prompt>
<prompt>
<audio src="/PlumDEVApp/wav/start.wav">
Hello! Please press any key to continue
</audio>
</prompt>
<filled>
<if cond="voicemachine$.termchar ==null">
<throw event="noinput" />
</if>
<log label="mylog">My log says <value expr="voicemachine$.termchar" /></log>
<submit next="/PlumDEVApp/api/etc...." method="post" namelist="param1, param2......" fetchtimeout="60s" />
</filled>
<noinput count="1">
<log label="mylog">detect in noinput as <value expr="session.connection.callee_type" /></log>
<if cond="session.connection.callee_type == 'voice'">
<submit next="/PlumDEVApp/api/etc...." method="post" namelist="param1, param2......" fetchtimeout="60s" />
<else />
<assign name="Outcome" expr="2473" />
<goto nextitem="leftMessage" />
</if>
</noinput>
<nomatch count="1">
<log label="mylog">detect in nomatch as <value expr="session.connection.callee_type" /></log>
<if cond="session.connection.callee_type == 'voice'">
<submit next="/PlumDEVApp/api/etc...." method="post" namelist="param1, param2......" fetchtimeout="60s" />
<else />
<assign name="Outcome" expr="2473" />
<goto nextitem="leftMessage" />
</if>
</nomatch>
</record>
<record name="leftMessage" finalsilence="1s" maxtime="5s">
<property name="interdigittimeout" value="10ms" />
<prompt bargein="false">
<break time="1s" />
</prompt>
<prompt>
<audio src="/PlumDEVApp/wav/voicemessage_1.wav">
Hello! Please call us at
</audio>
<audio expr="BranchWav">
<value expr="BranchTTS" />
</audio>
<audio src="/PlumDEVApp/wav/voicemessage_2.wav">
to order your supplies. The number again is
</audio>
<audio expr="BranchWav">
<value expr="BranchTTS" />
</audio>
<audio src="/PlumDEVApp/wav/voicemessage_3.wav">
Thank you for us, and have a great day!
</audio>
</prompt>
<filled>
<if cond="leftMessage$.termchar != null">
<submit next="/PlumDEVApp/api/etc...." method="post" namelist="param1, param2......" fetchtimeout="60s" />
</if>
<throw event="noinput" />
</filled>
<noinput count="1">
<log label="mylog">During leaving message, detect as <value expr="session.connection.callee_type" /></log>
<if cond="session.connection.callee_type == 'voice'">
<submit next="/PlumDEVApp/api/etc...." method="post" namelist="param1, param2......" fetchtimeout="60s" />
<else />
<assign name="Outcome" expr="2473" />
<throw event="farend" />
</if>
</noinput>
<nomatch count="1">
<log label="mylog">During leaving message, detect in nomatch as <value expr="session.connection.callee_type" /></log>
<if cond="session.connection.callee_type == 'voice'">
<submit next="/PlumDEVApp/api/etc...." method="post" namelist="param1, param2......" fetchtimeout="60s" />
<else />
<throw event="farend" />
</if>
</nomatch>
</record>
<catch event="connection.disconnect.hangup farend">
<submit next="/PlumDEVApp/api/etc...." method="post" namelist="param1, param2......" fetchtimeout="60s" />
</catch>
</form>
</vxml>

support
Posts: 3632
Joined: Mon Jun 02, 2003 3:47 pm
Location: Boston, MA
Contact:

Re: About answering machine detection

Post by support »

Hello,

After reviewing your code there are a few small changes we would make. For example there is no reason to perform a second <record>, that should be a <field>. There also is no reason to check the session.connection.callee_type after the first <record> is complete. The callee type detection occurs over the first 4-6 seconds of the call and after that time it will not update. This means that your initial prompt should contain a welcome prompt that is at least 5 seconds long (you already have a 1 second <break/>). Our other recommendation is to make sure that the prompt leaving a message also includes instructions to press any key to accept the call. None of these changes will improve the underlying detection algorithm but they should help the overall acceptance rates. Ultimately the callee type detection is used in conjunction with requesting users press a button. Even as we improve it over time the callee type detection algorithm will never be 100% accurate but a user pressing a button always will be which is why we recommend that as the best approach. Below are our recommended code changes:

Code: Select all

<?xml version="1.0"?>
<vxml version="2.0">
    <property name="recordcall" value="true" />
    <property name="inputmodes" value="dtmf" />
    <property name="interdigittimeout" value="10ms" />
    <form id="mainmenu">
        <record name="voicemachine" finalsilence="1s" maxtime="30s">
            <prompt bargein="false">
                <break time="1s" />
            </prompt>
            <prompt>
                <!-- NOTE: THIS PROMPT SHOULD BE AT LEAST 5 SECONDS LONG -->
                <audio src="/PlumDEVApp/wav/start.wav">Hello! Please press any key to continue</audio>
            </prompt>
            <filled>
                <if cond="voicemachine$.termchar == null">
                    <throw event="noinput" />
                </if>
                <!-- HUMAN -->
                <log label="mylog">My log says <value expr="voicemachine$.termchar" /></log>
                <submit next="/PlumDEVApp/api/etc...." method="post" namelist="param1, param2......" fetchtimeout="60s" />
            </filled>
            <noinput>
                <log label="mylog">detect in noinput as <value expr="session.connection.callee_type" /></log>
                <if cond="session.connection.callee_type == 'voice'">
                    <!-- HUMAN -->
                    <submit next="/PlumDEVApp/api/etc...." method="post" namelist="param1, param2......" fetchtimeout="60s" />
                <else />
                    <!-- NON-HUMAN -->
                    <assign name="Outcome" expr="2473" />
                    <goto nextitem="leftMessage" />
                </if>
            </noinput>
        </record>
        <field name="leftMessage" type="digits">
            <prompt>
                <!-- NOTE: THIS PROMPT SHOULD ASK THE USER TO PRESS ANY KEY TO ACCEPT THIS CALL -->
                <audio src="/PlumDEVApp/wav/voicemessage_1.wav">Hello! Please call us at</audio>
                <audio expr="BranchWav"><value expr="BranchTTS" /></audio>
                <audio src="/PlumDEVApp/wav/voicemessage_2.wav">to order your supplies. The number again is</audio>
                <audio expr="BranchWav"><value expr="BranchTTS" /></audio>
                <audio src="/PlumDEVApp/wav/voicemessage_3.wav">Thank you for us, and have a great day!</audio>
            </prompt>
            <filled>
                <!-- HUMAN -->
                <submit next="/PlumDEVApp/api/etc...." method="post" namelist="param1, param2......" fetchtimeout="60s" />
            </filled>
            <noinput>
                <!-- NON-HUMAN -->
                <submit next="/PlumDEVApp/api/etc...." method="post" namelist="param1, param2......" fetchtimeout="60s" />
            </noinput>
            <nomatch>
                <!-- HUMAN -->
                <submit next="/PlumDEVApp/api/etc...." method="post" namelist="param1, param2......" fetchtimeout="60s" />
            </nomatch>
        </field>
    </form>
</vxml>
Regards,
Plum Support

Post Reply