業餘時間用 .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 社群的一款優秀開源產品。