telegtam 机器人配置

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过来的,猜测会不会是接参的方法不对,所示直接用输入流读取参数算了,经尝试发现确实好使
如此一来,能收到消息了,就识别消息内容开发不同的逻辑就好了

你可能感兴趣的:(问题记录)