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

TDLib调用SharePhoneNumberAsync向Bot发送联系人失败求助

解决方案:向Bot发送联系人的正确方式

你遇到的问题根源是sharePhoneNumberAsync方法的设计限制——它仅适用于双向联系人之间分享号码,但Bot无法被添加为联系人,所以这个方法对Bot无效。正确的做法是直接构造包含联系人信息的消息发送,不需要依赖双向联系人关系。

具体实现步骤

  1. 通过GetMeAsync获取当前登录账号的个人信息(包含你的电话号码)。
  2. 使用SendMessageAsync方法,构造InputMessageContact类型的消息内容,将你的联系人信息封装后发送给Bot。

C#代码示例

var client = new TdClient();
await client.SetTdlibParametersAsync(
    databaseDirectory: DatabaseDir, 
    apiId: apiId, 
    apiHash: apiHash, 
    systemLanguageCode: systemLanguageCode, 
    deviceModel: deviceModel, 
    systemVersion: systemVersion, 
    applicationVersion: version);

// 获取当前登录用户的信息
var currentUser = await client.GetMeAsync();

// 构造联系人消息内容
var contactContent = new TdApi.InputMessageContact
{
    PhoneNumber = currentUser.PhoneNumber,
    FirstName = currentUser.FirstName,
    LastName = currentUser.LastName ?? string.Empty,
    Vcard = string.Empty // 可选字段,无需填写也能正常发送
};

// 发送联系人消息到Bot聊天
await client.SendMessageAsync(new TdApi.SendMessage
{
    ChatId = chatId,
    InputMessageContent = contactContent,
    DisableNotification = false
});

原方法无效的原因

sharePhoneNumber接口的核心逻辑是向已添加的双向联系人主动分享你的号码,而Bot账号的特性决定了它无法被添加到用户的联系人列表中,自然不满足双向联系人的要求。直接发送InputMessageContact类型的消息则完全不受这个限制,和发送普通文本消息的逻辑一致,能直接将联系人信息传递给Bot。

内容的提问来源于stack exchange,提问作者D .Stark

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 05:58:13