Я настраиваю приложение Slack для отправки сообщений через веб-API и использую токен бота OAuth из веб-приложения ASP.NET, и одно из требований заключается в том, чтобы приложение Slack могло возвращать соответствующее значениекогда пользователь последний раз читал свои сообщения в своей DM с ботом Slack. Это делается для того, чтобы отслеживать, какие сообщения требуют обновления или повторного размещения.
Сначала я подумал, что вы можете отправить запрос с помощью методе convations.info, чтобы получить свойство last_read из ответа JSON. И если бы я использовал токен пользователя OAuth (с «xoxp -...») в запросе на любое прямое сообщение, открытое пользователем, связанным с токеном, я бы получил значение, например «1571423219851.000000», миллисекунды.
Но когда я бы использовал токен бота (используя "xoxb -...") для проверки DM у пользователя, он имел бы значение для поля "last_read" в нулях.
Шаги длявоспроизведите проблему следующим образом:
- Разрешите приложению Slack открыть прямое сообщение с пользователем (в данном случае со мной самим, так как токен пользователя OAuth установлен для моей учетной записи) с помощью методаalksations.open, предоставляятокен пользователя бота и users = (your_slack_id). Сохраните идентификатор DM на потом. https://api.slack.com/methods/conversations.open/test
"ok": true,
"no_op": true,
"already_open": true,
"channel": {
"id": "DP4NRGLNE"
}
Отправьте сообщение, чтобы распространить окно сообщения, используя идентификатор DM. https://api.slack.com/methods/chat.postMessage/test
Тестирование с помощью метода convations.info с использованием токена бота и идентификатора DM. https://api.slack.com/methods/conversations.info/test
Однако, когда я запускаю метод, я получаю такой ответ.
"ok": true,
"channel": {
"id": "DP4NRGLNE",
"created": 1571404761,
"is_archived": false,
"is_im": true,
"is_org_shared": false,
"user": "UN4F12QH7",
"last_read": "0000000000.000000",
"latest": {
...
},
"unread_count": 3,
"unread_count_display": 3,
"is_open": true,
"priority": 0
}
Ожидается: Поле "last_read"установлено какое-то значение, например "1571404761.000000", с unread_count, установленным в 0.
Actual: Поле "last_read" по-прежнему установлено в "0000000000.000000" (и для unread_count не сбрасывается в 0), несмотря на то, что имеет историю сообщений в прямом сообщении и подтвердил «Пометить чтение» для новых сообщений / физически открыл журнал чата и прокрутил вниз новые сообщения.
Подозрениечто при использовании пользовательского токена OAuth будет возвращено соответствующее значение last_read, поскольку пользователь сам установит метку времени last_read в данном диалоге, в то время как бот Slack никогда не устанавливает поле «last_read» для диалога, частью которого он является (т. е. пользовательне нужно знать, когда сам бот последний раз читал чат?). Хотя, если это так, то почему при использовании бот-токена не удается увидеть установленное значение для поля last_read для пользователя в его DM? Отсюда и возникает этот вопрос (и путаница).
Возможно, это неверная теория, но документация Slack, похоже, не решает эту проблему, поэтому любые предложения приветствуются.
РЕДАКТИРОВАТЬ: После внимательного изучения документации может показаться, что дочернее семейство методов im не имеет понятия im.info, поэтому для dm установлено значение по умолчанию 0.