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

如何从电报通道接收数据到webhook?

施昊然
2023-03-14

我已经设置了一个电报网络钩子mybot使用node.js/express:

app.get('/hook', function (req, res) {    

        url='https://api.telegram.org/bot17xxxxx/setwebhook?url=https://example.com/hook'
            request(url, function (error, response, body) {
                    if (!error && response.statusCode == 200) {
                console.log(body)
              }
            response.emit('close');
            });        
    });

当我获取https://example.com/hook时,我可以收到我的机器人控制台:

{"ok":true,"result":true,"description":"Webhook was set"}

现在我想从机器人程序接收数据,这样当用户访问时https://telegram.me/mybot?start=xyz并按/startbot,bot应该在钩子的帖子中收到

以下是我收到邮件的路线:

app.post("/hook", function(req, res) {
            console.log(body);

});

但当用户访问时,我发现机器人中什么也没有发生https://telegram.me/mybot?start=xyz,然后按/start

这里可能有什么问题,如何解决它?

共有1个答案

傅丁雷
2023-03-14

数据在 https://example.com/hook 上以要求形式提供。所以你需要使用(要求正文)

app.post("/hook", function(req, res) {
        console.log(req.body);

});

会有类似的事情发生

{"update_id":1111111111,"message":{"message_id":2222,"from":{"id":333333333333,"is_bot":false,"first_name":"Username","last_name":"Lastname","username":"username","language_code":"en},"chat":{"id":1111111111,"first_name":"Username","last_name":"Lastname","username":"username","type":"private"},"date":1518592199,"text":"xyz"}}

你可以,如果你不使用类似body Parser的中间件,你应该解析它。

请参阅简单示例。正文中的所有信息和文本中的文本

body=JSON.parse(req.body)
text=body.message.text
console.log(body)
console.log(text)
 类似资料:
  • 如何使用注册为频道管理员的机器人访问电报频道消息? 我试图从电报频道获取所有信息,并在ASP.NET网页上显示出来(c#) 当新消息直接发送到机器人时,我能够获得更新: 但它不适用于该频道。

  • 在我们的小型初创公司中,我们使用GitLab进行开发,使用Telegram进行开发人员和PO之间的内部沟通。由于PO希望立即看到进度,因此我们设置了GitLab Pipeline,以便在每次提交后将预览版部署在Web服务器上。现在我们想扩展管道。这样在部署后通过Telegram组发送通知。 所以问题是,这可能吗?如果可能,怎么可能? 编辑:因为我已经实现了,这不是一个真正的问题。我想把答案贴在这里

  • 我只想让我的机器人接收特定频道的消息,比如当电报用户加入电报频道时。1.我不是频道创建者或管理员。2.我不想让我的机器人成为频道管理员。3.我不想要求每个频道管理员将我的机器人添加到频道成员中。 你知道通过电报客户端UI或API制作机器人、加入频道的方法吗? 有没有另一种方法可以让机器人接收频道的更新?

  • 一个Java NIO DatagramChannel死一个可以发送、接收UDP数据包的通道。由于UDP是面向无连接的网络协议,我们不可用像使用其他通道一样直接进行读写数据。正确的做法是发送、接收数据包。 打开一个DatagramChannel(Opening a DatagramChannel) 打开一个DatagramChannel你这么操作: DatagramChannel channel =

  • 问题内容: 我在Go中有一个返回两个值的函数。我想将其作为goroutine运行,但是我无法弄清楚创建接收两个值的通道的语法。有人能指出我正确的方向吗? 问题答案: 使用两个值的字段定义自定义类型,然后创建该类型的。 编辑:我还添加了一个使用多个通道而不是自定义类型的示例(在底部)。我不确定哪个更惯用。 例如: 然后 使用自定义类型的频道(Playground)的示例: 产生: LOREM,5 I

  • 因此,我正在用Java编写一个程序,在DatagramSocket和DataGramPacket的帮助下发送和接收数据。问题是,当我发送数据/接收数据时,数据在我发送的程序中也会有所不同,但只是在某些情况下,比如: 但有时会起作用,比如: