Почему свойство «last_read» равно нулю для 1: 1 DM между пользователем и ботом приложения с историей сообщений? - PullRequest
1 голос
/ 18 октября 2019

Я настраиваю приложение Slack для отправки сообщений через веб-API и использую токен бота OAuth из веб-приложения ASP.NET, и одно из требований заключается в том, чтобы приложение Slack могло возвращать соответствующее значениекогда пользователь последний раз читал свои сообщения в своей DM с ботом Slack. Это делается для того, чтобы отслеживать, какие сообщения требуют обновления или повторного размещения.

Сначала я подумал, что вы можете отправить запрос с помощью методе convations.info, чтобы получить свойство last_read из ответа JSON. И если бы я использовал токен пользователя OAuth (с «xoxp -...») в запросе на любое прямое сообщение, открытое пользователем, связанным с токеном, я бы получил значение, например «1571423219851.000000», миллисекунды.

Но когда я бы использовал токен бота (используя "xoxb -...") для проверки DM у пользователя, он имел бы значение для поля "last_read" в нулях.

Шаги длявоспроизведите проблему следующим образом:

  1. Разрешите приложению 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.

1 Ответ

0 голосов
/ 18 октября 2019

Как указано в документации об атрибуте last_read для типов каналов :

last_read - это отметка времени для последнего сообщения вызывающего пользователя прочитал в этом канале

Если вы используете токен бота для вызова conversations.history, то вызывающий пользователь - это пользователь бота, который, очевидно, еще не прочитал ни одно из сообщений.

Так что это не ошибка, а работает как задумано.

...