C#開發(fā)微信門戶及應用(19)-微信企業(yè)號的消息發(fā)送(文本千诬、圖片、文件膏斤、語音徐绑、視頻、圖文消息等)

我們知道莫辨,企業(yè)號主要是面向企業(yè)需求而生的傲茄,因此內(nèi)部消息的交流顯得非常重要,而且發(fā)送衔掸、回復消息數(shù)量應該很可觀烫幕,對于大企業(yè)尤其如此,因此可以結合企業(yè)號實現(xiàn)內(nèi)部消息的交流敞映。企業(yè)號具有關注安全较曼、消息無限制等特點,很適合企業(yè)內(nèi)部的環(huán)境振愿。本文主要介紹如何利用企業(yè)號實現(xiàn)文本捷犹、圖片、文件冕末、語音萍歉、視頻、圖文消息等消息的發(fā)送操作档桃。

1枪孩、企業(yè)號特點

對于企業(yè)號,有以下一些特點:
1)關注更安全
–只有企業(yè)通訊錄的成員才能關注企業(yè)號,分級管理員蔑舞、保密消息等各種特性確保企業(yè)內(nèi)部信息的安全拒担。
企業(yè)可以設置自行驗證關注者身份,進行二次安全驗證攻询,保證企業(yè)信息使用和傳遞安全从撼。
若員工離職,企業(yè)管理員可在通訊錄中刪除該成員钧栖,該成員即自動取消關注企業(yè)號低零,同時微信中的企業(yè)號歷史記錄也會被清除。
2)應用可配置
–企業(yè)可自行在企業(yè)號中可配置多個服務號,可以連接不同的企業(yè)應用系統(tǒng),只有授權的企業(yè)成員才能使用相應的服務號河泳。
3)消息無限制
–發(fā)送消息無限制,并提供完善的的管理接口及微信原生能力气堕,以適應企業(yè)復雜、個性化的應用場景畔咧。
企業(yè)可以主動發(fā)消息給員工茎芭,消息量不受限制
4)使用更便捷
–企業(yè)號在微信中有統(tǒng)一的消息入口誓沸,用戶可以更方便地管理企業(yè)號消息梅桩。微信通訊錄也可以直接訪問企業(yè)號中的應用。

2拜隧、企業(yè)號的管理接口內(nèi)容

目前企業(yè)號的內(nèi)容可以用下面的分層圖來展示宿百,分別包含素材管理、被動響應消息洪添、通訊錄管理垦页、自定義菜單等內(nèi)容,詳細可以看下面圖示干奢。


3痊焊、企業(yè)號消息和事件的處理

企業(yè)號和公眾號一樣,可以分為消息處理和事件處理忿峻,下面是他們兩種類型的處理操作薄啥,也就發(fā)送的消息有文本消息、圖片消息逛尚、文件消息垄惧、視頻消息、語音消息绰寞、地理文字消息到逊、圖文和多媒體消息等铣口。
事件處理主要就是關注、取消關注事件蕾管,以及菜單click類型和view類型兩種操作枷踏,還有就是地理位置上報事件等。
兩種類型的處理圖如下所示掰曾。


4、企業(yè)號消息管理

在企業(yè)的管理后臺停团,和公眾號一樣旷坦,可以看到對應信息交流記錄,包括文字佑稠、圖片秒梅、地理位置等等,如下所示舌胶。



由于消息分為幾種類型捆蜀,包括文本(Text)、圖片(Image)幔嫂、文件(File)辆它、語音(Voice)、視頻(Video)履恩、圖文消息等(News)锰茉、MpNews等。
因此我們需要分別對它們進行一定的定義和封裝處理切心,如下是它們的信息對象設計圖飒筑。


企業(yè)號發(fā)送消息的官方定義如下:
企業(yè)可以主動發(fā)消息給員工,消息量不受限制绽昏。
調用接口時协屡,使用Https協(xié)議、JSON數(shù)據(jù)包格式全谤,數(shù)據(jù)包不需做加密處理肤晓。
目前支持文本、圖片啼县、語音材原、視頻、文件季眷、圖文等消息類型余蟹。除了news類型,其它類型的消息可在發(fā)送時加上保密選項子刮,保密消息會被打上水印威酒,并且只有接收者才能閱讀窑睁。

我們以發(fā)送的文本消息為例進行說明,它的定義如下所示葵孤。
text消息

{
   "touser": "UserID1|UserID2|UserID3",
   "toparty": " PartyID1 | PartyID2 ",
   "totag": " TagID1 | TagID2 ",
   "msgtype": "text",
   "agentid": "1",
   "text": {
       "content": "Holiday Request For Pony(http://xxxxx)"
   },
   "safe":"0"
}

其中每種消息都會包含以下消息所示担钮,也就是它們共同的屬性:

touser": "UserID1|UserID2|UserID3",
"toparty": " PartyID1 | PartyID2 ",
"totag": " TagID1 | TagID2 ",
"msgtype": "text",
"agentid": "1",

因此我們可以定義一個基類用來方便承載這些共同的信息。

/// <summary>
/// 企業(yè)號發(fā)送消息的基礎消息內(nèi)容
/// </summary>
public class CorpSendBase
{      
    /// <summary>
    /// UserID列表(消息接收者尤仍,多個接收者用‘|’分隔)箫津。特殊情況:指定為@all,則向關注該企業(yè)應用的全部成員發(fā)送
    /// </summary>
    public string touser { get; set; }

    /// <summary>
    /// PartyID列表宰啦,多個接受者用‘|’分隔苏遥。當touser為@all時忽略本參數(shù)
    /// </summary>
    public string toparty { get; set; }

    /// <summary>
    /// TagID列表,多個接受者用‘|’分隔赡模。當touser為@all時忽略本參數(shù)
    /// </summary>
    public string totag { get; set; }

    /// <summary>
    /// 消息類型
    /// </summary>
    public string msgtype { get; set; }

    /// <summary>
    /// 企業(yè)應用的id田炭,整型±旄蹋可在應用的設置頁面查看
    /// </summary>
    public string agentid { get; set; }

    /// <summary>
    /// 表示是否是保密消息教硫,0表示否,1表示是辆布,默認0
    /// </summary>
    [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
    public string safe { get; set; }

}

然后其他消息逐一繼承這個基類即可瞬矩,如下所示。



最終會構成下面這個繼承關系圖谚殊。


5丧鸯、消息接口的定義和實現(xiàn)

定義好相關的發(fā)送對象后,我們就可以定義它的統(tǒng)一發(fā)送接口了嫩絮,如下所示丛肢。

/// <summary>
/// 企業(yè)號消息管理接口定義
/// </summary>
public interface ICorpMessageApi
{        
    /// <summary>
    /// 發(fā)送消息。
    /// 需要管理員對應用有使用權限剿干,對收件人touser蜂怎、toparty、totag有查看權限置尔,否則本次調用失敗杠步。
    /// </summary>
    /// <param name="accessToken"></param>
    /// <returns></returns>
    CommonResult SendMessage(string accessToken, CorpSendBase data);
}

最終,文本等類型的消息會根據(jù)接口定義進行實現(xiàn)榜轿,實現(xiàn)代碼如下所示幽歼。注意,發(fā)送過程不需要調用加密類進行加密谬盐。

/// <summary>
/// 企業(yè)號消息管理實現(xiàn)類
/// </summary>
public class CorpMessageApi : ICorpMessageApi
{
    /// <summary>
    /// 發(fā)送消息甸私。
    /// 需要管理員對應用有使用權限,對收件人touser飞傀、toparty皇型、totag有查看權限诬烹,否則本次調用失敗。
    /// </summary>
    /// <param name="accessToken"></param>
    /// <returns></returns>
    public CommonResult SendMessage(string accessToken, CorpSendBase data)
    {        
        CommonResult result = new CommonResult();

        string urlFormat = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={0}";
        var url = string.Format(urlFormat, accessToken);
        var postData = data.ToJson();

        //數(shù)據(jù)不用加密發(fā)送
        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;
    }
}

6弃鸦、消息的發(fā)送操作和實際效果

定義好相應的發(fā)送對象后绞吁,我們就可以進行統(tǒng)一的消息發(fā)送操作,包括文本唬格、圖片家破、文件、語音等等類型的消息购岗,注意有些消息是需要上傳到服務器上员舵,然后在根據(jù)mediaId進行發(fā)送出去的。

發(fā)送文本和圖片的操作代碼如下所示藕畔。

private void btnSendText_Click(object sender, EventArgs e)
{
    //發(fā)送文本內(nèi)容
    ICorpMessageApi bll = new CorpMessageApi();

    CorpSendText text = new CorpSendText("API 中文測試(http://www.iqidi.com)");
    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("發(fā)送消息:{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))
    {
        //發(fā)送圖片內(nèi)容
        ICorpMessageApi bll = new CorpMessageApi();

        CorpSendImage image = new CorpSendImage(image_mediaId);
        CommonResult result = bll.SendMessage(token, image);
        if (result != null)
        {
            Console.WriteLine("發(fā)送圖片消息:{0} {1} {2}", image_mediaId, (result.Success ? "成功" : "失敗"), result.ErrorMessage);
        }
    }
}

最后在微信企業(yè)號上截圖效果如下所示,包括了文本測試庄拇、文件測試注服、圖文測試、語音測試均正常措近。



如果對這個《C#開發(fā)微信門戶及應用》系列感興趣溶弟,可以關注我的其他文章

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市瞭郑,隨后出現(xiàn)的幾起案子辜御,更是在濱河造成了極大的恐慌,老刑警劉巖屈张,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件擒权,死亡現(xiàn)場離奇詭異,居然都是意外死亡阁谆,警方通過查閱死者的電腦和手機碳抄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來场绿,“玉大人剖效,你說我怎么就攤上這事⊙娴粒” “怎么了璧尸?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長熬拒。 經(jīng)常有香客問我爷光,道長,這世上最難降的妖魔是什么梦湘? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任瞎颗,我火速辦了婚禮件甥,結果婚禮上,老公的妹妹穿的比我還像新娘哼拔。我一直安慰自己引有,他們只是感情好,可當我...
    茶點故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布倦逐。 她就那樣靜靜地躺著譬正,像睡著了一般。 火紅的嫁衣襯著肌膚如雪檬姥。 梳的紋絲不亂的頭發(fā)上曾我,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天,我揣著相機與錄音健民,去河邊找鬼抒巢。 笑死,一個胖子當著我的面吹牛秉犹,可吹牛的內(nèi)容都是我干的蛉谜。 我是一名探鬼主播,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼崇堵,長吁一口氣:“原來是場噩夢啊……” “哼型诚!你這毒婦竟也來了?” 一聲冷哼從身側響起鸳劳,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤狰贯,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后赏廓,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體涵紊,經(jīng)...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年楚昭,在試婚紗的時候發(fā)現(xiàn)自己被綠了栖袋。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,505評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡抚太,死狀恐怖塘幅,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情尿贫,我是刑警寧澤电媳,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站庆亡,受9級特大地震影響匾乓,放射性物質發(fā)生泄漏。R本人自食惡果不足惜又谋,卻給世界環(huán)境...
    茶點故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一拼缝、第九天 我趴在偏房一處隱蔽的房頂上張望娱局。 院中可真熱鬧,春花似錦咧七、人聲如沸衰齐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽耻涛。三九已至瘟檩,卻和暖如春抹缕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背墨辛。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工卓研, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人睹簇。 一個月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓鉴分,卻偏偏與公主長得像,于是被迫代替她去往敵國和親带膀。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,515評論 2 359

推薦閱讀更多精彩內(nèi)容