===== RapidSMS and Kannel ===== ==== Install RapidSMS ==== python3 -m venv $HOME/rapidsms source $HOME/rapidsms/bin/activate pip install rapidsms $ cd $HOME $ virtualenv $HOME/smsbot-venv $ source $HOME/smsbot-venv/bin/activate $ pip install Django $ django-admin.py startproject --template=https://github.com/rapidsms/rapidsms-project-template/zipball/release-0.21.1 --extension=py,rst smsbot $ cd $HOME/smsbot $ pip install -r requirements/base.txt Comment these lines of $HOME/smsbot/settings.py: (...) INSTALLED_APPS = ( # "rapidsms.contrib.echo", (...) RAPIDSMS_HANDLERS = ( # 'rapidsms.contrib.echo.handlers.echo.EchoHandler', # 'rapidsms.contrib.echo.handlers.ping.PingHandler', (...) Setup database: $ python manage.py syncdb $ python manage.py migrate ==== Install Kannel ==== I have a SIM800C based GSM Module for my RPi, if you have one maybe you need to read [[gsm_modem_rpi|first this]] to get start, Kannel also will work with more common USB modems. Install Kannel: $ sudo apt-get install kannel kannel-extras Configure Kannel default value in file /etc/default/kannel #START_WAPBOX=0 START_SMSBOX=1 Configure the file /etc/kannel/kannel.conf with this content, you need to change the configure following your requeriments: CONFIGURATION FOR USING SMS KANNEL WITH RAPIDSMS # # For any modifications to this file, see Kannel User Guide # If that does not help, see Kannel web page (http://www.kannel.org) and # various online help and mailing list archives # # Notes on those who base their configuration on this: # 1) check security issues! (allowed IPs, passwords and ports) # 2) groups cannot have empty rows inside them! # 3) read the user guide include = "/etc/kannel/modems.conf" #--------------------------------------------- # CORE # # There is only one core group and it sets all basic settings # of the bearerbox (and system). You should take extra notes on # configuration variables like 'store-file' (or 'store-dir'), # 'admin-allow-ip' and 'access.log' group = core admin-port = 13000 smsbox-port = 13001 admin-password = CHANGE-ME status-password = CHANGE-ME admin-deny-ip = "*.*.*.*" admin-allow-ip = "127.0.0.1" box-deny-ip = "*.*.*.*" box-allow-ip = "127.0.0.1" log-file = "/var/log/kannel/bearerbox.log" log-level = 0 #--------------------------------------------- # SMSC CONNECTIONS # # SMSC connections are created in bearerbox and they handle SMSC specific # protocol and message relying. You need these to actually receive and send # messages to handset, but can use GSM modems as virtual SMSCs # Here is a sample SMSC for use with the /usr/lib/kannel/test/fakesmsc command group = smsc smsc = at smsc-id = piojos my-number = +506CENSORED modemtype = auto device = /dev/ttyAMA0 #--------------------------------------------- # SMSBOX SETUP # # Smsbox(es) do higher-level SMS handling after they have been received from # SMS centers by bearerbox, or before they are given to bearerbox for delivery group = smsbox bearerbox-host = 127.0.0.1 sendsms-port = 13013 sendsms-chars = "0123456789 +-" log-file = "/var/log/kannel/smsbox.log" log-level = 0 access-log = "/var/log/kannel/smsbox-access.log" reply-couldnotfetch = "Your message could not be processed at this time. Please try again later. (err=couldnotfetch)" reply-requestfailed = "Your message could not be processed at this time. Please try again later. (err=requestfailed)" reply-couldnotrepresent = "Your message could not be processed at this time. Please try again later. (err=couldnotrepresent)" http-request-retry = 3 http-queue-delay = 10 # SEND-SMS USERS # # These users are used when Kannel smsbox sendsms interface is used to # send PUSH sms messages, i.e. calling URL like # http://kannel.machine:13013/cgi-bin/sendsms?username=tester&password=foobar... # This is the username and password that RapidSMS uses to deliver SMSes to # Kannel. It must also set the 'smsc' variable in the query string, so that # Kannel knows which SMSC to use to route the message. group = sendsms-user username = rapidsms password = CHANGE-ME user-deny-ip = "*.*.*.*" user-allow-ip = "127.0.0.1;" #--------------------------------------------- # SERVICES # # These are 'responses' to sms PULL messages, i.e. messages arriving from # handsets. The response is based on message content. Only one sms-service is # applied, using the first one to match. # The 'ping-kannel' service let's you check to see if Kannel is running, # even if RapidSMS is offline for some reason. group = sms-service keyword = ping-kannel text = "Kannel is online and responding to messages." # There should be always a 'default' service. This service is used when no # other 'sms-service' is applied. These relay incoming messages from any # configured SMSCs to the appropriate HTTP backend URLs in RapidSMS. # By setting 'accepted-smsc', we are assured that messages are routed to # the appropriate backend in RapidSMS. group = sms-service keyword = default catch-all = yes accepted-smsc = piojos # don't send a reply here (it'll come through sendsms): max-messages = 0 get-url = http://192.168.1.12:8000/backend/kannel-piojos/?id=%p&text=%a&charset=%C&coding=%c Copy modem configuration file and restart Kannel: $ sudo cp /usr/share/doc/kannel/examples/modems.conf /etc/kannel/ $ sudo systemctl restart kannel ==== Reconfigure RapidSMS ==== Edit $HOME/smsbot/smsbot/settings.py to allow RapidSMS fetch SMS: INSTALLED_BACKENDS = { # "message_tester": { # "ENGINE": "rapidsms.backends.database.DatabaseBackend", # }, "kannel-piojos" : { "ENGINE": "rapidsms.backends.kannel.KannelBackend", "sendsms_url": "http://127.0.0.1:13013/cgi-bin/sendsms", "sendsms_params": {"smsc": "piojos", "from": "+506CENSORED", # not set automatically by SMSC "username": "rapidsms", "password": "CHANGE-ME"}, # or set in localsettings.py "coding": 0, "charset": "ascii", "encode_errors": "ignore", # strip out unknown (unicode) characters "delivery_report_url": "http://192.168.1.12:8000", }, } And configure file $HOME/smsbot/smsbot/urls.py: url(r"^backend/kannel-piojos/$", KannelBackendView.as_view(backend_name="kannel-piojos")), Now configure RapidSMS to send delivery reports, configure file $HOME/smsbot/smsbot/settings.py: INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.admin', 'django.contrib.humanize', 'django.contrib.sitemaps', # External apps "django_tables2", "selectable", # RapidSMS "rapidsms", "rapidsms.backends.database", "rapidsms.contrib.handlers", "rapidsms.contrib.httptester", "rapidsms.contrib.messagelog", "rapidsms.contrib.messaging", "rapidsms.contrib.registration", "rapidsms.backends.kannel", #"rapidsms.contrib.echo", "rapidsms.contrib.default", # Must be last ) And edit $HOME/smsbot/smsbot/urls.py: url(r'^kannel/', include('rapidsms.backends.kannel.urls')), ==== Start RapidSMS ==== $ cd $HOME/smsbot $ python manage.py runserver 192.168.1.12:8000 You can enter to http://192.168.1.12:8000 Maybe you want to start automatically the service with systemd, you can read this to [[virtualenv_systemd|get ready]] ==== Change default response ==== Edit the file $HOME/smsbot/smsbot/settings.py and add this line: DEFAULT_RESPONSE = "Parece que me llego un mensaje que no entiendo" ==== Test it ==== You can send a SMS with word ping, no uppercase to the SIM number, you will get a pong response, in web interface you will see the log of received and outgoing SMS. If you send any other word you will receive a SMS with "Parece que me llego un mensaje que no entiendo". ==== Throubleshooting ==== You can make researching in log files: $ sudo tail -f /var/log/kannel/bearerbox.log $ sudo tail -f /var/log/kannel/smsbox.log If you read this message in /var/log/kannel/bearerbox.log: 2014-11-21 10:41:55 [1912] [6] INFO: AT2[/dev/ttyACM0]: opening device 2014-11-21 10:41:55 [1912] [6] ERROR: AT2[/dev/ttyACM0]: open failed! ERRNO=13 2014-11-21 10:41:55 [1912] [6] ERROR: System error 13: Permission denied 2014-11-21 10:41:55 [1912] [6] ERROR: AT2[/dev/ttyACM0]: at2_device_thread: open_at2_device failed. 2014-11-21 10:41:55 [1912] [6] ERROR: System error 13: Permission denied 2014-11-21 10:41:55 [1912] [6] ERROR: AT2[/dev/ttyACM0]: Couldn't connect (retrying in 10 seconds). And can't receive or send SMS, follow this steps: $ sudo usermod -a -G dialout kannel $ sudo chown kannel /dev/ttyACM0 ==== References ==== * https://rapidsms.readthedocs.io/en/develop/tutorial/tutorial01.html#tutorial01 * https://rapidsms.readthedocs.io/en/develop/topics/backends/kannel.html#kannel-configuration * https://aacable.wordpress.com/2014/11/21/kannel-auto-startup-problem-with-system-error-13-permission-denied/