基于WhatsApp打造高效的CRM系统

2024-09-05 13:04

本文主要是介绍基于WhatsApp打造高效的CRM系统,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景

在 2023 年的统计数据中,WhatsApp 成为了印尼最常用的社交媒体,拥有高达 2.2 亿的用户量,占据印尼互联网人群的 90%之多。

WhatsApp 开发的 WhatsApp Business API 为企业开辟了一条与客户进行大规模、高效且合规沟通的崭新途径。它使得企业能够借助自动化和集成的模式,发送通知、营销信息以及客户支持回复等各类内容。通过使用 WhatsApp Business API,企业能够在引流、服务、促活以及客户管理等诸多方面充分发挥积极作用。

目前,在印尼业务中虽然存在短信、电话、邮箱、推送等多种触达方式,但在成本和触达率方面均存在差异。鉴于 WhatsApp 作为印尼最为常用的社交媒体,业务方面有着强烈的诉求,期望借助 WhatsApp 来触达客户。正因如此,WABA SCRM 系统应运而生,从而解决业务上的痛点。

能力模块

Agent模块

Agent 代表着此系统的用户,即能够使用 INBOX 与客户进行聊天的用户。在该模块当中,能够创建用户、分配角色权限,还能够对用户状态予以修改等。

Team模块

在该模块中,能够创建团队,并且可以对团队人员进行修改等操作。

Contact模块

联系人,多指客户信息,通过外部API对接或者文件导入的方式,给经办分配上不同客户,以实现聊天

Sender模块

企业发送号码,由业务采购手机号码,绑定在企业号上。在INBOX上,经办使用SENDER与客户聊天。该模块可以进行号码分配,包括主号、副号设定。

角色权限模块

该模块支持创建系统角色,并支持对角色进行权限配置

inbox模块

聊天信箱,系统核心能力,用户可以使用INBOX与客户在线聊天

系统架构

scrm系统由backend,ws,backduser,waba四个服务组成。

系统

职责

scrm-back

后台服务,负责聚合业务逻辑,提供后台操作界面及聊天界面等

scrm-ws

长连接服务,使用websocket保持聊天会话连接

scrm-backuser

负责用户登录注册,角色权限配置

scrm-waba

实现系统核心功能,包括聊天、sender分配、联系人管理、案件出入池等

长连接通信

当用户打开聊天界面时,用户端会与后台服务建立一个长连接。多个用户端将会与后台服务的多个 pod 形成 n-n 的连接关系,如下图所示。鉴于此情况,需要对长连接实施有效的管理,以确保客户的消息能够精准无误地推送至用户端。

目前,系统采用了 rabbitmq 的广播模式来解决相关问题。首先,每个 pod 自行维护其与用户端(手机号)的关系。接着,每个 pod 都会在 rabbitmq 中创建队列。当某个 pod 收到回调通知(即有消息到达)后,该 pod 会将指令发送至 rabbitmq 交换机上,随后交换机会向各个队列进行广播通知。各个 pod 收到消息后,会依据收件人的手机号自行检查此连接是否归属于自身。若是,则通过 websocket 将消息推送至用户端;若否,则不进行任何处理。

由于发版或者系统的扩容缩容,会引发 pod 的销毁与创建。因此,需要在 pod 创建时自动新建队列并绑定交换机,同时在 pod 销毁时自动销毁队列并解绑交换机。当前,通过使用注解声明的方式来解决这一问题,具体实现情况如下。基于此种方式,能够实现优雅的扩容缩容

public static final String EXCHANGE_YML_KEY = "${rabbitmq.exchange.forward}";public static final String QUEUE_KEY = "auto-declare-" + APP_NAME + "-#{T(java.util.UUID).randomUUID().toString()}";​@RabbitListener(bindings = @QueueBinding(  value = @Queue(    name = QUEUE_KEY,    durable = "true",    exclusive = "false",    autoDelete = "true",    declare = "true"  ),  exchange = @Exchange(    value = EXCHANGE_YML_KEY,    type = ExchangeTypes.FANOUT,    declare = "false"  )))public void onMessage(Message mqMessage) {  try {    String messageStr = new String(mqMessage.getBody(), StandardCharsets.UTF_8);    log.info("Send message: {} ", messageStr);  } catch (Throwable t) {    log.error("Send message error: ", t);  }}​

未来挑战

虽然 WhatsApp 为企业开放了 WhatsApp Business API ,企业在完成认证后能够获得官方背书。但是,为了有效防止对用户造成过度打扰,WABA 做出了严格限制,规定首次触达用户时必须且只能是模板消息。并且,这些模板内容需要经过 META 的审核管控。只有当用户收到模板消息后主动进行回复,双方之间才能展开自由对话。

正因如此,在 WABA 模板的设计、养号、触达的策略以及使用场景等课题方面,还需要结合具体的实际情况进行全面、深入且细致的考虑。比如,不同行业的特点和用户需求差异明显,模板设计要符合行业规范和用户习惯,巧妙设置引导话术刺激用户主动回复;养号阶段要注重号码质量提升;触达策略要精准把握时机和频率;使用场景也要根据产品或服务的特性来精心规划。

总结

WABA SCRM 系统与 WhatsApp Business API 深度融合,由业务系统精准管控联系用户名单,对用户名单及信息进行过滤及加工,能确保员工与客户之间通过 WhatsApp 进行顺畅、高效且精准的触达,为双方搭建起便捷、有效的沟通桥梁。

这篇关于基于WhatsApp打造高效的CRM系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1139038

相关文章

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

Redis实现高效内存管理的示例代码

《Redis实现高效内存管理的示例代码》Redis内存管理是其核心功能之一,为了高效地利用内存,Redis采用了多种技术和策略,如优化的数据结构、内存分配策略、内存回收、数据压缩等,下面就来详细的介绍... 目录1. 内存分配策略jemalloc 的使用2. 数据压缩和编码ziplist示例代码3. 优化的

基于Python实现自动化邮件发送系统的完整指南

《基于Python实现自动化邮件发送系统的完整指南》在现代软件开发和自动化流程中,邮件通知是一个常见且实用的功能,无论是用于发送报告、告警信息还是用户提醒,通过Python实现自动化的邮件发送功能都能... 目录一、前言:二、项目概述三、配置文件 `.env` 解析四、代码结构解析1. 导入模块2. 加载环

linux系统上安装JDK8全过程

《linux系统上安装JDK8全过程》文章介绍安装JDK的必要性及Linux下JDK8的安装步骤,包括卸载旧版本、下载解压、配置环境变量等,强调开发需JDK,运行可选JRE,现JDK已集成JRE... 目录为什么要安装jdk?1.查看linux系统是否有自带的jdk:2.下载jdk压缩包2.解压3.配置环境

使用SpringBoot+InfluxDB实现高效数据存储与查询

《使用SpringBoot+InfluxDB实现高效数据存储与查询》InfluxDB是一个开源的时间序列数据库,特别适合处理带有时间戳的监控数据、指标数据等,下面详细介绍如何在SpringBoot项目... 目录1、项目介绍2、 InfluxDB 介绍3、Spring Boot 配置 InfluxDB4、I

C#高效实现Word文档内容查找与替换的6种方法

《C#高效实现Word文档内容查找与替换的6种方法》在日常文档处理工作中,尤其是面对大型Word文档时,手动查找、替换文本往往既耗时又容易出错,本文整理了C#查找与替换Word内容的6种方法,大家可以... 目录环境准备方法一:查找文本并替换为新文本方法二:使用正则表达式查找并替换文本方法三:将文本替换为图

Python如何实现高效的文件/目录比较

《Python如何实现高效的文件/目录比较》在系统维护、数据同步或版本控制场景中,我们经常需要比较两个目录的差异,本文将分享一下如何用Python实现高效的文件/目录比较,并灵活处理排除规则,希望对大... 目录案例一:基础目录比较与排除实现案例二:高性能大文件比较案例三:跨平台路径处理案例四:可视化差异报

Java整合Protocol Buffers实现高效数据序列化实践

《Java整合ProtocolBuffers实现高效数据序列化实践》ProtocolBuffers是Google开发的一种语言中立、平台中立、可扩展的结构化数据序列化机制,类似于XML但更小、更快... 目录一、Protocol Buffers简介1.1 什么是Protocol Buffers1.2 Pro

Java高效实现Word转PDF的完整指南

《Java高效实现Word转PDF的完整指南》这篇文章主要为大家详细介绍了如何用Spire.DocforJava库实现Word到PDF文档的快速转换,并解析其转换选项的灵活配置技巧,希望对大家有所帮助... 目录方法一:三步实现核心功能方法二:高级选项配置性能优化建议方法补充ASPose 实现方案Libre