本技能提供通过手机号给飞书用户发送消息的功能。
在使用本技能前,你需要在配置文件中设置以下参数:
获取方式:登录飞书开放平台 (https://open.feishu.cn/) -> 创建应用 -> 获取凭证
import lark_oapi as lark
from lark_oapi.api.contact.v3 import *
def get_user_id_by_mobile(client: lark.Client, mobile: str) -> str:
"""通过手机号获取飞书用户open_id"""
request: BatchGetIdUserRequest = BatchGetIdUserRequest.builder() \
.user_id_type("open_id") \
.request_body(BatchGetIdUserRequestBody.builder()
.mobiles([mobile])
.build()) \
.build()
response = client.contact.v3.user.batch_get_id(request)
if not response.success():
raise Exception(f"获取用户ID失败: {response.msg}")
user_list = response.data.user_list
if not user_list or len(user_list) == 0:
raise Exception(f"未找到手机号为 {mobile} 的用户")
return user_list[0].user_id
from lark_oapi.api.im.v1 import *
def send_message(client: lark.Client, receive_id: str, content: str) -> str:
"""发送文本消息给用户"""
import uuid
request: CreateMessageRequest = CreateMessageRequest.builder() \
.receive_id_type("open_id") \
.request_body(CreateMessageRequestBody.builder()
.receive_id(receive_id)
.msg_type("text")
.content(f'{{"text":"{content}"}}')
.uuid(str(uuid.uuid4()))
.build()) \
.build()
response = client.im.v1.message.create(request)
if not response.success():
raise Exception(f"发送消息失败: {response.msg}")
return response.data.message_id
import lark_oapi as lark
from lark_oapi.api.contact.v3 import *
from lark_oapi.api.im.v1 import *
import uuid
class FeishuMessageSender:
def __init__(self, app_id: str, app_secret: str):
self.client = lark.Client.builder() \
.app_id(app_id) \
.app_secret(app_secret) \
.log_level(lark.LogLevel.WARNING) \
.build()
def send_message_by_mobile(self, mobile: str, content: str) -> str:
"""
通过手机号发送飞书消息
Args:
mobile: 接收者手机号
content: 消息内容
Returns:
message_id: 发送成功的消息ID
"""
# Step 1: 通过手机号获取用户ID
user_id = self.get_user_id_by_mobile(mobile)
# Step 2: 发送消息
message_id = self.send_message(user_id, content)
return message_id
def get_user_id_by_mobile(self, mobile: str) -> str:
"""通过手机号获取飞书用户open_id"""
request = BatchGetIdUserRequest.builder() \
.user_id_type("open_id") \
.request_body(BatchGetIdUserRequestBody.builder()
.mobiles([mobile])
.build()) \
.build()
response = self.client.contact.v3.user.batch_get_id(request)
if not response.success():
raise Exception(f"获取用户ID失败: code={response.code}, msg={response.msg}")
user_list = response.data.user_list
if not user_list or len(user_list) == 0:
raise Exception(f"未找到手机号为 {mobile} 的用户")
return user_list[0].user_id
def send_message(self, receive_id: str, content: str) -> str:
"""发送文本消息"""
request = CreateMessageRequest.builder() \
.receive_id_type("open_id") \
.request_body(CreateMessageRequestBody.builder()
.receive_id(receive_id)
.msg_type("text")
.content(f'{{"text":"{content}"}}')
.uuid(str(uuid.uuid4()))
.build()) \
.build()
response = self.client.im.v1.message.create(request)
if not response.success():
raise Exception(f"发送消息失败: code={response.code}, msg={response.msg}")
return response.data.message_id
# 使用示例
if __name__ == "__main__":
sender = FeishuMessageSender(
app_id="YOUR_APP_ID",
app_secret="YOUR_APP_SECRET"
)
try:
message_id = sender.send_message_by_mobile(
mobile="15011241234",
content="这是一条测试消息"
)
print(f"消息发送成功,message_id: {message_id}")
except Exception as e:
print(f"发送失败: {e}")
常见错误:
code: 99991663, msg: app_id not found未找到手机号为 xxx 的用户code: 99992402, msg: field validation failed.receive_id_type("open_id") 参数Permission denieduser not foundpip install lark-oapi
在飞书开放平台需要配置以下权限:
im:message:send_as_bot - 发送消息im:message:send_interactive - 发送消息卡片contact:user.id:get - 获取用户IDcontact:user.mobile:get - 通过手机号获取用户共 1 个版本