Простой смс-бот на shell в Ubuntu

/www/pages/modesco/ubuntovod

Итак, заключительный репост с Хабра, уже третий за эту ночь. В этот раз статья также очень интересная. С её помощью вы сможете создать смс-бота на shell в Ubuntu Linux.

На днях я написал простого бота для смс-переписки. Он может принимать входящие сообщения, обрабатывать их и (если слова из сообщения есть в его "памяти") отправлять назад логичные ответы.

Все, что мне понадобилось:
  • Ubuntu 12.04 на домашнем компьютере
  • Установленный gnokii (посмотреть как его установить можно тут)
  • Shell скрипт
  • Cron, регулярно запускающий этот скрипт
  • Телефон с деньгами на счету (подойдет почти любая старая Nokia с блютузом, а также SonyEricsson k серии)
  • Bluetooth адаптер
  • Пара часов свободного времени

Плюсом стало отсутствие необходимости в Интернет-подключении.

Итак, начну с описания общей логики приложения, чтобы было сразу понятно что и зачем.

Есть сторонний абонент А. Есть наш телефон — абонент B.

Наши действия.
  1. Абонента B сопрягаем с компьютером по bluetooth стандартными средствами телефона, разрешаем ему автоматическую авторизацию
  2. Устанавливаем gnokii
  3. Создаем и даем права на исполнения скрипту sms_bot.sh:
    #!/bin/bash
     
    inp=$(gnokii --getsms IN 1 end) #считывает смску из памяти
     
    echo $inp>/home/light204/Desktop/inp.txt #записывает ее в буферный файл
     
    counter_love=$(grep -c люблю /home/light204/Desktop/inp.txt) #ищет ключевое слово в сообщении
    counter_luba=$(grep -c Любу /home/light204/Desktop/inp.txt) #ищет ключевое слово в сообщении
    counter_hello=$(grep -c привет /home/light204/Desktop/inp.txt) #ищет ключевое слово в сообщении
    counter_good=$(grep -c хорошо /home/light204/Desktop/inp.txt) #ищет ключевое слово в сообщении
    counter_name=$(grep -c зовут /home/light204/Desktop/inp.txt) #ищет ключевое слово в сообщении
     
    killall gnokii #прерывает gnokii, чтобы дать ему запуститься для новой задачи
     
    #в зависимости от того, какое слово встретилось в сообщении, отправляет тот или иной ответ.
    if [ "$counter_love" == "1" ]; then
     
    echo "Любить нужно людей, а я ПРОСТО КОМПЬЮТЕР!!! (надоело повторять)" | gnokii --sendsms `+7904xxxxxx`
     
    elif [ "$counter_luba" == "1" ]; then
     
    echo "Ладно, думаю, она не обидится :)" | gnokii --sendsms `+7904xxxxxx`
     
    elif [ "$counter_hello" == "1" ]; then
     
    echo "И тебе привет! Как дела твои?" | gnokii --sendsms `+7904xxxxxx`
     
    elif [ "$counter_good" == "1" ]; then
     
    echo "Что же, я очень рад за тебя! А я, вот, уже устал тут работать :(" | gnokii --sendsms `+7904xxxxxx`
     
    elif [ "$counter_name" == "1" ]; then
     
    echo "Меня Light204_comp зовут. Типа приятно познакомиться, хозяин ;)" | gnokii --sendsms `+7904xxxxxx`
     
    fi
     
    sleep 3
     
    killall gnokii #прерывает gnokii, чтобы дать ему запуститься для новой задачи
     
    gnokii --deletesms IN 1 end #очищает память телефона
     
    #Все. Телефон готов к принятию следующего сообщения
  4. Настраиваем cron на запуска скрипта sms_bot.sh каждую минуту, например
  5. Система должна заработать. Абонент А посылает смс абоненту B, телефон абонента B принимает входящую смс, ее считывает скрипт, анализирует, отправляет ответ абоненту A, удаляет смску от абонента A

P.S. Мой скрипт далек от совершенства, но это, скорее, тестовый вариант, чтобы работало. Кроме того, я думаю, что описанный тут комплекс вряд ли понадобится кому-то "as is", но, возможно, вы сможете переделать и/или адаптировать его под свои нужды.

Негде держать сайт? Аренда виртуального сервера ждёт вас на сайте simpace.com.

ego_sum_lex
2012-10-04 17:56:00
Интересная вещь. Надо будет реализовать как-нибудь. Осталось только придумать зачем мне это надо)