TDLib调用SharePhoneNumberAsync向Bot发送联系人失败求助
解决方案:向Bot发送联系人的正确方式
你遇到的问题根源是sharePhoneNumberAsync方法的设计限制——它仅适用于双向联系人之间分享号码,但Bot无法被添加为联系人,所以这个方法对Bot无效。正确的做法是直接构造包含联系人信息的消息发送,不需要依赖双向联系人关系。
具体实现步骤
- 通过
GetMeAsync获取当前登录账号的个人信息(包含你的电话号码)。 - 使用
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
相关产品推荐
相关产品推荐

