telegtam 机器人配置

@Wen's  December 27, 2020

telegram有两种api,这里采用botapi,系统:centos6.x 语言:java 
首先下载telegram pc版本,然后创建一个bot 
https://telegram.me/botfather 
它会提示你用telegram打开。然后你就打开了botfarther的聊天对话框。输入 
/newbot 
回车发送。botfarther会反馈 
Alright, a new bot. How are we going to call it? Please choose a name for your bot. 
输入你要创建的bot名字。例如test_bot,回车发送 
它会反馈 
Good. Now let’s choose a username for your bot. It must end in bot. Like this, for example: TetrisBot or tetris_bot. 
我再输入 TestBot。这是这个机器人的名字。 
它会反馈 
Sorry, this username is already taken. Please try something different. 
这名字已经被用了。我们换一个 
GZ_Test_Bot 
它会反馈 
BotFather, [16.02.17 14:23] 
Done! Congratulations on your new bot. You will find it at t.me/Gz_David_Bot. You can now add a description, about section and profile picture for your bot, see /help for a list of commands. By the way, when you’ve finished creating your cool bot, ping our Bot Support if you want a better username for it. Just make sure the bot is fully operational before you do this. 
Use this token to access the HTTP API: 
xxx:xxx 
For a description of the Bot API, see this page: https://core.telegram.org/bots/api 
这里它生成了api token。我们记下它。以后api请求都会用到。如果需要帮助,输入 /help 
输入/token 可以重新生成一个token。 
/revoke 可以撤销一个token 
我们需要用这个bot来发送消息,首先需要创建一个group,加入一些人,同时将这个bot也加进去。然后在这个group中发送消息。类似 /hello @GZ_David_Bot 
然后访问 
https://api.telegram.org/bot(token)/getUpdates 这个请求是请求bot相关的消息,如果返回一个带消息的json说明bot创建成功 
接下来就是要定制bot的命令,根据用户输入的命令做出不同的响应 
要定制命令首先要能收到bot相关的消息,官方api提供了两种方法getUpdates(拉取)和setWebHook(推送) 
为了方便开发和消息的实时性,采用第二种setWebHook 
要说的是,服务必须是https的具体可见https://core.telegram.org/bots/api 
setWebHook很简单,在服务器执行crul https://api.telegram.org/bot(token)/setWebHook?url=https://you.domain.com/xxx 
如果设置成功,会返回一个json消息体是hook was set 
现在就可以去telegram跟bot的发消息了,正常的话,这边会收到消息(前提是这边写好了服务) 
但是在这里我遇到一个问题,无论如何我都收不到消息,之后用getUpdates尝试发现确实有消息 
于是https://api.telegram.org/bot(token)/getWebHookInfo返回结果显示证书配置不正确 
我这里的服务器是tomcat+nginx,证书是买的公共证书,理论上不会有问题,于是去谷歌一下发现端倪 
https://www.cubewebsites.com/blog/guides/fix-telegram-webhooks-not-working/ 
上面说需要把用到的证书合并成一个,找老大确认后发现确实可以收到消息了 
但是新问题又来了,接收到的消息体是空的,尝试很多遍都是空的,谷歌上也有同样的提问,但是一直没找到合适的解决方案 
仔细查看官方api后发现参数是post过来的,猜测会不会是接参的方法不对,所示直接用输入流读取参数算了,经尝试发现确实好使 
如此一来,能收到消息了,就识别消息内容开发不同的逻辑就好了


添加新评论