业余时间用 .net core 写了一个在线客服系统。并在博客园写了一个系列的文章,写介绍这个开发过程。
我把这款业余时间写的小系统丢在网上,陆续有人找我要私有化版本,我都给了,毕竟软件业的初衷就是免费和分享,后来我索性就官方发了一个私有化版直接给别人下载。希望能够打造: 开放、开源、共享。努力打造 .net 社区的一款优秀开源产品。
2021年下半年,陆续有朋友联系我,表示从事外贸行业,希望客服系统能够实现客服与访客之间双向的实时自动翻译。
一开始我想的比较复杂,拖着没做这个功能,后来询问的朋友越来越多,我仔细调研了一下这个需求,发现通过公有云上的接口实现起来,非常的简单!整个对接实现过程不夸张的说,10 分钟就完成了。
本文将详细的介绍百度翻译接口的注册、开通、对接全过程,以及 源代码 ,希望对你有用。
先看实现效果
客服端程序以原文和译文对照的方式显示。
访客端以访客语言显示。
以设置默认翻译所有访客的消息,也可以由客服根据不同访客自行决定是否翻译。
简介
升讯威在线客服与营销系统是基于 .net core / WPF 开发的一款在线客服软件,宗旨是: 开放、开源、共享。努力打造 .net 社区的一款优秀开源产品。
完整私有化包下载地址
钟意的话请给个赞支持一下吧,谢谢~
安装部署说明书
https://docs.shengxunwei.com/Post/f7bc8496-14ee-4a53-07b4-08d8e3da6269
百度翻译的对接使用
访问百度翻译开放平台,注册账户并认证。
开通通用翻译 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。
注:
- 待翻译文本(q)需为 UTF-8 编码;
- 在生成签名拼接 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 社区的一款优秀开源产品。