通过 Slack 事件确定通道类型 API

Determine Channel Type via Slack Events API

在使用 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"
  • Public频道
    • C 开头,例如:channel=>"C1234ABCD"
  • 私人Group/Channel
    • G 开头,例如:channel=>"G1234ABCD"

因此您可以通过检查频道 ID 的第一个字符来确定频道类型。

比如在Ruby中,我使用了下面的方法:

def channel?(channel_id)
  return true if channel_id.start_with?("C", "G")
  false
end

此外,我设法从 Slack 得到了确认这是预期行为的回复,因此以这种方式假设渠道类型应该是安全的。