Hi,
Like u told me before, I've tried to install and configure SEMS into my SER server to setup the voicemail feature.
I add some configuration file into ser.cfg and configure the sems.conf.
But when I try to run SER, I got some error. Please review my ser.cfg and sems.conf file below:

ser.cfg:

debug=9
fork=yes
log_stderror=yes

listen=202.95.149.2       # put your server IP address here
port=5060
children=4

dns=no
rev_dns=no

fifo="/tmp/ser_fifo"
fifo_db_url="mysql://ser:heslo@localhost/ser"
fifo_mode=0666

loadmodule "/usr/local/lib/ser/modules/mysql.so"
loadmodule "/usr/local/lib/ser/modules/sl.so"
loadmodule "/usr/local/lib/ser/modules/tm.so"
loadmodule "/usr/local/lib/ser/modules/rr.so"
loadmodule "/usr/local/lib/ser/modules/maxfwd.so"
loadmodule "/usr/local/lib/ser/modules/usrloc.so"
loadmodule "/usr/local/lib/ser/modules/registrar.so"
loadmodule "/usr/local/lib/ser/modules/auth.so"
loadmodule "/usr/local/lib/ser/modules/auth_db.so"
loadmodule "/usr/local/lib/ser/modules/nathelper.so"
loadmodule "/usr/local/lib/ser/modules/textops.so"
loadmodule "/usr/local/lib/ser/modules/uri_db.so"
loadmodule "/usr/local/lib/ser/modules/uri.so"
loadmodule "/usr/local/lib/ser/modules/avpops.so"
loadmodule "/usr/local/lib/ser/modules/domain.so"
loadmodule "/usr/local/lib/ser/modules/permissions.so"
loadmodule "/usr/local/lib/ser/modules/msilo.so"

modparam("auth_db|permissions|uri_db|usrloc","db_url", "mysql://ser:heslo@localhost/ser")
modparam("auth_db|uri_db|usrloc", "db_url", "mysql://ser:heslo@localhost/ser")
modparam("auth_db", "calculate_ha1", 1)
modparam("auth_db", "password_column", "password")

modparam("nathelper", "natping_interval", 30)
modparam("nathelper", "ping_nated_only", 1)
modparam("nathelper", "rtpproxy_sock", "/var/run/rtpproxy.sock")

modparam("usrloc", "db_mode", 2)

modparam("registrar", "nat_flag", 6)

modparam("rr", "enable_full_lr", 1)

modparam("tm", "fr_inv_timer", 27)
modparam("tm", "fr_inv_timer_avp", "inv_timeout")

modparam("permissions", "db_mode", 1)
modparam("permissions", "trusted_table", "trusted")

modparam("tm", "fr_timer", 10 )
modparam("tm", "fr_inv_timer", 15 )
modparam("tm", "wt_timer", 10 )
# configure tm to append this when tw_appent voicemail_headers is used
#modparam("tm", "tw_append", "voicemail_headers:hdr[User-Agent];P-Email-Address=avp[$email]")
#modparam("tm", "pass_provisional_replies", 1)

modparam("msilo", "db_url", "mysql://ser:heslo@localhost/ser")
modparam("msilo", "db_table", "silo")
modparam("msilo","registrar","sip:registrar@pcr.ac.id")
modparam("msilo","expire_time",259200)
modparam("msilo","check_time",30)
modparam("msilo","clean_period",5)

modparam( "avpops", "avp_aliases", "email=i:67" )

alias="pcr.ac.id"
route {
        # -----------------------------------------------------------------
        # Sanity Check Section
        # -----------------------------------------------------------------

        if (!mf_process_maxfwd_header("10")) {
                sl_send_reply("483", "Too Many Hops");
                break;
        };

        if (msg:len > max_len) {
                sl_send_reply("513", "Message Overflow");
                break;
        };

        # -----------------------------------------------------------------
        # Record Route Section
        # -----------------------------------------------------------------

        if (method!="REGISTER") {
                record_route();
        };

        if (method=="BYE" || method=="CANCEL") {
                unforce_rtp_proxy();
        }

        # -----------------------------------------------------------------
        # Loose Route Section
        # -----------------------------------------------------------------

        if (loose_route()) {
                if (has_totag() && (method=="INVITE" || method=="ACK")) {
                        if (nat_uac_test("19")) {
                                setflag(6);
                                force_rport();
                                fix_nated_contact();
                        };
                    force_rtp_proxy("l");
                };
                route(1);
                break;
        };
      #------------------------------------------------------------------
      # make transaction
      #-----------------------------------------------------------------
      if (!t_newtran()){
            log("could not create transaction\n");
            sl_send_reply("500","could not create transaction");
            break;
      }

      # actively absorb ACKs
      if (method == "ACK") {
            t_relay();
            break;
      }
     
      # pass INFO to SEMS
      if (method=="INFO") {
            if(!t_write_unix("/tmp/sems_sock","sems/info_append")){
                        log("could not contact sems\n");
                        t_reply("500","could not contact media server");
            }
      }

      if (uri =~ "sip:101.*@") {
            if (!t_write_unix("/tmp/sems_sock","myapp")){
                  log("could not contact media server\n");
                  t_reply("500","could not contact media server");     
                  break;
            }
            break;
      }

      if (uri =~ "sip:102.*@") {
            if (!t_write_unix("/tmp/sems_sock","myconfigurableapp")){
                  log("could not contact media server\n");
                  t_reply("500","could not contact media server");     
                  break;
            }
            break;
      }

      if (uri =~ "sip:103.*@") {
            if (!t_write_unix("/tmp/sems_sock","myannounceapp")){
                  log("could not contact media server\n");
                  t_reply("500","could not contact media server");     
                  break;
            }
            break;
      }

      if (uri =~ "sip:104.*@") {
            if (!t_write_unix("/tmp/sems_sock","myjukebox")){
                  log("could not contact media server\n");
                  t_reply("500","could not contact media server");     
                  break;
            }
            break;
      }

      if (uri =~ "sip:105.*@") {
            if (!t_write_unix("/tmp/sems_sock","mycc")){
                  log("could not contact media server\n");
                  t_reply("500","could not contact media server");     
                  break;
            }
            break;
      }

      if (uri =~ "sip:106.*@") {
            if (!t_write_unix("/tmp/sems_sock","ivr_announce")){
                  log("could not contact media server\n");
                  t_reply("500","could not contact media server");     
                  break;
            }
            break;
      }

      # default sems apps
      if (uri =~ "sip:110.*@") {
            if (!t_write_unix("/tmp/sems_sock","echo")){
                  log("could not contact echo\n");
                  t_reply("500","could not contact media server");     
                  break;
            }
            break;
      }

      if (uri =~ "sip:111.*@") {
            if (!t_write_unix("/tmp/sems_sock","announcement")){
                  log("could not contact announcement\n");
                  t_reply("500","could not contact media server");     
                  break;
            }
            break;
      }

      if (uri =~ "sip:112.*@") {
            if (!t_write_unix("/tmp/sems_sock","conference")){
                  log("could not contact conference\n");
                  t_reply("500","could not contact media server");     
                  break;
            }
            break;
      }

      if (uri =~ "sip:113.*@") {
            if (!t_write_unix("/tmp/sems_sock","mailbox")){
                  log("could not contact mailbox\n");
                  t_reply("500","could not contact media server");     
                  break;
            }
            break;
      }

      if (uri =~ "sip:114.*@") {
            if (!t_write_unix("/tmp/sems_sock","early_announce")){
                  log("could not contact early_announce\n");
                  t_reply("500","could not contact media server");     
                  break;
            }
            break;
      }

      if (uri =~ "sip:115.*@") {
            # load email avp with some email address
            avp_write("root@localhost","$email");
            # use voicemail_headers append to pass it to sems
            if (!t_write_unix("/tmp/sems_sock","voicemail/voicemail_headers")){
                  log("could not contact voicemail\n");
                  t_reply("500","could not contact media server");     
                  break;
            }
            break;
      }

      t_reply("404","Not found");

        # -----------------------------------------------------------------
        # Offline Message Store Section
        # -----------------------------------------------------------------
      if (is_from_local()) {  
            if (method=="REGISTER") {
            save("location");
            log("REGISTER received -> dumping messages with MSILO\n");

            # MSILO - dumping user's offline messages
            if (m_dump())
            {
                log("MSILO: offline messages dumped - if they were\n");
            }else{
                log("MSILO: no offline messages dumped\n");
            };
            break;
        };

        # domestic SIP destinations are handled using our USRLOC DB

        if(!lookup("location"))
        {
            if (! t_newtran())
               {
                sl_reply_error();
                break;
               };
            # we do not care about anything else but MESSAGEs
            if (!method=="MESSAGE")
            {
                if (!t_reply("404", "Not found"))
                {
                    sl_reply_error();
                };
                break;
            };
            log("MESSAGE received -> storing using MSILO\n");
            # MSILO - storing as offline message
            if (m_store("0"))
            {
                log("MSILO: offline message stored\n");
                if (!t_reply("202", "Accepted"))
                {
                    sl_reply_error();
                };
            }else{
                log("MSILO: offline message NOT stored\n");
                if (!t_reply("503", "Service Unavailable"))
                {
                    sl_reply_error();
                };
            };
            break;
        };
        # if the downstream UA does not support MESSAGE requests
        # go to failure_route[1]
        t_on_failure("1");
        t_relay();
        break;
    };
      # forward to current uri now; use stateful forwarding that
        # works reliably even if we forward from TCP to UDP
        if (!t_relay()) {
                sl_reply_error();
        };

       # -----------------------------------------------------------------
        # Call Type Processing Section
        # -----------------------------------------------------------------

        if (uri!=myself) {
                        route(5);
                        route(1);
                        break;
        };

        if (uri==myself) {
                if (method=="ACK") {
                        route(6);
                        break;
                } else if (method=="CANCEL") {
                        route(3);
                        break;
                } else if (method=="INVITE") {
                        route(3);
                        break;
                } else  if (method=="REGISTER") {
                        route(2);
                        break;
                };
                lookup("aliases");
                if (uri!=myself) {
                        route(5);
                        route(1);
                        break;
                };

                if (!lookup("location")) {
                        sl_send_reply("404", "User Not Found");
                        break;
                };
        };
        route(1);
}

failure_route[1] {
    # forwarding failed -- check if the request was a MESSAGE
    if (!method=="MESSAGE")
    {
        break;
    };

    log(1,"MSILO:the downstream UA doesn't support MESSAGEs\n");
    # we have changed the R-URI with the contact address, ignore it now
    if (m_store("1"))
    {
        log("MSILO: offline message stored\n");
        t_reply("202", "Accepted");
    }else{
        log("MSILO: offline message NOT stored\n");
        t_reply("503", "Service Unavailable");
    };
}

route[1] {

        # -----------------------------------------------------------------
        # Default Message Handler
        # -----------------------------------------------------------------

        t_on_reply("1");
        if (!t_relay()) {
                if (method=="INVITE" && isflagset(6)) {
                  unforce_rtp_proxy();
                };
                sl_reply_error();
        };
}

route[2] {

        # -----------------------------------------------------------------
        # REGISTER Message Handler
        # ----------------------------------------------------------------

        if (!search("^Contact:\ +\*") && nat_uac_test("19")) {
                setflag(6);
                fix_nated_register();
                force_rport();
        };
        sl_send_reply("100", "Trying");

        if (!www_authorize("pcr.ac.id","subscriber")) {
                www_challenge("pcr.ac.id","0");
                break;
        };

        if (!check_to()) {
                sl_send_reply("401", "Unauthorized");
                break;
        };
        consume_credentials();
        if (!save("location")) {
                sl_reply_error();
        };
}

route[3] {

        # -----------------------------------------------------------------
        # CANCEL and INVITE Message Handler
        # -----------------------------------------------------------------

        if (!allow_trusted() && nat_uac_test("19")) {
                 setflag(6);
        }
        lookup("aliases");
        if (method=="INVITE" && !allow_trusted())
        {
                if (!proxy_authorize("pcr.ac.id","subscriber")) {
                        proxy_challenge("pcr.ac.id","0");
                        break;
                } else if (!check_from()) {
                        sl_send_reply("403", "Use From=ID");
                        break;
                };
                consume_credentials();
        };

        if (uri=~"^sip:9[0-9]*@") {
                route(4);
                break;
        };

        if (uri!=myself) {
                route(5);
                route(1);
                break;
        };

        if (!lookup("location")) {
                if (uri=~"^sip:[0-9]{10}@") {
                route(4);
                break;
                };
                sl_send_reply("404", "User Not Found");
                break;
        };

        if (isflagset(6)) {
                force_rport();
                fix_nated_contact();
                force_rtp_proxy();
        };
        t_on_reply("1");

        if (!t_relay()) {
                if(isflagset(6)) {
                        unforce_rtp_proxy();
                }
                sl_reply_error();
        };
}

route[4] {

 # -----------------------------------------------------------------
 # PSTN Handler
 # -----------------------------------------------------------------

 rewritehostport("202.95.149.2:5060"); # INSERT YOUR PSTN GATEWAY IP ADDRESS
 avp_write("i:45", "inv_timeout");

 if (isflagset(6)) {
                force_rport();
                fix_nated_contact();
                force_rtp_proxy();
                };
 route(1);
 }

onreply_route[1] {
        if (isflagset(6) && status=~"(180)|(183)|2[0-9][0-9]") {
                if (!search("^Content-Length:\ +0")) {
                        force_rtp_proxy();
                };
        };

        if (nat_uac_test("1")) {
                fix_nated_contact();
        };
}
-------------------------------------------------------------------------------------------------------------------
sems.conf:
# Sip Express Media Server (sems)
#
# sample configuration file
#
#
# whitespaces (spaces and tabs) are ignored
# comments start with a "#" and may be used inline
#
# example: option=value1, value2  # i like this option
#

##################################
# global parameters              #
##################################

# optional parameter: fork={yes|no}
#
# - specifies if sems should run in daemon mode (background)
#   (fork=no is the same as -E)
fork=yes

# optional parameter: stderr={yes|no}
#
# - debug mode: do not fork and log to stderr
#   (stderr=yes is the same as -E)
stderr=no

# optional parameter: loglevel={0|1|2|3}
#
# - sets log level (error=0, warning=1, info=2, debug=3)
#   (same as -D)
loglevel=1

# optional parameter: ser_fifo_name=<filename>
#
# - path and file name of Ser's fifo file (same as -o)
ser_fifo_name=/tmp/ser_fifo

# optional parameter: socket_name=<filename>
#
# - path and file name of our unix socket
socket_name=/tmp/am_sock

# optional parameter: ser_socket_name=<filename>
#
# - path and file name of Ser's unix socket
ser_socket_name=/tmp/ser_sock

# optional parameter: send_method=<filename>
#
# - sets which method will be used to contact Ser:
#   FIFO or unix socket server.
# - values: fifo (default), unix_socket
#
# - PLEASE NOTE THAT: if you use 'fifo', make sure that
#   fifo_name and ser_fifo_name have been set. if you use 'unix_socket',
#   make sure that socket_name and ser_socket_name have been set.
#
send_method=fifo

# optional parameter: user_prefix_separator
#  if set, sems will reply with a Contact header in the form
#   Contact: <plugin-name><user_prefix_separator><user>
#  needed if a single ser instance is used with sems.
#
# user_prefix_separator=+

# optional parameter: plugin_path=<path>
#
# - sets the path to the plug-ins
# - may be absolute or relative to CWD
#plugin_path=/usr/local/lib/sems/plug-in/
plugin_path=lib

# optional parameter: smtp_server=<hostname>
#
# - sets address of smtp server
smtp_server=localhost

# optional parameter: smtp_port=<port>
#
# - sets port of smtp server
smtp_port=25

# optional parameter: rtp_low_port=<port>
#
# - sets port of rtp lowest server
#rtp_low_port=1024

# optional parameter: rtp_high_port=<port>
#
# - sets port of rtp highest server
#rtp_high_port=65535

##################################
# module specific parameters     #
##################################

# sample voicemail configuration (inline)
config.voicemail=inline

# optional parameter: announce_path=<path>
#
# - sets the path where announce files are searched for
# - the file to be played is determined the following way:
#   <announce_path>/<domainname>/<username>.wav
#   if this file is not available <announce_path>/<default_anounce> is used
#announce_path=/usr/local/lib/sems/audio/
announce_path=wav

# parameter: default_announce=<filename>
#
# - sets the name of the default announce WAV file
default_announce=default_en.wav

# parameter: max_record_time=<seconds>
#
# - maximum record time
max_record_time=30

# parameter: email_template=<filename>
#
# - email template file
#
# See the README file in <sems-src>/plug-in/voicemail
# for more information on the syntax used.
#
#email_template=/usr/local/lib/sems/plug-in/mail.template
email_template=plug-in/voicemail/default.template.sample

# end of configuration section for voicemail module
config.voicemail=end


# sample announcement configuration (inline)
config.announcement=inline

# optional parameter: announce_path=<path>
#
# - sets the path where announce files are searched for
#announce_path=/usr/local/lib/sems/audio/
announce_path=wav

# parameter: default_announce=<filename>
#
# - sets the name of the default announce WAV file
default_announce=default_en.wav

# end of configuration section for announcement module
config.announcement=end


# sample isdngw module configuration (external file)
# config.isdngw=/etc/isdngw.conf

# sample ivr module configuration (inline)
config.ivr=inline

#parameter: python_script_path=<full path>
#python_script_path=/etc/ivr

#parameter: python_script_file=<filename>
#python_script_file=example.py

# end of configuration section for ivr module
config.ivr=end


# sample conference configuration (inline)
config.conference=inline

# parameter: default_announce=<filename>
#
# - sets the full pathed name of the default announce WAV file.
#   Will be played to lonely users.
#default_announce=/usr/local/lib/sems/audio/first_participant.wav
default_announce=wav/first_participant.wav

# parameter: join_sound=<filename>
#
# - sets the full pathed name of a WAV file
#   which will be played to conference users
#   when a new user joins the conference.
#join_sound=/usr/local/lib/sems/audio/beep.wav
join_sound=wav/beep.wav

# parameter: drop_sound=<filename>
#
# - sets the full pathed name of a WAV file
#   which will be played to conference users
#   when a user drops the conference.
#drop_sound=/usr/local/lib/sems/audio/beep.wav
drop_sound=wav/beep.wav

# end of configuration section for conference module
config.conference=end

# example configuration for number reader
config.number_reader=inline

#number_path=/usr/local/lib/sems/audio/
number_path=wav

prolog_file=welcome_to_number_reader.wav

epilog_file=thanks_calling_number_reader.wav

# end of number_reader configuration
config.number_reader=end

# add more module configurations here (inline or external):
#
# config.mymodule=<filename>
#  or
# config.mymodule=inline
# ...
# config.mymodule=end
-------------------------------------------------------------------------------------------------------------------
In addition, I'm using SER 0.9.7.
Please tell me what's wrong.
Thanx

Regards,
Meidiana


Access over 1 million songs - Yahoo! Music Unlimited.