作用 程式設計過程中,我們經常需要增加一些動態效果,以此改善用戶的使用體驗。本文將介紹一種方法,動態顯示按鈕狀態,使其得到滑鼠焦點後自動放大,失去滑鼠焦點後自動縮小。 效果圖 先放一張原圖(滑鼠還未移動到按鈕上): 獲得滑鼠焦點的Button按鈕:(這裡因為是圖片,放大不明顯,所以筆者將按鈕字體也一 ...
開源地址
GitHub:https://github.com/JeffreySu/WeiXinMPSDK
Gitee:https://gitee.com/JeffreySu/WeiXinMPSDK
概述
隨著大預言模型應用的進一步流行,以及最大 Token 支持數量的不斷上升,自動生成的文本長度也在不斷增加。
微信作為國內國民級機器對話的最佳選擇,成為了許多機器人首選的交互埠。然而,微信出於各方面的考慮,為消息回覆的文字容量做了限制(常規為 2048 個位元組,經過測試,按照微信的演算法大約 680 個漢字左右,半形英文任然可到 2048 個字元)。在我們實際的項目落地過程中,這種限制一定程度上影響了大模型的使用和用戶體驗,為此,Senparc.Weixin SDK 推出了可自動判斷回覆文本長度,並全自動判斷最合理的消息回覆方式(消息介面或客服介面)——“自動續航”功能。
由於 Senparc.Weixin SDK 早在很多年前就分離了一整套底層的統一標準架構(NeuChar),本次升級將同時惠及微信公眾號、小程式、企業微信及其開放平臺的代理介面,並對其行為保持了高度的一致性。基於 NeuChar 標準,您還可以將此能力擴展應用在抖音、頭條、QQ、釘釘等不同平臺的小程式及公眾賬號中。
基於 CO2NET 和 NeuChar 標準支持的的全平臺統一架構
由於 NeuChar 的前瞻性架構,所有包含文字回覆的地方都將同時完成升級,包括:公眾號、小程式、企業微信。所有的用法和規則均保持高度一致,以下僅以公眾號為例介紹。
超長消息處理機制
客服消息自動啟用超長判斷,當回覆內容超長時,自動切割成多個消息片段進行發送。
消息介面(MessageHandler)預設不啟用,啟用後整體整體流程如下:
MessageHadler 超長信息處理流程
上圖中“使用客服介面發送”將自動給超長字元串進行切割,確保每一片都在約定字元數以內,並依次發送。
如何啟用
對於客服消息,超長判斷自動啟用,可以通過自定義 limitedBytes 參數修改其預設值(2048 位元組是微信約定的最大數)
await Senparc.Weixin.MP.AdvancedAPIs.CustomApi.SendTextAsync("appId", "openId", "消息內容", limitedBytes: 2048);
對於消息介面,可以在返回 MessageHandler 結果之前的的任意地方,設置其 TextResponseLimitOptions 屬性(包括啟動代碼中、MessageHandler 構造函數、OnTextRequest 事件方法中、甚至 Controller 中都可以),以下方案可以根據實際情況任選一:
- 啟動代碼(中間件):
app.UseMessageHandlerForMp("/WeixinAsync", CustomMessageHandler.GenerateMessageHandler, options => { //[必須] 此處為委托,可以根據條件動態判斷輸入條件 options.AccountSettingFunc = context => senparcWeixinSetting.Value; //[可選] 設置最大文本長度回覆限制(超長後會調用客服介面分批次回覆) options.TextResponseLimitOptions = new TextResponseLimitOptions(2048, senparcWeixinSetting.Value.WeixinAppId); });
- MessageHandler 構造函數
public CustomMessageHandler(Stream inputStream, PostModel postModel, int maxRecordCount = 0, bool onlyAllowEncryptMessage = false, IServiceProvider serviceProvider = null) : base(inputStream, postModel, maxRecordCount, onlyAllowEncryptMessage, serviceProvider: serviceProvider) { this.TextResponseLimitOptions = new TextResponseLimitOptions(2048, postModel.AppId); }
- OntextRequest 方法
public override async Task<IResponseMessageBase> OnTextRequestAsync(RequestMessageText requestMessage) { this.TextResponseLimitOptions = new TextResponseLimitOptions(2048, "AppId"); //... }
- Controller
[HttpPost] [ActionName("Index")] public async Task<ActionResult> Post(PostModel postModel) { var messageHandler = new CustomMessageHandler(await Request.GetRequestMemoryStreamAsync(), postModel); messageHandler.TextResponseLimitOptions = new TextResponseLimitOptions(2048, "AppId"); //... }
總之:只需要設置 messageHandler.TextResponseLimitOptions 即可。
效果體驗
1、關註公眾號“盛派網路小助手”
2、發送文字“超長”
3、關註“盛派網路小助手”小程式
4、點擊“進入客服”,併發送文字“超長”
基於 NeuChar 統一架構標準,公眾號、小程式、企業微信可以輕鬆同步實現超長文本的“續航”功能。
開源
所有源碼及示例已經上傳至開源項目:
GitHub:https://github.com/JeffreySu/WeiXinMPSDK
Gitee:https://gitee.com/JeffreySu/WeiXinMPSDK
也可以直接通過 Nuget 包進行引用,可通過線上 Sample 查看:https://sdk.weixin.senparc.com/
更多說明文檔
轉載請註明出處和作者,謝謝!
作者:JeffreySu / QQ:498977166
博客:http://szw.cnblogs.com/
Senparc官方教程《微信開發深度解析:微信公眾號、小程式高效開發秘籍》,耗時2年精心打造的微信開發權威教程,點擊這裡,購買正版!
Senparc 官方微信開發視頻教程:《微信公眾號+小程式快速開發》,點擊這裡點擊觀看。