当前位置: 首页 > 知识库问答 >
问题:

电报网络钩子与heroku

彭烨烁
2023-03-14

我正在尝试用python制作一个电报回声机器人。我在heroku上托管我的python。

起初,我只是对python请求使用了电报本地API方法,然后我使用了一个python-telegram-bot库。

我能够让常规的getUpdate方法(使用长轮询——即heroku定期向您的电报机器人发出请求以获取更新)工作,但webhook不能。

我认为问题是heroku不会允许进入港口

有谁知道我该怎么做吗

这是我的代码:

import os

import logging
import sys
logging.basicConfig(stream=sys.stdout,level=logging.DEBUG)
log = logging.getLogger('my_application')


from proj.heroku_env_vars import teleg_token,secret_key



import telegram
from flask import Flask, request

app = Flask(__name__)
app.debug = True

global bot
bot = telegram.Bot(token=TOKEN)


@app.route('/%s'%HOOK, methods=['POST'])
def webhook_handler():
    if request.method == "POST":
        log.info('post from teleg')
        # retrieve the message in JSON and then transform it to Telegram object
        update = telegram.Update.de_json(request.get_json(force=True))

        chat_id = update.message.chat.id

        # Telegram understands UTF-8, so encode text for unicode compatibility
        text = update.message.text.encode('utf-8')

        # repeat the same message back (echo)
        bot.sendMessage(chat_id=chat_id, text=text)
    else:
        log.info('notpost from teleg')

    return 'ok'


@app.route('/swh', methods=['GET', 'POST'])
def set_webhook():
    s = bot.setWebhook('%s/%s'%(URL, HOOK), PORT=8443)
    if s:
        return "webhook setup ok"
    else:
        return "webhook setup failed"


@app.route('/dwh', methods=['GET', 'POST'])
def delete_webhook():
    s = bot.deleteWebhook()
    if s:
        return "webhook deleted ok"
    else:
        return "webhook delete failed"


@app.route('/')
def index():
    log.info('i made this request')
    return 'home page.'

=====

MacBook-Pro-4:proj aiden$ curl https://mysterious-sands-89012.herokuapp.com/dwh
webhook deleted ok
2018-05-07T15:24:46.592749+00:00 heroku[router]: at=info method=GET path="/dwh" host=mysterious-sands-89012.herokuapp.com request_id=4aef8faf-555e-4697-8a3d-3eea2861eba2 fwd="23.31.215.245" dyno=web.1 connect=3ms service=404ms status=200 bytes=178 protocol=https
2018-05-07T15:24:46.586755+00:00 app[web.1]: DEBUG:telegram.vendor.ptb_urllib3.urllib3.connectionpool:https://api.telegram.org:443 "POST /bot562713672:AAE8Pt1-UDWyKrtIEJ7_igD2t5Zw1z0LRRo/deleteWebhook HTTP/1.1" 200 61
2018-05-07T15:24:46.587925+00:00 app[web.1]: DEBUG:telegram.bot:True
2018-05-07T15:24:46.588080+00:00 app[web.1]: DEBUG:telegram.bot:Exiting: delete_webhook
2018-05-07T15:24:46.589420+00:00 app[web.1]: 10.101.133.97 - - [07/May/2018:15:24:46 +0000] "GET /dwh HTTP/1.1" 200 18 "-" "curl/7.54.0"

=============

MacBook-Pro-4:proj aiden$ curl https://mysterious-sands-89012.herokuapp.com/swh
webhook setup ok
2018-05-07T15:24:52.194779+00:00 app[web.1]: DEBUG:telegram.bot:Entering: set_webhook
2018-05-07T15:24:52.195462+00:00 app[web.1]: DEBUG:telegram.vendor.ptb_urllib3.urllib3.connectionpool:Starting new HTTPS connection (1): api.telegram.org
2018-05-07T15:24:52.596829+00:00 heroku[router]: at=info method=GET path="/swh" host=mysterious-sands-89012.herokuapp.com request_id=c2cfa1d8-48c2-4abf-a198-cfa8499e9676 fwd="23.31.215.245" dyno=web.1 connect=0ms service=404ms status=200 bytes=176 protocol=https
2018-05-07T15:24:52.593031+00:00 app[web.1]: DEBUG:telegram.vendor.ptb_urllib3.urllib3.connectionpool:https://api.telegram.org:443 "POST /bot562713672:AAE8Pt1-UDWyKrtIEJ7_igD2t5Zw1z0LRRo/setWebhook HTTP/1.1" 200 57
2018-05-07T15:24:52.594936+00:00 app[web.1]: DEBUG:telegram.bot:True
2018-05-07T15:24:52.595055+00:00 app[web.1]: DEBUG:telegram.bot:Exiting: set_webhook
2018-05-07T15:24:52.596418+00:00 app[web.1]: 10.141.252.172 - - [07/May/2018:15:24:52 +0000] "GET /swh HTTP/1.1" 200 16 "-" "curl/7.54.0"

=============

MacBook-Pro-4:p-d "param1=value1&param2=value2" -X POST https://mysterious-sands-89012.herokuapp.com/562713672:AAE8Pt1-UDWyKrtIEJ7_igD2t5Zw1z0LRRo
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>400 Bad Request</title>
<h1>Bad Request</h1>
<p>Failed to decode JSON object: Expecting value: line 1 column 1 (char 0)</p>
2018-05-07T15:25:05.454666+00:00 app[web.1]: INFO:my_application:post from teleg
2018-05-07T15:25:05.519859+00:00 app[web.1]: 10.101.219.132 - - [07/May/2018:15:25:05 +0000] "POST /562713672:AAE8Pt1-UDWyKrtIEJ7_igD2t5Zw1z0LRRo HTTP/1.1" 400 187 "-" "curl/7.54.0"
2018-05-07T15:25:05.524749+00:00 heroku[router]: at=info method=POST path="/562713672:AAE8Pt1-UDWyKrtIEJ7_igD2t5Zw1z0LRRo" host=mysterious-sands-89012.herokuapp.com request_id=3b9713a3-b3db-4db2-8915-29f995560ec2 fwd="23.31.215.245" dyno=web.1 connect=1ms service=68ms status=400 bytes=342 protocol=https

===============

MacBook-Pro-4:proj aiden$ curl -d "param1=value1&param2=value2" -X POST https://mysterious-sands-89012.herokuapp.com/562713672:AAE8Pt1-UDWyKrtIEJ7_igD2t5Zw1z0LRRo:8443
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>404 Not Found</title>
<h1>Not Found</h1>
<p>The requested URL was not found on the server.  If you entered the URL manually please check your spelling and try again.</p>
2018-05-07T15:25:14.809828+00:00 heroku[router]: at=info method=POST path="/562713672:AAE8Pt1-UDWyKrtIEJ7_igD2t5Zw1z0LRRo:8443" host=mysterious-sands-89012.herokuapp.com request_id=458c911e-62ae-4eee-9cfd-b5a1345e5064 fwd="23.31.215.245" dyno=web.1 connect=0ms service=3ms status=404 bytes=386 protocol=https
2018-05-07T15:25:14.804975+00:00 app[web.1]: 10.180.49.12 - - [07/May/2018:15:25:14 +0000] "POST /562713672:AAE8Pt1-UDWyKrtIEJ7_igD2t5Zw1z0LRRo:8443 HTTP/1.1" 404 233 "-" "curl/7.54.0"

=================

共有1个答案

胡厉刚
2023-03-14

您必须使用 aidentmchugh.pythonanywhere.com 作为URL,而不是包括w

您的HTTPS证书未登录www域。

 类似资料:
  • 我通过GitHub将我的电报机器人部署到Heroku(我使用Webhook),机器人正在运行,但由于某种原因,它没有通过Webhook接收消息。 代码如下: 文件:

  • 我需要将电报频道帖子与我的网站同步。所以,我创建了一个机器人,一个频道,将我的机器人添加到这个频道(具有管理员权限,它可以访问消息),并将我的机器人的网络钩子绑定到指定的服务器url。一切顺利,帖子创建更新被正确发送到服务器url。唯一的问题是,没有跟踪电报频道帖子删除的更新,因此管理员手动从服务器数据库中删除帖子。任何想法,如何设置机器人或网络钩子以跟踪帖子删除?

  • 我在赫洛库上部署了我的电报机器人。Bot曾经工作正常,但在某些时候,它只是在接收命令时停止发送消息。以下是获取网络钩子信息的答案: {"ok":true,"结果":{"url":"https://telegram-rainbow-bot.herokuapp.com:443/api/message/update","has_custom_certificate":false,"pending_upd

  • 我一直想做实时聊天。 多年前,我在PHP Ajax Mysql中就这样做了,并破坏了我的服务器。 然后我用Flash试了一个文本文件。我放弃了,已经10年没有尝试过了。但是最近我听说了webhooks和websockets。 它们似乎都是做到这一点的一种方式,但我并没有真正理解其中的区别。 任何人都可以解释吗? 谢谢!

  • 该项目是基于 Netty 网络框架开发的电子白板,可实现同屏互动功能。同时该项目采用C/S模式,支持多人同时在线、并发实时同屏互动。 特性说明:1、可自定义画笔尺寸和颜色;2、分享涂鸦3、打开历史涂鸦4、设置涂鸦为壁纸5、自定义快捷键 注:服务端默认端口为8080;

  • 本文向大家介绍虚拟电路与数据报网络之间的差异,包括了虚拟电路与数据报网络之间的差异的使用技巧和注意事项,需要的朋友参考一下 虚拟电路和数据报网络都是连接服务的类型,用于从发送者到接收者的信息传输。 以下是虚拟电路和数据报网络之间的重要区别- 序号 键 虚拟电路 数据报网络 1 定义 虚拟电路是一种面向连接的服务,其中实现了诸如虚拟电路用于数据传输会话的诸如缓冲区,CPU,带宽等资源。 另一方面,数