Как скопировать сообщения из тем форума пользователям с помощью Telegram API?

Я работаю над системой обмена сообщениями, в которой мне нужно копировать сообщения из тем форума пользователям, используя API Telegram. Согласно официальной документации Telegram, в запросе CopyMessage есть только один ключ message_thread_id, который, судя по всему, работает только для копирования сообщений от пользователей в темы форума, а не наоборот. Как я могу использовать API Telegram для копирования сообщений из тем форума пользователям, учитывая, что ключ message_thread_id, похоже, работает только для сообщений пользователя в теме? Любая помощь или понимание этого вопроса будут очень признательны.

Вот пример запроса JSON для копирования сообщения:

{
  "chat_id": 1106660938,
  "message_thread_id": 2,
  "from_chat_id": "-1002213908537",
  "message_id": 32
}

В этой структуре:

  • chat_id — идентификатор целевого чата (пользователя или темы).
  • message_thread_id используется для указания темы на форуме.
  • from_chat_id — идентификатор исходного чата.
  • message_id — идентификатор копируемого сообщения.

этот запрос (если все данные верны) приводит к 400 сообщению: Неверный запрос: поток сообщений не найден.

Дополнительная информация:

  • Я делаю прямые запросы API к Telegram.
  • Текущая структура предполагает однонаправленный поток сообщений от пользователей к темам форума.

Заранее спасибо за вашу помощь!

«from_chat_id — это идентификатор исходного чата» — и на самом деле это должно быть отрицательное число…?

CBroe 15.07.2024 15:03

Не совсем понял ваш вопрос. Уверены, что ваш бот может получить доступ к этим чатам/форумам?

0stone0 15.07.2024 15:04

@0stone0 определенно может, в запросе на копирование сообщения вы отправляете идентификатор чата, из которого вы хотите его скопировать, идентификатор сообщения в этом чате, идентификатор чата, в который вы хотите его отправить, и, возможно, идентификатор темы в супергруппе. Моя путаница возникла из-за того, что я не осознавал, что идентификаторы являются глобальными в супергруппе, поэтому, если вы отправляете сообщение в тему a, а затем в тему b, идентификатор второго сообщения будет идентификатором сообщения, отправленного в теме a + 1. Таким образом, если вы хотите отправить сообщение из темы форума, вам не нужно указывать идентификатор темы в супергруппе, из которой оно пришло

Sago 15.07.2024 15:55

@CBroe да, в API Telegram, чтобы отличать идентификаторы групп от идентификаторов пользователей (здесь идентификатор чата может быть как пользователем, так и идентификатором группы), при ссылке на идентификаторы групп это всегда будут отрицательные числа.

Sago 15.07.2024 16:06
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
0
4
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

На самом деле, вам не обязательно указывать message_thread_id, если вы копируете сообщение в приват.

from_chat_id и message_id можно использовать вместе для уникальной идентификации сообщения внутри темы форума.

Итак, вам просто нужно вызвать метод copyMessage с такими параметрами:

{
  "chat_id": 1106660938,
  "from_chat_id": -1002213908537,
  "message_id": 32
}

Почему я получил эту ошибку?

Это потому, что в приватных чатах нет тем. message_thread_id учитывается только для чата назначения. Поскольку целевой чат (указанный с помощью chat_id) представляет собой личный чат пользователя с ботом, в нем нет тем. Следовательно, возникает ошибка:

400: Bad Request: message thread not found

Надеюсь это поможет :)

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