Home Articles

通过Slack Events API确定通道类型

Asked
Viewed 129 times
0

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

  • 直接留言

  • 公共 Channels

  • 私人团体/ Channels

请求正文中没有字段标识发送消息的 Channels 类型 . 因此,如果您希望根据 Channels 类型为应用程序执行不同的行为,(例如,标记在多人 Channels 中发送消息的用户) ),没有明显的方法可以做到这一点 .

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

{
  :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"]
}

1 Answer

  • 1

    我注意到的事情(尽管在Slack文档中找不到)是,通道标识符以相应的字符开头,具体取决于使用的通道类型:

    • 直接留言

    • D 开头,例如 :channel=>"D1234ABCD"

    • 公共 Channels

    • C 开头,例如 :channel=>"C1234ABCD"

    • 私人团体/ Channels

    • G 开头,例如 :channel=>"G1234ABCD"

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

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

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

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

Related