我正在创建一个机器人来向Telegram中的多个联系人发送消息.用户可以与机器人分享联系.然后我使用getUpdates并获取电话号码.要使用sendMessage方法,我需要chat_id.现在如何用他的电话号码获取用户的chat_id?有没有比这种方法更好的方法呢?
要让互联网服务保持活力,他们需要与任何类型的垃圾邮件作斗争.结果,Telegram机器人无法开始向尚未开始使用机器人的用户发送消息!
只有当用户开始使用机器人时,您才能看到他/她chat_id
并向他发送消息.
话虽这么说,如果用户(用户A)向您发送contact
另一个用户的详细信息(让我们称之为用户B),您可以看到user_id
用户B.但是您仍然无法直接发送任何消息,除非他/她之前也开始使用机器人.
此行为允许我们通过电话号码进行解决方法和查询用户,或者至少在需要时确认用户的电话号码.
为此,首先需要创建contact
消息.谁发布消息并不重要,甚至机器人也可以发送消息.我们的想法是让电报填补了user_id
新的contact
消息.您可以在此处阅读此对象:联系对象
我们需要使用的方法是sendContact,它需要一个target chat_id
,a first_name
和a phone_number
.现在first_name
可以是任何字符串,其值与进程无关.此外,chat_id
可以识别任何用户与机器人的聊天,甚至是你的.例如,它也可以是机器人的名称,其中机器人是具有写访问权限的管理员@my_private_bot_channel
.简而言之,机器人可以发布消息的任何地方.所以你只需要提供phone_number
.
发送消息后,您将收到服务器响应以及机器人刚刚发布的消息.contact
这个新创建的消息的字段包含有关您刚刚分享其联系人的用户的信息,可能还有他/她的电报user_id
,这与用户的聊天ID相同.
之后,您可以使用deleteMessage方法删除邮件.
以下是以普通请求/响应格式执行此操作的示例,但您应该使用以下框架:
https://api.telegram.org/{BOT_TOKEN}/sendContact?chat_id=123456789&phone_number=+989123456789&first_name=Some+Random+String
对此请求的回复如下:
{ "ok": true, "result": { "message_id": 12345678987654321, "from": { "id": 987654321, "first_name": "The Bot Name", "username": "mybot_bot" }, "chat": { "id": 123456789, "first_name": "Your Chat Party", "last_name": "Your Chat Party", "type": "private" }, "date": 1484612850, "contact": { "phone_number": "989123456789", "first_name": "Some Random String", "user_id": 654789321 } } }
"user_id": 654789321
是我们感兴趣的部分.现在您可以删除您的消息.