我們知道,企業號主要是面向企業需求而生的,因此內部訊息的交流顯得非常重要,而且發送、回覆訊息數量應該很可觀,對於大企業尤其如此,因此可以結合企業號實現內部訊息的交流。企業號具有關注安全、訊息無限制等特點,很適合企業內部的環境。本文主要介紹如何利用企業號實現文字、圖片、文件、語音、影片、圖文訊息等訊息的傳送操作。
對於企業號,有以下一些特點:
1)關注更安全
–只有企業通訊錄的成員才能關注企業號,分級管理員、保密消息等各種特性確保企業內部資訊的安全。
企業可以設定自行驗證追蹤者身份,進行二次安全驗證,確保企業資訊使用和傳遞安全。
若員工離職,企業管理員可在通訊錄中刪除該成員,該成員即自動取消關注企業號,同時微信中的企業號歷史記錄也會被清除。
2)應用可設定
–企業可自行在企業號中可設定多個服務號,可連接不同的企業應用系統,只有授權的企業成員才能使用對應的服務號碼。
3)訊息無限制
–發送訊息無限制,並提供完善的管理介面及微信原生能力,以適應企業複雜、個人化的應用場景。
企業可以主動發送訊息給員工,訊息量不受限制。
4)使用更便利
–企業號在微信中有統一的訊息入口,使用者可以更方便地管理企業號訊息。微信通訊錄也可以直接存取企業號中的應用程式。
目前企業號的內容可以用下面的分層圖來展示,分別包含素材管理、被動回應訊息、通訊錄管理、自訂選單等內容,詳細可以看下面圖示。
企業號和公眾號一樣,可以分為訊息處理和事件處理,以下是他們兩種類型的處理作業,也就發送的訊息有文字訊息、圖片訊息、文件訊息、視訊訊息、語音訊息、地理文字訊息、圖文和多媒體訊息等。
事件處理主要是追蹤、取消追蹤事件,以及選單click類型和view類型兩種操作,還有就是地理位置上報事件等。
兩種類型的處理圖如下。
在企業的管理後台,和公眾號一樣,可以看到對應資訊交流記錄,包括文字、圖片、地理位置等等,如下圖所示。
由於訊息分為幾種類型,包括文字(Text)、圖片(Image)、文件(File)、語音(Voice)、影片(Video)、圖文訊息等(News)、MpNews等。
因此我們需要分別對它們進行一定的定義和封裝處理,如下是它們的資訊物件設計圖。
企業號發送訊息的官方定義如下:
企業可以主動發訊息給員工,訊息量不受限制。
呼叫介面時,使用Https協定、JSON封包格式,封包不需做加密處理。
目前支援文字、圖片、語音、視訊、檔案、圖文等訊息類型。除了news類型,其它類型的消息可在發送時加上保密選項,保密消息會被打上水印,並且只有接收者才能閱讀。
我們以傳送的文字訊息為例進行說明,它的定義如下所示。
text訊息
{ "touser": "UserID1|UserID2|UserID3", "toparty": " PartyID1 | PartyID2 ", "totag": " TagID1 | TagID2 ", "msgtype": "text", "agentid": "1", "text": { "content": "Holiday Request For Pony(http://www.php.cn/)" }, "safe":"0" }
參數 | ,多個接收者以'|'分隔) 。特殊情況:指定為@all,則向關注該企業應用的全部成員發送 | |
---|---|---|
否 | PartyID列表,多個接受者以‘|’分隔。當touser為@all時忽略本參數 | |
否 | TagID列表,多個接受者以‘|’分隔。當touser為@all時忽略此參數 | |
是 | 訊息類型,此時固定為:text | |
content | 是 | |
safe | ||
|
/// <summary> /// 企业号消息管理接口定义 /// </summary> public interface ICorpMessageApi { /// <summary> /// 发送消息。 /// 需要管理员对应用有使用权限,对收件人touser、toparty、totag有查看权限,否则本次调用失败。 /// </summary> /// <param name="accessToken"></param> /// <returns></returns> CommonResult SendMessage(string accessToken, CorpSendBase data); }
然後其他消息逐一繼承這個基類即可,如下所示。
最後會構成下面這個繼承關係圖。
/// <summary> /// 企业号消息管理实现类 /// </summary> public class CorpMessageApi : ICorpMessageApi { /// <summary> /// 发送消息。 /// 需要管理员对应用有使用权限,对收件人touser、toparty、totag有查看权限,否则本次调用失败。 /// </summary> /// <param name="accessToken"></param> /// <returns></returns> public CommonResult SendMessage(string accessToken, CorpSendBase data) { CommonResult result = new CommonResult(); string urlFormat = "http://www.php.cn/{0}"; var url = string.Format(urlFormat, accessToken); var postData = data.ToJson(); //数据不用加密发送 CorpSendResult sendResult = CorpJsonHelper<CorpSendResult>.ConvertJson(url, postData); if (sendResult != null) { result.Success = (sendResult.errcode == CorpReturnCode.请求成功); result.ErrorMessage = string.Format("invaliduser:{0},invalidparty:{1},invalidtag:{2}", sendResult.invaliduser, sendResult.invalidparty, sendResult.invalidtag); } return result; } }最終,文字等類型的消息會根據介面定義進行實現,實現程式碼如下所示。
呼叫加密類別來加密
。private void btnSendText_Click(object sender, EventArgs e) { //发送文本内容 ICorpMessageApi bll = new CorpMessageApi(); CorpSendText text = new CorpSendText("API 中文测试(http://www.php.cn/)"); text.touser = "wuhuacong"; text.toparty = "4";//部门ID text.totag = "0"; text.safe = "0"; text.agentid = "0"; CommonResult result = bll.SendMessage(token, text); if (result != null) { Console.WriteLine("发送消息:{0} {1} {2}", text.text.content, (result.Success ? "成功" : "失败"), result.ErrorMessage); } } private void btnSendImage_Click(object sender, EventArgs e) { btnUpload_Click(sender, e); if (!string.IsNullOrEmpty(image_mediaId)) { //发送图片内容 ICorpMessageApi bll = new CorpMessageApi(); CorpSendImage image = new CorpSendImage(image_mediaId); CommonResult result = bll.SendMessage(token, image); if (result != null) { Console.WriteLine("发送图片消息:{0} {1} {2}", image_mediaId, (result.Success ? "成功" : "失败"), result.ErrorMessage); } } }
6、訊息的發送操作和實際效果 定義好相應的發送對象後,我們就可以進行統一的訊息發送操作,包括文字、圖片、文件、語音類型的訊息,注意有些訊息是需要上傳到伺服器上,然後在根據mediaId進行發送出去的。
發送文字和圖片的操作代碼如下所示。rrreee
更多C#開發微信入口網站及應用-微信企業號的訊息發送(文字、圖片、文件、語音、影片、圖文訊息等) 相關文章請關注PHP中文網!