Telegram机器人能够发送的消息类型非常丰富,除了常见的文本、图片、视频外,还可以发送联系人名片(Contact)。这种消息类型允许机器人直接将一个完整的联系人信息推送给用户,包含电话号码、姓名甚至自定义的vCard数据。在客服对接、用户信息收集、通讯录同步等场景中非常实用。本文将全面解析Telegram机器人发送联系人名片的消息类型,从API基础到实战代码一网打尽。
什么是联系人名片消息?
联系人名片是Telegram中一种特殊的消息类型,它不仅仅是一串电话号码,而是一个结构化的卡片,通常包含以下字段:
- phone_number:联系人的电话号码(必填)
- first_name:联系人的名字(必填)
- last_name:联系人的姓氏(可选)
- vcard:完整的vCard字符串(可选),可包含更多结构化信息,如邮箱、地址、组织等
当用户收到这样一条消息时,点击卡片即可快速保存联系人到手机通讯录,体验非常顺畅。对于机器人来说,通过API发送联系人名片是最标准的方式。
sendContact API方法详解
要发送联系人名片,Telegram Bot API提供了sendContact方法。其核心参数如下:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| chat_id | Integer/String | 是 | 目标聊天ID,可以是个人、群组或频道 |
| phone_number | String | 是 | 联系人的电话号码,格式为国际区号+号码,如+8613800138000 |
| first_name | String | 是 | 联系人的名 |
| last_name | String | 否 | 联系人的姓 |
| vcard | String | 否 | 附加的vCard 3.0格式字符串,可包含更多字段 |
| reply_to_message_id | Integer | 否 | 回复某条消息时使用 |
| reply_markup | InlineKeyboardMarkup | 否 | 附加的内联键盘 |
除此之外,还有disable_notification、protect_content等通用参数,用于控制消息通知和复制保护。
Python实战:使用python-telegram-bot发送联系人名片
以python-telegram-bot库为例,发送联系人名片只需调用send_contact方法。以下是一个完整的示例,机器人收到/contact指令后发送一个虚拟客服的联系方式:
from telegram.ext import Application, CommandHandler
async def send_contact(update, context):
chat_id = update.effective_chat.id
await context.bot.send_contact(
chat_id=chat_id,
phone_number="+8613800138000",
first_name="客服小A",
last_name="技术支持",
vcard="BEGIN:VCARD\nVERSION:3.0\nFN:客服小A 技术支持\nTEL;TYPE=CELL:+8613800138000\nEMAIL:support@example.com\nEND:VCARD"
)
if __name__ == "__main__":
app = Application.builder().token("YOUR_BOT_TOKEN").build()
app.add_handler(CommandHandler("contact", send_contact))
print("机器人已启动...")
app.run_polling()
注意:vcard字段需要在内部保留换行符,字符串中的\n会被正确解析为换行。
Node.js实战:使用node-telegram-bot-api发送联系人名片
在Node.js环境中,node-telegram-bot-api库提供了sendContact方法。以下代码实现了同样的功能:
const TelegramBot = require('node-telegram-bot-api');
const token = 'YOUR_BOT_TOKEN';
const bot = new TelegramBot(token, {polling: true});
bot.onText(/\/contact/, (msg) => {
const chatId = msg.chat.id;
bot.sendContact(chatId, '+8613800138000', '客服小A', {
last_name: '技术支持',
vcard: 'BEGIN:VCARD\nVERSION:3.0\nFN:客服小A 技术支持\nTEL;TYPE=CELL:+8613800138000\nEMAIL:support@example.com\nEND:VCARD'
}).then(() => console.log('联系人已发送'));
});
在sendContact的第三个参数是名字,后面的选项对象中可设置姓和vCard。
实际应用场景与实用技巧
- 客服分流:机器人先发送一个联系人名片,用户点击即可直接添加客服微信或电话,省去手动输入号码的麻烦。
- 用户信息收集:在群组或私聊中,利用机器人自动收集成员的联系方式,但必须遵守隐私政策。
- 企业通讯录:向内部员工发送常用联系人卡片,例如IT支持、HR等。
- 结合vCard丰富信息:通过vCard可以携带头像、地址、组织等,让名片更有价值。
- 与键盘按钮结合:在发送名片的同时显示一个“获取更多”的内联按钮,引导用户进行下一步操作。
注意事项
- 隐私合规:发送联系人名片前,务必确保你拥有该联系人信息的合法使用权,且不违反Telegram服务条款和当地法律。
- 号码格式:建议使用国际格式(如+86...),这样多数用户都能直接识别。
- vCard转义:vCard字符串中换行必须用
\n表示,且整个字符串长度不能超过4096字节。 - 机器人权限:在群组中发送联系人名片需要机器人具有发送消息的权限;如果群组开启了限制,可能需要管理员授权。
- 用户验证:如果是用户主动提供联系人信息,机器人应验证号码真实性,避免垃圾信息。
总结
发送联系人名片是Telegram机器人交互中一个实用且高效的功能。通过sendContact方法,开发者可以轻松将任何人的联系方式以结构化消息的形式推送给用户,配合vCard还能传递丰富的信息。本文从API参数、Python和Node.js示例、实际场景和注意事项几个维度做了全面讲解。希望你能根据自己的业务需求,在机器人中融入联系人名片功能,提供更佳的用户体验。