You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否将Django应用与Chatfuel对接?字段更新通知需求咨询

实现Django后台字段更新时通过Chatfuel机器人通知客户的方案

咱把整个实现流程拆成几个关键步骤,亲测能搞定这个需求:

1. 监听Django模型的字段更新事件

要在特定任务字段更新时触发通知,Django的**信号(Signals)**是最顺手的工具,尤其是post_save信号。不过得注意:要判断字段确实发生了变化,不然每次保存都会触发通知,容易造成冗余。

举个代码例子,假设你的任务模型是Task,要监听status字段的更新:

from django.db.models.signals import post_save
from django.dispatch import receiver
from .models import Task
import requests
import logging

logger = logging.getLogger(__name__)

@receiver(post_save, sender=Task)
def notify_client_on_task_update(sender, instance, created, **kwargs):
    # 只处理更新操作,跳过新建任务的场景
    if created:
        return
    
    # 从数据库获取更新前的实例,对比字段变化
    old_instance = sender.objects.get(pk=instance.pk)
    # 假设要监听的核心字段是status,判断是否真的变更了
    if old_instance.status != instance.status:
        # 调用Chatfuel发送通知的函数
        send_chatfuel_notification(instance.client_chatfuel_id, instance)

2. 调用Chatfuel API发送消息

Chatfuel提供了主动发送消息的API,你需要先在Chatfuel后台拿到这几个关键信息:Bot ID、API Token,还有客户对应的Chatfuel User ID(这个得存在你的Django模型里,比如上面代码里的client_chatfuel_id字段)。

然后写发送通知的函数:

def send_chatfuel_notification(user_id, task):
    # 替换成你自己的Bot ID和API Token
    chatfuel_url = f"https://api.chatfuel.com/bots/<你的Bot ID>/users/{user_id}/send?chatfuel_token=<你的API Token>"
    
    # 构造消息内容,支持Chatfuel的结构化消息格式
    payload = {
        "messages": [
            {
                "text": f"您好,您的任务【{task.title}】状态已更新为:{task.get_status_display()},请留意~"
            }
        ]
    }
    
    try:
        response = requests.post(chatfuel_url, json=payload)
        response.raise_for_status()
        logger.info(f"通知已成功发送给用户 {user_id}")
    except requests.exceptions.RequestException as e:
        logger.error(f"发送Chatfuel通知失败: {str(e)}")
        # 这里可以根据需求加重试逻辑,别让通知失败影响Django后台的正常操作

3. 适配后台管理面板的场景

Django Admin默认会触发post_save信号,所以上面的代码在管理员通过后台修改字段时会自动生效。如果是自定义的Admin批量操作,记得要确保操作执行时会保存模型实例,这样信号才能被触发。

要是你想在Admin里更精准控制触发条件,还可以重写Admin的save_model方法,直接在特定场景下调用通知函数:

from django.contrib import admin
from .models import Task

class TaskAdmin(admin.ModelAdmin):
    def save_model(self, request, obj, form, change):
        # 只有更新操作才做判断
        if change:
            old_obj = Task.objects.get(pk=obj.pk)
            if old_obj.status != obj.status:
                send_chatfuel_notification(obj.client_chatfuel_id, obj)
        # 执行默认的保存逻辑
        super().save_model(request, obj, form, change)

admin.site.register(Task, TaskAdmin)

几个注意点

  • 一定要处理API请求的异常,别让通知失败导致Django后台操作报错;
  • 确保Chatfuel的API权限配置正确,允许发送主动消息;
  • 客户的Chatfuel User ID要和你的Django用户数据正确关联,不然找不到要通知的人。

内容的提问来源于stack exchange,提问作者Pilar Figueroa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:46:02