У меня возникла проблема при использовании 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 дней достаточно, чтобы получить данные.
Есть идеи, как это решить?
Я также отредактировал описание. Это ответ: {'ok': True, 'latest': '17150713136.315238', 'oldest': '17137753136.315238', 'messages': [], 'has_more': False, 'pin_count': 0, 'channel_actions_ts' : Нет, 'channel_actions_count': 0}
Хм, просто чтобы убедиться, что я правильно понял: если вы запустите его несколько раз прямо сейчас, вы получите результат в 1/10 раза (приблизительно)?
Да это верно. Тот же код, ничего не меняется, если я запущу его 10 раз, он вернет результаты примерно 1 раз. И дело не в том, что я превышаю какую-то квоту или что-то в этом роде, потому что ответ в порядке. В документации тоже ничего не нашел...
И дело в том, что если я удалю из запроса самый старый и последний, он будет возвращать данные при каждом запуске.
Это действительно довольно странно, и я ничего не нашел ни в Интернете, ни в документации. К сожалению, я не знаком с Slask API, поэтому больше ничем помочь не могу. Если вы не получили здесь ответов и поскольку это похоже на ошибку, а не на вашу сторону, возможно, вам повезет больше в Сообществе Slack или Службе поддержки разработчиков Slack
После обращения в службу поддержки Slack они указали, что Slack SDK принимает только время эпохи, которое составляет 6 цифр после десятичной точки. В противном случае он попытается это исправить, сдвинув точку на одну цифру вправо, а затем испортив время эпохи... В нашем случае Python в большинстве случаев генерирует время эпохи с 7 цифрами после десятичной точки. ..
Я исправил это, округлив сгенерированное время эпохи до 6 цифр:
current = round(time.time(), 6)
five_day_ago = round(current - 5 * 24 * 60 * 60, 6)
Что возвращает API в тех случаях, когда вы не получаете сообщения?