### Install Jusoft.DingtalkStream via NuGet Source: https://github.com/yancy1028/jusoft.dingtalkstream/blob/master/Readme.md Commands to install the necessary packages via the Package Manager Console in Visual Studio. ```bash // 直接安装 Jusoft.DingtalkStream 包,会自动安装 Jusoft.DingtalkStream.Core 和 Jusoft.DingtalkStream.Robot Install-Package Jusoft.DingtalkStream // 集合了所有的回调处理能力 Install-Package Jusoft.DingtalkStream.Core // DingStream 的核心处理能力,可以独立使用 Install-Package Jusoft.DingtalkStream.Robot // 实现了针对机器人回调的处理能力以及辅助方法 ``` -------------------------------- ### Configure DingtalkStream in Program.cs Source: https://github.com/yancy1028/jusoft.dingtalkstream/blob/master/Readme.md Initializes the DingtalkStream client within a .NET host builder. Requires the Jusoft.DingtalkStream package and optional robot message callback extensions. ```csharp // ================= Program.cs ==================== IHost host = Host.CreateDefaultBuilder(args) .ConfigureServices(services => { services.AddDingtalkStream(options => { options.ClientId = "dingXXXXXXXXXXXX"; options.ClientSecret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; // options.UA = "dingtalk-stream-demo/1.0.0"; // 扩展的自定义的UA // options.Subscriptions.Add // 订阅,也可以在这里配置 options.AutoReplySystemMessage = true; // 自动回复 SYSTEM 的消息(ping,disconnect) }).RegisterEventSubscription() // 注册事件订阅 (可选) .RegisterCardInstanceCallback()// 注册卡片回调 (可选) .RegisterIMRobotMessageCallback()// 注册机器人消息回调 (可选)需要安装:Jusoft.DingtalkStream.Robot //.RegisterSubscription("{type}","{topic}")// 注册订阅基础方法 .AddMessageHandler() //添加消息处理服务 .AddHostServices();// 添加主机服务,用于启动 DingtalkStreamClient }) .Build(); await host.RunAsync(); ``` -------------------------------- ### Handle Callback and Reply Messages Source: https://github.com/yancy1028/jusoft.dingtalkstream/blob/master/Readme.md Create a callback message data object and reply to the incoming event using the DingtalkStreamUtilities. ```csharp replyMessageData = DingtalkStreamUtilities.CreateReply_Callback_MessageData("自定义回调结果"); break; break; } // 创建回复的消息 var replyMessage = await DingtalkStreamUtilities.CreateReplyMessage(e.Headers.MessageId, replyMessageData); // 回复消息方法 await e.Reply(replyMessage); ``` -------------------------------- ### Send Robot Messages via Webhook Source: https://github.com/yancy1028/jusoft.dingtalkstream/blob/master/Readme.md Use these methods to send different message formats to a DingTalk session webhook. Ensure the robotMessage.SessionWebhook is correctly initialized before calling these methods. ```csharp // 使用机器人发送 文本 消息 await DingtalkRobotWebhookUtilites.SendTextMessage(robotMessage.SessionWebhook, "@43475226895352吃饭了吗?", atUserIds: new string[] { "43475226895352" }); // 使用机器人发送 Link 消息 await DingtalkRobotWebhookUtilites.SendLinkMessage(robotMessage.SessionWebhook, "这是Link消息", "这是一个Link消息", "https://img.alicdn.com/tfs/TB1NwmBEL9TBuNjy1zbXXXpepXa-2400-1218.png", "https://open.dingtalk.com/document/"); // 使用机器人发送 Markdown 消息 await DingtalkRobotWebhookUtilites.SendMarkdownMessage(robotMessage.SessionWebhook, "杭州天气", "#### 杭州天气 @43475226895352 \n> 9度,西北风1级,空气良89,相对温度73%\n> ![screenshot](https://img.alicdn.com/tfs/TB1NwmBEL9TBuNjy1zbXXXpepXa-2400-1218.png)\n> ###### 10点20分发布 [天气](https://www.dingalk.com) \n", atUserIds: new string[] { "43475226895352" }); // 使用机器人发送 ActionCard 消息 await DingtalkRobotWebhookUtilites.SendActionCardMessage(robotMessage.SessionWebhook, "乔布斯 20 年前想打造一间苹果咖啡厅,而它正是 Apple Store 的前身", "![screenshot](https://img.alicdn.com/tfs/TB1NwmBEL9TBuNjy1zbXXXpepXa-2400-1218.png) \n\n #### 乔布斯 20 年前想打造的苹果咖啡厅 \n\n Apple Store 的设计正从原来满满的科技感走向生活化,而其生活化的走向其实可以追溯到 20 年前苹果一个建立咖啡馆的计划", BtnOrientation.Vertical, ("内容不错", "https://www.dingtalk.com/"), ("不感兴趣", "https://www.dingtalk.com/"), ("🥩", "https://www.dingtalk.com/"), ("ヽ(●-`Д´-)ノ", "https://www.dingtalk.com/"), ("ヾノ≧∀≦)o死开!", "https://www.dingtalk.com/"), ("ヾ(≧O≦)〃嗷~", "https://www.dingtalk.com/"), ("ლ(╹◡╹ლ)", "https://www.dingtalk.com/"), ("┣▇▇▇═─ ", "https://www.dingtalk.com/"), ("୧(๑•̀⌄•́๑)૭碉堡了", "https://www.dingtalk.com/"), ("(@﹏@)~", "https://www.dingtalk.com/") ); // 使用机器人发送 FeedCard 消息 await DingtalkRobotWebhookUtilites.SendFeedCardMessage(robotMessage.SessionWebhook, ("时代的火车向前开1", "https://www.dingtalk.com/", "https://img.alicdn.com/tfs/TB1NwmBEL9TBuNjy1zbXXXpepXa-2400-1218.png"), ("时代的火车向前开2", "https://www.dingtalk.com/", "https://img.alicdn.com/tfs/TB1NwmBEL9TBuNjy1zbXXXpepXa-2400-1218.png") ); ``` -------------------------------- ### Implement DefaultMessageHandler for Dingtalk Stream Source: https://github.com/yancy1028/jusoft.dingtalkstream/blob/master/Readme.md Implementation of the message handler by inheriting IDingtalkStreamMessageHandler and overriding HandleMessage to process incoming events and callbacks. ```csharp // ================= DefaultMessageHandler.cs ==================== // 实现消息处理类 // // 继承 IDingtalkStreamMessageHandler // 重写 HandleMessage 方法,可处理所有能收到的消息 public class DefaultMessageHandler : IDingtalkStreamMessageHandler { public async Task HandleMessage(MessageEventHanderArgs e) { // 此处进行订阅的 Topic 的处理,处理消息的代码 var replyMessageData = string.Empty;// 记录最终回复消息的Data 的内容 switch (e.Type) { case SubscriptionType.EVENT: // 事件推送的处理 replyMessageData = await DingtalkStreamUtilities.CreateReplyEventSuccessMessageData("自定义成功消息"); // replyMessageData = await DingtalkStreamUtilities.CreateReplyEventFaildMessageData("自定义失败消息"); break; case SubscriptionType.CALLBACK: // 回调推送的处理 // 判断是否机器人回调的消息 //! 需要添加 Jusoft.DingtalkStream.Robot 包 if (e.Headers.IsRobotTopic()) { var robotMessage = e.GetRobotMessageData(); // 通过消息类型 robotMessage.MsgType 来识别具体的消息内容 // 获取语音消息内容 //var content=robotMessage.GetAudioContent(); // 获取富文件消息内容 //var content=robotMessage.GetFileContent(); // 获取富图片消息内容 //var content=robotMessage.GetPictureContent(); // 获取富文本消息内容 //var content =robotMessage.GetRichTextContent(); // 获取文本消息内容 //var content = robotMessage.GetTextContent(); // 获取视频消息内容 //var content=robotMessage.GetVideoContent(); ``` === COMPLETE CONTENT === This response contains all available snippets from this library. No additional content exists. Do not make further requests.