Комментарии 64
Продолжение статьи: Добавляем DALL-E 3 в свой ChatGPT бот в Telegram
Продолжение статьи: Добавляем зрение, слух и голос в свой ChatGPT бот в Telegram
Статья уже не молодая, часто получаю вопрос: как использовать более новые модели. Ответ: в этом месте меняем на нужную модель.
def process_text_message(text, chat_id) -> str:
model = "gpt-3.5-turbo"
Например:
def process_text_message(text, chat_id) -> str:
model = "gpt-4o"
Интересное решение... А добавить логику учета трафика, чтобы неожиданно не влететь на денюшку малую пожалуй стоит.
Меня не сколько ЖПТ-чаты волнуют, сколько хостинг для локального телеграм бота малых сайтов.
Почувствовал себя обезьянкой, нажимающей на кнопочки по листочку.
Посоветуйте - где, что и как проверять если всё вроде сделал по мануалу, а всё равно не работает. У меня есть подозрение, что синтаксис curl в винде несколько не такой, как описано. Но я что мог поправил, получил в ответ: {"ok":true,"result":true,"description":"Webhook was set"} , но всё равно ничего не работает :)
присоединяюсь к запросу :)
На Windows формат такой:
curl ^
--request POST ^
--url https://api.telegram.org/bot<токен бота>/setWebhook ^
--header "content-type: application/json" ^
--data "{\"url\": \"<домен API-шлюза>\"}"
Спасибо. Я просто вбил всё одной строкой и поменял в data одиночные кавычки на двойные - насколько я помню они транслируются в одиночные. Но попробовал и ваш вариант. Получил Webhook is already set. Но всё равно ничего не работает.
Проверил статус через getWebhookInfo. Всё выглядит правдоподобно:
"result":{"url":"https://xxx.apigw.yandexcloud.net","has_custom_certificate":false,"pending_update_count":13,"last_error_date":1697555723,"last_error_message":"Wrong response from the webhook: 405 Method Not Allowed","max_connections":40,"ip_address":"xx.xx.xx.xx"}
Похоже проблема где-то до этого
Всё, с помощью автора разобрался, мой косяк - забыл исправить get на post в конфигурации шлюза. Работает
Добавил в статью отдельно спецификацию для шлюза текстом, чтобы можно было просто скопировать
Побочный вопрос. В тексте функции я вижу прописана model="gpt-3.5-turbo"
Есть ли смысла переходить на 4.0 и если есть, то как это сделать - просто поменять имя модели в функции на gpt-4.0 ?
Спасибо за статью! все получилось.
Нужно ли при создании функции привязывать в Параметрах существующий Сервисный аккаунт? На скрине у вас он не выбран и в описании не сказано.
Попробовал с привязкой и без, всё равно ошибка на следующем шаге с API-шлюзом:
Invalid openapi spec: Cannot access service account ***: not exists or permission denied
Проверьте, что в спецификации указываете идентификатор самого сервисного аккаунта, а не его статического ключа
со настройкой шлюза разобрался, был некорректный id
проблема другая, заработало (чат ответил на /start) и почти сразу перестало :/
теперь после включения Webhook, идут постоянные запросы с одной и той же ошибкой:
"last_error_message": "Wrong response from the webhook: 502 Bad Gateway"
на api-шлюзе 502 также логируется
proxyapi.ru - отвечает корректно, проверил прямым запросом
А что в логах функции?
{"errorMessage": "A request to the Telegram API was unsuccessful. Error code: 400. Description: Bad Request: replied message not found", "errorType": "ApiTelegramException", "stackTrace": [" File \"/function/runtime/runtime.py\", line 212, in handle_event\n result = h(r.event, r.context)\n", " File \"/function/code/index.py\", line 116, in handler\n bot.process_new_updates([update])\n", " File \"/function/code/telebot/__init__.py\", line 740, in process_new_updates\n self.process_new_messages(new_messages)\n", " File \"/function/code/telebot/__init__.py\", line 775, in process_new_messages\n self._notify_command_handlers(self.message_handlers, new_messages, 'message')\n", " File \"/function/code/telebot/__init__.py\", line 6894, in _notify_command_handlers\n self._exec_task(\n", " File \"/function/code/telebot/__init__.py\", line 1198, in _exec_task\n raise e\n", " File \"/function/code/telebot/__init__.py\", line 1191, in _exec_task\n task(*args, **kwargs)\n", " File \"/function/code/telebot/__init__.py\", line 6801, in _run_middlewares_and_handler\n result = handler['function'](message)\n", " File \"/function/code/index.py\", line 44, in send_welcome\n bot.reply_to(\n", " File \"/function/code/telebot/__init__.py\", line 4528, in reply_to\n return self.send_message(message.chat.id, text, reply_to_message_id=message.message_id, **kwargs)\n", " File \"/function/code/telebot/__init__.py\", line 1549, in send_message\n apihelper.send_message(\n", " File \"/function/code/telebot/apihelper.py\", line 264, in send_message\n return _make_request(token, method_url, params=payload, method='post')\n", " File \"/function/code/telebot/apihelper.py\", line 162, in _make_request\n json_result = _check_result(method_name, result)\n", " File \"/function/code/telebot/apihelper.py\", line 189, in _check_result\n raise ApiTelegramException(method_name, result, result_json)\n"]}
[ERROR] ApiTelegramException: A request to the Telegram API was unsuccessful. Error code: 400. Description: Bad Request: replied message not found Traceback (most recent call last): File "/function/runtime/runtime.py", line 212, in handle_event result = h(r.event, r.context) File "/function/code/index.py", line 116, in handler bot.process_new_updates([update]) File "/function/code/telebot/__init__.py", line 740, in process_new_updates self.process_new_messages(new_messages) File "/function/code/telebot/__init__.py", line 775, in process_new_messages self._notify_command_handlers(self.message_handlers, new_messages, 'message') File "/function/code/telebot/__init__.py", line 6894, in _notify_command_handlers self._exec_task( File "/function/code/telebot/__init__.py", line 1198, in _exec_task raise e File "/function/code/telebot/__init__.py", line 1191, in _exec_task task(*args, **kwargs) File "/function/code/telebot/__init__.py", line 6801, in _run_middlewares_and_handler result = handler['function'](message) File "/function/code/index.py", line 44, in send_welcome bot.reply_to( File "/function/code/telebot/__init__.py", line 4528, in reply_to return self.send_message(message.chat.id, text, reply_to_message_id=message.message_id, **kwargs) File "/function/code/telebot/__init__.py", line 1549, in send_message apihelper.send_message( File "/function/code/telebot/apihelper.py", line 264, in send_message return _make_request(token, method_url, params=payload, method='post') File "/function/code/telebot/apihelper.py", line 162, in _make_request json_result = _check_result(method_name, result) File "/function/code/telebot/apihelper.py", line 189, in _check_result raise ApiTelegramException(method_name, result, result_json)
Сложно сказать, такую ошибку не видел. Может Телеграм продолжает досылать уведомления на WebHook о предыдущих сообщениях, но вы уже очистили чат и он не может "ответить" на удаленные сообщения. Только догадываюсь, точно не знаю, как он ведет себя в таких случаях.
Можно попробовать удалить вебхук и снова назначить. Может это обнулит историю.
curl https://api.telegram.org/bot$BOT_ID/deleteWebhook
ERROR RequestID: d80686d5-50f8-40bc-8ec4-cefd6f55163b Code: 502 Message: Error during function invocation
Всё выполнил по инструкции, но в конце на сайте Postman выдаёт следующее:
{
"ok": false,
"error_code": 404,
"description": "Not Found"
}
Здравствуйте! Я в этом деле совсем не соображаю, но по вашей статье, вроде, все шаги проделал правильно, но при любом моем запросе, всегда приходит ответ "Произошла ошибка, попробуйте позже!" Подскажите, в какую вообще сторону копать, чтобы понять почему ошибка? И я же правильно понимаю, API от Chatgpt оригинального, от Openai, не нужно?
Приветствую! При запуске бота /start ноль реакции, есть подозрение, что при создании функции в y.cloud неверно указал "точку входа", можете указать, что там должно быть прописано? У меня там "def handler(event, context)" и получаю в логах такое вот
{"errorMessage": "Entry point \"def handler(event, context)\" does not contain package and function name", "errorType": "HandlerImportError", "stackTrace": [" File \"/function/runtime/runtime.py\", line 170, in load_handler\n raise HandlerImportError('Entry point \"{}\" does not contain package and function name'.format(entrypoint))\n"]}

добрый день. Можете подсказать, я не понимаю где искать index.py? Пытаюсь создать такой файл в редакторе но появляется сообщение об ошибке "Ошибка при создании файла"
Точку входа менять не надо, остается та, что была по умолчанию: index.handler
Продолжение статьи: Добавляем DALL-E 3 в свой ChatGPT бот в Telegram
Добрый день. Делал все строго по туториалу, но по логам функции вижу следующее: HandlerImportError: Unable to import module index: No module named 'telebot'
Хотя очевидно, что он должен быть.
Hidden text

.REPORT RequestID: c322cdbd-f428-4b1b-b707-6894f37af319 Duration: 7.075 ms Billed Duration: 100 ms Memory Size: 128 MB Queuing Duration: 0.050 ms
ERROR RequestID: c322cdbd-f428-4b1b-b707-6894f37af319 Code: 502 Message: Error during function invocation
END RequestID: c322cdbd-f428-4b1b-b707-6894f37af319
{"errorMessage": "Unable to import module index: No module named 'telebot'", "errorType": "HandlerImportError", "stackTrace": [" File \"/function/runtime/runtime.py\", line 178, in load_handler\n raise HandlerImportError('Unable to import module {}: {}'.format(file_name, str(e)))\n"]}
[ERROR] HandlerImportError: Unable to import module index: No module named 'telebot' Traceback (most recent call last): File "/function/runtime/runtime.py", line 178, in load_handler raise HandlerImportError('Unable to import module {}: {}'.format(file_name, str(e)))
START RequestID: c322cdbd-f428-4b1b-b707-6894f37af319 Version: d4e7edahrutjfk1hgsfi
Спасибо автору за хороший туториал. все настроил, работает. нужно только уточнить, что версию Python необходимо выбирать именно 3.11.
имеешь ввиду /setWebhook? Как в туториале, через postman.
я не особый знаток Postman, поэтому своими словами опишу как дойти до скрина, который приводит автор: 1) зарегистрировался, 2) в разделе API Network/Publlic API Network создал сущность (не помню как называлась, но он сам предлагает когда первый раз туда идешь), потом жмешь New, там можно выбрать иконку HTTP и появляется как раз окно, которое приводит автор как пример. Там подставляешь свои данные токенов и жмешь send (только нужно проверить, что введено и выбрано все так, как на скрине). внизу интерфейса видишь статус ответа.
Такая же проблема. Webhook is already deleted и бот молчит
Видимо ТГ шлет какие-то еще обновления, не вникал, но это с текущим кодом облачной функции может вызвать "затор", так что новые сообщения не будут обрабатываться из-за ошибки.
Решается заменой строчки:
if str(update.message.chat.id) in TG_BOT_CHATS:
на
if update.message is not None and str(update.message.chat.id) in TG_BOT_CHATS:
Обновление статьи:
1) Переходим на Python 3.12 и последнии версии библиотек
2) Вместо chat id для ограничения тез, кто может бользоваться ботом, будем использовать имена пользователей. Уж слишком сложно добавлять новых пользователей старым методом.
Продолжение статьи: Добавляем зрение, слух и голос в свой ChatGPT бот в Telegram
@fettgesicht сделал по статье, но бот молчит на команду /start
хотя в логах ошибок нет...
TG_BOT_CHATS заполнял именем пользователя телеги
Поменял InvalidRequestError
на BadRequestError
В новой версии библиотеки название класса, видимо, поменялось. Из-за этого бот не очищал историю самостоятельно, когда она переполнялась.
На этапе Апи шлюза столкнулся с такой проблемой. " Переменная <FUNCTION-ID> должна быть объявлена в спецификации API-шлюза. " Подскажите, пожалуйста, в чем может быть проблема?
Друзья, у всех у кого ошибка An error occurred (SignatureDoesNotMatch) when calling the PutObject operation благодаря @mintag разобрались:
YANDEX_KEY_ID - это идентификатор именно статического ключа, а не самого сервисного аккаунта
Статья уже не молодая, часто получаю вопрос: как использовать более новые модели. Ответ: в этом месте меняем на нужную модель.
def process_text_message(text, chat_id) -> str:
model = "gpt-3.5-turbo"
Например:
def process_text_message(text, chat_id) -> str:
model = "gpt-4o"
Получил вопрос на хабре:
Сегодня утром столкнулась с интересным эффектом. Как я поняла ситуацию:
Накопилась история переписки
Задала боту сложный вопрос
функция получила от gpt слишком длинный ответ и не смогла его перекинуть в tg: {«errorMessage»: «A request to the Telegram API was unsuccessful. Error code: 400. Description: Bad Request: message is too long», «errorType»: «ApiTelegramException», «stackTrace»:
бот не получает ответ и делает ретраи: {«errorMessage»: «HTTPSConnectionPool(host='api.telegram.org', port=443): Max retries exceeded with url
тем не менее, история продолжает увеличиваться, proxyAPI продолжает дергаться
и все это привело к опустошению счета proxyAPI минут за 10
Решили, что ошибок может быть много разных, все не учесть и обернули вызов к bot.process_new_updates([update])
в try/catch
. Таким образом, webhook будет получать положительный ответ в любом случае и не будет слать один и тот же запрос. А ошибку мы все равно увидим в логах функции.
Предлагаю отблагодарить @mbelyakova за отличный разбор проблемы поднятием кармы!
В статье код тоже поправил.
Решил сделать бота в 2024... а оно не работает...
Решение:
В requirements.txt
openai==1.57.4
pyTelegramBotAPI==4.25.0
boto3==1.35.80
@fettgesichtподскажи пожалуйста...
довольно часто пишешь сообщение боту, идет анимация, что бот что-то печатает, а потом сообщение не приходят. в логах вот это:
HTTPSConnectionPool(host='api.telegram.org', port=443): Max retries exceeded with url: /bot7747696697:AAGgGe_1POTqogzQ1NGTW2FDro6HsEytvjI/sendMessage?chat_id=435791193&text=%D0%9F%D0%BE%D0%B6%D0%B0%D0%BB%D1%83%D0%B9%D1%81%D1%82%D0%B0%21+%D0%95%D1%81%D0%BB%D0%B8+%D1%83+%D0%B2%D0%B0%D1%81+%D0%B1%D1%83%D0%B4%D1%83%D1%82+%D0%B5%D1%89%D0%B5+%D0%B2%D0%BE%D0%BF%D1%80%D0%BE%D1%81%D1%8B+%D0%B8%D0%BB%D0%B8+%D0%B2%D0%B0%D0%BC+%D0%BF%D0%BE%D0%BD%D0%B0%D0%B4%D0%BE%D0%B1%D0%B8%D1%82%D1%81%D1%8F+%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%2C+%D0%BD%D0%B5+%D1%81%D1%82%D0%B5%D1%81%D0%BD%D1%8F%D0%B9%D1%82%D0%B5%D1%81%D1%8C+%D0%BE%D0%B1%D1%80%D0%B0%D1%89%D0%B0%D1%82%D1%8C%D1%81%D1%8F.+%D0%A3%D0%B4%D0%B0%D1%87%D0%B8+%D1%81+%D0%B2%D0%B0%D1%88%D0%B8%D0%BC+%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%BE%D0%BC%21&reply_parameters=%7B%22message_id%22%3A+64%7D (Caused by SSLError(SSLError(1, '[SSL: DECRYPTION_FAILED_OR_BAD_RECORD_MAC] decryption failed or bad record mac (_ssl.c:2559)')))
Свой ChatGPT бот в Telegram в 2025