• 升讯威在线客服系统的并发高性能数据处理技术:对接百度自动翻译


    我在业余时间开发维护了一款免费开源的升讯威在线客服系统,也收获了许多用户。对我来说,只要能获得用户的认可,就是我最大的动力。

    最近客服系统成功经受住了客户现场组织的压力测试,获得了客户的认可。
    客户组织多名客服上线后,所有员工同一时间打开访客页面疯狂不停的给在线客服发消息,系统稳定无异常无掉线,客服回复消息正常。消息实时到达无任何延迟。

    https://kf.shengxunwei.com/


    我会通过一系列的文章详细分析升讯威在线客服系统的并发高性能技术是如何实现的,使用了哪些方案以及具体的做法。

    本文将详细的介绍百度翻译接口的注册、开通、对接全过程,以及 源代码 ,希望对你有用。

    先看实现效果

    客服端程序以原文和译文对照的方式显示。

    访客端以访客语言显示。

    以设置默认翻译所有访客的消息,也可以由客服根据不同访客自行决定是否翻译。

    百度翻译的对接使用

    访问百度翻译开放平台,注册账户并认证。

    https://fanyi-api.baidu.com

    开通通用翻译 API

    注意:

    • 非常见语种(如:乌克兰、菲律宾、印尼),仅企业认证尊享版可调用,未认证的非尊享版接口将返回 58001 错误。
    • 请选择开通“尊享版”。“标准版” QPS 只有 1,每秒只允许调用 1 次翻译接口,无法满足客服系统正常使用需要。

    创建应用

    “服务器回调地址” 留空不填。
    “服务器地址”可留空不填,也可填写部署客服系统的服务器 IP 地址。

    获取 APP ID 和 密钥

    进入“开发者信息”画面,查看“申请信息”中的 APP ID密钥,将其保存备用,在随后的客服系统主程序配置中使用。

    使用 C# 调用翻译接口

    接入方式
    翻译API通过 HTTP 接口对外提供多语种互译服务。只需要通过调用通用翻译API,传入待翻译的内容,并指定要翻译的源语言(支持源语言语种自动检测)和目标语言种类,就可以得到相应的翻译结果。

    通用翻译API HTTPS 地址:
    https://fanyi-api.baidu.com/api/trans/vip/translate

    签名生成方法
    签名是为了保证调用安全,使用 MD5 算法生成的一段字符串,生成的签名长度为 32 位,签名中的英文字符均为小写格式。

    生成方法:
    Step1. 将请求参数中的 APPID(appid), 翻译 query(q,注意为UTF-8编码),随机数(salt),以及平台分配的密钥(可在管理控制台查看) 按照 appid+q+salt+密钥的顺序拼接得到字符串 1。
    Step2. 对字符串 1 做 md5 ,得到 32 位小写的 sign。
    注:

    1. 待翻译文本(q)需为 UTF-8 编码;
    2. 在生成签名拼接 appid+q+salt+密钥 字符串时,q 不需要做 URL encode,在生成签名之后,发送 HTTP 请求之前才需要对要发送的待翻译文本字段 q 做 URL encode;
      3.如遇到报 54001 签名错误,请检查您的签名生成方法是否正确,在对 sign 进行拼接和加密时,q 不需要做 URL encode,很多开发者遇到签名报错均是由于拼接 sign 前就做了 URL encode;
      4.在生成签名后,发送 HTTP 请求时,如果将 query 拼接在 url 上,需要对 query 做 URL encode。

    输入参数
    请求方式: 可使用 GET 或 POST 方式,如使用 POST 方式,Content-Type 请指定为:application/x-www-form-urlencoded
    字符编码:统一采用 UTF-8 编码格式
    query 长度:为保证翻译质量,请将单次请求长度控制在 6000 bytes以内(汉字约为输入参数 2000 个)

    代码

    using System;
    using System.Text;
    using System.Net;
    using System.IO;
    using System.Security.Cryptography;
    using System.Web;
    
    namespace TransAPICSharpDemo
    {
        class Program
        {
            static void Main(string[] args)
            {
                // 原文
                string q = "apple";
                // 源语言
                string from = "en";
                // 目标语言
                string to = "zh";
                // 改成您的APP ID
                string appId = "2015063000000001";
                Random rd = new Random();
                string salt = rd.Next(100000).ToString();
                // 改成您的密钥
                string secretKey = "12345678";
                string sign = EncryptString(appId + q + salt + secretKey);
                string url = "http://api.fanyi.baidu.com/api/trans/vip/translate?";
                url += "q=" + HttpUtility.UrlEncode(q);
                url += "&from=" + from;
                url += "&to=" + to;
                url += "&appid=" + appId;
                url += "&salt=" + salt;
                url += "&sign=" + sign;
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                request.Method = "GET";
                request.ContentType = "text/html;charset=UTF-8";
                request.UserAgent = null;
                request.Timeout = 6000;
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                Stream myResponseStream = response.GetResponseStream();
                StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
                string retString = myStreamReader.ReadToEnd();
                myStreamReader.Close();
                myResponseStream.Close();
                Console.WriteLine(retString);
                Console.ReadLine();
            }
            // 计算MD5值
            public static string EncryptString(string str)
            {
                MD5 md5 = MD5.Create();
                // 将字符串转换成字节数组
                byte[] byteOld = Encoding.UTF8.GetBytes(str);
                // 调用加密方法
                byte[] byteNew = md5.ComputeHash(byteOld);
                // 将加密结果转换为字符串
                StringBuilder sb = new StringBuilder();
                foreach (byte b in byteNew)
                {
                    // 将字节转换成16进制表示的字符串,
                    sb.Append(b.ToString("x2"));
                }
                // 返回加密的字符串
                return sb.ToString();
            }
        }
    }
    
    

    在编写你的代码时,把以上示例代码中的 APP ID 和 密钥 更换成你注册开通百度翻译时得到的即可!


    简介

    升讯威在线客服与营销系统是一款客服软件,但更重要的是一款营销利器。

    https://kf.shengxunwei.com/

    • 可以追踪正在访问网站或使用 APP 的所有访客,收集他们的浏览情况,使客服能够主动出击,施展话术,促进成单。
      访* 客端在 PC 支持所有新老浏览器。包括不支持 WebSocket 的 IE8 也能正常使用。
    • 移动端支持所有手机浏览器、APP、各大平台的公众号对接。
    • 支持访客信息互通,可传输访客标识、名称和其它任意信息到客服系统。
    • 具备一线专业技术水平,网络中断,拔掉网线,手机飞行模式,不丢消息。同类软件可以按视频方式对比测试。

    希望能够打造: 开放、开源、共享。努力打造 .net 社区的一款优秀开源产品。

    钟意的话请给个赞支持一下吧,谢谢~

  • 相关阅读:
    复合函数的结合律证明
    微信小程序渲染层与逻辑层交互原理
    机器学习——CBOW负采样(纯理解)
    数据库系统原理与应用教程(007)—— 数据库相关概念
    Spring Data Rest远程命令执行漏洞复现(CVE-2017-8046)
    Flask框架创建项目初期总结
    深入docker-swarm overlay网络模型
    学习才是测试猿的永动力!超详细的 pytest 钩子函数 之初始钩子和引导钩子来啦
    Win11勒索软件防护怎么打开?Win11安全中心勒索软件防护如何设置
    Kubernetes:(四)常用命令
  • 原文地址:https://www.cnblogs.com/sheng_chao/p/17748319.html