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

如何为RASA的actions.py文件中创建的按钮添加点击动画?

实现RASA聊天机器人特定按钮点击动画的方案

首先明确核心逻辑:RASA后端actions.py中定义的按钮仅负责传递按钮的基础配置(文本、触发payload、自定义参数等),点击动画属于前端渲染层的交互效果,需要前后端配合完成,具体操作步骤如下:

步骤1:在actions.py中给目标按钮添加自定义标记

你可以在按钮的配置字典中新增自定义字段,用来标识哪些按钮需要加载动画、加载什么类型的动画,RASA会自动将自定义字段透传给前端,无需额外修改后端接口配置。
示例代码如下:

# actions.py 按钮定义示例
from rasa_sdk import Action, Tracker
from rasa_sdk.executor import CollectingDispatcher

class ActionShowOptions(Action):
    def name(self) -> str:
        return "action_show_options"

    def run(self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: dict) -> list:
        dispatcher.utter_message(
            text="请选择你需要的操作:",
            buttons=[
                {
                    "title": "确认提交",
                    "payload": "/confirm_submit",
                    "custom_anim": "bounce" # 给需要动画的按钮加标记,值对应动画类型
                },
                {
                    "title": "重新填写",
                    "payload": "/refill_form",
                    "custom_anim": "shake" # 不同按钮可以指定不同动画
                },
                {
                    "title": "取消操作",
                    "payload": "/cancel" # 不需要动画的按钮无需加字段
                }
            ]
        )
        return []

步骤2:在前端侧适配动画逻辑

前端拿到RASA返回的按钮列表后,遍历判断每个按钮是否有自定义动画标记,给对应按钮绑定对应的CSS动画即可。
以网页端前端实现为例:

  • 首先定义动画对应的CSS样式:
/* 点击弹跳动画 */
.anim-bounce:active {
    animation: bounce 0.3s ease-in-out;
}
@keyframes bounce {
    0% { transform: scale(1); }
    50% { transform: scale(0.9); }
    100% { transform: scale(1); }
}

/* 点击震动动画 */
.anim-shake:active {
    animation: shake 0.2s ease-in-out;
}
@keyframes shake {
    0% { transform: translateX(0); }
    25% { transform: translateX(-2px); }
    75% { transform: translateX(2px); }
    100% { transform: translateX(0); }
}
  • 渲染按钮时匹配动画标记,伪代码如下:
// 接收RASA返回的消息内容,遍历按钮列表
const buttonList = rasaMessage.buttons || []
buttonList.forEach(btnConfig => {
    const btn = document.createElement("button")
    btn.innerText = btnConfig.title
    // 匹配自定义动画标记,添加对应类名
    if (btnConfig.custom_anim) {
        btn.classList.add(`anim-${btnConfig.custom_anim}`)
    }
    // 原有按钮点击发送payload的逻辑保持不变
    btn.addEventListener("click", () => sendRasaPayload(btnConfig.payload))
    // 将按钮插入到聊天窗口中
    chatWindow.appendChild(btn)
})

注意事项

  • 自定义字段的命名不要和RASA官方保留的按钮字段(title、payload、type等)冲突,避免出现解析异常
  • 如果你使用的是第三方RASA前端组件,可以直接参考组件的自定义按钮渲染文档,通用组件基本都支持识别按钮自定义参数、注入自定义类名的能力

内容的提问来源于stack exchange,提问作者Shakir Sadiq

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 14:54:04