【Serverless版】企微群机器人开发

本文涉及的产品
函数计算FC,每月15万CU 3个月
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
简介: 【Serverless版】企微群机器人开发

背景介绍


  我们公司一直在用企业微信来做员工的沟通工具,不少群里面都有添加一下群聊机器人来做一下任务的提醒,那么做为群聊机器人的一个应用场景自然就是执行定义任务,如定时发送会议提醒,周报填写提醒等等,那往往我们就需要有一台不关机的个人PC或者云服务器来支持群聊机器人的长时间运行(Windows系统中的广告可以在任务计划程序中找到并关闭),个人自用的PC电脑其实不太适合长时间的运行(Windows谁用谁知道,没多久就会变卡),云服务器也需要花费不少的费用,所以我们就需要有一个Serverless的平台来解决这个问题(免费的额度也够用了,绝对超值)。


案例介绍


  我们通过采用腾讯云平台中Serverless产品下的云函数来做服务支撑完成一个企业微信群机器人定时每天早8点发送当天天气情况的一个案例,实现此案例你需要做如下准备工作:

  1. 注册腾讯云平台:cloud.tencent.com/
  2. 注册企业微信平台:work.weixin.qq.com/
  3. 使用VSCodeIDE并安装插件《Tencent Serverless Toolkit for VS Code》


企微群机器人如何发送消息:


  实现企微群机器人消息发送主要是通过向分配给机器人的Webhook地址发送请求来完成的,如果你是群主当你拉机器人进群后查看机器人信息就可以得到机器人对应的Webhook地址了,特别特别要注意:一定要保护好机器人的webhook地址,避免泄漏!不要分享到github、博客等可被公开查阅的地方,否则坏人就可以用你的机器人来发垃圾消息了。。

1.png


项目环境准备:

  1. 初始化项目:npm init -y
  2. 初始化Ts配置:tsc --init
  3. 安装axios来实现请求数据:yarn add axios


模块划分:

  1. model.ts:消息模型(对应API文档),创建消息模型函数;
/**
 * 消息类型
 */
export enum MsgType {
    /** markdown类型 */
    markdown = "markdown",
}
/**
 * markdow消息模型
 */
export type MarkdownContext = {
    /** markdown内容,最长不超过4096个字节,必须是utf8编码 */
    content: string,
}
/**
 * 消息模型基类
 */
export type Message<T> = {
    msgtype: MsgType & T,
    [type: string]: T,
}
/**
 * 创建待发送消息
 * @param type 
 * @param content 
 * @returns 
 */
function createMessage<T>(type: MsgType, content: T) {
    return {
        msgtype: type,
        [type]: content,
    } as Message<T>;
}
/**
 * 创建markdown类型的消息
 * @param content 
 * @returns 
 */
export function createFileMessage(content: FileContext) {
    return createMessage<FileContext>(MsgType.file, content);
}
复制代码
  1. notice.ts:发送各类型通知函数;
import axios from 'axios';
import { createFileMessage, createImageMessage, createMarkdownMessage, createNewsMessage, createTextMessage, FileContext, ImageContext, MarkdownContext, Message, NewsContext, TextContext } from './model';
function request<T>(webhook: string, message: Message<T>) {
    if (!webhook) throw new Error("请设置正确机器人的webhook地址");
    axios.post(webhook, message).then(res => {
        const { status, data } = res;
        if (status === 200 && data) {
            console.log(data.errcode === 0 ? "发送成功" : data.errmsg);
        }
    }).catch(err => {
        console.log(err);
    })
}
/** 发起Markdown类型消息通知 */
export const requestMDNotice = (webhook: string, mdContext: MarkdownContext) => request<MarkdownContext>(webhook, createMarkdownMessage(mdContext));
复制代码
  1. index.ts:入口执行天气信息获取和调用发送Markdown类型消息。
import { requestMDNotice } from "./notice";
import axios from 'axios';
import { AMAP_WEATHER_API, ENTERPRISE_WECHAT_ROBOT_WEB_HOOK } from "./config";
axios.get(AMAP_WEATHER_API).then(res => {
    const { status, data } = res;
    if (status === 200 && data) {
        if (data.status === '1' && data.infocode === '10000') {
            let message = ''
            data.lives.forEach((live: any) => {
                message += `
##### 今天${live.province},${live.city}天气情况
* 天气: ${live.weather}
* 气温: ${live.temperature} 摄氏度
* 风向: ${live.winddirection}
* 风力: ${live.windpower} 级
* 湿度: ${live.humidity}
* 数据发布的时间: ${live.reporttime}\n
                `
            });
            // 向企业微信群发送MD格式的通知
            requestMDNotice(ENTERPRISE_WECHAT_ROBOT_WEB_HOOK, {
                content: message
            })
        }
    }
})
复制代码
  1. 高德天气查询API和机器人Webhook地址配置:
// 企业微信群机器人webhook地址
export const  ENTERPRISE_WECHAT_ROBOT_WEB_HOOK = "《请填写你自己机器人的webhook地址》";
// 高德天气查询API,城市地址在高德开发文档查询
export const  AMAP_WEATHER_API = "《请填写你自己申请天气查询地址》"
复制代码


运行调试:

  • 通过ts-node直接执行我们的入口文件:ts-node .\src\index.ts,输出发送成功后就可以在企微群看到最新的消息了。

2.png


云函数执行定时发送天气情况任务:


安装并认识腾讯云函数开发插件《Tencent Serverless Toolkit for VS Code》:

  • 拉取云端的云函数列表,并触发云函数。
  • 在本地快速创建云函数项目。
  • 使用模拟的 COS、CMQ、CKafka、API 网关等触发器事件来触发函数运行。
  • 上传函数代码到云端,更新函数配置。
  • 在云端运行、调试函数代码。


初始化并编写云函数:

  1. 通过VSCode打开一个空的文件夹;
  2. 认准腾讯云Logo
    网络异常,图片无法展示
    |
    打开插件,第一次使用需要绑定用户凭证,绑定地域;
  3. 在本地函数窗口创建函数=>选择Nodejs版本=>填写函数名,得到如下项目基础模板:

3.png

  1. 将我们ts编写的机器人发送通知的代码编译为js版本,直接运行tsc后将得到的内容覆盖云函数的src目录(index.js文件需要copy内容到main_handler函数中);
  2. 因为我们有实用axios模块来发送请求,所以云函数项目中也需要安装:进入云函数项目的**src**目录执行:npm init -y && yarn add axios


上传并在云端部署调试

  • 云函数的开发到此就完成了,通过本地函数窗口执行上传云函数(node_module如果内容过多建议先在控制台进行安装),并在控制台执行部署和测试;

4.png


配置触发管理(定时任务)

  • 在触发管理菜单中创建新的触发器来执行定时任务Cron表达式通过crontab.guru/every-day查询调整,提交后即可完成,期待明早的消息提醒吧。

5.png6.png

结语:


  本篇涉及到的内容点有:高德开发平台天气查询API使用,腾讯云Serverless云函数使用,企微群机器人配置及API,共同完成了今天的实战案例,你还有什么有趣的应用场景呢?说说看?😂



相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
相关文章
|
21天前
|
监控 Serverless 云计算
探索Serverless架构:开发实践与优化策略
本文深入探讨了Serverless架构的核心概念、开发实践及优化策略。Serverless让开发者无需管理服务器即可运行代码,具有成本效益、高可扩展性和提升开发效率等优势。文章还详细介绍了函数设计、安全性、监控及性能和成本优化的最佳实践。
|
14天前
|
编解码 网络协议 机器人
顶顶通电话机器人开发接口对接大语言模型之实时流TTS对接介绍
大语言模型通常流式返回文字,若一次性TTS会导致严重延迟。通过标点断句或流TTS可实现低延迟的文本到语音转换。本文介绍了电话机器人接口适配流TTS的原理及技术点,包括FreeSWITCH通过WebSocket流TTS放音,以及推流协议和旁路流对接的详细说明。
|
1月前
|
监控 安全 Serverless
"揭秘D2终端大会热点技术:Serverless架构最佳实践全解析,让你的开发效率翻倍,迈向技术新高峰!"
【10月更文挑战第23天】D2终端大会汇聚了众多前沿技术,其中Serverless架构备受瞩目。它让开发者无需关注服务器管理,专注于业务逻辑,提高开发效率。本文介绍了选择合适平台、设计合理函数架构、优化性能及安全监控的最佳实践,助力开发者充分挖掘Serverless潜力,推动技术发展。
68 1
|
2月前
|
监控 Serverless 云计算
探索Serverless架构:开发的未来趋势
【10月更文挑战第5天】Serverless架构,即无服务器架构,正逐渐成为云计算领域的热点。它允许开发者构建和运行应用程序而无需管理底层服务器。本文介绍了Serverless架构的基本概念、核心优势及挑战,并展示了其在事件驱动编程、微服务架构和数据流处理等场景中的应用。通过优化冷启动、使用外部存储等实战技巧,开发者可以更好地利用Serverless架构提升开发效率和应用性能。随着技术的成熟,Serverless将在未来软件开发中扮演重要角色。
|
2月前
|
人工智能 安全 机器人
Dify开发Agent对接钉钉机器人
这篇文章详细讲解了如何在Dify平台上开发一个Agent并与钉钉机器人集成,实现自动化消息处理和响应功能。
217 0
|
4月前
|
机器学习/深度学习 自然语言处理 算法
聊天机器人开发的最佳实践:技术探索与案例分析
【8月更文挑战第22天】聊天机器人作为人工智能领域的重要应用之一,正逐步改变着人们的生活和工作方式。通过遵循最佳实践和技术探索,开发者可以开发出更加智能、高效、安全的聊天机器人产品。未来,随着技术的不断进步和应用场景的不断拓展,聊天机器人将在更多领域发挥重要作用。
|
5月前
|
运维 Serverless API
Serverless 应用引擎使用问题之如何开发HTTP服务
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
4月前
|
前端开发 大数据 数据库
🔥大数据洪流下的决战:JSF 表格组件如何做到毫秒级响应?揭秘背后的性能魔法!💪
【8月更文挑战第31天】在 Web 应用中,表格组件常用于展示和操作数据,但在大数据量下性能会成瓶颈。本文介绍在 JavaServer Faces(JSF)中优化表格组件的方法,包括数据处理、分页及懒加载等技术。通过后端分页或懒加载按需加载数据,减少不必要的数据加载和优化数据库查询,并利用缓存机制减少数据库访问次数,从而提高表格组件的响应速度和整体性能。掌握这些最佳实践对开发高性能 JSF 应用至关重要。
75 0
|
4月前
|
存储 设计模式 运维
Angular遇上Azure Functions:探索无服务器架构下的开发实践——从在线投票系统案例深入分析前端与后端的协同工作
【8月更文挑战第31天】在现代软件开发中,无服务器架构因可扩展性和成本效益而备受青睐。本文通过构建一个在线投票应用,介绍如何结合Angular前端框架与Azure Functions后端服务,快速搭建高效、可扩展的应用系统。Angular提供响应式编程和组件化能力,适合构建动态用户界面;Azure Functions则简化了后端逻辑处理与数据存储。通过具体示例代码,详细展示了从设置Azure Functions到整合Angular前端的全过程,帮助开发者轻松上手无服务器应用开发。
34 0
|
4月前
|
人工智能 搜索推荐 安全
从零到一:微信机器人开发的实战心得
从零到一:微信机器人开发的实战心得
304 2

热门文章

最新文章

相关产品

  • 函数计算
  • 下一篇
    DataWorks