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

转载请注明出处!

原文链接: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})};//将浏览器添加到Panelpanel_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.rhkb.cn/news/396020.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Netty技术全解析:FixedLengthFrameDecoder类深度解析

❃博主首页 &#xff1a; 「码到三十五」 &#xff0c;同名公众号 :「码到三十五」&#xff0c;wx号 : 「liwu0213」 ☠博主专栏 &#xff1a; <mysql高手> <elasticsearch高手> <源码解读> <java核心> <面试攻关> ♝博主的话 &#xff1a…

【代码故事】VSCode知名主题material-theme仓库代码清空

大家好&#xff0c;我是前端之虎陈随易。 这是我的个人网站 https://chensuiyi.me。 出大事了 看到了一篇前端社区开源扛把子 Anthony Fu 的帖子。 经过一番了解&#xff0c;出大事了&#xff01; 知名 VSCode 主题 material-theme 仓库清空了&#xff01; 连带着所有提交…

开源AI智能名片微信小程序:以人性洞察与资源优化为驱动的社群营销新策略

摘要&#xff1a;随着科技的飞速发展&#xff0c;特别是人工智能&#xff08;AI&#xff09;技术的广泛应用&#xff0c;传统营销模式正经历着前所未有的变革。本文旨在探讨开源AI智能名片微信小程序如何凭借其独特的功能特性&#xff0c;结合人性洞察、需求解决、资源优化以及…

Kali Linux——网络安全的瑞士军刀

一、引言 在网络安全的领域中&#xff0c;Kali Linux 宛如一把强大而全能的瑞士军刀&#xff0c;为安全研究人员和专业人士提供了丰富的工具和资源。本文将深入探讨 Kali Linux 的特点、优势、常用工具以及实际应用场景&#xff0c;带您领略这一强大操作系统的魅力。 二、Kal…

驰骋BPM RunSQL_Init SQL注入漏洞复现

0x01 产品简介 驰骋BPM系统由济南驰骋信息技术有限公司研发,具有悠久的历史和丰富的行业经验。其工作流引擎CCFlow自2003年开始研发,是国内知名的老牌工作流引擎,在BPM领域拥有广泛的研究群体与应用客户群。统提供.net与java两个版本,且两个版本的代码结构、数据库结构、设…

【学习笔记】Matlab和python双语言的学习(整数规划和0-1规划)

文章目录 前言一、整数规划和0-1规划二、典型示例1.背包问题2.指派问题 三、代码实现----Matlab1.Matlab 的 intlinprog 函数2.Matlab 代码背包问题指派问题 四、代码实现----python背包问题指派问题 总结 前言 通过模型算法&#xff0c;熟练对Matlab和python的应用。 学习视频…

案例精选 | 某省级妇幼保健院自动化安全运营中心建设成功实践

某省级妇幼保健院&#xff0c;是一所集医疗、保健、教学、科研、预防、康复于一体的省级三级甲等妇幼保健机构&#xff0c;专注于为全省妇女儿童提供全方位、高质量的医疗保健服务。医院拥有4个院区&#xff0c;总建筑面积10万平米&#xff0c;开放床位700张&#xff0c;年门诊…

【vue3|第21期】Vue3中Vue Router的push和replace方法详解

日期&#xff1a;2024年8月9日 作者&#xff1a;Commas 签名&#xff1a;(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释&#xff1a;如果您觉得有所帮助&#xff0c;帮忙点个赞&#xff0c;也可以关注我&#xff0c;我们一起成长&#xff1b;如果有不对的地方&#xff…

需求分析-系统架构师(四十六)

软件需求 软件需求&#xff1a;对系统在功能、行为、性能、设计约束等方面的期望。 分为 需求开发 和 需求管理 两大类。 需求分为 业务需求&#xff0c;用户需求&#xff0c;系统需求。 业务需求&#xff1a;企业或者客户对系统高层次的目标要求。 用户需求&#xff1a;用…

C#图片批量下载Demo

目录 效果 项目 代码 下载 效果 C#图片批量下载 项目 代码 using Aspose.Cells; using NLog; using System; using System.Collections.Generic; using System.Data; using System.Diagnostics; using System.Drawing; using System.IO; using System.Linq; using System.…

git强制推送代码教程

git强制推送代码教程 首先说明情况&#xff0c;我的代码remote了两个git库&#xff0c;现在想要推送到其中一个&#xff0c;但是版本不对&#xff0c;被拒绝&#xff0c;因此下面将进行强制推送 首先检查远程库都有哪些 git remote -v2. 检查当前的分支 git branch当前分支前…

八股总结----计算机网络

1.UDP头部格式 UDP的头部比较简单&#xff0c;只有8个字节&#xff0c;这也是为什么UDP不能像TCP那样实现可靠传输的原因。源端口和目标端口表示数据传输的来源和去向&#xff0c;包长度表示数据报文的总长度&#xff08;包含了头部和数据部分&#xff09;&#xff0c;方便接收…

stm32程序调试方式(OLED显示屏调试以及Keil调试模式)

文章目录 前言一、调试的方式二、OLED显示屏调试2.1 OLED简介2.2 OLED硬件电路2.3 OLED驱动函数介绍2.4 OLED显示屏应用案例代码 三、Keil调试模式总结 前言 提示&#xff1a;本文主要用作在学习江协科大STM32入门教程后做的归纳总结笔记&#xff0c;旨在学习记录&#xff0c;…

基于GeoTools使用JavaFx进行矢量数据可视化实战

目录 前言 一、JavaFx展示原理说明 二、GeoTools的Maven依赖问题 三、引入Geotools相关的资源包 四、创建JavaFx的Canvas实例 五、JavaFx的Scene和Node的绑定 六、总结 前言 众所周知&#xff0c;JavaFx是Java继Swing之后的又一款用于桌面应用的开发利器。当然&#xff0…

9.C基础_指针与数组

数组指针&#xff08;一维数组&#xff09; 数组指针就是" 数组的指针 "&#xff0c;它是一个指向数组首地址的指针变量。 1、数组名的含义 对于一维数组&#xff0c;数组名就是一个指针&#xff0c;指向数组的首地址。 基于如下代码进行分析&#xff1a; int a…

语言模型-神经网络模型(二)

神经网络模型语言模型 神经网络模型神经网络的分类神经网络模型和Ngram对比应用一-话者分离对比优劣 应用二-数字归一化应用三-文本打标 神经网络模型 释义&#xff1a; 与ngram模型相似使用&#xff0c;前n个词预测下一个词&#xff0c;输出在字表上的概率分布&#xff1b;过…

如何设置 Visual Studio Code 的滚轮缩放功能

Visual Studio Code (VSCode) 是一个强大的代码编辑器&#xff0c;提供了许多便捷的功能来提高开发效率。其中之一就是通过滚轮缩放字体大小。以下是详细的设置步骤&#xff1a; 步骤 1&#xff1a;打开设置页面 首先&#xff0c;启动 Visual Studio Code。在左上角点击 “文…

【机器学习基础】线性回归

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈Python机器学习 ⌋ ⌋ ⌋ 机器学习是一门人工智能的分支学科&#xff0c;通过算法和模型让计算机从数据中学习&#xff0c;进行模型训练和优化&#xff0c;做出预测、分类和决策支持。Python成为机器学习的首选语言&#xff0c;…

集成视触觉传感器的机器人操作学习

强化学习是一种仿人学习的方法&#xff0c;其在不断与环境交互试错的过程中进行学习&#xff0c;提高自身的认知。其具有如下的优点&#xff0c;首先是数据依赖性低&#xff0c;强化学习通过与环境的交互来学习&#xff0c;减少了对标记数据的依赖性&#xff0c;可以大量的减少…

Linux 系统框架分析(一)

一、linux内核结构框图 对内核结构框图有个总体的把握&#xff0c;有助于理解为什么驱动要这样写&#xff0c;为什么写的应用程序所用的C库接口能够产生这么多的事情。 框图可以看出来&#xff0c;linux系统&#xff0c;包括五个系统 一、Linux内核结构介绍 Linux 内核是操作…