Telegram机器人无法发送消息至群组的问题求助
Telegram机器人发送群组消息失败问题排查与解决
操作背景
- 通过BotFather创建机器人并创建Telegram群组
- 将机器人添加至目标群组
- 在BotFather的机器人设置中关闭Privacy Mode并允许群组使用
初始代码及问题
初始代码:
import requests bot_id = '261600102:AAGx**************uRljA' chat_id = '27*****' #chat_id = "MyPythonTesting" message = input('ENTER THE MESSAGE: ') url = f"https://api.telegram.org/bot{bot_id}/sendmessage?chat_id={chat_id}&test={message}" url = f"https://core.telegram.org/bot{bot_id}/sendmessage?chat_id={chat_id}&test={message}" response = requests.get(url) print(response)
运行情况:
- 第一个URL触发ConnectionError,报错信息:
raise ConnectionError(e, request=request) requests.exceptions.ConnectionError: HTTPSConnectionPool(host='api.telegram.org', port=443): Max retries exceeded with url: /bot261600102:AAG********7uRljA/sendmessage?chat_id=276******&test=esae (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x000001AC0425F910>: Failed to resolve 'api.telegram.org' ([Errno 11001] getaddrinfo failed)"))
- 第二个URL返回状态码200,但消息未发送至群组
修改后代码及新错误
修改后代码:
import requests bot_id = '261600102:AAGx**********YHCCeXV6VqD67uRljA' chat_id = "MyPythonTesting" message = input('ENTER THE MESSAGE: ') url = f"https://api.telegram.org/bot{bot_id}/sendmessage?chat_id={chat_id}&text={message}" response = requests.get(url) print(response)
触发ConnectionError,完整报错栈:
C:\Users\Administrator\AppData\Local\Programs\Python\Python311\python.exe E:\pycharm\projecttelegram\MyPythonTesting_1.py ENTER THE MESSAGE: test Traceback (most recent call last): File "C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\site-packages\urllib3\connection.py", line 203, in _new_conn sock = connection.create_connection( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\site-packages\urllib3\util\connection.py", line 60, in create_connection for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\socket.py", line 962, in getaddrinfo for res in _socket.getaddrinfo(host, port, family, type, proto, flags): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ socket.gaierror: [Errno 11001] getaddrinfo failed The above exception was the direct cause of the following exception: Traceback (most recent call last): File "C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\site-packages\urllib3\connectionpool.py", line 790, in urlopen response = self._make_request( ^^^^^^^^^^^^^^^^^^^ File "C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\site-packages\urllib3\connectionpool.py", line 491, in _make_request raise new_e File "C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\site-packages\urllib3\connectionpool.py", line 467, in _make_request self._validate_conn(conn) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\site-packages\urllib3\connectionpool.py", line 1092, in _validate_conn conn.connect() File "C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\site-packages\urllib3\connection.py", line 611, in connect self.sock = sock = self._new_conn() ^^^^^^^^^^^^^^^^ File "C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\site-packages\urllib3\connection.py", line 210, in _new_conn raise NameResolutionError(self.host, self, e) from e urllib3.exceptions.NameResolutionError: <urllib3.connection.HTTPSConnection object at 0x000001EC5FA8BCD0>: Failed to resolve 'api.telegram.org' ([Errno 11001] getaddrinfo failed) The above exception was the direct cause of the following exception: Traceback (most recent call last): File "C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\site-packages\requests\adapters.py", line 486, in send resp = conn.urlopen( ^^^^^^^^^^^^^ File "C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\site-packages\urllib3\connectionpool.py", line 844, in urlopen retries = retries.increment( ^^^^^^^^^^^^^^^^^^ File "C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\site-packages\urllib3\util\retry.py", line 515, in increment raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='api.telegram.org', port=443): Max retries exceeded with url: /bot261600102:AAGxPuS8CVlJB_0tZYHCCeXV6VqD67uRljA/sendmessage?chat_id=MyPythonTesting&text=test (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x000001EC5FA8BCD0>: Failed to resolve 'api.telegram.org' ([Errno 11001] getaddrinfo failed)")) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "E:\pycharm\projecttelegram\MyPythonTesting_1.py", line 7, in <module> response = requests.get(url) ^^^^^^^^^^^^^^^^^ File "C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\site-packages\requests\api.py", line 73, in get return request("get", url, params=params, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\site-packages\requests\api.py", line 59, in request return session.request(method=method, url=url, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\site-packages\requests\sessions.py", line 589, in request resp = self.send(prep, **send_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\site-packages\requests\sessions.py", line 703, in send r = adapter.send(request, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\site-packages\requests\adapters.py", line 519, in send raise ConnectionError(e, request=request) requests.exceptions.ConnectionError: HTTPSConnectionPool(host='api.telegram.org', port=443): Max retries exceeded with url: /bot261600102:AAGxPuS8CVlJB_0tZYHCCeXV6VqD67uRljA/sendmessage?chat_id=MyPythonTesting&text=test (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x000001EC5FA8BCD0>: Failed to resolve 'api.telegram.org' ([Errno 11001] getaddrinfo failed)")) Process finished with exit code 1
解决方案建议
1. 解决域名解析/网络访问问题
报错getaddrinfo failed说明无法解析api.telegram.org域名,或无法建立网络连接:
- 先在终端执行
ping api.telegram.org,或用浏览器访问https://api.telegram.org,确认网络是否能正常访问该地址 - 若处于受限网络环境,需为requests配置代理:
import requests bot_id = '你的机器人ID' chat_id = '群组数字ID' message = input('ENTER THE MESSAGE: ') url = f"https://api.telegram.org/bot{bot_id}/sendmessage?chat_id={chat_id}&text={message}" # 配置代理,替换为你的代理地址和端口 proxies = { 'https': 'http://your-proxy-address:port' } response = requests.get(url, proxies=proxies) print(response.text) # 打印响应内容,便于排查错误
2. 修正API地址与请求参数
- 必须使用
https://api.telegram.org作为API域名,core.telegram.org是官方文档地址,无法处理API请求 - 请求参数中消息内容的键是
text,而非初始代码中的test,修改后的代码已修正此问题
3. 确认Chat ID正确性
- 群组名称(如
MyPythonTesting)无法直接作为chat_id使用,需获取群组的数字ID:- 在群组内发送一条消息,然后调用
https://api.telegram.org/bot<你的机器人ID>/getUpdates接口,查看返回的JSON数据中的chat.id字段 - 或使用Telegram机器人@getidsbot,将其加入群组后获取群组ID
- 在群组内发送一条消息,然后调用
4. 检查机器人权限
确保机器人在群组内拥有发送消息的权限,可在群组设置中确认机器人的权限为"发送消息"
内容的提问来源于stack exchange,提问作者vivek rajagopalan
相关产品推荐
相关产品推荐

