.net core 和 WPF 開發升訊威在線客服系統:調用百度翻譯接口實現實時自動翻譯

業餘時間用 .net core 寫了一個在線客服系統。並在博客園寫了一個系列的文章,寫介紹這個開發過程。

我把這款業餘時間寫的小系統丟在網上,陸續有人找我要私有化版本,我都給了,畢竟軟件業的初衷就是免費和分享,後來我索性就官方發了一個私有化版直接給別人下載。希望能夠打造: 開放、開源、共享。努力打造 .net 社區的一款優秀開源產品。

2021年下半年,陸續有朋友聯繫我,表示從事外貿行業,希望客服系統能夠實現客服與訪客之間雙向的實時自動翻譯。

一開始我想的比較複雜,拖着沒做這個功能,後來詢問的朋友越來越多,我仔細調研了一下這個需求,發現通過公有云上的接口實現起來,非常的簡單!整個對接實現過程不誇張的說,10 分鐘就完成了。

本文將詳細的介紹百度翻譯接口的註冊、開通、對接全過程,以及 源代碼 ,希望對你有用。

先看實現效果

客服端程序以原文和譯文對照的方式顯示。

訪客端以訪客語言顯示。

以設置默認翻譯所有訪客的消息,也可以由客服根據不同訪客自行決定是否翻譯。


簡介

升訊威在線客服與營銷系統是基於 .net core / WPF 開發的一款在線客服軟件,宗旨是: 開放、開源、共享。努力打造 .net 社區的一款優秀開源產品。

完整私有化包下載地址

💾 https://kf.shengxunwei.com/freesite.zip

鐘意的話請給個贊支持一下吧,謝謝~

安裝部署說明書

📕 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 社區的一款優秀開源產品。

鐘意的話請給個贊支持一下吧,謝謝~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章