首页 > 解决方案 > 使用 webhook 将消息发布到环聊聊天室时未经授权的 readbody=true

问题描述

试图将消息发布到hangout chat room. 我为房间生成了一个 webhook,并在以下代码中将其用作 uri。其余的是基本的 net/http 东西。

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

响应包含以下文本。

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

请求正文有问题吗?

编辑:问题中的密钥和令牌已更改。

相同的代码适用于跨步房间,唯一的区别是它有

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

由于令牌已经在 uri 中,我认为这不需要。

标签: rubywebhookshangout

解决方案


这对我有用

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

推荐阅读