零成本打造公众号聊天机器人:Cloudflare人工智能免费利用指南

本文介绍了如何将CloudflareWorkersAI集成到公众号中作为聊天机器人,包括API接口的使用、服务器处理流程(如Redis和定时任务)、以及如何处理网络延迟问题。作者还探讨了使用Workers部署的优缺点和优化方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Cloudflare Workers AI 现在可以免费使用了,把它集成到我们的公众号作为聊天机器人,先看成品,直接发送消息,由AI回复

Cloudflare Workers AI提供了文本生成、翻译、图像生成、图像分类、语言识别等多种模型, 每天可以有100000次的免费请求

Cloudflare Workers AI 目前为开放 Beta 版,不建议用于生产数据和流量,限制 + 访问可能会发生变化

Cloudflare AI 使用

直接使用cloudflare AI接口(建议)

cloudflare提供接口可以直接使用

使用 Workers 来布署(相对复杂)

这种方式更加自由,可以自定义更多功能。

公众号回复服务

要求:需要一台服务器和基础编程能力

当用户给公众号发消息时,公众号会把消息发送到我们的服务器,微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次。假如服务器无法保证在五秒内处理并回复,可以直接回复空串,微信服务器不会对此作任何处理,并且不会发起重试。

由于cloudflare接口在国外,网络原因请求可以会超过5秒,以下是我的处理过程:

  • 当收到消息时会把当前 msg_id 作为hash键保存到redis中,msg_id: {“error”: “错误信息”, “content”: “接口返回结果”}
  • 创建一个apscheduler任务去发起请求,当请求完成后把结果保存到当前msg_id键的hash中,
  • 在接口中每隔300ms检查一次是否有结果(5秒超时),有结果返回。
@router.post("/wx", )
def message(request: Request, param = Body()):
	""""""
    try:
        params = xmltodict(param.decode())
        event = params.get("Event")
        to_user = params.get("FromUserName")
        content = params.get("Content")
        msg_id = params.get("MsgId")
        # 回复文本消息
        if params.get("MsgType") == "text":
            # 检查是否存在当前msg_id, 没有则添加任务发送请求
            if redis.exists(replay_key(msg_id)) == 0:
                add_task(replay_key(msg_id), cf_request, (content, msg_id))

            delay = 5000  # 等待时间5s
            step = 300  # 间隔检查时间300ms

            while delay > 0:
                logger.info(f"{delay}_{msg_id}_{str(redis.hgetall(replay_key(msg_id)))}")
                # 检查是否有错误
                if redis.hget(replay_key(msg_id), "error"):
                    redis.delete(replay_key(msg_id))
                    return Response(replay_msg(to_user, "系统错误"))
                content = redis.hget(replay_key(msg_id), "content")
                # 有结果返回结果
                if content:
                    redis.delete(replay_key(msg_id))
                    return Response(replay_msg(to_user, content))

                delay -= step
                time.sleep(step/1000)

        # 用户关注回复消息
        if event == "subscribe":
            result = """[让我看看]"""
            return Response(replay_msg(to_user, result))
    except Exception as e:
        logger.exception(e)
        return Response("success")

对于这个过程还有什么优化方法,欢迎大佬指正

公众号回复服务2

还可以直接使用cloudflare的Workers来实现,不需要服务器,具体后续分享

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙行天5

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值