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