Pull to refresh

Comments 59

PinnedPinned comments

Друзья, у всех у кого ошибка An error occurred (SignatureDoesNotMatch) when calling the PutObject operation благодаря @mintag разобрались:
YANDEX_KEY_ID - это идентификатор именно статического ключа, а не самого сервисного аккаунта

Интересное решение... А добавить логику учета трафика, чтобы неожиданно не влететь на денюшку малую пожалуй стоит.

Меня не сколько ЖПТ-чаты волнуют, сколько хостинг для локального телеграм бота малых сайтов.

У Яндекса нет такой функции, случаем?

Почувствовал себя обезьянкой, нажимающей на кнопочки по листочку.

Посоветуйте - где, что и как проверять если всё вроде сделал по мануалу, а всё равно не работает. У меня есть подозрение, что синтаксис 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 ?

Просто "gpt-4". По отзывам модель очень продвинутая, но она и дороже. Для простых вопросов, по-моему, достаточно и 3.5

Нужно ли при создании функции привязывать в Параметрах существующий Сервисный аккаунт? На скрине у вас он не выбран и в описании не сказано.

Попробовал с привязкой и без, всё равно ошибка на следующем шаге с 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

удалять Webhook пробовал неоднократно, без результата

чат не чистил, но предыдущие сообщения точно удалял и возможно, на этом месте и сломалось..

починил:
/deleteWebhook
/getUpdates?offset=-1
/setWebhook

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, не нужно?

С помощью автора разобрался. На аккаунте proxyapi должны быть минимум 200 рублей, кажется, чтобы начал работать API. Зато после пополнения - вмиг все заработало!

Вот интересно, с помощью такого механизма можно ли jackett развернуть для поиска торрентов?

Приветствую! При запуске бота /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? Пытаюсь создать такой файл в редакторе но появляется сообщение об ошибке "Ошибка при создании файла"

Если все делали по инструкции, он должен был создаться сам сразу после выбора python 3.11 как среды выполнения облачной функции

Точку входа менять не надо, остается та, что была по умолчанию: index.handler

Здравствуйте. Спасибо большое за ответ. Но мне не совсем понятно, как переключиться на index.py? В инструкции написано:" Теперь переключимся на редактирование index.py и запишем в него этот код:..." Как это сделать?

Добрый день. Делал все строго по туториалу, но по логам функции вижу следующее: 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 ввести тот код curl. как ты это сделал?

я не особый знаток Postman, поэтому своими словами опишу как дойти до скрина, который приводит автор: 1) зарегистрировался, 2) в разделе API Network/Publlic API Network создал сущность (не помню как называлась, но он сам предлагает когда первый раз туда идешь), потом жмешь New, там можно выбрать иконку HTTP и появляется как раз окно, которое приводит автор как пример. Там подставляешь свои данные токенов и жмешь send (только нужно проверить, что введено и выбрано все так, как на скрине). внизу интерфейса видишь статус ответа.

я со всеми разбирался. спасибо. но пришол ответ webhook deleted. и не работает.

здравствуйте. сделал все как было на посте. но при команды /start ноль реакции

аналогично

решили вопрос?

имя пользователя ТГ надо прописать в нижнем регистре оказывается...

Так после удаления его и назначить надо заново. setWebHook - смотрите шан Telegram WebHook в статье

У меня именно при попытке отправить post setwebhook внизу вылезает, что он удалён

Видимо ТГ шлет какие-то еще обновления, не вникал, но это с текущим кодом облачной функции может вызвать "затор", так что новые сообщения не будут обрабатываться из-за ошибки.

Решается заменой строчки:

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 для ограничения тез, кто может бользоваться ботом, будем использовать имена пользователей. Уж слишком сложно добавлять новых пользователей старым методом.

@fettgesicht сделал по статье, но бот молчит на команду /start

хотя в логах ошибок нет...

TG_BOT_CHATS заполнял именем пользователя телеги

Попробуйте имя пользователя телеграм прописать в нижнем регистре, если это сейчас не так

и действительно, прописал в нижнем и сразу заработало

спасибо!

Поменял InvalidRequestError на BadRequestError

В новой версии библиотеки название класса, видимо, поменялось. Из-за этого бот не очищал историю самостоятельно, когда она переполнялась.

На этапе Апи шлюза столкнулся с такой проблемой. " Переменная <FUNCTION-ID> должна быть объявлена в спецификации API-шлюза. " Подскажите, пожалуйста, в чем может быть проблема?

уже не актуально, спасибо.

Друзья, у всех у кого ошибка An error occurred (SignatureDoesNotMatch) when calling the PutObject operation благодаря @mintag разобрались:
YANDEX_KEY_ID - это идентификатор именно статического ключа, а не самого сервисного аккаунта

Sign up to leave a comment.

Articles