You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用C#开发实现Skype指定联系人消息发送功能

C# 向Skype指定联系人发送消息的可行实现方案

Skype4Com 依赖的旧版 Skype Desktop API 已在2018年被微软彻底移除,所有基于该组件的旧方案均已失效,目前可落地的实现路径按稳定性排序如下:


方案1:基于Azure Bot + Bot Framework SDK(最稳定,适合后台日志推送场景)

这是官方支持的服务端主动发消息方案,不需要前台挂Skype客户端,长期运行稳定性最高,完全适配自动推日志的需求:

  • 实现步骤:
    1. 在Azure门户创建Azure Bot资源,开启Skype频道,按照引导完成Bot的Skype配置(个人使用不需要公开发布,将自己账号添加为Bot联系人即可)
    2. 记录Bot的AppId、AppSecret,同时获取要接收消息的目标联系人Skype ID(格式为live:xxx,可在Skype个人资料页找到)
    3. C#项目通过NuGet安装Microsoft.Bot.Connector包
  • 核心代码示例:
using Microsoft.Bot.Connector;
using Microsoft.Bot.Connector.Authentication;
using System;
using System.Collections.Generic;

// 初始化Bot认证
var appId = "你的Azure Bot AppId";
var appSecret = "你的Azure Bot AppSecret";
var targetSkypeId = "目标联系人Skype ID,例:live:123456_abcdef";
var credentials = new MicrosoftAppCredentials(appId, appSecret);
var connectorClient = new ConnectorClient(new Uri("https://smba.trafficmanager.net/apis/"), credentials);

// 创建和目标用户的直连会话
var conversationId = await connectorClient.Conversations.CreateDirectConversationAsync(
    new ChannelAccount { Id = targetSkypeId },
    new ChannelAccount { Id = $"28:{appId}" }
);

// 构造日志消息
var message = Activity.CreateMessageActivity();
message.Text = "应用运行日志内容"; // 替换为实际日志文本
message.From = new ChannelAccount { Id = $"28:{appId}" };
message.Recipient = new ChannelAccount { Id = targetSkypeId };
message.Conversation = new ConversationAccount { Id = conversationId.Id };

// 发送消息
await connectorClient.Conversations.SendToConversationAsync((Activity)message);
  • 注意点:首次使用需要在Skype中把创建的Bot添加为联系人,后续即可无交互自动发消息,无严格的接口调用频率限制,适合长期运行的日志推送场景。

方案2:基于Microsoft Graph API(适合个人账号临时使用)

如果不想创建Bot资源,可以用Graph API直接调用个人Skype账号发消息:

  • 实现步骤:
    1. 在Azure AD注册个人账号应用,授权Chat.Create、ChatMessage.Send委托权限
    2. 通过OAuth设备码流获取账号访问令牌(后台服务可以缓存刷新令牌,避免重复授权)
    3. 通过Graph SDK构造聊天会话发送消息
  • 核心代码示例:
using Microsoft.Graph;
using Azure.Identity;

var clientId = "你的Azure AD应用ClientId";
var tenantId = "consumers"; // 个人账号固定填consumers
var targetSkypeId = "目标联系人Skype ID";

// 设备码认证,适配无界面服务场景
var credential = new DeviceCodeCredential((code) =>
{
    Console.WriteLine($"请访问 {code.VerificationUrl} 输入代码 {code.UserCode} 完成授权");
}, tenantId, clientId);

var graphClient = new GraphServiceClient(credential);

// 创建一对一聊天会话
var chat = new Chat
{
    ChatType = ChatType.OneOnOne,
    Members = new List<ConversationMember>
    {
        new AadUserConversationMember
        {
            Roles = new List<String> { "owner" },
            AdditionalData = new Dictionary<string, object>
            {
                {"user@odata.bind", $"https://graph.microsoft.com/v1.0/users/me"}
            }
        },
        new SkypeUserConversationMember
        {
            Roles = new List<String> { "owner" },
            Id = targetSkypeId
        }
    }
};
var createdChat = await graphClient.Chats.PostAsync(chat);

// 发送日志消息
await graphClient.Chats[createdChat.Id].Messages.PostAsync(new ChatMessage
{
    Body = new ItemBody
    {
        Content = "应用运行日志内容"
    }
});
  • 注意点:个人账号的访问令牌有效期为1小时,需要缓存刷新令牌自动续期,否则每次服务重启都需要手动授权。

方案3:Skype Web私有接口(非官方,仅个人自用)

如果不想做Azure相关配置,可以直接调用Skype网页版的私有接口,该方案无官方支持,微软随时可能修改接口导致失效:

  • 实现步骤:
    1. 登录网页版Skype,按F12抓包获取请求头中的X-Skypetoken值,以及自己账号的Skype ID
    2. 用HttpClient直接构造POST请求发消息
  • 核心代码示例:
using System.Net.Http;
using System.Text;
using Newtonsoft.Json;

var skypeToken = "抓包获取的X-Skypetoken值";
var targetSkypeId = "目标联系人Skype ID";

var httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Add("X-Skypetoken", skypeToken);

var payload = new
{
    content = "应用运行日志内容",
    messagetype = "RichText",
    contenttype = "text"
};
var json = JsonConvert.SerializeObject(payload);
var content = new StringContent(json, Encoding.UTF8, "application/json");

// 调用消息发送接口
var apiUrl = $"https://client-s.gateway.messenger.live.com/v1/users/ME/conversations/{targetSkypeId}/messages";
var response = await httpClient.PostAsync(apiUrl, content);
response.EnsureSuccessStatusCode();
  • 注意点:Skype Token有效期通常为24小时,过期后需要重新抓包获取,该方案违反Skype服务条款,不建议在生产环境使用。

不推荐使用任何第三方封装的非公开Skype客户端SDK,这类库大多长期不更新,且存在账号被盗、消息泄露的风险。

内容的提问来源于stack exchange,提问作者tedious26

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 01:39:19