NOTICE!!! This document is deprecated!

New version is coming soon!

SMS Library for Moodle

As always this document is a draft and written as personal notes. This is not a definitive guide.

This SMS library supports two SMS Gateways and one SMS service:

  1. Kannel WAP/SMS Gateway
  2. NowSMS SMS/MMS Gateway (includes sending MMS messages)
  3. Clickatell SMS Service

Content

 

The SMS library download

The package can be downloaded here. WARNING!!! Use at your own risk!

Requirements

Installation

First we need to create a new database table called prefix_sms_config, where "prefix" means whatever prefix you've chosen when you installed moodle. For example mdl_.

In MySQL:

CREATE TABLE prefix_sms_config (
 id      int(10) unsigned not null auto_increment,
 name    varchar(100) not null,
 value   varchar(255) not null,
 PRIMARY KEY (id)
);

And in PostgreSQL:

CREATE TABLE prefix_sms_config (
 id     SERIAL,
 name   VARCHAR(100) NOT NULL,
 value  VARCHAR(255) NOT NULL,
 PRIMARY KEY(id)
);

Unzip the sms library package into your Moodle installation directory. The package has following structure:

  lib/sms/
        - smslib.php
        - sms.class.php
        /kannel/
               - kannel.class.php
        /nowsms/
               - nowsms.class.php
        /clickatell/
              - clickatell.class.php
  admin/
        - sms.php
        - sms.html
  lang/en/
        - sms.php

( If you'd like to have links in admin page edit admin/index.php and admin/configure.php in appropriate places )

Kannel Gateway Installation

Get kannel source code from kannel's site: http://kannel.org

Unzip the source code to some directory and compile it.

[janne@nutso janne#]cd /usr/local/src
[janne@nutso src#]tar -xzvf ~janne/gateway-1.4.0.tar.gz
[janne@nutso src#]cd gateway-1.4.0/

[janne@nutso gateway-1.4.0#]./configure --prefix=/usr/local/kannel
Configure....
[janne@nutso gateway-1.4.0#]make >& make.log &
[janne@nutso gateway-1.4.0#]tail -f make.log
<all kinds of code is running on your screen at this point...>

[janne@nutso gateway-1.4.0#]make install >& install.log &
[janne@nutso gateway-1.4.0#]tail -f install.log

Kannel Gateway configuration

Create a configuration file into your /etc directory (The startup script uses: /etc/smskannel.conf).

Edit the configuration file so it matches your system and settings:

# CORE
group = core
admin-port = 13000
admin-password = yourpassword
status-password = yourpassword
log-file = "/var/log/kannel/kannel.log"
log-level = 0
access-log = "/var/log/kannel/access.log"
wapbox-port = 13002
smsbox-port = 13001
store-file = "/var/log/kannel/kannel.store"


# SMSC Fake
group = smsc
smsc = at
modemtype = auto
device = /dev/ttyUSB0
speed = 57600
pin = 0000
#host = localhost
#port = 13013


# MODEM DEFINITIONS
group = modems
id = nokia
name = "Nokia"
detect-string = "Nokia"


# SMSBOX SETUP
group = smsbox
bearerbox-host = localhost
sendsms-port = 13014
sendsms-chars = "0123456789+"
global-sender = "+358401234567"
log-file = "/var/log/kannel/smsbox.log"
log-level = 0
access-log = "/var/log/kannel/access.log"


# SEND-SMS USERS
group = sendsms-user
username = youruser
password = yourpassword
concatenation = 1
max-messages = 10


# SMS SERVICE 'default'
group = sms-service
keyword = nop
text = "You asked nothing and I did it!"
catch-all = true


# SMS SERVICE for receiving sms messages
# there should be default always
group = sms-service
keyword = yourkeyword
get-url = http://server.domain/moodle/receivesms.php?q=%k&sender=%p&message=%a

Create a startup script ( this is for Fedora Core ) and place it in /etc/init.d/ directory:

#!/bin/sh
#
# gateway         This shell script takes care of starting and stopping
#                 the Kannel WAP gateway (bearer/wapbox)
#
# chkconfig: 2345 97 03
# description:  Start and stop the Kannel WAP gateway used to fetch \
#               some WML content from a Web server & compile it \
#               into WMLC mobile phone bytecode.
# probe: true

# Use start-stop-daemon
ver=1.40
BBOX=/usr/local/sbin/bearerbox
SBOX=/usr/local/sbin/smsbox
START="/usr/sbin/start-stop-daemon --start --background --quiet --exec"
STOP="/usr/sbin/start-stop-daemon --stop --quiet --oknodo --exec"
CONF=/etc/smskannel.conf
[ $# -eq 2 ] && ver=$2

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0

[ -x $BBOX ] || exit 0

[ -x $SBOX ] || exit 0

[ -f $CONF ] || exit 0


RETVAL=0

# See how we were called.
case "$1" in
    start)
    # Start daemons.
            echo -n "Starting bearer service (gateway kannel $ver): "
            $START $BBOX -- $CONF
            RETVAL1=$?
            sleep 1 # Sleep for a while before we try to start smsbox
            echo
            echo -n "Starting smsbox service (gateway kannel $ver): "
            $START $SBOX -- $CONF
            RETVAL2=$?
            echo
            echo
            [ $RETVAL1 -eq 0 -a $RETVAL2 -eq 0 ] && touch /var/lock/subsys/gateway ||\
            RETVAL=1
            ;;
      stop)
            # Stop daemons.
            echo -n "Shutting down smsbox (kannel $ver): "
            $STOP $SBOX
            RETVAL2=$?
            echo
            echo -n "Shutting down bearerbox (kannel $ver): "
            $STOP $BBOX
            RETVAL1=$?
            echo
            [ $RETVAL1 -eq 0 -a $RETVAL2 -eq 0 ] && rm -f /var/lock/subsys/gateway
            echo ""
            ;;
      status)
            status bearerbox
            status smsbox
            exit $?
            ;;
      restart)
            $0 stop
            sleep 1
            $0 start
            ;;
      *)
            echo "Usage: named {start|stop|status|restart}"
            exit 1
esac
exit $RETVAL

Plug your mobilephone into your computers USB port and start kannel. Check your /var/log/kannel/kannel.log. If you can find several AT command lines and line where it says AT SMSC successfully opened. Then all is fine.

NowSMS

Com'on!!! It's a Windows™ software!!! Click Yes or Next like a mad man...

There's a quite good configuration documentation in NowSMS's website.

Change your Moodle SMS settings

Point your browser to http://yoursite/moodleinstalldir/admin/sms.php and provide necessary settings:

SMS settings

Send test message

Create a test code somewhere in your moodle installation directory ( remove it when you're done with it).

<?php

    include('config.php');
    include($CFG->libdir .'/sms/smslib.php');

    $to = '+35840123456'; // Receivers number.
    $text = 'This is only test from SMS enabled Moodle site!';

    $sms = newSmsClass();

    if ($sms->send_sms_message($to, $text) ) {
        echo "Message sent!!!";
    } else {
        echo "Could not send sms message...";
    }

?>

Point your browser to this page and if it's printing "Message sent", you should get text message shortly after that.

Hopefully to be continued...

Back to top