
Zulip Delighted 集成指南将客户满意度调查反馈实时同步到团队聊天【免费下载链接】zulipZulip server and web application. Open-source team chat that helps teams stay productive and focused.项目地址: https://gitcode.com/GitHub_Trending/zu/zulipDelighted 是常用的客户体验CX与 NPS净推荐值调查工具用于收集用户对服务的满意度评分与文字反馈。本指南讲解如何将 Zulip 的 Delighted 官方集成接入你的组织从创建 Incoming webhook 机器人、生成集成 URL到在 Delighted 仪表盘完成 Webhook 配置并深入解析 view.py 中消息格式化与分数阈值处理的底层实现以及仓库内对应的 测试用例 与 事件 fixtures。读完本文你将能够在 Zulip 中实时接收每一次调查回复并掌握该集成的消息结构与扩展思路。一、集成能力概览该集成将 Delighted 中“调查回复更新”survey_response.updated这一事件实时推送到 Zulip 的指定主题中。每当你收到一条新的客户反馈分数 评语团队就能在 Zulip 里第一时间看到通知无需再频繁刷新 Delighted 后台。从仓库的集成注册表 zerver/lib/integrations.py 可以看到该集成被归类为customer-support与marketing两大使用场景IncomingWebhookIntegration( delighted, [customer-support, marketing], [WebhookScreenshotConfig(survey_response_updated_promoter.json)], ),这也从侧面说明Delighted 反馈不仅适合客服团队跟进负面评价也适合市场/产品团队追踪正面口碑。二、第一步创建 Incoming webhook 机器人所有 Zulip 的第三方 Webhook 集成都依赖专用机器人账号来发送消息。按官方模板 create-an-incoming-webhook.md 的操作指引进入 Zulip 的Settings → Personal → Bots或通过/help/add-a-bot-or-integration帮助页直达。点击Add a new bot。为机器人命名例如Delighted Bot。Bot type 必须选择Incoming webhook——这是集成能够接收外部请求并以机器人身份发消息的前提。创建成功后系统会分配该机器人专属的API key稍后生成 Webhook URL 时会用到。三、第二步生成集成 URL按照 generate-webhook-url-basic.md 的说明你需要决定将通知发送到哪个频道stream然后通过 Zulip 的/help/generate-integration-url帮助页生成集成 URL。Zulip Incoming webhook URL 遵循统一的规范格式完整规范见仓库文档 docs/webhooks/incoming-webhooks-overview.mdhttps://your-zulip-host/api/v1/external/delighted?api_key机器人API Keystream目标频道名其中your-zulip-host你的 Zulip 服务器地址api_key刚才创建的 Incoming webhook 机器人专属密钥用于身份认证stream可选指定接收通知的频道不填时默认发送到#zulip一般建议显式指定业务频道如#customer-feedback。该 URL 是 Delighted 端唯一需要填写的信息也是安全敏感信息——它等同于向持有者开放了往你的频道发送消息的权限请妥善保管不要泄露到公开渠道。四、第三步在 Delighted 仪表盘配置 Webhook打开 Delighted 后台按 doc.md 的步骤操作点击页面右上角的 Settings设置。选择Integrations集成再选择Webhooks。在Send webhook notifications for发送 Webhook 通知的订阅项下方将Webhook URL设置为上一步生成的集成 URL。点击Save and turn on保存并启用完成启用。启用后Delighted 会在调查回复更新事件发生时向该 URL 发送 JSON 格式的 POST 请求Zulip 端随即把反馈以消息形式投递到指定主题。五、消息格式与 NPS 分数阈值源码解析消息如何组织、如何区分好评与普通反馈均由 view.py 决定。核心逻辑非常简洁PROMOTER Kudos! You have a new promoter. Score of {score}/10 from {email}: quote {comment}.strip()FEEDBACK Great! You have new feedback. Score of {score}/10 from {email}:{comment}.strip()def body_template(score: int) - str: if score 7: return PROMOTER else: return FEEDBACK可以提炼出三个关键设计点 - **分数阈值**当 score 7 时使用 PROMOTER 模板消息以 “Kudos! You have a new promoter.” 开头否则使用 FEEDBACK 模板。注意这与标准 NPS 的三档划分0-6 贬损者、7-8 被动者、9-10 推荐者并不完全一致是从源码结构上**将 7 分及以上统一视为正面反馈**的简化实现——如果希望严格按 NPS 口径拆分 7-8 分可以在此函数基础上扩展。 - **消息主题固定**topic_name Survey response所有 Delighted 通知都聚合在 delighted Survey response 这一主题下便于集中检索与归档如截图所示。 - **模板渲染**分数、邮箱、评语通过 str.format 注入模板评语以 quote 引用块形式展示突出原始反馈文本。 ### Webhook 视图的处理流程 python webhook_view(Delighted) typed_endpoint def api_delighted_webhook( request: HttpRequest, user_profile: UserProfile, *, payload: JsonBodyPayload[WildValue], ) - HttpResponse: person payload[event_data][person] email person[email].tame(check_string) score payload[event_data][score].tame(check_int) comment payload[event_data][comment].tame(check_string) ... check_send_webhook_message(request, user_profile, topic_name, body) return json_success(request)请求处理链路为webhook_view(Delighted)装饰器负责鉴权校验请求中携带的api_key对应的 Incoming webhook 机器人typed_endpointJsonBodyPayload[WildValue]解析 JSON 请求体并用tame(check_string)/tame(check_int)对email、score、comment做类型校验check_send_webhook_message将渲染好的消息发送到指定主题最终返回json_success。六、Webhook 载荷结构fixtures 解析仓库在 fixtures 目录下保存了两种典型事件的样例载荷可直接用于本地联调survey_response_updated_promoter.json评分 9 的推荐者反馈survey_response_updated_non_promoter.json评分 5 的普通反馈。两者结构完全一致核心字段如下{ event_type: survey_response.updated, event_id: b8d057c59327...cbd0, event_data: { id: 5435, person: { id: 5975, email: charlie_gravisexample.com, name: Charlie Gravis, created_at: 1482589349 }, score: 9, comment: Your service is fast and flawless!, permalink: https://delighted.com/r/5pFDpmlyC8GUc5oxU6USto5VonSKAqOa, created_at: 1482589409, updated_at: 1482590009, person_properties: null, notes: [], tags: [] } }集成真正消费的只有event_data下的三个字段字段类型用途person.emailstring受访者邮箱直接展现在消息首行scoreint0-10 的满意度评分决定使用哪个模板commentstring用户文字评语渲染进引用块event_data中的permalink、notes、tags、person_properties等字段当前未被消费若想增强通知内容例如附上反馈详情链接、展示标签可以扩展 view.py 的字段提取逻辑。七、测试与验证仓库为集成提供了完整的自动化测试tests.py覆盖了正反两种分数场景test_feedback_message_promoter以survey_response_updated_promoter.json为输入断言主题为Survey response、消息以 “Kudos! You have a new promoter. Score of 9/10 from charlie_gravisexample.com:” 开头且评语被正确包裹在引用块中test_feedback_message_non_promoter以非推荐者 fixtures 为输入断言使用 “Great! You have new feedback. Score of 5/10 ...” 模板。两个用例均以content_typeapplication/x-www-form-urlencoded调用check_webhook说明该集成同时兼容表单编码与 JSON 载荷的请求体。在本地开发环境中你可以通过运行tools/test-backend zerver.webhooks.delighted来执行上述测试验证集成的消息生成是否符合预期。实际接入后可在 Delighted 后台手动触发一条测试调查回复观察 Zulip 主题内是否出现对应通知。八、总结Zulip 的 Delighted 集成用极小的配置成本一个机器人 一个 URL打通了客户反馈与团队协作的链路其核心价值在于零代码接入全程只需在 Delighted 后台填写 URL无需部署任何中间服务消息语义化通过 7 分阈值自动区分“新推荐者”与“新反馈”两种通知语气重点信息一目了然源码可定制模板、主题名、字段提取逻辑都集中在 view.py 的数十行代码内扩展标签、链接、评分三档划分等能力成本极低测试保障仓库自带的 fixtures 与用例让任何修改都能被快速回归验证。若需要深入了解 Zulip Incoming webhook 的通用机制URL 规范、鉴权方式、消息过滤等可继续阅读仓库文档 docs/webhooks/incoming-webhooks-overview.md。【免费下载链接】zulipZulip server and web application. Open-source team chat that helps teams stay productive and focused.项目地址: https://gitcode.com/GitHub_Trending/zu/zulip创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考