
Итак, заключительный репост с Хабра, уже третий за эту ночь. В этот раз статья также очень интересная. С её помощью вы сможете создать смс-бота на shell в Ubuntu Linux.
На днях я написал простого бота для смс-переписки. Он может принимать входящие сообщения, обрабатывать их и (если слова из сообщения есть в его "памяти") отправлять назад логичные ответы.
Все, что мне понадобилось:
- Ubuntu 12.04 на домашнем компьютере
- Установленный gnokii (посмотреть как его установить можно тут)
- Shell скрипт
- Cron, регулярно запускающий этот скрипт
- Телефон с деньгами на счету (подойдет почти любая старая Nokia с блютузом, а также SonyEricsson k серии)
- Bluetooth адаптер
- Пара часов свободного времени
Плюсом стало отсутствие необходимости в Интернет-подключении.
Итак, начну с описания общей логики приложения, чтобы было сразу понятно что и зачем.
Есть сторонний абонент А. Есть наш телефон — абонент B.
Наши действия.
- Абонента B сопрягаем с компьютером по bluetooth стандартными средствами телефона, разрешаем ему автоматическую авторизацию
- Устанавливаем gnokii
- Создаем и даем права на исполнения скрипту sms_bot.sh:
1234567891011121314151617181920212223242526272829303132333435363738394041424344#!/bin/bashinp=$(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" ]; thenecho "Любить нужно людей, а я ПРОСТО КОМПЬЮТЕР!!! (надоело повторять)" | gnokii --sendsms `+7904xxxxxx`elif [ "$counter_luba" == "1" ]; thenecho "Ладно, думаю, она не обидится :)" | gnokii --sendsms `+7904xxxxxx`elif [ "$counter_hello" == "1" ]; thenecho "И тебе привет! Как дела твои?" | gnokii --sendsms `+7904xxxxxx`elif [ "$counter_good" == "1" ]; thenecho "Что же, я очень рад за тебя! А я, вот, уже устал тут работать :(" | gnokii --sendsms `+7904xxxxxx`elif [ "$counter_name" == "1" ]; thenecho "Меня Light204_comp зовут. Типа приятно познакомиться, хозяин ;)" | gnokii --sendsms `+7904xxxxxx`fisleep 3killall gnokii #прерывает gnokii, чтобы дать ему запуститься для новой задачиgnokii --deletesms IN 1 end #очищает память телефона#Все. Телефон готов к принятию следующего сообщения - Настраиваем cron на запуска скрипта sms_bot.sh каждую минуту, например
- Система должна заработать. Абонент А посылает смс абоненту B, телефон абонента B принимает входящую смс, ее считывает скрипт, анализирует, отправляет ответ абоненту A, удаляет смску от абонента A
P.S. Мой скрипт далек от совершенства, но это, скорее, тестовый вариант, чтобы работало. Кроме того, я думаю, что описанный тут комплекс вряд ли понадобится кому-то "as is", но, возможно, вы сможете переделать и/или адаптировать его под свои нужды.