.net core 和 WPF 开发升讯威在线客服系统:调用百度翻译接口实现实时自动翻译

业余时间用 .net core 写了一个在线客服系统。并在博客园写了一个系列的文章,写介绍这个开发过程。

我把这款业余时间写的小系统丢在网上,陆续有人找我要私有化版本,我都给了,毕竟软件业的初衷就是免费和分享,后来我索性就官方发了一个私有化版直接给别人下载。希望能够打造: 开放、开源、共享。努力打造 .net 社区的一款优秀开源产品。

2021年下半年,陆续有朋友联系我,表示从事外贸行业,希望客服系统能够实现客服与访客之间双向的实时自动翻译。

一开始我想的比较复杂,拖着没做这个功能,后来询问的朋友越来越多,我仔细调研了一下这个需求,发现通过公有云上的接口实现起来,非常的简单!整个对接实现过程不夸张的说,10 分钟就完成了。

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

先看实现效果

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

访客端以访客语言显示。

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


简介

升讯威在线客服与营销系统是基于 .net core / WPF 开发的一款在线客服软件,宗旨是: 开放、开源、共享。努力打造 .net 社区的一款优秀开源产品。

完整私有化包下载地址

? https://kf.shengxunwei.com

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

安装部署说明书

? https://docs.shengxunwei.com/Post/f7bc8496-14ee-4a53-07b4-08d8e3da6269


百度翻译的对接使用

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

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 和 密钥 更换成你注册开通百度翻译时得到的即可!

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

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

商匡云商
Logo
注册新帐户
对比商品
  • 合计 (0)
对比
0
购物车