Search code examples
rubywebhooksgoogle-hangouts

Unauthorized readbody=true when posting message to hangout chat room with webhook


Trying to post a message to a hangout chat room. I've generated a webhook for the room and used it as uri in the following code. The rest are basic net/http stuff.

require 'net/http'
require 'uri'

message = 'hello'

# prep and send the http request 
uri = URI.parse("https://chat.googleapis.com/v1/spaces/AAAAcroWtl4/messages?key=abc&token=xyz")

request = Net::HTTP::Post.new(uri)
request.content_type = "application/json"
request.body = '"content":[{"type":"text","text":"'+message+'"}]'
req_options = { use_ssl: uri.scheme == "https" }

response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(request)
end
puts response.inspect

The response contains the following text.

#<Net::HTTPUnauthorized 401 Unauthorized readbody=true>

Is there something wrong with the request body?

Edit: key and token changed in the question.

This same code worked with stride rooms, the only difference is that it had

request["Authorization"] = "Bearer #{access_token}"

Since the token is already in the uri I figured this would not be needed.


Solution

  • This worked for me

    require 'net/http'
    require 'uri'
    require 'json'
    
    message = 'hello'
    
    # prep and send the http request 
    uri = URI.parse("//webhook")
    request = Net::HTTP::Post.new(uri)
    request['Content-Type'] = "application/json"
    request.body = { text: message }.to_json
    
    response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
      http.request(request)
    end
    
    puts response.inspect