调用Telegram API创建一个订阅阅读器机器人

7

我看到了新的API可以创建自定义机器人,我看到了一些资源,比如这个这个。我还了解了关于注册机器人的@fatherbot。我也搜索了一些有关Telegram机器人的示例,比如这个。我知道如何编写phppython代码,但不知道如何调用API方法和从哪里开始。有没有人有任何想法如何入门?


为什么不使用@TbotifyBot或http://tbotify.com机器人创建服务?它具有内置的Feedreader,可以立即使用。 - Ghasrfakhri
7个回答

11

您可以使用这个基本示例来开始。我建议使用curl等工具添加一些优化,并进行一些错误处理。

<?php

$bot_id = "<bot ID generated by BotFather>";

# Note: you want to change the offset based on the last update_id you received
$url = 'https://api.telegram.org/bot' . $bot_id . '/getUpdates?offset=0';
$result = file_get_contents($url);
$result = json_decode($result, true);

foreach ($result['result'] as $message) {
    var_dump($message);
}

# You can send a message like this:
# The chat_id variable will be provided in the getUpdates result
# TODO: urlencode your message
$url = 'https://api.telegram.org/bot' . $bot_id . '/sendMessage?text=message&chat_id=0';
$result = file_get_contents($url);
$result = json_decode($result, true);

var_dump($result['result']);

哇哦...谢谢你提供这个很棒的例子..谢谢。 - Majid Hojati

4
根据官方Bot API
Getting updates

There are two mutually exclusive ways of receiving updates for your bot 
— the getUpdates method on one hand and Webhooks on the other.

PHP机器人脚本通过接收模式的方式工作不同。

使用getUpdates

访问bot API是通过HTTP GET/POST实现的,详情请参考官方帮助文档。

  • 使用无限循环从电报中读取消息,并进行HTTP GET/POST
  • 如果有新消息

    • 解析消息
    • 使用HTTP GET/POST发送消息
    • 等待一些秒钟

使用WebHook

当使用WebHook(并且已经配置好),您的bot将触发来自telegram服务器的HTTP POST请求到您配置的url,在您自己的服务器上解析由PHP脚本提供的新消息。

在您的PHP脚本中,解析通过HTTP POST传输的新消息,然后使用HTTP POST将消息发送回telegram服务器。


因此,仅在从telegram获取消息时存在差异,所有发送到telegram的响应均通过HTTP GET/POST进行,详情请参见官方API中的发出请求部分。

有些人在github上制作了一些非官方的PHP api:


非常感谢您的回答,看来我可以学习WebHook方法,因为我已经使用过HTTP POST/GET,但是有没有一些实际工作的例子呢?非常感谢。 - Majid Hojati
@MajidHojati 在 GitHub 上的 API 存储库已经包含了一些示例代码,而且它们还在不断增长。 - Fwolf
非常感谢您的帮助。 - Majid Hojati

3
我建议初学者按照以下步骤开始:
  1. 在Telegram应用程序中搜索BotFather

  2. 向他发送/newbot命令。遵循他的说明。

  3. 他会给你一个token,类似于123456789:ABCDefGHIJKLmnopQRstUVwXYz

  4. 打开浏览器窗口,在地址栏中输入此类内容:https://api.telegram.org/bot<token>/getMe
    例如,使用上面的虚假token: https://api.telegram.org/bot123456789:ABCDefGHIJKLmnopQRstUVwXYz/getMe
    它应该以JSON格式返回您的机器人信息。这表明访问Bot API只是发出HTTP请求而已。

  5. 在Telegram应用程序中搜索您的机器人。向它发送一条消息。

  6. 在浏览器窗口中,输入:https://api.telegram.org/bot<token>/getUpdates
    记得更换token。您应该看到刚才发送的消息。注意fromchat字段。那就是您。

  7. 然后,您可以尝试一些库。为了保持语言平衡,我建议使用我创建的Python框架telepot。该项目页面有很多文档和示例。

最后,即使在库的帮助下,我也鼓励您阅读底层的Bot API文档。理解它可以帮助您充分利用其功能。

祝你好运。


3

1
嗯,谢谢。看来这对我来说是一个很好的起点。 - Majid Hojati

1
关于getUpdates API和无限循环,PHP服务器不能让代码执行超过30秒,因此无限循环无法正常工作。

0

针对脚本无法运行超过30秒的问题:

使用set_time_limit(0);使其永久运行。但请注意,任何无限时间循环都有一定的危险性;像CPU占用率高或内存泄漏等副作用会影响您的服务器。这就是为什么许多ISP不允许此设置的原因。


0

非常感谢你,亲爱的Vahid。有没有PHP文件的例子可以让我学习更多?我的意思是我只能在地址中调用方法,然后将它们发布到我的PHP文件中吗?如何返回结果? - Majid Hojati

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接