Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 通过Slack Events API确定通道类型_Ruby On Rails_Ruby_Slack Api_Slack - Fatal编程技术网

Ruby on rails 通过Slack Events API确定通道类型

Ruby on rails 通过Slack Events API确定通道类型,ruby-on-rails,ruby,slack-api,slack,Ruby On Rails,Ruby,Slack Api,Slack,在使用Slack Events API和接收事件通知时,我发现很难确定消息是否以以下方式发送: 直接消息 公共频道 私人组/频道 请求正文中没有标识发送消息的通道类型的字段。因此,如果您希望根据频道类型为应用程序提供不同的行为(例如,标记在多人频道中发送消息的用户),则没有明显的方法 无论通道类型如何,请求始终遵循相同的格式: { :token=>"some_auth_token", :team_id=>"T1234ABCD", :api_app_id=>"A1

在使用Slack Events API和接收事件通知时,我发现很难确定消息是否以以下方式发送:

  • 直接消息
  • 公共频道
  • 私人组/频道
请求正文中没有标识发送消息的通道类型的字段。因此,如果您希望根据频道类型为应用程序提供不同的行为(例如,标记在多人频道中发送消息的用户),则没有明显的方法

无论通道类型如何,请求始终遵循相同的格式:

{
  :token=>"some_auth_token",
  :team_id=>"T1234ABCD",
  :api_app_id=>"A1234ABCD",
  :event=> { 
    :type=>"message",
    :user=>"U1234ABCD",
    :text=>"Who loves Orange Soda?",
    :ts=>"1486219313.000034",
    :channel=>"D1234ABCD",
    :event_ts=>"1486219313.000034"
  },
  :type=>"event_callback",
  :authed_users=>["U1234ABCD"]
}
我注意到(尽管在Slack文档中找不到),通道标识符以相应的字符开头,这取决于所使用的通道类型:

  • 直接消息
    • D开始,例如
      :channel=>“D1234ABCD”
  • 公共频道
    • C开头,例如
      :channel=>“C1234ABCD”
  • 私人组/频道
    • G开头,例如
      :频道=>“G1234ABCD”
因此,您可以通过检查通道ID的第一个字符来确定通道类型

例如,在Ruby中,我使用以下方法:

def channel?(channel_id)
  return true if channel_id.start_with?("C", "G")
  false
end
此外,我还设法从Slack获得了一个响应,确认这是预期的行为,因此以这种方式假设通道类型应该是安全的