码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Telegram bot i南航打卡 部署 vercel 无服务器微服务


    文章目录

    • 前言
    • 无服务器微服务与无服务器函数的区别
    • 项目详解
      • 部署流程
      • telegram bot 收发消息原理
      • vercel 的限制

    前言

    一个月前写了i南航打卡的机器人,但 HeroKu 免费账户并不支持定时运行打卡函数,所以白嫖失败,HeroKu 会自动停止机器人的运行,所以利用 python schedule 无效,直到下一次用户发消息唤醒云函数。部署 HeroKu 的过程可见上一篇文章:

    Telegram 机器人开发 HeroKu 自动化部署

    由此想到可以使用 vercel 部署 bot,虽然最后折腾成功了,但还是不支持定时唤醒。官方文档:

    Cron Jobs

    官方并不支持定时运行云函数,要是早点看到就好了,折腾了这么久。官方推荐使用 Github Actions 定时执行。下一篇文章就填坑使用 GitHub Actions 部署自动打卡函数。

    折腾过程中发现中文互联网几乎没有关于部署 vercel 无服务器函数的文章,权当是一次部署 vercel 的经验做一个记录吧。项目地址:

    GitHub - yym68686/tgbot at vercel

    无服务器微服务与无服务器函数的区别

    借用橄榄球的比喻,想想四分卫的所有职责:投掷传球、将球传给后卫,等等。如果说四分卫就像球队环境中的微服务(提供“四分卫”服务),那么这些较小的活动中的每一项都是一个函数。但是,微服务和函数之间的界限有时会模糊不清,就像球队中某些球员只执行一项动作(如踢球手)一样。

    References

    https://www.cloudflare.com/zh-cn/learning/serverless/glossary/serverless-microservice/

    项目详解

    因为要部署到 vercel,私以为学习的最好办法就是照着开源项目自己看一遍源码,在 GitHub 找了一个 bot 部署到 vercel 的模板。

    GitHub - odysseusmax/calculator-bot: Simple Serverless Telegram Bot on vercel.com

    用到了 flask 做路由。通过设置 Webhook 唤醒云函数响应用户操作。在原项目的基础上做开发,并将代码上传到项目的 vercel 分支。

    部署流程

    • 在 vercel 创建项目,导入仓库 vercel 分支,可以在 Settings → Git 设置构建不同分支
    • 在 Settings → Environment Variables 添加 DATABASEID BOT_TOKEN NotionToken 这三个环境变量,DATABASEID 是 Notion 数据库 ID,NotionToken 是 Notion 开发者 Token,具体见:Notion API 使用 获取block内容
    • 设置 Webhook,在 Linux 系统终端内输入:
    curl "https://api.telegram.org/bot/setWebhook?url=https://your-project-name.vercel.app/api/webhook/"
    
    • 1

    telegram bot 收发消息原理

    用户先通过客户端发消息给 bot,telegram 服务器通过开发者设置好的 Webhook 将消息转发到对应的 url,vercel 无服务器云函数被 url 访问唤醒,执行云函数。

    vercel 的限制

    免费账户是有限制的,比如无服务器函数响应时间只有十秒:

    Serverless Function Execution Timeout (Seconds)10s

    所以 HeroKu 版本中的打卡函数 nuaa.py 中的 delay 值为3,必然导致 vercel 无服务器函数超时,所以把 delay 改为1.5。

    References

    Limits

  • 相关阅读:
    Java项目——博客系统(前后端交互)
    1027 Colors in Mars
    【Redis 基础】什么是缓存穿透、缓存雪崩和缓存击穿
    从TRPO到PPO(理论分析与数学证明)
    opencv实践项目-图像拼接
    MnTTS: 开源蒙古语语音合成数据集及其基线模型
    Ubuntu基于Docker快速配置GDAL的Python、C++环境
    基于VCO的OTA稳定性分析的零交叉时差模型研究(Matlab代码实现)
    用CSS实现圆环倒计时
    Goroutine和协程的区别
  • 原文地址:https://blog.csdn.net/weixin_45646006/article/details/126287139
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号