python上带有webhook的电报机器人

python上带有webhook的电报机器人,python,telegram-bot,vps,Python,Telegram Bot,Vps,我正在尝试用webhook创建聊天机器人。它发生在具有VPS\u IP的VPS服务器上。我使用示例中的代码 我的代码: import ssl from aiohttp import web import telebot API_TOKEN = 'my api token' WEBHOOK_HOST = VPS_IP WEBHOOK_PORT = 8443 # 443, 80, 88 or 8443 (port need to be 'open') WEBHOOK_LISTEN = VPS_I

我正在尝试用webhook创建聊天机器人。它发生在具有
VPS\u IP
的VPS服务器上。我使用示例中的代码

我的代码:

import ssl
from aiohttp import web
import telebot

API_TOKEN = 'my api token'
WEBHOOK_HOST = VPS_IP
WEBHOOK_PORT = 8443  # 443, 80, 88 or 8443 (port need to be 'open')
WEBHOOK_LISTEN = VPS_IP  # In some VPS you may need to put here the IP addr
WEBHOOK_SSL_CERT = '/etc/letsencrypt/live/my domain/fullchain.pem'  # Path to the ssl certificate
WEBHOOK_SSL_PRIV = '/etc/letsencrypt/live/my domain/privkey.pem'  # Path to the ssl private key
WEBHOOK_URL_BASE = "https://{}:{}".format(WEBHOOK_HOST, WEBHOOK_PORT)
WEBHOOK_URL_PATH = "/{}/".format(API_TOKEN)

bot = telebot.TeleBot(API_TOKEN)
app = web.Application()

# Process webhook calls
async def handle(request):
    if request.match_info.get('token') == bot.token:
        request_body_dict = await request.json()
        update = telebot.types.Update.de_json(request_body_dict)
        bot.process_new_updates([update])
        return web.Response()
    else:
        return web.Response(status=403)
app.router.add_post('/{token}/', handle)

# Handle '/start' and '/help'
@bot.message_handler(commands=['help', 'start'])
def send_welcome(message):
    bot.reply_to(message,
                 ("Hi there, I am EchoBot.\n"
                  "I am here to echo your kind words back to you."))

# Handle all other messages
@bot.message_handler(func=lambda message: True, content_types=['text'])
def echo_message(message):
    bot.reply_to(message, message.text)

bot.remove_webhook()
bot.set_webhook(url=WEBHOOK_URL_BASE + WEBHOOK_URL_PATH,
                certificate=open(WEBHOOK_SSL_CERT, 'r'))

# Build ssl context
context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
context.load_cert_chain(WEBHOOK_SSL_CERT, WEBHOOK_SSL_PRIV)

# Start aiohttp server
web.run_app(
    app,
    host=WEBHOOK_LISTEN,
    port=WEBHOOK_PORT,
    ssl_context=context,
)
当我打电话时https://my-domain:8443,我得到:


它没有错误,但机器人没有回答我。我的错在哪里?

原来问题是两件事。第一:带有代码的文件必须位于
/my-token/
文件夹中,因为这在代码中是隐含的。第二:电报不喜欢Lets加密的证书(
https://api.telegram.org/botTOKEN/getWebhookInfo
允许我理解这一点),所以我必须自己用以下命令来完成:
openssl-req-newkey rsa:2048-sha256-nodes-keyout private.key-x509-days 365-out public.pem-sub“/C=US/ST=New York/L=Brooklyn/O=Example Brooklyn Company/CN=YOUR\u DOMAIN”

尝试将
WEBHOOK\u HOST
设置为“
0.0.0
”,然后查看它是否工作它在
set\u WEBHOOK with
中推送错误。保留IP地址0.0.0.0“不是
WEBHOOK\u URL\u BASE
-而是
WEBHOOK\u HOST
(将
WEBHOOK\u URL\u BASE
保留为
VPS\u IP
)没有帮助。Bot运行时没有错误,但没有回答为什么您使用浏览器而不是电报调用Bot?