Отправка и получение SMS с помощью mySMS, используя только bash & curl.
(Нарушение правил здесь - у меня нет вопросов - но я нашел, что это трудная задача, и есть несколько хороших примеров, так что вот пример. Если вы можете улучшить это - мне, безусловно, интересно узнать что-то новое!).
mysms.com предоставляет бесплатное приложение только для Android (iPhone не открывает доступ к обмену сообщениями), а их API позволяет отправлять и получать SMS на этом устройстве Android, получая вызовы API через Интернет. Итак, мой сценарий использования: я хочу, чтобы моя служба могла отправлять напоминания о встречах и получать любые ответы. Вам нужен ключ API - просто напишите на dev@mysms.com, и я довольно быстро получил свой ключ API.
Отправить смс
Мобильные номера должны быть в полном формате msisdn - поэтому код страны, опустите начальный ноль, затем номер мобильного телефона, поэтому я запускаю это в Новой Зеландии, это код страны +64, а все мобильные телефоны - 021, 022 или 027 ...
apikey="insert your api key here"
from="6421xxxxx"
pwd="you set the password in the android app"
to="6421yyyyyyy"
smsurl="https://api.mysms.com/json/message/send?api_key=$apikey&msisdn=$from&password=$pwd&recipient=$to&message=Testmessage1."
curl -v "$smsurl"
Все довольно просто - думаю, мне нужно поработать, чтобы справиться с кодировкой URL-адресов сообщения, но в качестве доказательства концепции это должно быть легко установить и запустить.
Получать смс
Вам необходимо сгенерировать ключ аутентификации, чтобы иметь доступ к сообщениям и отмечать их как прочитанные или удаляемые. (не знаю, как долго это стоит.)
# GET auth token
curl -d '{ "apiKey": "'$apikey'", "msisdn": "'$from'", "password": "'$pwd'", "checkKey": "false" }' -H "Content-Type: application/json" -X POST "https://api.mysms.com/json/user/login" -o /tmp/sms.0
authtoken=$(gawk '{ i=index($0,"authToken"); x=substr($0,i+12); j=index(x,"\""); print substr(x,0,j-1); }' /tmp/sms.0)
echo "AUTH token = $authtoken"
# GET list of unread messages
curl -d '{ "apiKey": "'$apikey'", "authToken": "'$authtoken'" }' -H "Content-Type: application/json" -X POST "https://api.mysms.com/json/user/message/conversations/get" -o /tmp/sms.1
# Mark a message as read
# This one sets a message from 02123123 as having been read.
# Looks like there is a better way with MessageIDs
curl -d '{ "apiKey": "'$apikey'", "authToken": "'$authtoken'", "address": "+642123123" }' -H "Content-Type: application/json" -X POST "https://api.mysms.com/json/user/message/conversations/read" -o /tmp/sms.2
# Deleting a message once my end has retrieved it works better for me
# so deleting a message is...
# This will delete MessageId 1
curl -d '{ "apiKey": "'$apikey'", "authToken": "'$authtoken'", "MessageId": "1" }' -H "Content-Type: application/json" -X POST "https://api.mysms.com/json/user/message/conversations/del" -o /tmp/sms.3