• .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 社区的一款优秀开源产品。

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

  • 相关阅读:
    springMVC学习 十二 拦截器
    SpringMVC 学习 十一 springMVC控制器向jsp或者别的控制器传递参数的四种方法
    SpringMVC 学习 十 SSM环境搭建(三)springMVC文件配置
    iconfont 在项目中的简单使用
    CSS实现带阴影效果的三角形
    前端以数组的方式传参
    JQuery的ajaxFileUpload的使用
    layer弹出层的关闭问题
    e.target与事件委托简例
    SpringBoot项目在IntelliJ IDEA中实现热部署(简单方式)
  • 原文地址:https://www.cnblogs.com/sheng_chao/p/16327531.html
Copyright © 2020-2023  润新知