Итак, заключительный репост с Хабра, уже третий за эту ночь. В этот раз статья также очень интересная. С её помощью вы сможете создать смс-бота на 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 & gt ; / 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", но, возможно, вы сможете переделать и/или адаптировать его под свои нужды.