Получение ChatID и отправка его пользователю в Telegram-bot
Мне нужно, чтобы после того, как пользователь начал чат с ботом, ему отправлялся его chatID .
Отслеживать
51.6k 200 200 золотых знаков 61 61 серебряный знак 242 242 бронзовых знака
задан 15 окт 2017 в 11:37
447 3 3 серебряных знака 18 18 бронзовых знаков
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Нашел решение. Нужно сначала привязываем через метод SetWebhook бота к нашему файлу-обработчику (api.telegram.org/bot/setWebhook?url=) Потом пишем обработчик. Вот код:
$access_token = ''; $api = 'https://api.telegram.org/bot' . $access_token; $output = json_decode(file_get_contents('php://input'), TRUE); $chat_id = $output['message']['chat']['id']; $first_name = $output['message']['chat']['first_name']; $message = $output['message']['text']; switch($message) < case '/start': sendMessage($chat_id, "Ваш cID" . $chat_id); break; >function sendMessage($chat_id, $message) < file_get_contents($GLOBALS['api'] . '/sendMessage?chat_id=' . $chat_id . '&text=' . urlencode($message)); >
Этот код отвечает на команду /start и отправляет пользователю его chatid.
Telegram: How to find Group Chat ID?
I’ve been trying to solve this for three days and none pf the solutions I’ve found online seem to work, so I am going to have to ask for help. I want to create a Telegram «Group Chat» to be used by members of a club I’m in. I created the chat named with the initials of the club, like: «ABCD» and added some members. Now I want to automate the sending of occasional messages to the group for all members to see. Weather forecast, random photograph from our gallery, etc. Using @BotFather I created a bot called «ABCDbot» and noted the token for that bot. Now I have two «ABCD»s on my browser left side-panel. Selecting one gives me «ABCD bot» and selecting the other gives me «ABCD 123 members». Using a perl script and LWP I can send a photo using
#!/usr/bin/perl -w use feature 'say'; use LWP; my $api = LWP::UserAgent->new (); my $chat_id = '1234567890'; my $photo = '/home/user/gallery/photo999.jpg'; my $response = $api->post( "https://api.telegram.org/bot/sendPhoto", [ 'chat_id' => $chat_id, 'caption' => 'Photo Randomly Selected by the gallery', 'photo' => $photo, ], 'Content_Type' => 'form-data', ); if ($response->is_success) < say "Response. Success!"; >else
This works, providing I give it a legitimate chat_id and a legitimate file to send. But the trouble is: I can’t find the chat_id for the group chat with 123 members! Every method I’ve tried now proves to be obsolete or simply doesn’t return the desired chat_id for the ABCD group chat. I can get my own chat ID or that of individual members of the group, or of the bot itself, and can successfully send photos, messages, etc to those destinations, but I just can’t send anything to the group. Can anybody walk me through the process of getting the chat_id for my group chat? Or direct me to a document describing an up-to-date, working method for obtaining same? Assistance much appreciated.
Узнать id чата с Telegram ботом
Когда настраиваешь интеграции с Telegram нужно знать не только api token бота, но и номер чата куда отправлять сообщения.
Первый шаг: узнать api token бота Telegram.
Чтобы узнать API token бота Telegram нужно открыть чат с @BotFather и написать /mybots, выбрать бота и кликнуть на кнопку «API token».
Если нужно отправлять сообщения в группу, необходимо отключить "privacy" в настройках бота.
Второй шаг: узнать номер чата, куда слать сообщения.
- Создаем группу или открываем переписку с нашим ботом и пишем любое сообщение.
- Открываем браузер и в адресную строку вставляем ссылку https://api.telegram.org/bot/getUpdates, где – это ваш ключ.
Если запрос отправлен правильно, после всех манипуляций вы получите в ответ массив, содержащий также ID. Когда идентификатор получен, можно продолжать дальнейшую работу с ним, например, попробовать отправить себе сообщение, воспользовавшись методом sendMessage.
,"chat":,"date":1613455102,"text":"test">>]>
Где, «id»:-426000607 — номер чата, куда будут приходить сообщения.
Важно: если мы будем слать сообщения в личку, то номер чата будет без знака минус.
Если ошибка
https://api.telegram.org/bot655390656:bhFS50. ff3zO4/setwebhook
Третий шаг: отправка сообщения.
Чтобы отправить тестовое сообщение можно воспользоваться postman
В следующих статьях рассмотрим интегрировать с Оки-Токи и уведомлять о входе на сервер через ssh.
Создание бесплатного ChatGPT телеграм бота на Python
Это моя первая статья но надеюсь вам понравится! Почему я решил создать эту статью, когда скорее всего есть уже много других подобных? Дело в том что официальное API компании OpenAI(компании которая создала ChatGPT) — платное(пробный период быстро заканчивается), но недавно я нашел метод, которым сам пользуюсь, через который можно создавать приложения с использованием ChatGPT — бесплатно, покажу на примере просто Telegram-чатбота
Подготовка
Итак для начала нам нужно сделать несколько проверок на необходимые инструменты:
- Python — рекомендуемая версия 3.10 и выше Чтобы проверить установлен ли Python в коммандной строке введите: python -V Если коммандная строка вывела версию Python — все в порядке, можем продолжать, в другом случаи установите Python с официального сайта и при установке обязательно убедитесь что поставлена галочка на «Add to PATH», продолжаем
- Библиотека для взаимодействия с Telegram API Чтобы ее установить необходимо использовать команду: pip install python-telegram-bot
- Библиотека взаимодействия с ChatGPT Мы не будем использовать официальную библиотеку openai , вместо нее будет использована revChatGPT , ссылка на гитхаб автора — клик, чтобы ее установить необходимо использовать команду: pip install —upgrade revChatGPT
- Токен телеграм-бота Получить его можно создав новго или использовав уже существующего бота у BotFather https://t.me/BotFather
- Токен ЧатГПТ Если вы зарегестрированы в Openai и можете взаимодействовать с ChatGPT на официальном сайте то чтобы его получить надо перейти по ссылке https://chat.openai.com/api/auth/session и скопировать значение «accessToken»
Использования бибилиотеки revChatGPT
Итак для начала давайте разберемся как работает эта библиотека и затем интегрируем ее в бота, сделаем скрипт с постоянным циклом для некого подобия чата внутри консоли:
from revChatGPT.V1 import Chatbot #импортируем библиотеку accesstoken="здесь вместо текста вставьте ваш accessToken" #задаем переменную токена chatbot = Chatbot(config=) #инициализируем чатбота while True: message = input("Вы:") #создаем ввод текста output = chatbot.ask(message) #даем запрос ChatGPT с набранным текстом print(f"ChatGPT:") #выводим ответ ChatGPT
Вы можете попробовать использовать этот скрипт для проверки токена и других целей, в нашем случаи ознакомление с работой revChatGPT
Создание Telegram бота
Теперь приступим к созданию кода непосредственно самого бота
1.Импорт библиотек telegram и ChatGPT:
from telegram.ext import Updater, CommandHandler, MessageHandler, filters from revChatGPT.V1 import Chatbot
2. Инициализируем бота и ChatGPT
# здесь нужно вставить свои токены TOKENTG = "TELEGRAM_TOKEN" TOKENGPT = "CHATGPT_TOKEN" updater = Updater(TOKENTG) chatbot = Chatbot(config=)
3. Создаем функцию ответа на сообщения пользователя
def chatgpt_reply(update, context): context.bot.send_chat_action(chat_id=update.effective_chat.id, action=ChatAction.TYPING) text = update.message.text reply = chatbot.ask(text) update.message.reply_text(reply)
4. Создаем обработчик сообщений
echo_handler = MessageHandler(Filters.text & (~Filters.command), chatgpt_reply) updater.dispatcher.add_handler(echo_handler)
updater.start_polling() updater.idle()
Готово! наш код готов к работе, теперь его надо запустить:
*вместо bot.py должен быть файл где вы сохранили код
Заключение
У этого способа есть несколько минусов, которые честно говоря немного огорчают:
- вместо полноценной настройки контекста итп для чатгпт как в полноценном официальном АПИ мы имеем лишь ответы обычного ChatGPT
- Токен ChatGPT не постоянен и меняется периодически(должно пройти больше месяца)
- Этот телеграм бот довольно прост, и , например, если ответ ChatGPT будет слишком большой он не сможет его отправить из за ограничений в количестве символов
В остальном прекрасная а главное бесплатная альтернатива!
Для модерации: в данной статье нет контекста жалобы на компанию OpenAI и их услуги
Полный код бота:
from telegram.ext import Updater, CommandHandler, MessageHandler, filters from revChatGPT.V1 import Chatbot TOKENTG = "TELEGRAM_TOKEN" TOKENGPT = "CHATGPT_TOKEN" updater = Updater(TOKENTG) chatbot = Chatbot(config=) def chatgpt_reply(update, context): context.bot.send_chat_action(chat_id=update.effective_chat.id, action=ChatAction.TYPING) text = update.message.text reply = chatbot.ask(text) update.message.reply_text(reply) echo_handler = MessageHandler(Filters.text & (~Filters.command), chatgpt_reply) updater.dispatcher.add_handler(echo_handler) updater.start_polling() updater.idle()
