Microsoft Teams 数据 API
安卓版 Microsoft Teams 与一组第一方 HTTPS 接口通信。通讯录与资料界面依赖 /v1/profile/me 与 /v1/directory/people:search;聊天记录在 /v1/auth/sessionToken 签发聊天会话令牌后分页拉取 /v1/messaging/threads/{threadId}/messages;在线状态点来自 /v1/presence:batchLookup;“会议”页签读取 /v1/calendar/me/view。
聊天是个特例:每次消息调用都附加会话令牌加设备注册令牌,而通讯录与日历调用使用 OAuth2 Bearer 令牌。此外,/v1/workspaces/me/summary 为团队与频道左侧栏提供 isUnread、mentionCount 与 previewMessage 角标;“我的”页签的状态选择器向 /v1/presence/me/override 写入新的 availability 与过期时间;/v1/account/me/licenses 读取控制付费功能的 skuId 与 skuPartNumber 行。
Microsoft Teams(包名 com.microsoft.teams,版本 1416/1.0.0.2026163804)是微软的工作聊天、频道、在线状态、日历与会议安卓客户端。登录数据 API 为一组第一方 HTTPS 接口:人员与资料目录(mri、tenantId)、分页话题消息的聊天服务、统一在线状态、日历视图与许可 SKU(skuId、skuPartNumber)。聊天调用携带聊天作用域会话令牌加设备注册令牌;目录与日历调用使用 OAuth2 Bearer 令牌。
应用截图
API 端点一览
读取当前登录用户的个人资料
GET
/v1/profile/me?expand=identityFlagsosint返回当前登录用户的身份记录(mri、UPN、职位、租户、邮箱 / 电话可见性),“我的”页签与其他所有登录调用都依赖它。
认证方式: 当前登录工作账号的 OAuth2 Bearer 访问令牌(目录 / 资料范围)。可选的 expand 查询参数会随资料一并返回账号的身份标志。
- mri
- objectId
- displayName
- givenName
- surname
- userPrincipalName
- jobTitle
- department
- companyName
- tenantId
- tenantName
- userType
- isSkypeTeamsUser
- skypeTeamsInfo
- emailsInfo
- address
- searchable
- visibility
- phonesInfo
- number
- country
- nationalNumber
- riskScore
- searchableByProfile
依据应用界面重构的示意示例,并非实时抓包。
GET /v1/profile/me?expand=identityFlags HTTP/1.1 Authorization: Bearer <access-token> Accept: application/json{ "mri": "8:orgid:3f2a1c90-9b11-4d2e-a7c4-0f8e6b1d2a33", "objectId": "3f2a1c90-9b11-4d2e-a7c4-0f8e6b1d2a33", "displayName": "Alex Rivera", "givenName": "Alex", "surname": "Rivera", "email": "[email protected]", "mail": "[email protected]", "userPrincipalName": "[email protected]", "jobTitle": "Product Manager", "department": "Platform", "companyName": "Example Corp", "tenantId": "72f988bf-86f1-41af-91ab-2d7cd011db47", "tenantName": "Example Corp", "userType": "Member", "isSkypeTeamsUser": true, "skypeTeamsInfo": {"isSkypeTeamsUser": true}, "emailsInfo": [{"address": "[email protected]", "searchable": true, "visibility": "Everyone"}], "phonesInfo": [{"number": "+14255550123", "country": "US", "nationalNumber": "4255550123", "searchable": false, "visibility": "Contacts"}], "riskScore": "0", "searchableByProfile": true }依据应用界面推导;端点细节为示意说明,并非实际抓包。
依据应用的登录初始化与“我的”页签资料加载流程重构。记录了目录、聊天与在线状态流程共同依赖的身份记录。
在组织通讯录中搜索人员
POST
/v1/directory/people:search?expand=identityFlagsosint执行应用内人员选择器 / 搜索结果页的通讯录查询,返回匹配的用户记录(mri、UPN、jobTitle、tenantId、身份标志)。
认证方式: 当前登录工作账号的 OAuth2 Bearer 访问令牌(目录范围)。
- value
- mri
- objectId
- displayName
- userPrincipalName
- jobTitle
- department
- tenantId
- type
- userType
- isSkypeTeamsUser
- imageUri
- skypeTeamsInfo
依据应用界面重构的示意示例,并非实时抓包。
POST /v1/directory/people:search?expand=identityFlags HTTP/1.1 Authorization: Bearer <access-token> Content-Type: application/json "alex rivera"{ "value": [ { "mri": "8:orgid:3f2a1c90-9b11-4d2e-a7c4-0f8e6b1d2a33", "objectId": "3f2a1c90-9b11-4d2e-a7c4-0f8e6b1d2a33", "displayName": "Alex Rivera", "email": "[email protected]", "userPrincipalName": "[email protected]", "jobTitle": "Product Manager", "department": "Platform", "tenantId": "72f988bf-86f1-41af-91ab-2d7cd011db47", "type": "Member", "userType": "Member", "isSkypeTeamsUser": true, "imageUri": "https://example.invalid/avatar/alex", "skypeTeamsInfo": {"isSkypeTeamsUser": true} } ] }依据应用界面推导;端点细节为示意说明,并非实际抓包。
依据应用的人员选择器与搜索结果通讯录查询重构。返回与聊天和频道成员名单水合时相同的用户记录。
按成员 ID 批量获取用户资料
POST
/v1/directory/people:batchGetosint把聊天 / 频道成员名单中的一批成员 ID 水合为完整用户记录,包括信息隔离限制标志。
认证方式: 当前登录工作账号的 OAuth2 Bearer 访问令牌(目录范围)。
- mri
- objectId
- displayName
- userPrincipalName
- jobTitle
- tenantId
- isIbBarred
- isBlocked
- userType
- skypeTeamsInfo
- isSkypeTeamsUser
- value
依据应用界面重构的示意示例,并非实时抓包。
POST /v1/directory/people:batchGet HTTP/1.1 Authorization: Bearer <access-token> Content-Type: application/json [ "8:orgid:3f2a1c90-9b11-4d2e-a7c4-0f8e6b1d2a33", "8:orgid:9c88e201-4b77-41aa-b012-55aa11cc99ee" ]{ "value": [ { "mri": "8:orgid:3f2a1c90-9b11-4d2e-a7c4-0f8e6b1d2a33", "objectId": "3f2a1c90-9b11-4d2e-a7c4-0f8e6b1d2a33", "displayName": "Alex Rivera", "email": "[email protected]", "userPrincipalName": "[email protected]", "jobTitle": "Product Manager", "tenantId": "72f988bf-86f1-41af-91ab-2d7cd011db47", "isIbBarred": false, "isBlocked": false, "userType": "Member", "skypeTeamsInfo": {"isSkypeTeamsUser": true} } ] }依据应用界面推导;端点细节为示意说明,并非实际抓包。
依据打开聊天或频道成员列表时触发的名单水合流程重构。单次往返即可将紧凑的成员标识解析为完整的通讯录记录。
批量查询用户在线状态
POST
/v1/presence:batchLookuposint按一批成员 ID 返回在线状态、状态签名、混合办公位置及任何强制状态,驱动聊天与联系人列表上的绿 / 黄 / 红状态点。
认证方式: 在线状态服务的 OAuth2 Bearer 访问令牌。请求体为 {mri, eTag} 对的列表,未变化的条目可借此跳过。
- mri
- eTag
- userMri
- availability
- activity
- capabilities
- lastSeenAt
- note
- mRawStatusMessage
- mStatusExpiry
- mStatusPublishTime
- workLocation
- location
- subLocation
- locationExpiry
- locationForced
- forcedAvailability
- mAvailability
- mActivity
- mExpiry
- mPublishTime
依据应用界面重构的示意示例,并非实时抓包。
POST /v1/presence:batchLookup HTTP/1.1 Authorization: Bearer <access-token> Content-Type: application/json [ {"mri": "8:orgid:3f2a1c90-9b11-4d2e-a7c4-0f8e6b1d2a33", "eTag": "W/\"datetime'2026-09-27T10:00:00Z'\""}, {"mri": "8:orgid:9c88e201-4b77-41aa-b012-55aa11cc99ee", "eTag": ""} ][ { "userMri": "8:orgid:3f2a1c90-9b11-4d2e-a7c4-0f8e6b1d2a33", "availability": "Available", "activity": "Available", "capabilities": "Audio|Video|ScreenShare", "eTag": "W/\"datetime'2026-09-27T10:04:12Z'\"", "lastSeenAt": "2026-09-27T10:04:12Z", "note": { "mRawStatusMessage": "In a customer call", "mStatusExpiry": "2026-09-27T18:00:00Z", "mStatusPublishTime": "2026-09-27T09:00:00Z" }, "workLocation": { "location": "Office", "subLocation": "Building 34", "locationExpiry": "2026-09-27T23:59:59Z", "locationForced": false }, "forcedAvailability": { "mAvailability": "Busy", "mActivity": "InACall", "mExpiry": "2026-09-27T11:00:00Z", "mPublishTime": "2026-09-27T10:00:00Z" } } ]依据应用界面推导;端点细节为示意说明,并非实际抓包。
依据聊天行与联系人卡片上渲染的状态点重构。批量查询让名单视图一次调用即可解析所有成员的在线状态。
发布强制在线状态
PUT
/v1/presence/me/overrideopendata从移动端发布当前登录用户的强制在线状态(Available / Busy / DoNotDisturb 及活动),在请求的过期时间前持续生效。
认证方式: 在线状态服务的 OAuth2 Bearer 访问令牌。
- id
- deviceType
- availability
- activity
- desiredExpirationTime
依据应用界面重构的示意示例,并非实时抓包。
PUT /v1/presence/me/override HTTP/1.1 Authorization: Bearer <access-token> Content-Type: application/json { "id": "Mobile", "deviceType": "Mobile", "availability": "Busy", "activity": "InACall", "desiredExpirationTime": "2026-09-27T11:00:00Z" }{ "id": "Mobile", "deviceType": "Mobile", "availability": "Busy", "activity": "InACall", "desiredExpirationTime": "2026-09-27T11:00:00Z" }依据应用界面推导;端点细节为示意说明,并非实际抓包。
依据“我的”页签上的状态选择器(Available / Busy / DoNotDisturb)重构。该覆盖携带设备标记与明确的过期时间,可自动失效。
分页读取聊天或频道消息
GET
/v1/messaging/threads/{threadId}/messagesopendata为会话视图分页拉取单聊、群聊或频道话题的消息历史,包括编写时间、发送者 ID 与已读水位。
认证方式: 以令牌请求头发送的聊天作用域会话令牌(由会话令牌端点签发),外加聊天端点注册时颁发的设备注册令牌。
- threadId
- view
- startTime
- pageSize
- messages
- id
- clientmessageid
- conversationid
- from
- imdisplayname
- messagetype
- contenttype
- content
- composetime
- originalarrivaltime
- properties
- consumptionHorizon
- forwardLink
依据应用界面重构的示意示例,并非实时抓包。
GET /v1/messaging/threads/19:[email protected]/messages?view=msnp24Equivalent&startTime=0&pageSize=50 HTTP/1.1 Authorization: sessionToken <session-token> RegistrationToken: registrationToken=<registration-token> Accept: application/json{ "messages": [ { "id": "1758962400123", "clientmessageid": "18446744073709550001", "conversationid": "19:[email protected]", "from": "8:orgid:3f2a1c90-9b11-4d2e-a7c4-0f8e6b1d2a33", "imdisplayname": "Alex Rivera", "messagetype": "RichText/Html", "contenttype": "text", "content": "<p>Standup notes are in the wiki.</p>", "composetime": "2026-09-27T10:00:00.123Z", "originalarrivaltime": "2026-09-27T10:00:00.200Z", "properties": { "consumptionHorizon": "1758962400123;1758962400123;1758962400000" } } ], "_metadata": { "forwardLink": "/v1/messaging/threads/19:[email protected]/messages?syncState=abc" } }依据应用界面推导;端点细节为示意说明,并非实际抓包。
依据分页加载单聊、群聊或频道话题的会话视图重构。携带客户端用于跨设备跟踪已读状态的消费水位。
向聊天或频道话题发送消息
POST
/v1/messaging/threads/{threadId}/messagesopendata从输入框发布一条新的聊天或频道消息,返回服务器分配的 id、到达时间与回显正文。
认证方式: 以令牌请求头发送的聊天作用域会话令牌,外加已注册聊天端点的设备注册令牌。
- content
- contenttype
- messagetype
- clientmessageid
- imdisplayname
- OriginalArrivalTime
- id
- conversationid
- from
- composetime
依据应用界面重构的示意示例,并非实时抓包。
POST /v1/messaging/threads/19:[email protected]/messages HTTP/1.1 Authorization: sessionToken <session-token> RegistrationToken: registrationToken=<registration-token> Content-Type: application/json { "content": "<p>Shipping the build at 16:00.</p>", "contenttype": "text", "messagetype": "RichText/Html", "clientmessageid": "18446744073709550002", "imdisplayname": "Alex Rivera" }{ "OriginalArrivalTime": "2026-09-27T10:05:01.004Z", "id": "1758962701004", "clientmessageid": "18446744073709550002", "conversationid": "19:[email protected]", "from": "8:orgid:3f2a1c90-9b11-4d2e-a7c4-0f8e6b1d2a33", "imdisplayname": "Alex Rivera", "messagetype": "RichText/Html", "contenttype": "text", "content": "<p>Shipping the build at 16:00.</p>", "composetime": "2026-09-27T10:05:00.980Z" }依据应用界面推导;端点细节为示意说明,并非实际抓包。
依据输入框向当前会话发布消息的流程重构。客户端自带 clientmessageid,以便把回显与本地草稿对齐。
列出当前登录用户的日历视图
GET
/v1/calendar/me/viewopendata为“会议”页签返回当天的日历事件,包括主题、时间窗口、RSVP、组织者与在线会议加入链接。
认证方式: OAuth2 Bearer 访问令牌(日历范围)。时间窗口以 startDateTime 与 endDateTime 传入。
- startDateTime
- endDateTime
- Id
- Start
- End
- iCalUId
- Subject
- Type
- SeriesMasterId
- Locations
- IsAllDay
- IsOnlineMeeting
- IsCancelled
- OnlineMeeting
- OnlineMeetingUrl
- ResponseStatus
- Organizer
- OriginalStartTimeZone
- Recurrence
- DateTime
- TimeZone
- JoinUrl
- DisplayName
- EmailAddress
- Name
- Address
- Response
- Time
依据应用界面重构的示意示例,并非实时抓包。
GET /v1/calendar/me/view?startDateTime=2026-09-27T00:00:00Z&endDateTime=2026-09-28T00:00:00Z&$select=Id,Start,End,iCalUId,Subject,Type,SeriesMasterId,Locations,IsAllDay,IsOnlineMeeting,IsCancelled,OnlineMeeting,OnlineMeetingUrl,ResponseStatus,Organizer,OriginalStartTimeZone,Recurrence HTTP/1.1 Authorization: Bearer <access-token> Accept: application/json{ "value": [ { "Id": "AAMkAGI2AAAt2j2NAAA=", "iCalUId": "040000008200E00074C5B7101A82E00800000000A0A0A0A0", "Subject": "Platform standup", "Type": "SingleInstance", "SeriesMasterId": null, "Start": {"DateTime": "2026-09-27T15:00:00.0000000", "TimeZone": "UTC"}, "End": {"DateTime": "2026-09-27T15:30:00.0000000", "TimeZone": "UTC"}, "Locations": [{"DisplayName": "Teams meeting"}], "IsAllDay": false, "IsOnlineMeeting": true, "IsCancelled": false, "OnlineMeetingUrl": "https://meetings.example.invalid/join/19%3ameeting_abc123", "OnlineMeeting": {"JoinUrl": "https://meetings.example.invalid/join/19%3ameeting_abc123"}, "ResponseStatus": {"Response": "Accepted", "Time": "2026-09-26T18:01:00Z"}, "Organizer": {"EmailAddress": {"Name": "Alex Rivera", "Address": "[email protected]"}}, "OriginalStartTimeZone": "Pacific Standard Time", "Recurrence": null } ] }依据应用界面推导;端点细节为示意说明,并非实际抓包。
依据渲染当天事件的“会议”页签重构。每个事件携带应用可深链进入的在线会议加入链接。
列出当前登录用户的团队与频道
GET
/v1/workspaces/me/summaryopendata返回当前登录用户优化后的左侧栏团队与频道列表,包括收藏标记、未读/提及计数与最后一条消息预览。
认证方式: OAuth2 Bearer 访问令牌(工作区聚合范围)。
- conversations
- conversationId
- parentConversationId
- displayName
- conversationType
- channelType
- tenantId
- isFavorite
- isUnread
- mentionCount
- consumptionHorizon
- lastMessageId
- lastMessageArrivalTime
- previewMessage
依据应用界面重构的示意示例,并非实时抓包。
GET /v1/workspaces/me/summary HTTP/1.1 Authorization: Bearer <access-token> Accept: application/json{ "conversations": [ { "conversationId": "19:[email protected]", "parentConversationId": null, "displayName": "Platform", "conversationType": "Team", "channelType": null, "tenantId": "72f988bf-86f1-41af-91ab-2d7cd011db47", "isFavorite": true, "isUnread": true, "mentionCount": 2, "consumptionHorizon": "1758962400123;1758962400123;1758962400000", "lastMessageId": 1758962400123, "lastMessageArrivalTime": 1758962400123, "previewMessage": "Standup notes are in the wiki." }, { "conversationId": "19:[email protected]", "parentConversationId": "19:[email protected]", "displayName": "General", "conversationType": "Channel", "channelType": "Standard", "tenantId": "72f988bf-86f1-41af-91ab-2d7cd011db47", "isFavorite": true, "isUnread": true, "mentionCount": 0, "consumptionHorizon": "1758962400123;1758962400123;1758962400000", "lastMessageId": 1758962400123, "lastMessageArrivalTime": 1758962400123, "previewMessage": "Standup notes are in the wiki." } ] }依据应用界面推导;端点细节为示意说明,并非实际抓包。
依据带有未读与提及角标的团队与频道左侧栏重构。单个聚合载荷,让侧栏无需按团队逐一请求即可渲染。
读取账户的许可 SKU
GET
/v1/account/me/licensesopendata返回当前登录用户分配的订阅 SKU 与服务计划(含会议/聊天计划),用于控制付费功能的开启。
认证方式: 具有组织用户读取范围的 OAuth2 Bearer 访问令牌。
- id
- skuId
- skuPartNumber
- servicePlans
- servicePlanId
- provisioningStatus
- value
依据应用界面重构的示意示例,并非实时抓包。
GET /v1/account/me/licenses HTTP/1.1 Authorization: Bearer <access-token> Accept: application/json{ "value": [ { "id": "c7890e12-aaaa-4bbb-8ccc-0123456789ab", "skuId": "6fd2c87f-b296-42f0-b197-1e91e994b900", "skuPartNumber": "ENTERPRISEPACK", "servicePlans": [ { "servicePlanId": "57ff2da0-89d1-429b-9cd3-4d0f0c7d0a1e", "provisioningStatus": "Success" } ] } ] }依据应用界面推导;端点细节为示意说明,并非实际抓包。
依据检查当前账户订阅 SKU 的功能开关逻辑重构。按计划的预配状态决定客户端启用哪些高级功能。
用账户令牌交换聊天会话令牌
GET
/v1/auth/sessionTokenopendata把账户级 OAuth2 令牌换成聊天作用域会话令牌、成员 ID 与区域路由信息,供每次聊天服务调用(消息、长轮询、在线状态文档)使用。
认证方式: 应用认证服务的 OAuth2 Bearer 访问令牌。返回的 tokens.skypeToken 随后作为 Authorization 令牌请求头发送到聊天服务调用。
- tokens
- skypeToken
- expiresIn
- tokenType
- mri
- skypeId
- region
- partition
- regionOverride
- userInfo
- cid
- primaryMemberName
- skypeName
- licenseDetails
- isFreemium
- isTrial
- isCopilot
- isAdvComms
- isTeamsSmb
依据应用界面重构的示意示例,并非实时抓包。
GET /v1/auth/sessionToken HTTP/1.1 Authorization: Bearer <access-token> Accept: application/json{ "tokens": { "skypeToken": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...", "expiresIn": 86400, "tokenType": "skype" }, "mri": "8:orgid:3f2a1c90-9b11-4d2e-a7c4-0f8e6b1d2a33", "skypeId": "orgid:3f2a1c90-9b11-4d2e-a7c4-0f8e6b1d2a33", "region": "amer", "partition": "amer", "regionOverride": null, "userInfo": { "cid": 0, "primaryMemberName": "[email protected]", "skypeName": "orgid:3f2a1c90-9b11-4d2e-a7c4-0f8e6b1d2a33" }, "licenseDetails": { "isFreemium": false, "isTrial": false, "isCopilot": false, "isAdvComms": false, "isTeamsSmb": false } }依据应用界面推导;端点细节为示意说明,并非实际抓包。
依据首次聊天调用前运行的登录握手流程重构。一次交换即返回聊天令牌、成员标识与区域路由分区。
批量解析头像
GET
/v1/directory/people/avatarsosint按成员 ID + displayName 批量解析聊天列表与联系人卡片的头像 imageUri;当用户没有照片时返回 avatarHint。
认证方式: 当前登录工作账号的 OAuth2 Bearer 访问令牌(目录范围)。usersInfo 是成员 ID + displayName 对的紧凑编码。
- usersInfo
- mri
- displayName
- imageUri
- avatarHint
- etag
- value
依据应用界面重构的示意示例,并非实时抓包。
GET /v1/directory/people/avatars?usersInfo=%5B%7B%22mri%22%3A%228%3Aorgid%3A3f2a1c90-9b11-4d2e-a7c4-0f8e6b1d2a33%22%2C%22displayName%22%3A%22Alex%20Rivera%22%7D%5D HTTP/1.1 Authorization: Bearer <access-token> Accept: application/json{ "value": [ { "mri": "8:orgid:3f2a1c90-9b11-4d2e-a7c4-0f8e6b1d2a33", "displayName": "Alex Rivera", "imageUri": "https://example.invalid/avatar/alex", "avatarHint": "ProfilePicture", "etag": "W/\"datetime'2026-08-01T12:00:00Z'\"" } ] }依据应用界面推导;端点细节为示意说明,并非实际抓包。
依据批量解析头像图片的聊天列表与联系人卡片重构。当成员没有留存照片时回退到姓名首字母/头像提示。
数据类别
- 资料
- 通讯录
- 在线状态
- 消息
- 日历
- 许可
- 头像
数据使用场景与案例
组织通讯录对账
夜间任务拉取 me 资料与人员搜索端点(mri、userPrincipalName、jobTitle、tenantId),并向上同步到 HRIS 或 ITSM,让离职与岗位变更次日出现在 Teams 感知工具中。
客服台的实时在线状态叠加
客服台把 MRI 批次提交到在线状态批量查询端点,在每个工单负责人旁展示 availability、activity、lastSeenAt 与 workLocation,让客服在 @ 提及前知道谁在通话中。
从运营控制台加入会议
值班看板读取日历视图端点的 Id、Subject、Start、End、IsOnlineMeeting 与 OnlineMeetingUrl,无需打开日历页签即可把响应人员深链进当前 Teams 会议。
聊天话题合规导出
在签发聊天作用域会话令牌后,记录管道分页拉取话题消息端点(content、composetime、from、imdisplayname、clientmessageid)归档,用于电子发现。
常见问题
Teams me 资料返回哪些身份字段?
me 资料调用返回 mri、objectId、displayName、givenName、surname、email、userPrincipalName、jobTitle、department、companyName、tenantId、tenantName、emailsInfo、phonesInfo 与身份标志。
Teams 如何区分聊天与通讯录调用的认证?
通讯录、日历与许可调用发送 OAuth2 Bearer 令牌。聊天调用先把该账户令牌换成聊天作用域会话令牌,再在分页或发送话题消息时以令牌请求头发送会话令牌,外加设备注册令牌。
可以读取同事的哪些在线状态属性?
在线状态批量查询调用返回 availability、activity、capabilities、lastSeenAt、状态签名、混合办公 workLocation(location、subLocation)以及任何强制状态时间窗。
Teams 会议加入链接来自哪里?
“会议”页签加载日历视图端点。每个事件携带 Id、iCalUId、Subject、Start、End、IsOnlineMeeting、OnlineMeetingUrl 与 Organizer。
相关主题
- microsoft teams api
- teams 聊天消息
- teams 在线状态 api
- teams 人员搜索
- teams 日历视图
- teams 会话令牌
- mri userPrincipalName
- teams licenseDetails
需要集成这个 App 的数据 API?
我们可为任意指定 App 交付定制集成——源码交付 USD 500 起,或托管 API 按调用计费。告诉我们您需要的数据即可。
- 每个项目均签 NDA 与 SOW
- 3–7 天交付
- 验收通过后才付款
- 仅在授权范围内作业