Slack-бот Python — извлекает 0 сообщений из истории разговоров, если в запросе используются самые последние и самые старые сообщения

У меня возникла проблема при использовании Slack SDK для получения сообщений из Slack с помощью чат-бота.

Я использую этот простой код Python:

import time
from slack_sdk import WebClient
from slack_sdk.errors import SlackApiError

client = WebClient(token = "xoxb-XXXXX")


def fetch_channel_history(channel_id, latest=None, oldest=None):
    try:
        result = client.conversations_history(
            channel=channel_id,
            latest=latest,
            oldest=oldest
        )

        # Check if the request was successful
        if result["ok"]:
            messages = result['messages']
            for message in messages:
                print(f"User {message['user'] if 'user' in message else 'Unknown'} said: {message['text']}")
        else:
            print("Failed to fetch messages")

    except SlackApiError as e:
        print(f"Error fetching conversations: {e.response['error']}")


current = time.time()
five_day_ago = current - 5 * 24 * 60 * 60  # 5 day
fetch_channel_history('channel-id', current, five_day_ago)

Однако, если я запущу его 10 раз, возможно, сообщения я получу только 1 раз... Так что это ненадежно. Если я удалю использование длительных и самых старых из запроса, он всегда будет возвращать сообщения при каждом запуске.

В случае, если сообщения пустые, ответ выглядит следующим образом:

{'ok': True, 'latest': '17150713136.315238', 'oldest': '17137753136.315238', 'messages': [], 'has_more': False, 'pin_count': 0, 'channel_actions_ts': None, 'channel_actions_count': 0}

И да, у меня есть сообщения из чата каждый день, поэтому 5 дней достаточно, чтобы получить данные.

Есть идеи, как это решить?

Что возвращает API в тех случаях, когда вы не получаете сообщения?

Gugu72 07.05.2024 10:28

Я также отредактировал описание. Это ответ: {'ok': True, 'latest': '17150713136.315238', 'oldest': '17137753136.315238', 'messages': [], 'has_more': False, 'pin_count': 0, 'channel_actions_ts' : Нет, 'channel_actions_count': 0}

user14073111 07.05.2024 10:43

Хм, просто чтобы убедиться, что я правильно понял: если вы запустите его несколько раз прямо сейчас, вы получите результат в 1/10 раза (приблизительно)?

Gugu72 07.05.2024 10:50

Да это верно. Тот же код, ничего не меняется, если я запущу его 10 раз, он вернет результаты примерно 1 раз. И дело не в том, что я превышаю какую-то квоту или что-то в этом роде, потому что ответ в порядке. В документации тоже ничего не нашел...

user14073111 07.05.2024 13:38

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

user14073111 07.05.2024 13:39

Это действительно довольно странно, и я ничего не нашел ни в Интернете, ни в документации. К сожалению, я не знаком с Slask API, поэтому больше ничем помочь не могу. Если вы не получили здесь ответов и поскольку это похоже на ошибку, а не на вашу сторону, возможно, вам повезет больше в Сообществе Slack или Службе поддержки разработчиков Slack

Gugu72 07.05.2024 14:14
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
6
87
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

После обращения в службу поддержки Slack они указали, что Slack SDK принимает только время эпохи, которое составляет 6 цифр после десятичной точки. В противном случае он попытается это исправить, сдвинув точку на одну цифру вправо, а затем испортив время эпохи... В нашем случае Python в большинстве случаев генерирует время эпохи с 7 цифрами после десятичной точки. ..

Я исправил это, округлив сгенерированное время эпохи до 6 цифр:

current = round(time.time(), 6)
five_day_ago = round(current - 5 * 24 * 60 * 60, 6)

Другие вопросы по теме