Yandex cloud function не видит обработчика сообщений telebot'а
Я создал api gateway, который пересылает сообщения телеграма (черех вебхук) в queue. Сообщения из очереди функция хендлер видит и все с ними нормально. Однако затем обработчик сообщений команды /start вообще никак не реагирует на новое сообщение.
import telebot
import boto3
import os
import requests
#Переменные
API_TOKEN=os.getenv('API_TOKEN')
access_key_id=os.getenv('KEY_ID')
secret_access_key=os.getenv('SECRET_KEY')
endpoint=os.getenv('ENDPONT')
bot = telebot.TeleBot(API_TOKEN)
@bot.message_handler(commands=['start'])
def registration(message):
#Проверка наличия пользователя в базе
#Соединяемся с Хранилищем
session = boto3.session.Session()
database = boto3.resource(
service_name='dynamodb',
aws_access_key_id=access_key_id,
aws_secret_access_key=secret_access_key,
region_name='ru-central1',
endpoint_url=endpoint
)
forecast_users=database.Table('users')
response_availability = forecast_users.get_item(Key={"user_id":message.from_user.id})
print('Поиск пользователя по базе...')
if 'Item' in response_availability:
bot.reply_to(message, "Вы уже подключены")
print(f"chat_id: {message.chat.id}")
else:
with requests.get(PHOTO_URL) as photo:
bot.send_photo(message.chat.id, photo)
bot.reply_to(message, "Добро пожаловать! Подключил вас к рассылке ")
#Добавление в базу
forecast_users.put_item(Item={"user_id":message.from_user.id, "chat_id":message.chat.id})
def handler(event, context):
body_message=event['messages'][0]['details']['message']['body']
print(body_message)
update = telebot.types.Update.de_json(body_message)
bot.process_new_updates([update])
return {'statusCode':200, 'body':"!"}
Ответы (1 шт):
Автор решения: Андрей Перешеин
→ Ссылка
Сообщения из API требуется передавать сразу в функцию. Структуры данных для вызова из api-gw и триггером отличаются, по этой причине telebot не реагирует на вызов триггером.
Примерная конфигурация api-gw, из документации
openapi: 3.0.0
info:
title: Sample API
version: 1.0.0
paths:
/for-recognizer-bot-function:
post:
x-yc-apigateway-integration:
type: cloud_functions
function_id: <идентификатор_функции>
service_account_id: <идентификатор_сервисного_аккаунта>
operationId: for-recognizer-bot-function