Как получить идентификатор/временную метку сообщения Slack из сценария Hubot?

Похоже, что свойства timestamp нет, а свойство id — это undefined. Вот код скрипта плагина hubot:

module.exports = (robot) ->
  robot.hear /\bclocks?\b/i, (msg) ->
    msg.http("https://slack.com/api/reactions.add")
      .query({
        token: process.env.SLACK_API_TOKEN
        name: "bomb"
        timestamp: msg.message.timestamp # This property doesn't exist
      })
      .post() (err, res, body) ->
        console.log(body)
        return

Ответ, который я получаю от Slack API:

{"ok":false,"error":"bad_timestamp"}

Когда я регистрирую msg.message, это выглядит так:

{ user: 
  { id: 'abc123',
    name: 'travis',
    room: 'test-bots',
    reply_to: 'zyx987' },
 text: 'clock',
 id: undefined,
 done: false,
 room: 'test-bots' }

Как я могу получить метку времени или идентификатор сообщения, которое вызвало прослушиватель?


person travis    schedule 29.09.2015    source источник


Ответы (1)


Я получил ответ от команды Slack, и есть более новое свойство, называемое rawMessage, к которому у вас есть доступ при обновлении до более нового API. Вот шаги, которые я прошел, чтобы заставить его работать:

  1. Обновите nodejs и hubot (это может быть необязательно, но наши версии сильно устарели)
  2. Обновите slack-адаптер и следуйте его инструкциям для подключения к более новому API https://github.com/slackhq/hubot-slack#upgrading-from-earlier-versions-of-hubot
  3. Теперь вы должны получить доступ к новым свойствам из ваших скриптов.

Вот код, который сработал у меня после обновления: https://gist.github.com/dieseltravis/253eb1c6fea97f116ab0

module.exports = (robot) ->
  robot.hear /\bclocks?\b/i, (msg) ->
    queryData =  {
        token: process.env.HUBOT_SLACK_TOKEN
        name: "bomb"
        channel: msg.message.rawMessage.channel # required with timestamp, uses rawMessage to find this
        timestamp: msg.message.id # this id is no longer undefined
      }

    if (queryData.timestamp?)
      msg.http("https://slack.com/api/reactions.add")
        .query(queryData)
        .post() (err, res, body) ->
          #TODO: error handling
          return
person travis    schedule 06.10.2015