抖店飞鸽客服自动回复软件开发教程与下载体验(.NET版)

news2024/9/29 21:25:26

转载请注明出处!

原文链接:https://blog.csdn.net/zgyulongfei/article/details/140960430


本文适合的读者为:

  1. 抖店(抖音小店)个体商家;
  2. 抖店店群商家(店群商家:指的是开了几十个抖店的商家);
  3. 想要开发一款抖店自动回复工具的技术人员/团队;
  4. 想学习浏览器自动回复技术的程序员;

省流介绍:

  1. 如果您是抖店商家,可以下载优化过的完善版工具体验,不用查看技术教程。(非商家不要下载!非商家不要下载!非商家不要下载!因为需要有店铺才能用)下载地址:https://www.yunpan.com/surl_y9HVpCnUCAD (提取码:9d35)
  2. 如果您是技术人员,可以细细查看文章,可在文末下载源代码。

目录

一、抖店飞鸽客服系统简介

二、自动回复的原理

三、开发环境与第三方类库

四、创建窗体应用

五、安装第三方JSON库

六、安装浏览器组件

七、软件主窗体设计

八、在主窗体加载抖店飞鸽客服网页

九、识别顾客发送的消息并自动回复

十、创建自动回复规则库 

十一、功能扩展

十二、源码下载


一、抖店飞鸽客服系统简介

抖店是抖音官方退出的购买产品的服务程序,商家在抖店平台上开店后需要与顾客沟通,抖店提供了飞鸽客服系统让商家与顾客进行有效沟通。

抖店飞鸽客服系统界面展示:

目前抖店飞鸽客服系统已经非常完善了,抖店官方也推出了【机器人】功能,帮助商家更高效地回复顾客。

对于咨询量不大的商家而言,平台自带的【机器人】功能已经足够使用了。

然而对于店铺数量多,日常咨询量大的商家来说,平台自带的【机器人】功能有时候会显得心有余而力不足。因为顾客给商家发送的客服消息,商家必须在3分钟内进行答复。当【机器人】遇到不会回答的消息时,而此时抖店商家非常繁忙无法及时给顾客答复消息时,会导致3分钟回复率降低。

什么是3分钟回复率?

顾客发送消息给商家后,商家需要在3分钟内答复顾客的咨询。3分钟回复率的计算方式是:在3分钟内回复的顾客咨询消息数,除以顾客咨询消息总数。快手平台要求这一比率不得低于80%,否则会影响店铺评分。

为了提高客服的3分钟回复率, 网店应该请足够多的人工客服人员来接待顾客的咨询。

然而,对于大部分利润微薄的抖店商家来说,请人工客服专员的成本非常高,网店的经营利润根本无法承担。

此时,要是网店主有一款客服自动回复工具,就可以减轻日常的工作量,减少店铺运营成本,进而提高网店的利润。

二、自动回复的原理

目前抖店飞鸽系统有电脑客户端软件、网页版客服、手机版几种形式。

本文的自动回复教程是对接飞鸽网页版客服系统,通过识别网页上的文字,匹配回复规则后再进行回复。

相当于是做一款飞鸽客服网页的浏览器插件,插件的主要功能是识别抖店飞鸽客服上顾客发送的咨询消息,然后匹配自定义的回复话术规则,再将匹配到的回复语发送给顾客。

三、开发环境与第三方类库

编程语言及框架:c# + WinForm

开发工具:Visual Studio 2017

应用程序运行环境:.Net Framework 4.5.2

Json库:Newtonsoft.Json v10.0.3

浏览器组件:CefSharp.WinForms v85.3.130

四、创建窗体应用

打开VS2017后,创建一个Windows窗体应用(.Net Framework)

目标框架选择:.NET Framework 4.5.2

应用名称填写:抖店自动回复软件

五、安装第三方JSON库

既然是开发一款自动回复工具,那么就必须要有一个自动回复规则库 ,来保存顾客咨询问题的关键词与答复语之间的对应关系。

当顾客咨询时,软件去规则库中查找新消息是否包含规则中的关键词,关键词匹配后,将关键词对应的答复语发送给顾客。

自动回复规则库应该由商家根据店铺的主营商品、商品规格、发货时间、发货地点等情况合理设置,因此需要一个本地数据库。本地数据库一般使用SQLite,它是一款免费的轻量级数据库。

由于本文作为开发范例,主要目的是让读者方便理解与实践,本教程的规则库采用Json格式保存在文件中,因此需要用到第三方JSON库Newtonsoft.Json。

JSON库安装方法:点击VS2017菜单【项目】-【管理NuGet程序包】

切换菜单为【浏览】,然后搜索:Newtonsoft.Json,下拉框中选择v10.0.3版本并安装

六、安装浏览器组件

由于需要对接抖店飞鸽网页版客服,因此需要一个浏览器组件来加载和显示飞鸽客服网页,之后再通过操作浏览器组件来实现识别客服文字以及自动回复。

在Winform中添加一个浏览器控件,现在一般使用第三方开源组件CefSharp.WinForms。

在NuGet中搜索CefSharp.Winfoms,选择v85.3.130版本后安装。

由于CefSharp不支持以Any CPU模式运行程序,所以需要在配置管理器中指定运行平台为x86或x64。调整后的截图如下:

七、软件主窗体设计

软件主窗体需要显示一个【抖店飞鸽客服网页】,以及一些功能性按钮【设置回复规则、开启自动回复、关闭自动回复】。

浏览器组件嵌套在一个Dock.Fill的Panel中,功能区使用MenuStrip组件并创建菜单项。

八、在主窗体加载抖店飞鸽客服网页

在项目上新建CefHelper类,用来初始化CefSharp.Winforms组件的初始化配置。

CefHelper类中的代码如下:

class CefHelper
    {
        public static readonly string WebCachePath = Application.StartupPath + "\\cache";

        public static void InitCef()
        {
            Cef.EnableHighDPISupport();
            CefSettings settings = new CefSettings
            {
                Locale = "zh-CN",
                AcceptLanguageList = "zh-CN,zh;q=0.9",
                UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36",
                PersistUserPreferences = true,
                PersistSessionCookies = true,
                RootCachePath = WebCachePath
            };
            settings.CefCommandLineArgs.Add("disable-features", "WebRtcHideLocalIpsWithMdns");
            Cef.Initialize(settings);
        }
    }

接着在应用程序入口点调用CefSharp的初始化代码:

CefSharp初始化完毕之后,才能创建浏览器组件。

创建浏览器组件不能用常规拖放控件的方式,必须使用代码创建,浏览器组件类名为ChromiumWebBrowser。

创建方法:在主窗体Form1中编写创建方法CreateWebBrowser()来创建一个ChromiumWebBrowser控件,并将其放在主窗体的Panel中。

   /// <summary>
        /// 创建飞鸽客服浏览器
        /// </summary>
        /// <returns></returns>
        private ChromiumWebBrowser CreateFeiGeWebBrowser()
        {
            //浏览器启动时,初始化显示的飞鸽客服网址
            string initUrl = "https://im.jinritemai.com/pc_seller_v2/main/workspace";
            ChromiumWebBrowser fgBrowser = new ChromiumWebBrowser(initUrl)
            {
                RequestContext = new RequestContext(new RequestContextSettings()
                {
                    PersistSessionCookies = true,
                    PersistUserPreferences = true,
                    CachePath = CefHelper.WebCachePath
                })
            };

            //将浏览器添加到Panel
            panel_Browser.Controls.Add(fgBrowser);

            //
            return fgBrowser;
        }

在主窗体构造函数中调用此方法:

运行程序后,效果如下:

飞鸽客服网页已经打开,先登录抖店店铺方便后续操作!

九、识别顾客发送的消息并自动回复

为了获取用户发送的消息,需要使用到JavaScript技术,利用js代码获取网页元素中的内容。

抖店飞鸽客服会把新的咨询顾客放在【当前会话】中。

 要识别是否有新消息,需要识别顾客行上是否有显示时间,这个时间表示顾客发信息了多长时间。

由于抖店飞鸽网页中的元素class都是乱码,无法直接通过getElementsByClassName来定位到元素:

因此需要根据文字内容来识别,获取所有同一种元素标签的集合,然后循环遍历这个标签集合,去找到其中的元素包含:时、分、秒的关键词,进而定位到元素。

检测到当前会话列表含有未回复的顾客时,点击顾客加载对话内容,参考代码如下:

var doms = document.getElementsByClassName('i-icon i-icon-icon-collection-solid');
for (var i = 0; i < doms.length; ++i) {
    var d = doms[i];
    var f1 = d.parentElement;
    if (f1) {
        var f2 = f1.parentElement;
        if (f2) {
            var f3 = f2.parentElement;
            if (f3) {
                var timeSpan = f3.textContent.trim();
                if (timeSpan.indexOf('秒') >= 0 || timeSpan.indexOf('分') >= 0 || timeSpan.indexOf('时') >= 0) {
                    f3.click();
                    break;
                }
            }
        }
    }
}

点击完顾客后,获取顾客发送的最后一条信息,自动回复仅匹配最后一条信息即可!

用js编写如下代码即可获取到最后一条信息:

获取到顾客最后一条信息之后,去自动回复规则库中匹配回复语,然后将回复语填充到文本输入框中发送给顾客(规则库如何设计在后面章节中说明)。

假设回复语为:ok

那么在文本框中填充文字的js代码为:

document.getElementsByTagName('textarea')[0].value='ok'

填充后效果为:

但是点击【发送】按钮后,系统却提示:

明明已经在文本框中填充了【ok】文字了,为什么发送的时候却提示文本为空呢?

原因是网页系统监听了文本框事件,只有打字进去才会识别已输入,设置元素的value无效。

那么如何解决呢?

可以将文字【ok】复制到剪切板,然后在将剪切板的文字粘贴到textarea中即可。此种方法需要占用剪切板,实现效果不是很好。也有不占用剪切板,更高效且简单的方法,感兴趣的可以与作者联系。

整个自动回复过程为:

  1. 检测新消息
  2. 获取顾客发送的最后一条消息
  3. 填充回复语
  4. 点击发送

将js代码封装到c#中,由c#调用js代码。编写JsHelper类:

JsHelper内编写几个静态方法供调用:

  1. GetUnreplyMsgCount
  2. GetCustomerLastAskMsg
  3. InputReplyMsg
  4. ClickSendButton
  5. ClickFirstCustomer

具体源代码可以在文末下载!

接着在主窗体Form1中创建一个线程,每隔5秒定时检测一次是否有未回复的消息,如果有消息就去回复一次。

private void StartAutoReplyTask(ChromiumWebBrowser b)
        {
            Task.Factory.StartNew(() =>
            {
                //等待一会儿再开始执行轮询线程
                Thread.Sleep(2000);

                //循环检测消息
                while (true)
                {
                    if (OpenAutoReplyTask)
                    {
                        //检测是否有新消息
                        while (JsHelper.GetUnreplyMsgCount(b) > 0)
                        {
                            //点击第一个顾客
                            JsHelper.ClickFirstCustomer(b);

                            //等待聊天对话加载
                            Thread.Sleep(1000);

                            //获取此顾客最后一条消息
                            string lastMsg = JsHelper.GetCustomerLastAskMsg(b);

                            //根据顾客消息匹配回复语
                            string replyMsg = GetReplyMsg(lastMsg);

                            //在聊天文本框中填充回复语
                            JsHelper.InputReplyMsg(b, replyMsg);

                            //点击发送按钮
                            JsHelper.ClickSendButton(b);

                            //回复完每一个顾客都等几秒,防止页面反应慢,这个顾客还在【请在3分钟内回复】菜单内
                            Thread.Sleep(3000);
                        }
                    }

                    //执行完一遍流程后,等待5秒再继续执行下一轮
                    Thread.Sleep(5000);
                }
            }, TaskCreationOptions.LongRunning);
        }

上面代码中的方法GetReplyMsg()是去规则库中获取匹配到的回复语,将在下一节说明。

十、创建自动回复规则库 

为了能让自动回复软件根据顾客的问题回答不同的回复语,必须创建一个回复规则库。

为了便于理解与实践,本文采用Json文件存储规则库。

新建类Rules,用来存储关键词与回复语的映射关系。

    /// <summary>
    /// 单条规则
    /// </summary>
    class RuleItem
    {
        /// <summary>
        /// 规则关键词
        /// </summary>
        public string Keyword { get; set; }

        /// <summary>
        /// 关键词匹配的回复语
        /// </summary>
        public string ReplyMsg { get; set; }
    }

创建RuleHelper类,用来操作规则库(增、删、改、查)

Helper类中的方法:

  1. SaveJsonToFile
  2. AddRule
  3. FindRuleReply

在哪个地方做增删改查?

需要创建一个规则库窗口FormRules,然后在窗口上进行操作

在按钮添加事件,增加规则即可。

运行软件后,打开规则窗体添加规则效果:

规则文件rules.json内容:

发消息测试:

运行效果说明软件能正常地根据顾客的消息回复对应的答复语。

十一、功能扩展

这个抖店飞鸽自动回复软件只是一个简单的样例,距离完善还有很大的距离。

功能可扩展的地方还有很多,如:

  1. 支持多关键词匹配
  2. 支持完全匹配与包含匹配
  3. 规则库可修改、删除
  4. 能保存历史回复记录
  5. 能店铺多开同时回复
  6. 能根据不同店铺回复不同话术
  7. ……
  8. ……

十二、源码下载

CSDN下载地址:https://download.csdn.net/download/zgyulongfei/89623129

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1991743.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何用python实现将中缀表达式改成后缀表达式

例&#xff1a;如何将1 *(3 * 4 /(8 - (7 0)))改成后缀表达式 可以先看看这篇文章&#xff0c;写得很详细清楚 思路 从左到右依次遍历中缀表达式各个字符 第一个字符为运算数&#xff0c;直接输出&#xff1a; 第二个字符为操作符&#xff0c;满足 栈空/优先级高于栈顶操…

[Vue篇]vue3组合式API实现todo列表

今天的例子是使用vue3的一个新 API&#xff1a;computed()。它可以让我们创建一个计算属性 ref&#xff0c;这个 ref 会动态地根据其他响应式数据源来计算其 .value。计算属性会自动跟踪其计算中所使用的到的其他响应式状态&#xff0c;并将它们收集为自己的依赖。计算结果会被…

Typora 伪装 LaTeX 中文样式主题 学习笔记

最近发现一个比较有意思的项目&#xff0c;Typora 伪装 LaTeX 中文样式主题 用来写毕设论文的初稿&#xff0c;格式可以统一控制&#xff0c;比较方便。项目“第五章”源格式是“5 系统测试”靠左&#xff0c;就像5.1一样。搜索了一下获得了一些零散的知识点记下来。 在Typora的…

leetCode- - - 链表

目录 1.反转链表&#xff08;leetcode206&#xff09; ​编辑 2. 链表内指定区间反转&#xff08;leetcode92&#xff09; 3.链表中的节点每k个一组翻转&#xff08;leetcode25&#xff09; 4.合并两个排序的链表&#xff08;leetcode21&#xff09; 5.链表的中间节点&am…

揭开 OKR 神秘面纱:打破OKR的概念 –(第1部分)

请注意&#xff0c;《 OKR 解密 》分为5个部分&#xff0c;您目前正在学习其中的一个基本部分&#xff08;5个部分中的第1部分&#xff09;。在这5个要素中&#xff0c;我们将从理论&#xff08;第1部分&#xff09;、应用&#xff08;第2部分&#xff09;、最佳实践&#xff0…

机房托管费用贵吗?机房托管要考虑哪些因素?

机房托管费用受多种因素影响&#xff0c;包括地理位置、设备规模、服务水平、安全性要求等。不同配置和服务质量的托管价格差异较大&#xff0c;一般1U服务器托管费用一年在2000到5000元之间。Rak部落为您整理发布机房托管费用的差异&#xff0c;希望对您选择机房托管时有帮助。…

【GD32 MCU入门教程】四、GD32 MCU 常见外设介绍(3)NVIC 介绍

NVIC(Nested vectored interrupt controller&#xff0c;嵌套向量中断控制器)是Cortex-M处理器的一部分&#xff0c;它是可编程的&#xff0c;且寄存器位于存储器映射的系统控制空间(SCS)。NVIC与内核相辅相成&#xff0c;共同完成对中断的响应。本章将介绍中断的优先级设置、如…

教育机构如何避免数据泄露?两种方法保护数据安全

随着数字化时代的发展&#xff0c;教育机构的很多信息都以数字化的方式存储在计算机或移动存储设备中。为了避免数据泄露&#xff0c;我们需要加密保护重要数据。下面我们就来了解一下教育机构避免数据泄露的方法。 超级加密3000 电脑在教育行业中扮演着重要的角色&#xff0c…

阿里云万网推出首个域名AI大模型智能体应用,上线“.ai”等40个全新域名后缀

中国域名保有量3160万&#xff0c;以9.4%的份额位居全球第二。 域名资源越来越紧张&#xff0c;运维越来越复杂&#xff0c;面对的网络攻击也越来越频繁&#xff0c;都给这一领域提出了更大挑战。 8月8日&#xff0c;在阿里云万网焕新发布会上&#xff0c;阿里云宣布域名产品服…

waf绕过:网络安全狗绕过

引言&#xff1a; 所有的绕过原理都大致一致&#xff0c;但是并不是所有的绕过都能起到作用&#xff0c;渗透测试主要还是一个猜加试的过程&#xff0c;本文仅供参考 网络攻击或扫描绕过 1.get绕过&#xff08;未开启cc防护&#xff09; 网络安全狗的默认防护为&#xff0c;拒…

【C++】模拟实现reverse_iterator(反向迭代器适配器)

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:实战项目集 ⚙️操作环境:Visual Studio 2022 目录 一.了解项目功能 &#x1f4cc;什么是适配器 &#x1f4cc;了解reverse_iterator官方标准 &#x1f4cc;了解模拟实现reverse_iterator 二.逐步实现项目功能模块及…

【C++综合项目】——基于Boost库的搜索引擎(手把手讲解,小白一看就会!!)

目录 一、前言 二、项目的相关背景 ⚡什么是Boost库&#xff1f;⚡ ⚡什么是搜索引擎&#xff1f;⚡ ⚡为什么要做Boost搜索引擎&#xff1f;⚡ 二、搜索引擎的宏观原理 三、搜索引擎技术栈和项目环境 四、正排索引 VS 倒排索引 —— 搜索引擎的具体原理 &#x…

leetcode22. 括号生成,DFS深度优先搜索

leetcode22. 括号生成 数字 n 代表生成括号的对数&#xff0c;请你设计一个函数&#xff0c;用于能够生成所有可能的并且 有效的 括号组合。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”] 示例 2&am…

SQL面试题练习 —— 最后一次登录停留时长

目录 1 题目2 建表语句3 题解 题目来源&#xff1a;腾讯微信。 1 题目 有一张用户登录日志表ods_usr_login_log, 包含user_id&#xff08;用户id&#xff09;、ds&#xff08;登录时间&#xff09;以及stay_time&#xff08;停留时长&#xff0c;单位:ms&#xff09; 问题&…

再等等,iPhone 17系列大革新,即将带来颠覆性的升级

自从苹果在2021年的iPhone 13 Pro系列中引入了ProMotion自适应刷新率技术以来&#xff0c;这项技术便成为了高端智能手机显示技术的重要标志。 如今&#xff0c;随着iPhone 17系列即将登场&#xff0c;我们有望见证这项技术向下一代更广泛的设备拓展。不仅如此&#xff0c;iPh…

每日一题~ abc 365 E 异或运算(拆位+贡献)

处理位运算常用的方法&#xff1a; 拆位法&#xff08;一位一位的处理&#xff0c;通常题目中会给出元素的最大是2的的多少次幂&#xff0c;当然也有给10的次幂的&#xff0c;自己注意一下就可以了&#xff09; 常用的思想 &#xff1a; 算贡献。 异或的性质&#xff1a; A^A0 …

抖音外卖区域服务商有哪些城市开放了?搭建本地生活系统抢先入局的成功率如何?

随着多家互联网大厂对本地生活重视程度的不断提高&#xff0c;本地生活服务商逐渐成为众多创业者心目中的首选赛道。在此背景下&#xff0c;抖音外卖区域服务商的申请通道一经开放便引发了一阵申请热潮。 毕竟&#xff0c;根据艾瑞咨询数据预测&#xff0c;到2025年&#xff0…

Linux5.15.71编译问题处理

目录 1 编译环境及源码版本2 移植Linux 5.15.71遇到问题2.1 imx-sdma 20ec000.dma-controller: Direct firmware load for imx/sdma/sdma-imx6q.bin failed with error -22.2 cfg80211: failed to load regulatory.db 1 编译环境及源码版本 ​ 1. uboot-alientek-v2022.04 ​…

红酒与亚洲菜肴:品味东方韵味

当西方的红酒遇上东方的菜肴&#xff0c;一场跨越地域与文化的味蕾盛宴就此展开。洒派红酒&#xff08;Bold & Generous&#xff09;与亚洲菜肴的相遇&#xff0c;不仅是一场美食的邂逅&#xff0c;更是一次对东方韵味的深度品味。 一、红酒的醇厚与亚洲菜肴的精致 红酒&…

【Unity程序】和【控制台程序】连接【asp.net core的websocket服务】(1)——在编辑器中运行

一、说明 1、本文实验内容所涉及的开发环境说明&#xff1a; win11VisualStudio2022&#xff08;.Net6.0&#xff09;Unity2021.3.40 2、本文参考资料 【1】NativeWebSocketUnity包&#xff1a; https://github.com/endel/NativeWebSocket 【2】asp.net core架设websocket国…