class DingDingRobot

Constants

VERSION

Attributes

access_token[RW]
max_retry[RW]

Public Class Methods

new(access_token) click to toggle source
# File lib/ding_ding_robot.rb, line 10
def initialize(access_token)
  @access_token = access_token
  @max_retry = 3
end

Public Instance Methods

send_message(message) click to toggle source
# File lib/ding_ding_robot.rb, line 15
def send_message(message)
  raise DingDingRobot::WrongMessageType.new("you need pass a DingDingRobot::Message") unless message.is_a?(DingDingRobot::Message)
  self.max_retry.times do |i|
    begin
      return _send_message(message)
    rescue Errno::ETIMEDOUT, Net::ReadTimeout, Timeout::Error, EOFError => e
      if i == self.max_retry - 1
        raise e
      end
    end
  end
end
url() click to toggle source
# File lib/ding_ding_robot.rb, line 28
def url
  "https://oapi.dingtalk.com/robot/send?access_token=#{self.access_token}"
end

Private Instance Methods

_send_message(message) click to toggle source
# File lib/ding_ding_robot.rb, line 34
def _send_message(message)
  uri = URI(self.url)
  req = Net::HTTP::Post.new(uri, {'Content-Type' => 'application/json'})
  req.body = JSON.dump(message.as_json)
  http  = Net::HTTP.new(uri.hostname, uri.port)
  http.use_ssl = (uri.scheme == "https")
  resp = http.request(req)
  raise DingDingRobot::ErrorHttpResponse.new("http_code=#{resp.code} body=#{resp.body}") if resp.code_type != Net::HTTPOK
  result = JSON.parse(resp.body)
  raise DingDingRobot::SendMessageError.new(resp.body) if result["errcode"] != 0
  result
end