Ruby与Rails在Web应用开发中语法简洁、表达力强。用Ruby接入互亿无线预警通知接口,可以在Rails后端、Rake定时任务或脚本中快速发出短信或语音告警。Ruby标准库net/http足以完成POST请求,无需额外gem。本文给出…
Ruby与Rails在Web应用开发中语法简洁、表达力强。用Ruby接入互亿无线预警通知接口,可以在Rails后端、Rake定时任务或脚本中快速发出短信或语音告警。Ruby标准库net/http足以完成POST请求,无需额外gem。本文给出简洁的调用示例。
Ruby接入的接口与参数
短信接口 https://api.ihuyi.com/sms/Submit.json ,语音接口 https://api.ihuyi.com/voice/vm 。参数account、password、mobile、content,表单方式提交。
- account=APIID,password=APIKEY;
- mobile=接收手机号;
- content=通知内容;
- 返回JSON中code=2为提交成功。
Ruby发送告警代码示例
使用net/http与uri库,几行即可完成:
require "net/http"
require "uri"
require "json"
def send_sms(mobile, content)
uri = URI("https://api.ihuyi.com/sms/Submit.json")
res = Net::HTTP.post_form(uri, {
"account" => "你的APIID",
"password" => "你的APIKEY",
"mobile" => mobile,
"content" => content
})
JSON.parse(res.body) # code=2为提交成功
end
result = send_sms("13800138000", "Rails后台订单同步任务失败,请尽快检查")
puts result
post_form会自动对中文参数做URL编码。
Ruby接入注意事项
- Net::HTTP默认走HTTPS时会校验证书,确保系统CA包完整;
- 在Rails中可封装成Service对象,供控制器与Job调用;
- 密钥从credentials或环境变量读取;
- 返回code不等于2时记录响应体,便于排查。
带错误处理的Rails Service封装
在Rails项目里建议把发送逻辑封装成Service对象,并加上超时与返回码判断。下面这个版本适合放在app/services目录下:
class SmsNotifier
API_URL = "https://api.ihuyi.com/sms/Submit.json"
def self.send(mobile, content)
uri = URI(API_URL)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.open_timeout = 10
http.read_timeout = 10
res = http.post(uri.path, URI.encode_www_form(
"account" => ENV["IHUYI_APIID"],
"password" => ENV["IHUYI_APIKEY"],
"mobile" => mobile,
"content" => content
))
data = JSON.parse(res.body)
Rails.logger.info("告警提交 code=#{data['code']} msg=#{data['msg']}")
data
rescue StandardError => e
Rails.logger.error("告警发送异常: #{e.message}")
nil
end
end
# 控制器或Job中调用
SmsNotifier.send("13800138000", "订单同步Job连续失败,请检查")
运行方式与依赖说明
示例依赖Ruby标准库net/http与json,无需额外gem。在Rails中通过ENV读取密钥,可用credentials.yml.enc管理。post_form与encode_www_form都会自动对中文做URL编码。
常见报错排查
- SSL校验失败:确认系统CA证书完整,Ruby的Net::HTTP默认校验证书;
- Net::OpenTimeout:检查服务器出网与代理;
- 返回code非2:打印data["msg"]定位认证、手机号或模板问题;
- 语音通道:URL换成 https://api.ihuyi.com/voice/vm 。
Ruby项目用几行代码就能接入告警。前往注册免费试用获取APIID与APIKEY。