Пересылка сообщений из бота в чат (Telegram)

Задача:

  • Пользователь пишет в телеграм-бота

  • Администратор видит сообщения пользователей

  • И может ответить пользователю, чтобы сообщение ушло от бота

В Малти это можно сделать очень легко.

Мы даже собрали готовую схему, которую вы можете себе установить.

Бот-секретарь v.9.2.

Обновленная версия с реакцией на закрытые профили и отправкой ответного сообщения администраторам

Ссылка на пример готовой схемы для Telegram: 💾 Cкачать схему 🔧 Инструкция по установке схем Всё, что нужно сделать в ней - это получить айди по ключевому слову /id И вставить полученную айди в блок действия «Указать ID служебного чата»

Ниже разберем подробнее каждый пункт.

Подготовка

Первым делом необходимо все подготовить перед сборкой:

  1. Сделать интеграцию Telegram-бота с Multy.ai

  2. Создать группу/чат в Telegram с типом группы «Частная» Сюда будут приходить все сообщения пользователей

Узнаем id чата

Для этого создаем простую схему из двух блоков.

  1. Блок событие с контейнером «Входящее сообщение в чате» и условием «Текст сообщения», где вводим любой текст, который будем отправлять боту

  2. И создаем блок Действие с контейнером «Отправить сообщение»

  3. Соединяем два блока стрелкой

  4. Сохраняем и включаем схему

  5. Отправляем в чат ключевое слово, которое вы указали в блоке события

  6. Если всё верно, то в ответ вы получите id чата в формате: -1001878491576 Скопируйте его. Он нам пригодится далее.

Если бот не ответил, пройдитесь еще раз по каждому пункту и всё проверьте. Частая ошибка, когда добавляют событие «Входящее сообщение», вместо «Входящее сообщение в чате

Пересылаем сообщение в админский чат

Если предыдущие этапы пройдены, настраиваем пересылку сообщений из бота в админский чат.

  1. Создаем блок Событие с контейнером «Входящее сообщение» При необходимости, добавьте условия, например, на какие слова не реагировать.

  2. Создаем блок Действие с контейнером «Задать значение числовой переменной» Задаем на латинице любое название числовой переменной. Например: chat_id И вставляем в «Новое значение» — id, которое мы скопировали ранее.

  3. Далее создаем контейнер действия «Сменить чат для следующих действий» Ставим галочку «Получать значение из переменной» И в переменной прописываем:

{var:chat_id}
  1. Далее создаем контейнер действия «Записать в переменную JSON или массив» с названием: item и значением:

{"message":"сообщение", "edited_message":"исправление"}
  1. И добавляем контейнер действия «Задать значение текстовой переменной» с названием system_data и значением:

<a href="tg://user?id={var:platform.user.id}">{var:platform.user.first_name}  {var:platform.user.last_name}</a> — {var:item.{var:platform.event.type}} №{var:object.id} 
#id{var:platform.user.id}
<code>______</code>
  1. Для проверки типов вложения можно воспользоваться условием: Тип вложения и выбрать все необходимые типы вложений.

  1. Готово! Осталось вывести в действие текст или материалы, которые пользователь вам отправил.

Для остальных типов вложений делаете аналогичные условия и действия, на ваш выбор. В схеме добавлена пересылка ответных сообщений в чат администратора. Если необходимо можете добавить сей функционал самостоятельно, либо пользоваться готовой схемой.

Пересылаем текст и файлы пользователей

  1. Добавляем контейнер «Отправить вложение в Телеграм» выбираем тип вложения через условную переменную на шаге 6.

  2. Выбираем тип файла, который будем пересылать от пользователя:

  3. А в поле «Код вложения» пишем переменную:

{var:object.attachments[0].code}
  1. Добавляем флажок «Добавить описание» с текстом:

{var:system_data}
{var:object.text}

Готово!

Отвечаем пользователю в Telegram-боте

Как это работает?

Админ в чате нажимает на сообщение с текстом пользователя и нажимает ответить. В примере на вложение с фото.

После чего вводит текст и отправляет.

Если всё настроено верно, то пользователь от бота получит ваше сообщение.

А вы увидите текст:

Есть несколько условий, при которых ответ не сработает: 1. Не будет работать, если вы отвечаете на стикер или файлы! Нужно отвечать именно на текст от бота. 2. Не будет работать, если пользователь в настройках Telegram установил запрет на пересылку своих сообщений.

Как это настроить?

  1. Создаем блок Действие с контейнером "Входящее сообщение" При необходимости, добавьте условия, например, на какие слова не реагировать.

    Для того, чтобы не было реакции на переспуску в чате добавляем условие: «Числовая переменная»

{var:object.reply.id}

больше 0, т.е. администратор отвечает на конкретное сообщение пользователя, и не реагировать на переписку в чате.

  1. Создаем блок Действие с контейнером «Задать значение числовой переменной» Задаем на латинице любое название числовой переменной. Например: chat_id И вставляем в «Новое значение» значение ниже

{var:platform.chat.id}
  1. Для сохранения ID ответа добавляем еще один контейнер «Задать значение числовой переменной» Задаем переменную: admin_message_id И вставляем в «Новое значение»

{var:object.id}
  1. Для сохранения текста админа добавляем еще один контейнер «Задать значение текстовой переменной» Задаем переменную: admin_text И вставляем в «Новое значение»

{var:object.text}

Для получения Telegram ID клиента добавляем еще один контейнер «Поиск в тексте по регулярному выражению» Исходный текст :{var:object.reply.text} Регулярное выражение : #id(\d+) Сохранить результат в переменную : user_tg_id

  1. Для получения ID ответного сообщения клиента добавляем еще один контейнер «Поиск в тексте по регулярному выражению» Исходный текст :{var:object.reply.text} Регулярное выражение : №(\d+) Сохранить результат в переменную : object_id

  2. Добавляем еще один контейнер «Сменить чат для следующих действий» Ставим галочку «Получить значение из переменной» В переменную вставляем: {var:user_tg_id[0]}

5. Для проверки есть ли ID клиента и ID сообщения добавляем условия:

«числовая переменная»

{var:user_tg_id[0]}

больше 0, и условие «числовая переменная»

{var:object_id[0]}

больше 0.

Готово! Теперь осталось теперь передать сам текст или файл. Аналогично условию выше можно проверять тип вложения.

Пересылаем пользователю файл и текст:

Создаем блок действия с контейнером «Отправить вложения в Telegram»

  • Выбираем тип вложения

  • В код вложения вставляем переменную {var:object.attachments[0].code}

  • Ответить на сообщение {var:object_id[0]}

  • Ставим галочку «Добавить описание»

  • В описание к вложению вставляем переменную {var:admin_text}

Как увидеть отправилось сообщение или нет

Создаем блок действия и добавляем контейнеры:

  1. Контейнер «Задать пакет временных переменных»

  • переменная successи значением:

{case:{var:ok}|0|1}
  • переменная errors со значением:

{var:error.message}

  1. Ставим галочку «Получить значение из переменной» И в переменную вставляем: {var:chat_id}

  2. Контейнер «Сменить чат для следующих действий» Ставим галочку «Получить значение из переменной» И в переменную вставляем: {var:chat_id}

  3. Для того, чтобы проверитьу спешно ли отправилось сообщение добавляем условие: «числовая переменная» {var:success}равно 1, т.е. сообщение было отправлено успешно. Соедняем с портом «да»

  4. Контейнер «Отправить сообщение» Вставляем текст:

Результат отправки: Успех: {case:{var:ok}|0|1}
  1. Из порта «Нет» делаем контейнер «Отправить сообщение» Вставляем текст:

Ошибка: {var:errors}
  1. Готово!

Last updated