只需使用 bash 和 curl 即可通过 mySMS 发送和接收短信。
(这里打破了规则 - 没有问题 - 但我发现这是一个挑战,因为很少有好的例子,所以这里有一个例子。如果你可以改进它 - 我当然有兴趣学习一些新东西!)。
mysms.com 提供一款免费的 Android 专用应用(iPhone 不开放消息访问),其 API 允许您在该 Android 设备上发送和接收短信,通过网络接收 API 调用。因此,我的用例场景是,我希望我的服务能够发送约会提醒并接收任何回复。您需要一个 API 密钥 - 只需发送电子邮件即可[电子邮件保护]我很快就拿到了我的 API 密钥。
发送短信
- 从 Play 商店安装应用程序并在应用程序中分配密码
- 发送电子邮件支持并获取 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
答案1
对此进行一些更新,我发现这是一种更好的发送方式,因为它可以处理令人讨厌的字符的 urlencoding:
curl -G 'https://api.mysms.com/json/message/send' \
--data-urlencode "api_key=$apikey" \
--data-urlencode "password=$pwd" \
--data-urlencode "msisdn=$mno" \
--data-urlencode "recipient=$to" \
--data-urlencode "message=$msg"
对于接收,一旦您发现有新的未读消息的对话,您需要此信息才能获取完整的消息内容:
curl -d '{ "apiKey": "'$apikey'", "authToken": "'$authtoken'", "address": "'$m'" }' -H "Content-Type: application/json" -X POST "https://api.mysms.com/json/user/message/get/by/conversation"