Pull to refresh

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

Reading time2 min
Views60K
i am bot
Здравствуйте, уважаемые хабровчане!
На днях я написал простого бота для смс-переписки. Он может принимать входящие сообщения, обрабатывать их и (если слова из сообщения есть в его «памяти») отправлять назад логичные ответы.

Все, что мне понадобилось:

— 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», но, возможно, вы сможете переделать и/или адаптировать его под свои нужды.
Tags:
Hubs:
Total votes 31: ↑28 and ↓3+25
Comments22

Articles