Как обновить ответное сообщение на команду косой черты с помощью API?

Контекст

Я создаю приложение Slack на основе команд с косой чертой, которое создает сообщение ответа in_channel с кнопками, с которыми пользователи могут взаимодействовать. Команда косой черты используется в частном канале.

Когда пользователь нажимает кнопку, мое приложение может обновить это сообщение, чтобы отразить новый статус - просто ответив на запрос косой черты с обновленным сообщением и установив replace_original = true.

Проблема

Кроме того, я также хочу обновить это сообщение пакетом, например когда таймер закончился. Я пытаюсь обновить сообщение с помощью chat.update, но получаю cant_update_message ошибку API .

Вот запрос, который я использую для тестирования в Postman:

https://slack.com/api/chat.update?token={TOKEN}&channel={CHANNEL}&ts={TS}&text=Updated&as_user=true

Однако, согласно документации, я должен иметь возможность обновлять сообщения ботов:

Допустимые типы сообщений

Только сообщения, отправленные аутентифицированным пользователем, могут быть обновлены с помощью этого метода. Сюда входят обычные сообщения чата, а также сообщения, содержащие подтип me_message. Пользователи ботов также могут обновлять сообщения, которые они публикуют.

И сообщение, которое я хочу обновить, явно принадлежит моему Slack-приложению и выглядит как обычное сообщение бота. Вот как это сообщение просматривается через conversations.history:

{
    "text": "Some text...",
    "bot_id": "Bxxxxxxxx",            
    "type": "message",
    "subtype": "bot_message",
    "ts": "{TS}"
}

Кстати. Я удаляю это сообщение с теми же параметрами через chat.delete.

Что мне не хватает?


person Erik Kalkoken    schedule 11.09.2018    source источник


Ответы (1)


Я поговорил со службой поддержки Slack по поводу своего вопроса, и они подтвердили, что обновить ответное сообщение через chat.update невозможно.

Вот полный ответ:

Ответ на команду in_channel косой черты не может быть обновлен пользователем. Поскольку ответ на команду с косой чертой не использует веб-API и, следовательно, не связан с каким-либо конкретным токеном, вызов chat.update не может определить, разрешено ли обновлять сообщение или нет. Отсюда ошибка.

Мое предложение состояло в том, чтобы отправить ответ на команду с кратковременной косой чертой или пустой ответ на команду с косой чертой, а затем использовать метод chat.postMessage API для отправки сообщения «в канале», которое может быть обновлено позже с помощью метода API chat.update.

Как было предложено, вместо этого я создам «внутриигровое» сообщение с помощью chat.postMessage метода API, что позволит мне обновить его позже. Однако это создает проблемы с доступом к частным каналам. Чтобы смягчить это, я сейчас попрошу пользователя добавить моего пользователя-бота ко всем частным каналам, что даст моему приложению доступ к нему.

В первую очередь мне хотелось бы избежать этого подхода, поскольку он создает дополнительный шаг для пользователя, но, похоже, лучшей альтернативы нет (кстати, приложение github использует тот же подход).

person Erik Kalkoken    schedule 12.09.2018