所以问题是我为我的 Telegram 机器人设置了一个 webHook 地址,如下所示:https://api.telegram.org/bot<TOKEN>/setWebHook?url=https://evolhookah.com/Home/ReceiveWebhook
之后,我收到了 JSON 格式的确认,表明从现在起 Telegram 将向该 URL 发送消息。
然后我创建了一个方法 ReceiveWebhook(),它负责处理传入的请求,它过去看起来像这些方法(它们都不起作用):
public ActionResult ReceiveJSON(int? id)
{
Stream req = Request.InputStream;
req.Seek(0, System.IO.SeekOrigin.Begin);
string receivedJson = new StreamReader(req).ReadToEnd();
var bs = new TgDesserialize(); //Class containing JSON desserializing function
PeopleAttributes people = bs.desserializer(receivedJson); //desserializer manages with desserializing received JSON and returns an object people filled up with necessary values
return Content(people.firstName);
}
不幸的是,使用流的想法不起作用,然后我决定以字符串形式接收传入的 JSON,这就是它的样子:
public ActionResult JSONString(String receivedJSON)
{
var bs = new TgDesserialize();
PeopleAttributes people = bs.desserializer(receivedJSON);
return Content(people.firstName);
}
问题:每次收到 Webhook 时,我要么得到 null JSON,要么无法在控制器中正确接收它。
问题:
- 有什么可能的方法可以检查 Telegram 在发送 webHook 时是否正在发送带有数据的 JSON?
- 为什么我总是得到 NULL,而
https://api.telegram.org/bot<TOKEN>/getUpdates
显示我在 JSON 中有数据?
- 我在控制器中以错误的方式接收 JSON 吗?如果是,处理传入 JSON 的最佳实践是什么?
首先,我建议您使用电报机器人 https://www.nuget.org/packages/Telegram.Bot/图书馆并寻找这个例子Webhook https://github.com/MrRoundRobin/telegram.bot.examples/tree/master/Telegram.Bot.Examples.WebHook。
但总的来说:
- 安装Postman https://www.getpostman.com/并向您的控制器发布一条手动消息,例如 telegram webhook 消息。然后确保您的控制器中没有错误。
邮递员样本:
{
"update_id":10000,
"message":{
"date":1441645532,
"chat":{
"last_name":"Test Lastname",
"id":1111111,
"first_name":"Test",
"username":"Test"
},
"message_id":1365,
"from":{
"last_name":"Test Lastname",
"id":1111111,
"first_name":"Test",
"username":"Test"
},
"text":"/start"
}
- 如果你的控制器是 true,你必须确保 Webhook 消息是通过 Telegram 发送的。您可以下载ngrok https://ngrok.com/并创建一个到本地主机的 https 代理。
在 ngrok 中使用此命令:
ngrok http 20201
20201 是您的本地主机端口 (localhost:20201)。
现在ngrok给你一个https链接,你必须将该链接设置为你的telegram webhook(就像你说的那样)。
此时,如果 telegram 为您的机器人发送 webhook 消息,那么您可以在本地主机中对其进行调试。
- 最后,如果您没有找到问题,您必须阅读Marvin 正在申请专利的 All Things Webhook 指南 https://core.telegram.org/bots/webhooks再次检查所有要求。
- Webhooks 支持 IPv4,目前不支持 IPv6。
- 接受端口 443、80、88 或 8443 上来自 149.154.167.197-233 的传入 POST。
- 能够处理 TLS1.0+ HTTPS 流量。
- 提供受支持的、非通配符的、经过验证的或自签名的证书。
- 使用与您在设置时提供的域相匹配的 CN 或 SAN。
- 提供所有中间证书以完成验证链。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)