创建机器人Bot
在Telegram上,找个人叫BotFather,他是一个机器人,可以直接与他对话。
通过如下三步即可创建一名你自己的机器人:
1、/newbot
申请创建机器人,此时他会回复你提供机器人的名字(昵称)
2、botname
这个你自己起就行,比如mytestbot20241114(区别下面示例,方便理解)
3、botid
这个就是这个机器人的账号,就是Telegram可以搜索到的类似userid的东西,有个要求就是必须bot结尾,如mytest20241114bot
此时,你就可以拿到上面这样的回复,有个Done,说明生成成功,在中间HTTP API下面有个高亮的token,这个就是验证启动服务用的,保留好,很好用。
(注意,同样的token在启动服务时候,会被后启动的顶掉。这个还是好理解的吧。
下面使用Node.js做示例,可以看下如何快速集成。
const TelegramBot = require('node-telegram-bot-api')
// const { SocksProxyAgent } = require('socks-proxy-agent')
// const agent = new SocksProxyAgent('socks://localhost:7078')
const token = '7719541817:AAETjgrLtsfwkABC4KtqjkbiYjguCdXtty0'
const bot = new TelegramBot(token, {
polling: true,
// request: {
// agent
// }
})
bot.onText(/\/echo (.+)/, (msg, match) => {
const chatId = msg.chat.id
const resp = match[1]
bot.sendMessage(chatId, resp)
})
bot.on('message', (msg) => {
const chatId = msg.chat.id
bot.sendMessage(chatId, 'Received your message. ' + process.env.NODE_ENV + ' ' + process.env.runtime)
})
这里要注意被我注释的部分,由于Telegram服务器的特殊性,所以如果你在本地运行,大概率是会出现error: [polling_error] {"code":"EFATAL","message":"EFATAL: Error: connect ETIMEDOUT xxx.xxx.xxx.xxx:443"}
类似这样的错误,不要慌,就是科学的事情。
所以,在你的科学工具支持socket的情况下,需要使用我上面注释代码的内容,替换其中的url为你自己的本地或远程都行。
如果你部署在国外服务器上,则不需要注释的那些代码,放心删掉就好了。
这里的onText就是匹配文本,类似express的router,这里用了正则匹配,获取消息id和消息的内容实体(截取有效业务部分)。
下面的message是消息监听,会同时获取到上面的onText,所以会出现两次消息,解决方案就是代码排除即可。
我在message里面加上来环境变量区分线上和线下,无所谓。
最后效果如图:
这里本地未设置环境变量,所以都是undefined。
响应的token不可用,因为我已经删掉这个机器人。