swagger: '2.0'
info:
  title: Wechaty Puppet Service OpenAPI Specification
  description: >-
    Wechaty is a Conversational RPA SDK for chatbot makers. With only 6 lines of
    code, you can create a bot on the most popular IMs like WeChat, Whatsapp,
    WeCom, Gitter, etc.


    Wechaty Puppet Service is the RESTful API for Wechaty API, which is build on
    top of the Wechaty Puppet Abstraction and the gRPC proto definition.
  version: 1.0.106
  contact:
    name: Wechaty
    url: https://github.com/wechaty/openapi
    email: wechaty@chatie.io
  license:
    name: Apache-2.0
    url: http://www.apache.org/licenses/LICENSE-2.0.html
tags:
  - name: Puppet
consumes:
  - application/json
produces:
  - application/json
paths:
  /call/invite:
    post:
      operationId: Puppet_CallInvite
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetCallInviteResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/puppetCallInviteRequest'
      tags:
        - Puppet
  /call/{callId}/accept:
    post:
      operationId: Puppet_CallAccept
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetCallAcceptResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: callId
          description: 由 CallInvite 响应获得；协议端持有会话状态，凭此即可定位会话（无需 peer/media）
          in: path
          required: true
          type: string
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/PuppetCallAcceptBody'
      tags:
        - Puppet
  /call/{callId}/add:
    post:
      operationId: Puppet_CallAdd
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetCallAddResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: callId
          description: 由 CallInvite 响应获得
          in: path
          required: true
          type: string
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/PuppetCallAddBody'
      tags:
        - Puppet
  /call/{callId}/cancel:
    post:
      operationId: Puppet_CallCancel
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetCallCancelResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: callId
          description: 由 CallInvite 响应获得；协议端持有会话状态，凭此即可定位会话（无需 peer/media）
          in: path
          required: true
          type: string
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/PuppetCallCancelBody'
      tags:
        - Puppet
  /call/{callId}/hangup:
    post:
      operationId: Puppet_CallHangup
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetCallHangupResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: callId
          description: 由 CallInvite 响应获得；协议端持有会话状态，凭此即可定位会话（无需 peer/media）
          in: path
          required: true
          type: string
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/PuppetCallHangupBody'
      tags:
        - Puppet
  /call/{callId}/media-endpoint:
    post:
      summary: POST：签发可能在网关侧预分配媒体会话（有副作用），非幂等读取。
      operationId: Puppet_CallMediaEndpoint
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetCallMediaEndpointResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: callId
          description: 由 CallInvite 响应获得
          in: path
          required: true
          type: string
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/PuppetCallMediaEndpointBody'
      tags:
        - Puppet
  /call/{callId}/reject:
    post:
      operationId: Puppet_CallReject
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetCallRejectResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: callId
          description: 由 CallInvite 响应获得；协议端持有会话状态，凭此即可定位会话（无需 peer/media）
          in: path
          required: true
          type: string
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/PuppetCallRejectBody'
      tags:
        - Puppet
  /call/{id}:
    get:
      operationId: Puppet_CallPayload
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetCallPayloadResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: id
          description: call_id
          in: path
          required: true
          type: string
      tags:
        - Puppet
  /cancel_verify_code:
    post:
      operationId: Puppet_CancelVerifyCode
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetCancelVerifyCodeResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: id
          in: query
          required: false
          type: string
      tags:
        - Puppet
  /contact/externalUserId:
    post:
      operationId: Puppet_GetContactExternalUserId
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetGetContactExternalUserIdResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/puppetGetContactExternalUserIdRequest'
      tags:
        - Puppet
  /contact/room/{roomId}/alias/{alias}:
    put:
      operationId: Puppet_ContactSelfRoomAlias
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetContactSelfRoomAliasResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: roomId
          in: path
          required: true
          type: string
        - name: alias
          in: path
          required: true
          type: string
      tags:
        - Puppet
  /contacts:
    get:
      summary: >-
        *

        Huan(202002): consider changing response to a stream in the future for
        better performance
      operationId: Puppet_ContactList
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetContactListResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      tags:
        - Puppet
  /contacts/batch-payload:
    post:
      operationId: Puppet_BatchContactPayload
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetBatchContactPayloadResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/puppetBatchContactPayloadRequest'
      tags:
        - Puppet
  /contacts/self/aka/{aka}:
    put:
      operationId: Puppet_ContactSelfAka
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetContactSelfAkaResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: aka
          in: path
          required: true
          type: string
      tags:
        - Puppet
  /contacts/self/name/{name}:
    put:
      operationId: Puppet_ContactSelfName
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetContactSelfNameResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: name
          in: path
          required: true
          type: string
      tags:
        - Puppet
  /contacts/self/qrcode:
    get:
      summary: '*'
      description: Contact Self
      operationId: Puppet_ContactSelfQRCode
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetContactSelfQRCodeResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      tags:
        - Puppet
  /contacts/self/realName/{realName}:
    put:
      operationId: Puppet_ContactSelfRealName
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetContactSelfRealNameResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: realName
          in: path
          required: true
          type: string
      tags:
        - Puppet
  /contacts/self/signature:
    put:
      operationId: Puppet_ContactSelfSignature
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetContactSelfSignatureResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/puppetContactSelfSignatureRequest'
      tags:
        - Puppet
  /contacts/{contactId}/corporation-remark:
    put:
      operationId: Puppet_ContactCorporationRemark
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetContactCorporationRemarkResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: contactId
          in: path
          required: true
          type: string
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/PuppetContactCorporationRemarkBody'
      tags:
        - Puppet
  /contacts/{contactId}/delete:
    put:
      operationId: Puppet_ContactDelete
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetContactDeleteResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: contactId
          in: path
          required: true
          type: string
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/PuppetContactDeleteBody'
      tags:
        - Puppet
  /contacts/{contactId}/description:
    put:
      operationId: Puppet_ContactDescription
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetContactDescriptionResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: contactId
          in: path
          required: true
          type: string
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/PuppetContactDescriptionBody'
      tags:
        - Puppet
  /contacts/{contactId}/phone:
    put:
      operationId: Puppet_ContactPhone
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetContactPhoneResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: contactId
          in: path
          required: true
          type: string
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/PuppetContactPhoneBody'
      tags:
        - Puppet
  /contacts/{contactId}/tag/tags:
    get:
      operationId: Puppet_TagContactTagList
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetTagContactTagListResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: contactId
          in: path
          required: true
          type: string
      tags:
        - Puppet
  /contacts/{id}:
    get:
      summary: Get a contact payload
      description: Contact
      operationId: contactPayload
      responses:
        '200':
          description: Contact payload
          schema:
            $ref: '#/definitions/puppetContactPayloadResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: id
          in: path
          required: true
          type: string
      tags:
        - contact
  /contacts/{id}/alias:
    put:
      operationId: Puppet_ContactAlias
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetContactAliasResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: id
          in: path
          required: true
          type: string
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/PuppetContactAliasBody'
      tags:
        - Puppet
  /contacts/{id}/avatar:
    get:
      operationId: Puppet_ContactAvatar
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetContactAvatarResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: id
          in: path
          required: true
          type: string
        - name: fileboxStringValueDeprecated
          description: DEPRECATED, will be removed after Dec 31, 2022
          in: query
          required: false
          type: string
        - name: fileBox
          in: query
          required: false
          type: string
      tags:
        - Puppet
  /contacts/{id}/dirty/{type}:
    put:
      operationId: Puppet_DirtyPayload2
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetDirtyPayloadResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: id
          in: path
          required: true
          type: string
        - name: type
          in: path
          required: true
          type: string
          enum:
            - PAYLOAD_TYPE_UNSPECIFIED
            - PAYLOAD_TYPE_MESSAGE
            - PAYLOAD_TYPE_CONTACT
            - PAYLOAD_TYPE_ROOM
            - PAYLOAD_TYPE_ROOM_MEMBER
            - PAYLOAD_TYPE_FRIENDSHIP
            - PAYLOAD_TYPE_POST
            - PAYLOAD_TYPE_TAG
            - PAYLOAD_TYPE_TAG_GROUP
            - PAYLOAD_TYPE_WXXD_PRODUCT
            - PAYLOAD_TYPE_WXXD_ORDER
            - PAYLOAD_TYPE_CALL
          pattern: PAYLOAD_TYPE_CONTACT
      tags:
        - Puppet
  /contacts/{id}/payload-modify:
    put:
      operationId: Puppet_ContactPayloadModify
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetContactPayloadModifyResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: id
          in: path
          required: true
          type: string
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/PuppetContactPayloadModifyBody'
      tags:
        - Puppet
  /conversation/{conversationId}/read:
    put:
      summary: '*'
      description: Conversation
      operationId: Puppet_ConversationRead
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetConversationReadResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: conversationId
          in: path
          required: true
          type: string
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/PuppetConversationReadBody'
      tags:
        - Puppet
  /conversations/{conversationId}/channel:
    post:
      operationId: Puppet_MessageSendChannel
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetMessageSendChannelResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: conversationId
          in: path
          required: true
          type: string
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/PuppetMessageSendChannelBody'
      tags:
        - Puppet
  /conversations/{conversationId}/channel-card:
    post:
      operationId: Puppet_MessageSendChannelCard
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetMessageSendChannelCardResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: conversationId
          in: path
          required: true
          type: string
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/PuppetMessageSendChannelCardBody'
      tags:
        - Puppet
  /conversations/{conversationId}/contact:
    post:
      operationId: Puppet_MessageSendContact
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetMessageSendContactResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: conversationId
          in: path
          required: true
          type: string
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/PuppetMessageSendContactBody'
      tags:
        - Puppet
  /conversations/{conversationId}/forward/{messageId}:
    post:
      operationId: Puppet_MessageForward2
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetMessageForwardResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: conversationId
          description: 对话id
          in: path
          required: true
          type: string
        - name: messageId
          description: |-
            @deprecated: use message_ids instead.

            要转发的消息id
          in: path
          required: true
          type: string
        - name: messageIds
          description: 要合并转发的消息id列表
          in: query
          required: false
          type: array
          items:
            type: string
          collectionFormat: multi
      tags:
        - Puppet
  /conversations/{conversationId}/location:
    post:
      operationId: Puppet_MessageSendLocation
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetMessageSendLocationResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: conversationId
          in: path
          required: true
          type: string
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/PuppetMessageSendLocationBody'
      tags:
        - Puppet
  /conversations/{conversationId}/mini-program:
    post:
      operationId: Puppet_MessageSendMiniProgram
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetMessageSendMiniProgramResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: conversationId
          description: 对话id
          in: path
          required: true
          type: string
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/PuppetMessageSendMiniProgramBody'
      tags:
        - Puppet
  /conversations/{conversationId}/post:
    post:
      operationId: Puppet_MessageSendPost
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetMessageSendPostResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: conversationId
          description: 对话id
          in: path
          required: true
          type: string
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/PuppetMessageSendPostBody'
      tags:
        - Puppet
  /conversations/{conversationId}/text:
    post:
      operationId: Puppet_MessageSendText
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetMessageSendTextResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: conversationId
          description: 对话id
          in: path
          required: true
          type: string
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/PuppetMessageSendTextBody'
      tags:
        - Puppet
  /conversations/{conversationId}/url-link:
    post:
      operationId: Puppet_MessageSendUrl
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetMessageSendUrlResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: conversationId
          description: 对话id
          in: path
          required: true
          type: string
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/PuppetMessageSendUrlBody'
      tags:
        - Puppet
  /conversations:batchForward:
    post:
      operationId: Puppet_MessageBatchForward
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetMessageBatchForwardResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/puppetMessageBatchForwardRequest'
      tags:
        - Puppet
  /conversations:batchSendChannel:
    post:
      operationId: Puppet_MessageBatchSendChannel
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetMessageBatchSendChannelResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/puppetMessageBatchSendChannelRequest'
      tags:
        - Puppet
  /conversations:batchSendChannelCard:
    post:
      operationId: Puppet_MessageBatchSendChannelCard
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetMessageBatchSendChannelCardResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/puppetMessageBatchSendChannelCardRequest'
      tags:
        - Puppet
  /conversations:batchSendContact:
    post:
      operationId: Puppet_MessageBatchSendContact
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetMessageBatchSendContactResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/puppetMessageBatchSendContactRequest'
      tags:
        - Puppet
  /conversations:batchSendFile:
    post:
      operationId: Puppet_MessageBatchSendFile
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetMessageBatchSendFileResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/puppetMessageBatchSendFileRequest'
      tags:
        - Puppet
  /conversations:batchSendLocation:
    post:
      operationId: Puppet_MessageBatchSendLocation
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetMessageBatchSendLocationResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/puppetMessageBatchSendLocationRequest'
      tags:
        - Puppet
  /conversations:batchSendMiniProgram:
    post:
      operationId: Puppet_MessageBatchSendMiniProgram
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetMessageBatchSendMiniProgramResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/puppetMessageBatchSendMiniProgramRequest'
      tags:
        - Puppet
  /conversations:batchSendText:
    post:
      operationId: Puppet_MessageBatchSendText
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetMessageBatchSendTextResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/puppetMessageBatchSendTextRequest'
      tags:
        - Puppet
  /conversations:batchSendUrl:
    post:
      operationId: Puppet_MessageBatchSendUrl
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetMessageBatchSendUrlResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/puppetMessageBatchSendUrlRequest'
      tags:
        - Puppet
  /currentUser:
    get:
      operationId: Puppet_CurrentUser
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetCurrentUserResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      tags:
        - Puppet
  /ding:
    post:
      operationId: Puppet_Ding
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetDingResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/puppetDingRequest'
      tags:
        - Puppet
  /download/{id}:
    get:
      summary: |-
        *
        File/Blob download & upload
      operationId: Puppet_Download
      responses:
        '200':
          description: A successful response.(streaming responses)
          schema:
            type: object
            properties:
              result:
                $ref: '#/definitions/puppetDownloadResponse'
              error:
                $ref: '#/definitions/rpcStatus'
            title: Stream result of puppetDownloadResponse
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: id
          in: path
          required: true
          type: string
      tags:
        - Puppet
  /enter_verify_code:
    post:
      operationId: Puppet_EnterVerifyCode
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetEnterVerifyCodeResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: id
          in: query
          required: false
          type: string
        - name: code
          in: query
          required: false
          type: string
      tags:
        - Puppet
  /events:
    get:
      summary: '*'
      description: Event - Server Stream
      operationId: Puppet_Event
      responses:
        '200':
          description: A successful response.(streaming responses)
          schema:
            type: object
            properties:
              result:
                $ref: '#/definitions/puppetEventResponse'
              error:
                $ref: '#/definitions/rpcStatus'
            title: Stream result of puppetEventResponse
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: seq
          description: the seq of the last event
          in: query
          required: false
          type: integer
          format: int32
        - name: accountId
          description: the accountId of the last event
          in: query
          required: false
          type: string
      tags:
        - Puppet
  /friendship/accept/{id}:
    put:
      operationId: Puppet_FriendshipAccept
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetFriendshipAcceptResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: id
          in: path
          required: true
          type: string
      tags:
        - Puppet
  /friendship/add/{contactId}:
    put:
      operationId: Puppet_FriendshipAdd
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetFriendshipAddResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: contactId
          in: path
          required: true
          type: string
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/PuppetFriendshipAddBody'
      tags:
        - Puppet
  /friendship/search/handle/{weixin}:
    get:
      operationId: Puppet_FriendshipSearchHandle
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetFriendshipSearchHandleResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: weixin
          description: >-
            *

            Huan(202203): in gRPC, we can freely rename the field name as long
            as the number keep consistent.
             so we can just rename `weixin` to `handle` here.

            (Huan(20220329): use `weixin` for now, until we upgrade to v2.0
             the `wechaty-grpc@1.0.0` will use the latest v1.x automatically when running `npm install`
               which will causing a breaking change.
             @link https://github.com/wechaty/getting-started/issues/254

            TODO: rename `weixin` to `handle` in v2.0.0
          in: path
          required: true
          type: string
        - name: type
          description: |2-
             - CONTACT_TYPE_UNSPECIFIED: 不明确
             - CONTACT_TYPE_PERSONAL: 个微联系人
             - CONTACT_TYPE_OFFICIAL: 公众号
             - CONTACT_TYPE_CORPORATION: 企微联系人
             - CONTACT_TYPE_APPLICATION: 应用联系人 例如小助手
          in: query
          required: false
          type: string
          enum:
            - CONTACT_TYPE_UNSPECIFIED
            - CONTACT_TYPE_PERSONAL
            - CONTACT_TYPE_OFFICIAL
            - CONTACT_TYPE_CORPORATION
            - CONTACT_TYPE_APPLICATION
          default: CONTACT_TYPE_UNSPECIFIED
      tags:
        - Puppet
  /friendship/search/phone/{phone}:
    get:
      operationId: Puppet_FriendshipSearchPhone
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetFriendshipSearchPhoneResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: phone
          in: path
          required: true
          type: string
        - name: type
          description: |2-
             - CONTACT_TYPE_UNSPECIFIED: 不明确
             - CONTACT_TYPE_PERSONAL: 个微联系人
             - CONTACT_TYPE_OFFICIAL: 公众号
             - CONTACT_TYPE_CORPORATION: 企微联系人
             - CONTACT_TYPE_APPLICATION: 应用联系人 例如小助手
          in: query
          required: false
          type: string
          enum:
            - CONTACT_TYPE_UNSPECIFIED
            - CONTACT_TYPE_PERSONAL
            - CONTACT_TYPE_OFFICIAL
            - CONTACT_TYPE_CORPORATION
            - CONTACT_TYPE_APPLICATION
          default: CONTACT_TYPE_UNSPECIFIED
      tags:
        - Puppet
  /friendship/{id}:
    get:
      summary: '*'
      description: Friendship
      operationId: Puppet_FriendshipPayload
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetFriendshipPayloadResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: id
          in: path
          required: true
          type: string
        - name: payloadStringValueDeprecated
          description: |-
            *
            Huan(202003):
             What's the reason we need belowing payload?
             We should remove it if possible.

            DEPRECATED, will be removed after Dec 31, 2022
          in: query
          required: false
          type: string
        - name: payload
          in: query
          required: false
          type: string
      tags:
        - Puppet
  /friendships/{id}/dirty/{type}:
    put:
      operationId: Puppet_DirtyPayload5
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetDirtyPayloadResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: id
          in: path
          required: true
          type: string
        - name: type
          in: path
          required: true
          type: string
          enum:
            - PAYLOAD_TYPE_UNSPECIFIED
            - PAYLOAD_TYPE_MESSAGE
            - PAYLOAD_TYPE_CONTACT
            - PAYLOAD_TYPE_ROOM
            - PAYLOAD_TYPE_ROOM_MEMBER
            - PAYLOAD_TYPE_FRIENDSHIP
            - PAYLOAD_TYPE_POST
            - PAYLOAD_TYPE_TAG
            - PAYLOAD_TYPE_TAG_GROUP
            - PAYLOAD_TYPE_WXXD_PRODUCT
            - PAYLOAD_TYPE_WXXD_ORDER
            - PAYLOAD_TYPE_CALL
          pattern: PAYLOAD_TYPE_FRIENDSHIP
      tags:
        - Puppet
  /logout:
    put:
      operationId: Puppet_Logout
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetLogoutResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      tags:
        - Puppet
  /message/broadcast/create:
    post:
      operationId: Puppet_CreateMessageBroadcast
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetCreateMessageBroadcastResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/puppetCreateMessageBroadcastRequest'
      tags:
        - Puppet
  /message/broadcast/target:
    get:
      operationId: Puppet_GetMessageBroadcastTarget
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetGetMessageBroadcastTargetResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      tags:
        - Puppet
  /message/broadcast/{id}:
    get:
      operationId: Puppet_GetMessageBroadcastStatus
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetGetMessageBroadcastStatusResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: id
          in: path
          required: true
          type: string
      tags:
        - Puppet
  /message/{id}:
    get:
      operationId: Puppet_MessagePayload
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetMessagePayloadResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: id
          in: path
          required: true
          type: string
      tags:
        - Puppet
  /message/{id}/call-record:
    get:
      operationId: Puppet_MessageCallRecord
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetMessageCallRecordResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: id
          in: path
          required: true
          type: string
      tags:
        - Puppet
  /message/{id}/channel:
    get:
      operationId: Puppet_MessageChannel
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetMessageChannelResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: id
          in: path
          required: true
          type: string
      tags:
        - Puppet
  /message/{id}/channel-card:
    get:
      operationId: Puppet_MessageChannelCard
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetMessageChannelCardResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: id
          in: path
          required: true
          type: string
      tags:
        - Puppet
  /message/{id}/chat-history:
    get:
      operationId: Puppet_MessageChatHistory
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetMessageChatHistoryResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: id
          in: path
          required: true
          type: string
      tags:
        - Puppet
  /message/{id}/contact:
    get:
      operationId: Puppet_MessageContact
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetMessageContactResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: id
          in: path
          required: true
          type: string
      tags:
        - Puppet
  /message/{id}/dirty/{type}:
    put:
      operationId: Puppet_DirtyPayload
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetDirtyPayloadResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: id
          in: path
          required: true
          type: string
        - name: type
          in: path
          required: true
          type: string
          enum:
            - PAYLOAD_TYPE_UNSPECIFIED
            - PAYLOAD_TYPE_MESSAGE
            - PAYLOAD_TYPE_CONTACT
            - PAYLOAD_TYPE_ROOM
            - PAYLOAD_TYPE_ROOM_MEMBER
            - PAYLOAD_TYPE_FRIENDSHIP
            - PAYLOAD_TYPE_POST
            - PAYLOAD_TYPE_TAG
            - PAYLOAD_TYPE_TAG_GROUP
            - PAYLOAD_TYPE_WXXD_PRODUCT
            - PAYLOAD_TYPE_WXXD_ORDER
            - PAYLOAD_TYPE_CALL
          pattern: PAYLOAD_TYPE_MESSAGE
      tags:
        - Puppet
  /message/{id}/location:
    get:
      operationId: Puppet_MessageLocation
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetMessageLocationResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: id
          in: path
          required: true
          type: string
      tags:
        - Puppet
  /message/{id}/mini-program:
    get:
      operationId: Puppet_MessageMiniProgram
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetMessageMiniProgramResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: id
          in: path
          required: true
          type: string
      tags:
        - Puppet
  /message/{id}/preview:
    get:
      operationId: Puppet_MessagePreview
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetMessagePreviewResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: id
          in: path
          required: true
          type: string
      tags:
        - Puppet
  /message/{id}/recall:
    put:
      operationId: Puppet_MessageRecall
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetMessageRecallResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: id
          in: path
          required: true
          type: string
      tags:
        - Puppet
  /message/{id}/url-link:
    get:
      operationId: Puppet_MessageUrl
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetMessageUrlResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: id
          in: path
          required: true
          type: string
      tags:
        - Puppet
  /messages/{messageId}/forward/{conversationId}:
    post:
      operationId: Puppet_MessageForward
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetMessageForwardResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: messageId
          description: |-
            @deprecated: use message_ids instead.

            要转发的消息id
          in: path
          required: true
          type: string
        - name: conversationId
          description: 对话id
          in: path
          required: true
          type: string
        - name: messageIds
          description: 要合并转发的消息id列表
          in: query
          required: false
          type: array
          items:
            type: string
          collectionFormat: multi
      tags:
        - Puppet
  /moment/coverage:
    post:
      operationId: Puppet_momentCoverage
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetMomentCoverageResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/puppetMomentCoverageRequest'
      tags:
        - Puppet
  /moment/publish:
    post:
      operationId: Puppet_momentPublish
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetMomentPublishResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/puppetMomentPublishRequest'
      tags:
        - Puppet
  /moment/signature:
    post:
      operationId: Puppet_momentSignature
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetMomentSignatureResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/puppetMomentSignatureRequest'
      tags:
        - Puppet
  /moment/visibleList:
    get:
      operationId: Puppet_MomentVisibleList
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetMomentVisibleListResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      tags:
        - Puppet
  /moment/{momentId}:
    delete:
      operationId: Puppet_MomentUnpublish
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetMomentUnpublishResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: momentId
          in: path
          required: true
          type: string
      tags:
        - Puppet
  /post/like:
    post:
      operationId: Puppet_postTap
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetPostTapResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/puppetPostTapRequest'
      tags:
        - Puppet
  /post/payload:
    post:
      operationId: Puppet_postPayload
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetPostPayloadResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/puppetPostPayloadRequest'
      tags:
        - Puppet
  /post/sayable:
    post:
      operationId: Puppet_postPayloadSayable
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetPostPayloadSayableResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/puppetPostPayloadSayableRequest'
      tags:
        - Puppet
  /refresh_qr_code:
    post:
      operationId: Puppet_RefreshQRCode
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetRefreshQRCodeRequest'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      tags:
        - Puppet
  /room-invitations/{id}:
    get:
      summary: '*'
      description: Room Invitation
      operationId: Puppet_RoomInvitationPayload
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetRoomInvitationPayloadResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: id
          in: path
          required: true
          type: string
        - name: payloadStringValueDeprecated
          description: |-
            *
            Huan(202002): `payload` should be removed.
             The puppet server should take the responsibilities
             for storing the unaccepted friend-request payload.

            @deprecated: use payload instead.
             Huan(202109): Wrapper types must not be used going forward.
               https://cloud.google.com/apis/design/design_patterns#optional_primitive_fields

            Deprecated: will be removed after Dec 31, 2022
          in: query
          required: false
          type: string
        - name: payload
          in: query
          required: false
          type: string
      tags:
        - Puppet
  /room-invitations/{id}/accept:
    put:
      operationId: Puppet_RoomInvitationAccept
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetRoomInvitationAcceptResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: id
          in: path
          required: true
          type: string
      tags:
        - Puppet
  /room-invitations/{qrcode}/accept-by-qrcode:
    put:
      operationId: Puppet_RoomInvitationAcceptByQRCode
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetRoomInvitationAcceptByQRCodeResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: qrcode
          in: path
          required: true
          type: string
      tags:
        - Puppet
  /rooms:
    get:
      operationId: Puppet_RoomList
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetRoomListResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      tags:
        - Puppet
    post:
      operationId: Puppet_RoomCreate
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetRoomCreateResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/puppetRoomCreateRequest'
      tags:
        - Puppet
  /rooms/batch-payload:
    post:
      operationId: Puppet_BatchRoomPayload
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetBatchRoomPayloadResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/puppetBatchRoomPayloadRequest'
      tags:
        - Puppet
  /rooms/{id_1}:
    delete:
      operationId: Puppet_RoomDismiss
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetRoomDismissResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: id_1
          in: path
          required: true
          type: string
      tags:
        - Puppet
  /rooms/{id}:
    get:
      summary: '*'
      description: Room
      operationId: Puppet_RoomPayload
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetRoomPayloadResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: id
          in: path
          required: true
          type: string
      tags:
        - Puppet
    delete:
      operationId: Puppet_RoomQuit
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetRoomQuitResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: id
          in: path
          required: true
          type: string
      tags:
        - Puppet
  /rooms/{id}/add/admins/{contactIds}:
    put:
      operationId: Puppet_RoomAddAdmins
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetRoomAdminsResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: id
          in: path
          required: true
          type: string
        - name: contactIds
          in: path
          required: true
          type: array
          items:
            type: string
          collectionFormat: csv
          minItems: 1
      tags:
        - Puppet
  /rooms/{id}/add/{contactId}:
    put:
      operationId: Puppet_RoomAdd
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetRoomAddResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: id
          in: path
          required: true
          type: string
        - name: contactId
          description: 被邀请联系人id
          in: path
          required: true
          type: string
        - name: inviteOnly
          description: 不明确，目前没见到使用这个的地方
          in: query
          required: false
          type: boolean
        - name: quoteIds
          description: 要附带的聊天消息 id 列表
          in: query
          required: false
          type: array
          items:
            type: string
          collectionFormat: multi
        - name: contactIds
          description: 邀请的联系人id列表,优先用这个
          in: query
          required: false
          type: array
          items:
            type: string
          collectionFormat: multi
      tags:
        - Puppet
  /rooms/{id}/addV2:
    put:
      operationId: Puppet_RoomAddV2
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetRoomAddV2Response'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: id
          in: path
          required: true
          type: string
        - name: contactIds
          in: query
          required: false
          type: array
          items:
            type: string
          collectionFormat: multi
        - name: inviteOnly
          in: query
          required: false
          type: boolean
        - name: quoteIds
          in: query
          required: false
          type: array
          items:
            type: string
          collectionFormat: multi
      tags:
        - Puppet
  /rooms/{id}/announcement:
    get:
      operationId: Puppet_RoomAnnounce
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetRoomAnnounceResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: id
          in: path
          required: true
          type: string
        - name: textStringValueDeprecated
          description: DEPRECATED, will be removed after Dec 31, 2022
          in: query
          required: false
          type: string
        - name: text
          in: query
          required: false
          type: string
      tags:
        - Puppet
    put:
      operationId: Puppet_RoomAnnounce2
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetRoomAnnounceResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: id
          in: path
          required: true
          type: string
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/PuppetRoomAnnounceBody'
      tags:
        - Puppet
  /rooms/{id}/avatar:
    get:
      operationId: Puppet_RoomAvatar
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetRoomAvatarResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: id
          in: path
          required: true
          type: string
      tags:
        - Puppet
  /rooms/{id}/del/admins/{contactIds}:
    delete:
      operationId: Puppet_RoomDelAdmins
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetRoomAdminsResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: id
          in: path
          required: true
          type: string
        - name: contactIds
          in: path
          required: true
          type: array
          items:
            type: string
          collectionFormat: csv
          minItems: 1
      tags:
        - Puppet
  /rooms/{id}/delV2:
    delete:
      operationId: Puppet_RoomDelV2
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetRoomDelV2Response'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: id
          in: path
          required: true
          type: string
        - name: contactIds
          in: query
          required: false
          type: array
          items:
            type: string
          collectionFormat: multi
      tags:
        - Puppet
  /rooms/{id}/dirty/members/{type}:
    put:
      operationId: Puppet_DirtyPayload4
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetDirtyPayloadResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: id
          in: path
          required: true
          type: string
        - name: type
          in: path
          required: true
          type: string
          enum:
            - PAYLOAD_TYPE_UNSPECIFIED
            - PAYLOAD_TYPE_MESSAGE
            - PAYLOAD_TYPE_CONTACT
            - PAYLOAD_TYPE_ROOM
            - PAYLOAD_TYPE_ROOM_MEMBER
            - PAYLOAD_TYPE_FRIENDSHIP
            - PAYLOAD_TYPE_POST
            - PAYLOAD_TYPE_TAG
            - PAYLOAD_TYPE_TAG_GROUP
            - PAYLOAD_TYPE_WXXD_PRODUCT
            - PAYLOAD_TYPE_WXXD_ORDER
            - PAYLOAD_TYPE_CALL
          pattern: PAYLOAD_TYPE_ROOM_MEMBER
      tags:
        - Puppet
  /rooms/{id}/dirty/{type}:
    put:
      operationId: Puppet_DirtyPayload3
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetDirtyPayloadResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: id
          in: path
          required: true
          type: string
        - name: type
          in: path
          required: true
          type: string
          enum:
            - PAYLOAD_TYPE_UNSPECIFIED
            - PAYLOAD_TYPE_MESSAGE
            - PAYLOAD_TYPE_CONTACT
            - PAYLOAD_TYPE_ROOM
            - PAYLOAD_TYPE_ROOM_MEMBER
            - PAYLOAD_TYPE_FRIENDSHIP
            - PAYLOAD_TYPE_POST
            - PAYLOAD_TYPE_TAG
            - PAYLOAD_TYPE_TAG_GROUP
            - PAYLOAD_TYPE_WXXD_PRODUCT
            - PAYLOAD_TYPE_WXXD_ORDER
            - PAYLOAD_TYPE_CALL
          pattern: PAYLOAD_TYPE_ROOM
      tags:
        - Puppet
  /rooms/{id}/member/{contactId}:
    delete:
      operationId: Puppet_RoomDel
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetRoomDelResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: id
          in: path
          required: true
          type: string
        - name: contactId
          description: Deprecated, will be removed after bot updated
          in: path
          required: true
          type: string
        - name: contactIds
          in: query
          required: false
          type: array
          items:
            type: string
          collectionFormat: multi
      tags:
        - Puppet
  /rooms/{id}/members:
    get:
      operationId: Puppet_RoomMemberList
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetRoomMemberListResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: id
          in: path
          required: true
          type: string
      tags:
        - Puppet
  /rooms/{id}/members/batch-payload:
    post:
      operationId: Puppet_BatchRoomMemberPayload
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetBatchRoomMemberPayloadResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: id
          in: path
          required: true
          type: string
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/PuppetBatchRoomMemberPayloadBody'
      tags:
        - Puppet
  /rooms/{id}/members/{memberId}:
    get:
      summary: '*'
      description: Room Member
      operationId: Puppet_RoomMemberPayload
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetRoomMemberPayloadResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: id
          in: path
          required: true
          type: string
        - name: memberId
          in: path
          required: true
          type: string
      tags:
        - Puppet
  /rooms/{id}/permission:
    get:
      operationId: Puppet_RoomPermission
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetRoomPermissionResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: id
          in: path
          required: true
          type: string
        - name: inviteConfirm
          in: query
          required: false
          type: string
          enum:
            - BOOL_UNSET
            - BOOL_FALSE
            - BOOL_TRUE
          default: BOOL_UNSET
        - name: adminOnlyManage
          in: query
          required: false
          type: string
          enum:
            - BOOL_UNSET
            - BOOL_FALSE
            - BOOL_TRUE
          default: BOOL_UNSET
        - name: adminOnlyAtAll
          in: query
          required: false
          type: string
          enum:
            - BOOL_UNSET
            - BOOL_FALSE
            - BOOL_TRUE
          default: BOOL_UNSET
        - name: muteAll
          in: query
          required: false
          type: string
          enum:
            - BOOL_UNSET
            - BOOL_FALSE
            - BOOL_TRUE
          default: BOOL_UNSET
        - name: forbidRoomTopicEdit
          in: query
          required: false
          type: string
          enum:
            - BOOL_UNSET
            - BOOL_FALSE
            - BOOL_TRUE
          default: BOOL_UNSET
        - name: disableMemberMutualAdd
          in: query
          required: false
          type: string
          enum:
            - BOOL_UNSET
            - BOOL_FALSE
            - BOOL_TRUE
          default: BOOL_UNSET
      tags:
        - Puppet
  /rooms/{id}/qrcode:
    get:
      operationId: Puppet_RoomQRCode
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetRoomQRCodeResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: id
          in: path
          required: true
          type: string
      tags:
        - Puppet
  /rooms/{id}/remark:
    put:
      operationId: Puppet_RoomRemark
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetRoomRemarkResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: id
          in: path
          required: true
          type: string
        - name: remark
          in: query
          required: false
          type: string
      tags:
        - Puppet
  /rooms/{id}/topic:
    get:
      operationId: Puppet_RoomTopic
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetRoomTopicResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: id
          in: path
          required: true
          type: string
        - name: topicStringValueDeprecated
          description: DEPRECATED, will be removed after Dec 31, 2022
          in: query
          required: false
          type: string
        - name: topic
          in: query
          required: false
          type: string
      tags:
        - Puppet
  /rooms/{id}/transfer/{contactId}:
    post:
      operationId: Puppet_RoomOwnerTransfer
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetRoomOwnerTransferResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: id
          in: path
          required: true
          type: string
        - name: contactId
          in: path
          required: true
          type: string
      tags:
        - Puppet
  /rooms/{url}/parse-dynamic-qrcode:
    get:
      operationId: Puppet_RoomParseDynamicQRCode
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetRoomParseDynamicQRCodeResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: url
          description: 群活码链接
          in: path
          required: true
          type: string
      tags:
        - Puppet
  /start:
    put:
      summary: '*'
      description: Base
      operationId: Puppet_Start
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetStartResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      tags:
        - Puppet
  /stop:
    put:
      operationId: Puppet_Stop
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetStopResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      tags:
        - Puppet
  /tag/add:
    post:
      operationId: Puppet_TagTagAdd
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetTagTagAddResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/puppetTagTagAddRequest'
      tags:
        - Puppet
  /tag/addContactTag:
    post:
      operationId: Puppet_TagContactTagAdd
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetTagContactTagAddResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/puppetTagContactTagAddRequest'
      tags:
        - Puppet
  /tag/delete:
    post:
      operationId: Puppet_TagTagDelete
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetTagTagDeleteResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/puppetTagTagDeleteRequest'
      tags:
        - Puppet
  /tag/groups/{tagGroupId}/tags:
    get:
      operationId: Puppet_TagGroupTagList
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetTagGroupTagListResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: tagGroupId
          in: path
          required: true
          type: string
      tags:
        - Puppet
  /tag/list:
    get:
      operationId: Puppet_TagTagList
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetTagTagListResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      tags:
        - Puppet
  /tag/modify:
    post:
      operationId: Puppet_TagTagModify
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetTagTagModifyResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/puppetTagTagModifyRequest'
      tags:
        - Puppet
  /tag/payload:
    post:
      operationId: Puppet_TagPayload
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetTagPayloadResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/puppetTagPayloadRequest'
      tags:
        - Puppet
  /tag/removeContactTag:
    post:
      operationId: Puppet_TagContactTagRemove
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetTagContactTagRemoveResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/puppetTagContactTagRemoveRequest'
      tags:
        - Puppet
  /tag/{tagId}/contacts:
    get:
      operationId: Puppet_TagTagContactList
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetTagTagContactListResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: tagId
          in: path
          required: true
          type: string
      tags:
        - Puppet
  /tagGroup/add:
    post:
      operationId: Puppet_TagGroupAdd
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetTagGroupAddResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/puppetTagGroupAddRequest'
      tags:
        - Puppet
  /tagGroup/delete:
    post:
      operationId: Puppet_TagGroupDelete
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetTagGroupDeleteResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/puppetTagGroupDeleteRequest'
      tags:
        - Puppet
  /tagGroup/list:
    get:
      operationId: Puppet_TagGroupList
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetTagGroupListResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      tags:
        - Puppet
  /tagGroup/payload:
    post:
      operationId: Puppet_TagGroupPayload
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetTagGroupPayloadResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/puppetTagGroupPayloadRequest'
      tags:
        - Puppet
  /upload:
    post:
      operationId: Puppet_Upload
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetUploadResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: body
          description: ' (streaming inputs)'
          in: body
          required: true
          schema:
            $ref: '#/definitions/puppetUploadRequest'
      tags:
        - Puppet
  /version:
    get:
      operationId: Puppet_Version
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetVersionResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      tags:
        - Puppet
  /wechaty.Puppet/FriendshipSearchWeixin:
    post:
      summary: |-
        *
        Huan(202203): https://github.com/wechaty/puppet/issues/181
        @deprecated use FriendshipSearchHandle instead, will be removed in v3.0
      operationId: Puppet_FriendshipSearchWeixin
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetFriendshipSearchHandleResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: body
          description: >-
            *

            Huan(202003): we just rename the payload message because gRPC only
            care about the message structure
             (and as long as we keep consistent with the old structure).

             @link https://github.com/wechaty/grpc/pull/173

            Rename:
             1. `FriendshipSearchWeixinRequest`    -> `FriendshipSearchHandleRequest`
             2. `FriendshipSearchWeixinReqsponse`  -> `FriendshipSearchHandleResponse`
          in: body
          required: true
          schema:
            $ref: '#/definitions/puppetFriendshipSearchHandleRequest'
      tags:
        - Puppet
  /wechaty.Puppet/MessageFile:
    post:
      operationId: Puppet_MessageFile
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetMessageFileResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/puppetMessageFileRequest'
      tags:
        - Puppet
  /wechaty.Puppet/MessageImage:
    post:
      operationId: Puppet_MessageImage
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetMessageImageResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/puppetMessageImageRequest'
      tags:
        - Puppet
  /wechaty.Puppet/MessageSendFile:
    post:
      operationId: Puppet_MessageSendFile
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetMessageSendFileResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/puppetMessageSendFileRequest'
      tags:
        - Puppet
  /wechaty.Puppet/MessageVoice:
    post:
      operationId: Puppet_MessageVoice
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetMessageVoiceResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/puppetMessageVoiceRequest'
      tags:
        - Puppet
  /wechaty.Puppet/MessageVoiceText:
    post:
      operationId: Puppet_MessageVoiceText
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetMessageVoiceTextResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/puppetMessageVoiceTextRequest'
      tags:
        - Puppet
  /wecom/corpMessageInterceptionStrategyList:
    get:
      operationId: Puppet_GetCorpMessageInterceptionStrategies
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetGetCorpMessageInterceptionStrategiesResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      tags:
        - Puppet
  /wecom/roomAntiSpamStrategy/apply:
    post:
      operationId: Puppet_ApplyRoomAntiSpamStrategy
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetApplyRoomAntiSpamStrategyResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: body
          in: body
          required: true
          schema:
            $ref: '#/definitions/puppetApplyRoomAntiSpamStrategyRequest'
      tags:
        - Puppet
  /wecom/roomAntiSpamStrategy/{strategyId}/rooms:
    get:
      operationId: Puppet_GetRoomAntiSpamStrategyEffectRoomList
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetGetRoomAntiSpamStrategyEffectRoomListResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
        - name: strategyId
          in: path
          required: true
          type: string
      tags:
        - Puppet
  /wecom/roomAntiSpamStrategyList:
    get:
      operationId: Puppet_GetRoomAntiSpamStrategyList
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/puppetGetRoomAntiSpamStrategyListResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      tags:
        - Puppet
definitions:
  PuppetBatchRoomMemberPayloadBody:
    type: object
    properties:
      memberIds:
        type: array
        items:
          type: string
  PuppetCallAcceptBody:
    type: object
    title: 被叫接听来电。
  PuppetCallAddBody:
    type: object
    properties:
      contactIds:
        type: array
        items:
          type: string
        title: 新增受邀方 contactId 列表（不含已在通话中的参与者）
    title: |-
      通话中途拉人（errors-only 契约）：
      - 新参与者的应答回执（响铃/接听/拒接）一律经 EVENT_TYPE_CALL 事件上行，本响应恒为空；
      - 拉人特有的失败（通话不存在/已结束、人数上限等）经 gRPC status error 返回。
  PuppetCallCancelBody:
    type: object
    title: 接通前主叫取消呼叫。
  PuppetCallHangupBody:
    type: object
    properties:
      reason:
        type: string
        title: 可空，空串表示无
    title: 接通后任一方挂断。
  PuppetCallMediaEndpointBody:
    type: object
    title: |-
      媒体入场券：按 call_id 向协议端换取媒体网关协商入口。
      签发可能在网关侧预分配媒体会话（有副作用），故服务端不得缓存响应、客户端按需拉取。
  PuppetCallRejectBody:
    type: object
    properties:
      reason:
        type: string
        title: 可空，空串表示无
    title: 被叫拒接来电。
  PuppetContactAliasBody:
    type: object
    properties:
      aliasStringValueDeprecated:
        type: string
        description: DEPRECATED, will be removed after Dec 31, 2022
        title: nullable
      alias:
        type: string
  PuppetContactCorporationRemarkBody:
    type: object
    properties:
      corporationRemarkStringValueDeprecated:
        type: string
        title: DEPRECATED, will be removed after Dec 31, 2022
      corporationRemark:
        type: string
  PuppetContactDeleteBody:
    type: object
  PuppetContactDescriptionBody:
    type: object
    properties:
      descriptionStringValueDeprecated:
        type: string
        title: DEPRECATED, will be removed after Dec 31, 2022
      description:
        type: string
  PuppetContactPayloadModifyBody:
    type: object
    properties:
      gender:
        $ref: '#/definitions/puppetContactGender'
        title: 性别
      type:
        $ref: '#/definitions/puppetContactType'
        title: 类型
      name:
        type: string
        title: 姓名
      avatar:
        type: string
        title: 头像
      address:
        type: string
        title: 地址
      alias:
        type: string
        title: 别名，即备注
      city:
        type: string
        title: 城市
      friend:
        type: boolean
        title: 是否为好友
      province:
        type: string
        title: 省份
      signature:
        type: string
        title: 签名
      star:
        type: boolean
        title: 是否为特别好友
      weixin:
        type: string
        title: IM专属id，在企微环境中特指weixinId
      corporation:
        type: string
        title: 企业
      title:
        type: string
        title: 头衔
      description:
        type: string
        title: 描述
      coworker:
        type: boolean
        title: 是否为同事
      phones:
        type: array
        items:
          type: string
        title: 电话号码，企微中最多5个
      additionalInfo:
        type: string
        title: 额外信息，是由JS对象stringify得到的字符串，目前支持的内容包含addContactTime、corpId等。
      tagIds:
        type: array
        items:
          type: string
        title: 标签（的id）
      clearPhones:
        type: boolean
        description: |-
          *
           The protobuf encoding doesn't distinguish between these two cases. (undefined vs [])
           Since protobuf is language-agnostic,
           it doesn't understand the conceptual nuance of "undefined" versus "[]" of Javascript.
      clearTagIds:
        type: boolean
  PuppetContactPhoneBody:
    type: object
    properties:
      phones:
        type: array
        items:
          type: string
  PuppetConversationReadBody:
    type: object
    properties:
      hasRead:
        type: boolean
  PuppetFriendshipAddBody:
    type: object
    properties:
      hello:
        type: string
      sourceRoomIdStringValueDeprecated:
        type: string
        title: 'Deprecated: will be removed after Dec 31, 2022'
      sourceContactIdStringValueDeprecated:
        type: string
        title: 'Deprecated: will be removed after Dec 31, 2022'
      referrer:
        $ref: '#/definitions/puppetReferrer'
  PuppetMessageSendChannelBody:
    type: object
    properties:
      channel:
        $ref: '#/definitions/puppetChannelPayload'
  PuppetMessageSendChannelCardBody:
    type: object
    properties:
      channelCard:
        $ref: '#/definitions/puppetChannelCardPayload'
  PuppetMessageSendContactBody:
    type: object
    properties:
      contactId:
        type: string
  PuppetMessageSendLocationBody:
    type: object
    properties:
      location:
        $ref: '#/definitions/puppetLocationPayload'
  PuppetMessageSendMiniProgramBody:
    type: object
    properties:
      miniProgramDeprecated:
        type: string
        description: >-
          deprecated after Sep 31, 2021, remove compatible code after Dec 31,
          2022
        title: |-
          *
          Huan(202110): We should use payload instead of JSON.stringify string
           The compatible code will be removed after Dec 31, 2022
      miniProgram:
        $ref: '#/definitions/puppetMiniProgramPayload'
        title: 小程序payload
  PuppetMessageSendPostBody:
    type: object
    properties:
      content:
        $ref: '#/definitions/puppetPostPayloadClient'
        title: 发送的post内容
  PuppetMessageSendTextBody:
    type: object
    properties:
      text:
        type: string
        title: 文本内容
      mentionalIds:
        type: array
        items:
          type: string
        title: '@人id列表'
      quoteId:
        type: string
        title: 引用消息的id
    title: 发文本消息
  PuppetMessageSendUrlBody:
    type: object
    properties:
      urlLinkDeprecated:
        type: string
        description: >-
          deprecated after Sep 31, 2021, remove compatible code after Dec 31,
          2022
        title: |-
          *
          Huan(202110): We should use payload instead of JSON.stringify string
           The compatible code will be removed after Dec 31, 2022
      urlLink:
        $ref: '#/definitions/puppetUrlLinkPayload'
        title: 链接payload
  PuppetRoomAnnounceBody:
    type: object
    properties:
      textStringValueDeprecated:
        type: string
        title: DEPRECATED, will be removed after Dec 31, 2022
      text:
        type: string
    title: 群公告
  protobufAny:
    type: object
    properties:
      '@type':
        type: string
    additionalProperties: {}
  puppetApplyRoomAntiSpamStrategyRequest:
    type: object
    properties:
      strategyId:
        type: string
      roomIds:
        type: array
        items:
          type: string
      active:
        type: boolean
  puppetApplyRoomAntiSpamStrategyResponse:
    type: object
  puppetBatchContactPayloadRequest:
    type: object
    properties:
      ids:
        type: array
        items:
          type: string
  puppetBatchContactPayloadResponse:
    type: object
    properties:
      contactPayloads:
        type: array
        items:
          type: object
          $ref: '#/definitions/puppetContactPayloadResponse'
  puppetBatchRoomMemberPayloadResponse:
    type: object
    properties:
      memberPayloads:
        type: array
        items:
          type: object
          $ref: '#/definitions/puppetRoomMemberPayloadResponse'
  puppetBatchRoomPayloadRequest:
    type: object
    properties:
      ids:
        type: array
        items:
          type: string
  puppetBatchRoomPayloadResponse:
    type: object
    properties:
      roomPayloads:
        type: array
        items:
          type: object
          $ref: '#/definitions/puppetRoomPayloadResponse'
  puppetBroadcastStatus:
    type: string
    enum:
      - BROADCAST_STATUS_UNKNOWN
      - BROADCAST_STATUS_SENDING
      - BROADCAST_STATUS_SENT
    default: BROADCAST_STATUS_UNKNOWN
  puppetBroadcastTarget:
    type: object
    properties:
      contactId:
        type: string
      roomId:
        type: string
      status:
        $ref: '#/definitions/puppetBroadcastTargetStatus'
  puppetBroadcastTargetStatus:
    type: string
    enum:
      - BROADCAST_TARGET_STATUS_UNSENT
      - BROADCAST_TARGET_STATUS_SENT
      - BROADCAST_TARGET_STATUS_NOT_FRIEND
      - BROADCAST_TARGET_STATUS_OCCUPIED
    default: BROADCAST_TARGET_STATUS_UNSENT
  puppetCallAcceptResponse:
    type: object
  puppetCallAddResponse:
    type: object
  puppetCallCancelResponse:
    type: object
  puppetCallHangupResponse:
    type: object
  puppetCallInviteRequest:
    type: object
    properties:
      contactIds:
        type: array
        items:
          type: string
        title: |-
          受邀方 contactId 列表（不含发起方）：单元素 = 1v1 通话，多元素 = 群通话；
          无论几人，一通通话只铸造一个 call_id。
      media:
        $ref: '#/definitions/puppetCallType'
        title: 必填：媒体类型（VOICE/VIDEO），复用既有 CallType；零值 CALL_TYPE_UNKNOWN 会被 server 拒绝
    title: 发起呼叫请求：callId 不由主叫携带，而是由 puppet 实现侧生成并经 CallInviteResponse 返回。
  puppetCallInviteResponse:
    type: object
    properties:
      callId:
        type: string
    title: |-
      CallInvite 响应：
      - call_id 由 puppet 实现侧（协议端）生成并经本响应返回，全链路以此关联控制面与媒体旁路；
      - 上行 EVENT_TYPE_CALL 事件可能先于本响应到达，客户端须容忍乱序；
      - 后续控制 RPC（CallAccept/CallReject/CallCancel/CallHangup）凭此 call_id 引用本通通话。
  puppetCallMediaEndpointResponse:
    type: object
    properties:
      url:
        type: string
        title: 媒体网关协商入口（非媒体流地址本身）
      token:
        type: string
        title: 短时效凭证，绑定 call_id + 本端身份
      expiresAt:
        type: string
        format: date-time
        title: 凭证过期时刻；不设置 = 不过期；过期后重新拉取本 RPC
      protocol:
        type: string
        title: 入口方言（如 whip / livekit / 自定义），由媒体 SDK 消费
  puppetCallPayloadResponse:
    type: object
    properties:
      id:
        type: string
      starter:
        type: string
        title: 发起方 contactId；空串 = 协议端不可知（如中途被拉入者视角）
      participants:
        type: array
        items:
          type: string
        title: 当前全量参与者名册
      media:
        $ref: '#/definitions/puppetCallType'
        title: 当前媒体类型（语音↔视频切换经 dirty 反映）
      startTime:
        type: string
        format: date-time
        title: 通话发起时刻；接通时刻不在此（等于上行 Accept 事件的 timestamp）
      endTime:
        type: string
        format: date-time
        title: 通话结束时刻；未设置 = 通话进行中
  puppetCallRecordPayload:
    type: object
    properties:
      starterId:
        type: string
      participantIds:
        type: array
        items:
          type: string
      length:
        type: integer
        format: int32
      type:
        $ref: '#/definitions/puppetCallType'
      status:
        $ref: '#/definitions/puppetCallStatus'
      callId:
        type: string
        title: 关联控制面 call_id，可空字符串表示历史/未知
  puppetCallRejectResponse:
    type: object
  puppetCallStatus:
    type: string
    enum:
      - CALL_STATUS_UNKNOWN
      - CALL_STATUS_CANCELED
      - CALL_STATUS_REJECTED
      - CALL_STATUS_MISSED
      - CALL_STATUS_ONGOING
      - CALL_STATUS_ENDED
    default: CALL_STATUS_UNKNOWN
    description: |-
      - CALL_STATUS_UNKNOWN: 不明确
       - CALL_STATUS_CANCELED: 自己取消
       - CALL_STATUS_REJECTED: 对方拒接
       - CALL_STATUS_MISSED: 未接
       - CALL_STATUS_ONGOING: 正在通话
       - CALL_STATUS_ENDED: 已结束
    title: 类型枚举
  puppetCallType:
    type: string
    enum:
      - CALL_TYPE_UNKNOWN
      - CALL_TYPE_VOICE
      - CALL_TYPE_VIDEO
    default: CALL_TYPE_UNKNOWN
    title: |-
      - CALL_TYPE_UNKNOWN: 不明确
       - CALL_TYPE_VOICE: 语音
       - CALL_TYPE_VIDEO: 视频
  puppetCancelVerifyCodeResponse:
    type: object
  puppetChannelCardPayload:
    type: object
    properties:
      avatar:
        type: string
        title: 头像
      extras:
        type: string
        title: 额外信息
      nickname:
        type: string
        title: 用户名
      url:
        type: string
        title: 视频号地址
      authIconUrl:
        type: string
        title: 认证图标URL
      authJob:
        type: string
        title: 认证职业
  puppetChannelFeedType:
    type: string
    enum:
      - CHANNEL_FEED_TYPE_UNKNOWN
      - CHANNEL_FEED_TYPE_PHOTO
      - CHANNEL_FEED_TYPE_VIDEO
      - CHANNEL_FEED_TYPE_LIVE
    default: CHANNEL_FEED_TYPE_UNKNOWN
  puppetChannelMedia:
    type: object
    properties:
      mediaType:
        type: integer
        format: int32
        title: 资源类型 2:图片 4:视频
      url:
        type: string
        title: 原始媒体流地址
      thumbUrl:
        type: string
        title: 视频第一帧缩略图地址
      fullCoverUrl:
        type: string
        title: 封面缩略图地址
      coverUrl:
        type: string
        title: 封面地址
      width:
        type: integer
        format: int32
        title: 缩略图宽度，默认 1080
      height:
        type: integer
        format: int32
        title: 缩略图高度，默认 1920
      videoPlayDuration:
        type: integer
        format: int32
        title: 视频播放时长（秒）
    title: 视频号媒体资源，对应接收视频号 finderFeed.mediaList.media
  puppetChannelPayload:
    type: object
    properties:
      avatar:
        type: string
        title: 头像
      coverUrl:
        type: string
        title: 封面地址
      desc:
        type: string
        title: 描述
      extras:
        type: string
        title: 额外信息，暂不明确含义，但传错会导致无法发出（红色感叹号）。应根据收到的视频号的extras字段填入。
      feedType:
        $ref: '#/definitions/puppetChannelFeedType'
        title: 暂不明确含义，目前请固定传4
      nickname:
        type: string
        title: 用户名
      thumbUrl:
        type: string
        title: 缩略图地址
      url:
        type: string
        title: 视频号地址
      objectId:
        type: string
        title: 视频号直播专属
      objectNonceId:
        type: string
      username:
        type: string
        description: 视频号 finder userName
        title: 个微（phoenix）转发视频号所需补充字段，来自接收视频号的 appmsg.finderFeed
      authIconType:
        type: integer
        format: int32
        title: 认证类型
      authIconUrl:
        type: string
        title: 授权图标地址
      fromUserName:
        type: string
        title: 视频号转发自好友 userName
      mediaList:
        type: array
        items:
          type: object
          $ref: '#/definitions/puppetChannelMedia'
        title: 媒体资源列表（图片类视频号可多条）
  puppetChatHistoryContent:
    type: object
    properties:
      type:
        $ref: '#/definitions/puppetChatHistoryContentType'
      text:
        type: string
      fileBox:
        type: string
      location:
        $ref: '#/definitions/puppetLocationPayload'
      urlLink:
        $ref: '#/definitions/puppetUrlLinkPayload'
      miniProgram:
        $ref: '#/definitions/puppetMiniProgramPayload'
      channel:
        $ref: '#/definitions/puppetChannelPayload'
      chatHistory:
        type: array
        items:
          type: object
          $ref: '#/definitions/puppetChatHistoryPayload'
      channelCard:
        $ref: '#/definitions/puppetChannelCardPayload'
  puppetChatHistoryContentType:
    type: string
    enum:
      - TEXT
      - FILE
      - LOCATION
      - URL
      - MINI_PROGRAM
      - CHANNEL
      - CHAT_HISTORY
      - CHANNEL_CARD
    default: TEXT
  puppetChatHistoryPayload:
    type: object
    properties:
      type:
        type: integer
        format: int32
      avatar:
        type: string
      senderName:
        type: string
      corpName:
        type: string
      time:
        type: integer
        format: int32
      title:
        type: string
      message:
        $ref: '#/definitions/puppetChatHistoryContent'
  puppetContactAliasResponse:
    type: object
    properties:
      aliasStringValueDeprecated:
        type: string
        title: DEPRECATED, will be removed after Dec 31, 2022
      alias:
        type: string
  puppetContactAvatarResponse:
    type: object
    properties:
      fileboxStringValueDeprecated:
        type: string
        title: DEPRECATED, will be removed after Dec 31, 2022
      fileBox:
        type: string
  puppetContactCorporationRemarkResponse:
    type: object
  puppetContactDeleteResponse:
    type: object
  puppetContactDescriptionResponse:
    type: object
  puppetContactExternalUserIdPair:
    type: object
    properties:
      contactId:
        type: string
      externalUserId:
        type: string
  puppetContactGender:
    type: string
    enum:
      - CONTACT_GENDER_UNSPECIFIED
      - CONTACT_GENDER_MALE
      - CONTACT_GENDER_FEMALE
    default: CONTACT_GENDER_UNSPECIFIED
    description: |-
      - CONTACT_GENDER_UNSPECIFIED: 不明确
       - CONTACT_GENDER_MALE: 男
       - CONTACT_GENDER_FEMALE: 女
    title: 性别枚举
  puppetContactListResponse:
    type: object
    properties:
      ids:
        type: array
        items:
          type: string
  puppetContactPayloadModifyResponse:
    type: object
  puppetContactPayloadResponse:
    type: object
    properties:
      id:
        type: string
      gender:
        $ref: '#/definitions/puppetContactGender'
        title: 性别
      type:
        $ref: '#/definitions/puppetContactType'
        title: 类型
      name:
        type: string
        title: 姓名
      avatar:
        type: string
        title: 头像
      address:
        type: string
        title: 地址
      alias:
        type: string
        title: 别名，即备注
      city:
        type: string
        title: 城市
      friend:
        type: boolean
        title: 是否为好友
      province:
        type: string
        title: 省份
      signature:
        type: string
        title: 签名
      star:
        type: boolean
        title: 是否为特别好友
      weixin:
        type: string
        description: >-
          *

          Huan(202203): in gRPC, we can freely rename the field name as long as
          the number keep consistent.
           so we can just rename `weixin` to `handle` here.

          (Huan(20220329): use `weixin` for now, until we upgrade to v2.0
           the `wechaty-grpc@1.0.0` will use the latest v1.x automatically when running `npm install`
             which will causing a breaking change.
           @link https://github.com/wechaty/getting-started/issues/254

          TODO: rename `weixin` to `handle` in v2.0.0


          IM专属id，在企微环境中特指weixinId
      corporation:
        type: string
        title: 企业
      title:
        type: string
        title: 头衔
      description:
        type: string
        title: 描述
      coworker:
        type: boolean
        title: 是否为同事
      phones:
        type: array
        items:
          type: string
        title: 电话号码，企微中最多5个
      additionalInfo:
        type: string
        title: 额外信息，是由JS对象stringify得到的字符串，目前支持的内容包含addContactTime、corpId等。
      tagIds:
        type: array
        items:
          type: string
        title: 标签（的id）
      realName:
        type: string
      aka:
        type: string
  puppetContactPhoneResponse:
    type: object
    properties:
      phones:
        type: array
        items:
          type: string
  puppetContactSelfAkaResponse:
    type: object
  puppetContactSelfNameResponse:
    type: object
  puppetContactSelfQRCodeResponse:
    type: object
    properties:
      qrcode:
        type: string
  puppetContactSelfRealNameResponse:
    type: object
  puppetContactSelfRoomAliasResponse:
    type: object
  puppetContactSelfSignatureRequest:
    type: object
    properties:
      signature:
        type: string
  puppetContactSelfSignatureResponse:
    type: object
  puppetContactType:
    type: string
    enum:
      - CONTACT_TYPE_UNSPECIFIED
      - CONTACT_TYPE_PERSONAL
      - CONTACT_TYPE_OFFICIAL
      - CONTACT_TYPE_CORPORATION
      - CONTACT_TYPE_APPLICATION
    default: CONTACT_TYPE_UNSPECIFIED
    description: |-
      - CONTACT_TYPE_UNSPECIFIED: 不明确
       - CONTACT_TYPE_PERSONAL: 个微联系人
       - CONTACT_TYPE_OFFICIAL: 公众号
       - CONTACT_TYPE_CORPORATION: 企微联系人
       - CONTACT_TYPE_APPLICATION: 应用联系人 例如小助手
    title: 类型枚举
  puppetConversationReadResponse:
    type: object
    properties:
      hasRead:
        type: boolean
  puppetCorpMessageInterceptionStrategy:
    type: object
    properties:
      name:
        type: string
      words:
        type: array
        items:
          type: string
      phoneNumber:
        type: boolean
      email:
        type: boolean
      redPacket:
        type: boolean
      type:
        $ref: '#/definitions/puppetCorpMessageInterceptionType'
  puppetCorpMessageInterceptionType:
    type: string
    enum:
      - Interception_Type_Hard
      - Interception_Type_Soft
    default: Interception_Type_Hard
  puppetCreateMessageBroadcastRequest:
    type: object
    properties:
      targetIds:
        type: array
        items:
          type: string
      content:
        $ref: '#/definitions/puppetPostPayloadClient'
  puppetCreateMessageBroadcastResponse:
    type: object
    properties:
      id:
        type: string
  puppetCurrentUserResponse:
    type: object
    properties:
      userId:
        type: string
  puppetDingRequest:
    type: object
    properties:
      data:
        type: string
  puppetDingResponse:
    type: object
    title: |-
      *
       Ding has no return value
        Puppet should emit a `ding` event when it receives a `ding()` call
  puppetDirtyPayloadResponse:
    type: object
  puppetDownloadResponse:
    type: object
    properties:
      chunk:
        type: string
        format: byte
  puppetEnterVerifyCodeResponse:
    type: object
  puppetEventResponse:
    type: object
    properties:
      type:
        $ref: '#/definitions/puppetEventType'
      payload:
        type: string
        description: JSON.stringify({ ... })
        title: 'TODO: Huan(202002) consider to use a PB Map?'
      seq:
        type: integer
        format: int32
  puppetEventType:
    type: string
    enum:
      - EVENT_TYPE_UNSPECIFIED
      - EVENT_TYPE_HEARTBEAT
      - EVENT_TYPE_MESSAGE
      - EVENT_TYPE_DONG
      - EVENT_TYPE_POST
      - EVENT_TYPE_ERROR
      - EVENT_TYPE_FRIENDSHIP
      - EVENT_TYPE_ROOM_INVITE
      - EVENT_TYPE_ROOM_JOIN
      - EVENT_TYPE_ROOM_LEAVE
      - EVENT_TYPE_ROOM_TOPIC
      - EVENT_TYPE_SCAN
      - EVENT_TYPE_READY
      - EVENT_TYPE_RESET
      - EVENT_TYPE_LOGIN
      - EVENT_TYPE_LOGOUT
      - EVENT_TYPE_DIRTY
      - EVENT_TYPE_TAG
      - EVENT_TYPE_TAG_GROUP
      - EVENT_TYPE_POST_COMMENT
      - EVENT_TYPE_POST_TAP
      - EVENT_TYPE_ROOM_ANNOUNCE
      - EVENT_TYPE_VERIFY_CODE
      - EVENT_TYPE_VERIFY_SLIDE
      - EVENT_TYPE_CALL
    default: EVENT_TYPE_UNSPECIFIED
  puppetFriendshipAcceptResponse:
    type: object
  puppetFriendshipAddResponse:
    type: object
  puppetFriendshipPayloadResponse:
    type: object
    properties:
      id:
        type: string
      contactId:
        type: string
        title: 加好友的联系人id
      hello:
        type: string
        title: 加好友的打招呼消息
      type:
        $ref: '#/definitions/puppetFriendshipType'
        title: 好友事件类型
      stranger:
        type: string
        title: 不明确含义，wxwork中未使用
      ticket:
        type: string
        title: 个微遗留字段，wxwork中会传corp_id
      scene:
        $ref: '#/definitions/puppetFriendshipSceneType'
        title: 加好友的场景（例如通过名片添加、通过群添加等），wxwork未使用
  puppetFriendshipSceneType:
    type: string
    enum:
      - FRIENDSHIP_SCENE_TYPE_UNSPECIFIED
      - FRIENDSHIP_SCENE_TYPE_QQ
      - FRIENDSHIP_SCENE_TYPE_EMAIL
      - FRIENDSHIP_SCENE_TYPE_WEIXIN
      - FRIENDSHIP_SCENE_TYPE_QQTBD
      - FRIENDSHIP_SCENE_TYPE_ROOM
      - FRIENDSHIP_SCENE_TYPE_PHONE
      - FRIENDSHIP_SCENE_TYPE_CARD
      - FRIENDSHIP_SCENE_TYPE_LOCATION
      - FRIENDSHIP_SCENE_TYPE_BOTTLE
      - FRIENDSHIP_SCENE_TYPE_SHAKING
      - FRIENDSHIP_SCENE_TYPE_QRCODE
    default: FRIENDSHIP_SCENE_TYPE_UNSPECIFIED
    title: 事件场景 wxwork中未使用
  puppetFriendshipSearchHandleRequest:
    type: object
    properties:
      weixin:
        type: string
        description: >-
          *

          Huan(202203): in gRPC, we can freely rename the field name as long as
          the number keep consistent.
           so we can just rename `weixin` to `handle` here.

          (Huan(20220329): use `weixin` for now, until we upgrade to v2.0
           the `wechaty-grpc@1.0.0` will use the latest v1.x automatically when running `npm install`
             which will causing a breaking change.
           @link https://github.com/wechaty/getting-started/issues/254

          TODO: rename `weixin` to `handle` in v2.0.0
      type:
        $ref: '#/definitions/puppetContactType'
    description: >-
      *

      Huan(202003): we just rename the payload message because gRPC only care
      about the message structure
       (and as long as we keep consistent with the old structure).

       @link https://github.com/wechaty/grpc/pull/173

      Rename:
       1. `FriendshipSearchWeixinRequest`    -> `FriendshipSearchHandleRequest`
       2. `FriendshipSearchWeixinReqsponse`  -> `FriendshipSearchHandleResponse`
  puppetFriendshipSearchHandleResponse:
    type: object
    properties:
      contactIdStringValueDeprecated:
        type: string
        description: DEPRECATED, will be removed after Dec 31, 2022
        title: nullable
      contactId:
        type: string
  puppetFriendshipSearchPhoneResponse:
    type: object
    properties:
      contactIdStringValueDeprecated:
        type: string
        description: DEPRECATED, will be removed after Dec 31, 2022
        title: nullable
      contactId:
        type: string
  puppetFriendshipType:
    type: string
    enum:
      - FRIENDSHIP_TYPE_UNSPECIFIED
      - FRIENDSHIP_TYPE_CONFIRM
      - FRIENDSHIP_TYPE_RECEIVE
      - FRIENDSHIP_TYPE_VERIFY
      - FRIENDSHIP_TYPE_DELETE
      - FRIENDSHIP_TYPE_REMOVED
    default: FRIENDSHIP_TYPE_UNSPECIFIED
    description: |-
      - FRIENDSHIP_TYPE_UNSPECIFIED: 不明确
       - FRIENDSHIP_TYPE_CONFIRM: 确认——双方互加后触发
       - FRIENDSHIP_TYPE_RECEIVE: 收到——收到好友请求后触发
       - FRIENDSHIP_TYPE_VERIFY: 验证——主动加他人为好友时触发，wxwork里暂无此事件
       - FRIENDSHIP_TYPE_DELETE: 删除——主动删除好友时触发
       - FRIENDSHIP_TYPE_REMOVED: 被删除——被他人删除好友时触发
    title: 事件类型
  puppetGetContactExternalUserIdRequest:
    type: object
    properties:
      contactIds:
        type: array
        items:
          type: string
      serviceProviderId:
        type: string
  puppetGetContactExternalUserIdResponse:
    type: object
    properties:
      contactExternalUserIdPairs:
        type: array
        items:
          type: object
          $ref: '#/definitions/puppetContactExternalUserIdPair'
  puppetGetCorpMessageInterceptionStrategiesResponse:
    type: object
    properties:
      strategies:
        type: array
        items:
          type: object
          $ref: '#/definitions/puppetCorpMessageInterceptionStrategy'
  puppetGetMessageBroadcastStatusResponse:
    type: object
    properties:
      status:
        $ref: '#/definitions/puppetBroadcastStatus'
      detail:
        type: array
        items:
          type: object
          $ref: '#/definitions/puppetBroadcastTarget'
  puppetGetMessageBroadcastTargetResponse:
    type: object
    properties:
      contactIds:
        type: array
        items:
          type: string
      roomIds:
        type: array
        items:
          type: string
  puppetGetRoomAntiSpamStrategyEffectRoomListResponse:
    type: object
    properties:
      roomIds:
        type: array
        items:
          type: string
  puppetGetRoomAntiSpamStrategyListResponse:
    type: object
    properties:
      strategies:
        type: array
        items:
          type: object
          $ref: '#/definitions/puppetRoomAntiSpamStrategy'
  puppetImageType:
    type: string
    enum:
      - IMAGE_TYPE_UNSPECIFIED
      - IMAGE_TYPE_THUMBNAIL
      - IMAGE_TYPE_HD
      - IMAGE_TYPE_ARTWORK
    default: IMAGE_TYPE_UNSPECIFIED
  puppetLocationPayload:
    type: object
    properties:
      accuracy:
        type: number
        format: float
        title: 精确度，默认为15
      address:
        type: string
        title: 地址，xx省xx市xx区xx路xx号
      latitude:
        type: number
        format: double
        title: 纬度，北纬为正
      longitude:
        type: number
        format: double
        title: 经度，东经为正
      name:
        type: string
        title: 地址名，例如xx大厦
  puppetLogoutResponse:
    type: object
  puppetMessageBatchForwardRequest:
    type: object
    properties:
      conversationIds:
        type: array
        items:
          type: string
      messageId:
        type: string
      messageIds:
        type: array
        items:
          type: string
      batchTaskId:
        type: string
  puppetMessageBatchForwardResponse:
    type: object
    properties:
      results:
        type: array
        items:
          type: object
          $ref: '#/definitions/puppetMessageBatchForwardResponseResult'
  puppetMessageBatchForwardResponseResult:
    type: object
    properties:
      conversationId:
        type: string
      id:
        type: string
      error:
        type: string
  puppetMessageBatchSendChannelCardRequest:
    type: object
    properties:
      conversationIds:
        type: array
        items:
          type: string
      channelCard:
        $ref: '#/definitions/puppetChannelCardPayload'
      batchTaskId:
        type: string
  puppetMessageBatchSendChannelCardResponse:
    type: object
    properties:
      results:
        type: array
        items:
          type: object
          $ref: '#/definitions/puppetMessageBatchSendChannelCardResponseResult'
  puppetMessageBatchSendChannelCardResponseResult:
    type: object
    properties:
      conversationId:
        type: string
      id:
        type: string
      error:
        type: string
  puppetMessageBatchSendChannelRequest:
    type: object
    properties:
      conversationIds:
        type: array
        items:
          type: string
      channel:
        $ref: '#/definitions/puppetChannelPayload'
      batchTaskId:
        type: string
  puppetMessageBatchSendChannelResponse:
    type: object
    properties:
      results:
        type: array
        items:
          type: object
          $ref: '#/definitions/puppetMessageBatchSendChannelResponseResult'
  puppetMessageBatchSendChannelResponseResult:
    type: object
    properties:
      conversationId:
        type: string
      id:
        type: string
      error:
        type: string
  puppetMessageBatchSendContactRequest:
    type: object
    properties:
      conversationIds:
        type: array
        items:
          type: string
      contactId:
        type: string
      batchTaskId:
        type: string
  puppetMessageBatchSendContactResponse:
    type: object
    properties:
      results:
        type: array
        items:
          type: object
          $ref: '#/definitions/puppetMessageBatchSendContactResponseResult'
  puppetMessageBatchSendContactResponseResult:
    type: object
    properties:
      conversationId:
        type: string
      id:
        type: string
      error:
        type: string
  puppetMessageBatchSendFileRequest:
    type: object
    properties:
      conversationIds:
        type: array
        items:
          type: string
      fileBox:
        type: string
      batchTaskId:
        type: string
  puppetMessageBatchSendFileResponse:
    type: object
    properties:
      results:
        type: array
        items:
          type: object
          $ref: '#/definitions/puppetMessageBatchSendFileResponseResult'
  puppetMessageBatchSendFileResponseResult:
    type: object
    properties:
      conversationId:
        type: string
      id:
        type: string
      error:
        type: string
  puppetMessageBatchSendLocationRequest:
    type: object
    properties:
      conversationIds:
        type: array
        items:
          type: string
      location:
        $ref: '#/definitions/puppetLocationPayload'
      batchTaskId:
        type: string
  puppetMessageBatchSendLocationResponse:
    type: object
    properties:
      results:
        type: array
        items:
          type: object
          $ref: '#/definitions/puppetMessageBatchSendLocationResponseResult'
  puppetMessageBatchSendLocationResponseResult:
    type: object
    properties:
      conversationId:
        type: string
      id:
        type: string
      error:
        type: string
  puppetMessageBatchSendMiniProgramRequest:
    type: object
    properties:
      conversationIds:
        type: array
        items:
          type: string
      miniProgram:
        $ref: '#/definitions/puppetMiniProgramPayload'
      batchTaskId:
        type: string
  puppetMessageBatchSendMiniProgramResponse:
    type: object
    properties:
      results:
        type: array
        items:
          type: object
          $ref: '#/definitions/puppetMessageBatchSendMiniProgramResponseResult'
  puppetMessageBatchSendMiniProgramResponseResult:
    type: object
    properties:
      conversationId:
        type: string
      id:
        type: string
      error:
        type: string
  puppetMessageBatchSendTextRequest:
    type: object
    properties:
      conversationIds:
        type: array
        items:
          type: string
      text:
        type: string
      batchTaskId:
        type: string
  puppetMessageBatchSendTextResponse:
    type: object
    properties:
      results:
        type: array
        items:
          type: object
          $ref: '#/definitions/puppetMessageBatchSendTextResponseResult'
  puppetMessageBatchSendTextResponseResult:
    type: object
    properties:
      conversationId:
        type: string
      id:
        type: string
      error:
        type: string
  puppetMessageBatchSendUrlRequest:
    type: object
    properties:
      conversationIds:
        type: array
        items:
          type: string
      urlLink:
        $ref: '#/definitions/puppetUrlLinkPayload'
      batchTaskId:
        type: string
  puppetMessageBatchSendUrlResponse:
    type: object
    properties:
      results:
        type: array
        items:
          type: object
          $ref: '#/definitions/puppetMessageBatchSendUrlResponseResult'
  puppetMessageBatchSendUrlResponseResult:
    type: object
    properties:
      conversationId:
        type: string
      id:
        type: string
      error:
        type: string
  puppetMessageCallRecordResponse:
    type: object
    properties:
      callRecord:
        $ref: '#/definitions/puppetCallRecordPayload'
  puppetMessageChannelCardResponse:
    type: object
    properties:
      channelCard:
        $ref: '#/definitions/puppetChannelCardPayload'
  puppetMessageChannelResponse:
    type: object
    properties:
      channel:
        $ref: '#/definitions/puppetChannelPayload'
  puppetMessageChatHistoryResponse:
    type: object
    properties:
      chatHistoryList:
        type: array
        items:
          type: object
          $ref: '#/definitions/puppetChatHistoryPayload'
  puppetMessageContactResponse:
    type: object
    properties:
      id:
        type: string
  puppetMessageFileRequest:
    type: object
    properties:
      id:
        type: string
  puppetMessageFileResponse:
    type: object
    properties:
      fileBox:
        type: string
  puppetMessageForwardResponse:
    type: object
    properties:
      idStringValueDeprecated:
        type: string
        description: Deprecated after Sep 31, 2021, will be removed after Dec 31, 2022
        title: |-
          *
          @deprecated: use payload instead.
           Huan(202109): Wrapper types must not be used going forward.
             https://cloud.google.com/apis/design/design_patterns#optional_primitive_fields
      id:
        type: string
  puppetMessageImageRequest:
    type: object
    properties:
      id:
        type: string
      type:
        $ref: '#/definitions/puppetImageType'
        title: 获取图片的类型（缩略图、原图）
  puppetMessageImageResponse:
    type: object
    properties:
      fileBox:
        type: string
  puppetMessageLocationResponse:
    type: object
    properties:
      location:
        $ref: '#/definitions/puppetLocationPayload'
  puppetMessageMiniProgramResponse:
    type: object
    properties:
      miniProgramDeprecated:
        type: string
        description: >-
          deprecated after Sep 31, 2021, remove compatible code after Dec 31,
          2022
        title: |-
          *
          Huan(202110): We should use payload instead of JSON.stringify string
           The compatible code will be removed after Dec 31, 2022
      miniProgram:
        $ref: '#/definitions/puppetMiniProgramPayload'
  puppetMessagePayloadResponse:
    type: object
    properties:
      id:
        type: string
      filename:
        type: string
        title: 文件名
      text:
        type: string
        title: 文本内容
      timestampDeprecated:
        type: string
        format: uint64
        title: |-
          *
          @deprecated will be removed after Dec 31, 2022
           Huan(202109): use receive_time(10) instead
      type:
        $ref: '#/definitions/puppetMessageType'
        title: 类型
      talkerId:
        type: string
        title: 发送者id
      roomId:
        type: string
        title: 群聊id
      listenerId:
        type: string
        title: 接受者id
      mentionIds:
        type: array
        items:
          type: string
        title: 群消息@人的id列表
      receiveTime:
        type: string
        format: date-time
        title: 收到消息时间
      quoteId:
        type: string
        title: 被引用的消息id
      additionalInfo:
        type: string
      textContents:
        type: array
        items:
          type: object
          $ref: '#/definitions/puppetTextContent'
  puppetMessagePreviewResponse:
    type: object
    properties:
      fileBox:
        type: string
  puppetMessageRecallResponse:
    type: object
    properties:
      success:
        type: boolean
  puppetMessageSendChannelCardResponse:
    type: object
    properties:
      id:
        type: string
  puppetMessageSendChannelResponse:
    type: object
    properties:
      id:
        type: string
  puppetMessageSendContactResponse:
    type: object
    properties:
      idStringValueDeprecated:
        type: string
        description: Deprecated after Sep 31, 2021, will be removed after Dec 31, 2022
        title: |-
          *
          @deprecated:
           Huan(202109): Wrapper types must not be used going forward.
             https://cloud.google.com/apis/design/design_patterns#optional_primitive_fields
      id:
        type: string
  puppetMessageSendFileRequest:
    type: object
    properties:
      conversationId:
        type: string
        title: 对话id
      fileBox:
        type: string
        title: 发送文件的fileBox.toJSON()
  puppetMessageSendFileResponse:
    type: object
    properties:
      idStringValueDeprecated:
        type: string
        description: Deprecated after Sep 31, 2021, will be removed after Dec 31, 2022
        title: |-
          *
          @deprecated:
           Huan(202109): Wrapper types must not be used going forward.
             https://cloud.google.com/apis/design/design_patterns#optional_primitive_fields
      id:
        type: string
  puppetMessageSendLocationResponse:
    type: object
    properties:
      id:
        type: string
        title: >-
          *

          Huan(202110): we will not use wrappers any more by following the
          Google Style Guide:
           If not using optional would add complexity or ambiguity, then use optional primitive fields,
           Wrapper types must not be used going forward.
           — Optional Primitive Fields (https://cloud.google.com/apis/design/design_patterns.md#optional-primitive-fields)
  puppetMessageSendMiniProgramResponse:
    type: object
    properties:
      idStringValueDeprecated:
        type: string
        description: Deprecated after Sep 31, 2021, will be removed after Dec 31, 2022
        title: |-
          *
          @deprecated:
           Huan(202109): Wrapper types must not be used going forward.
             https://cloud.google.com/apis/design/design_patterns#optional_primitive_fields
      id:
        type: string
  puppetMessageSendPostResponse:
    type: object
    properties:
      id:
        type: string
  puppetMessageSendTextResponse:
    type: object
    properties:
      idStringValueDeprecated:
        type: string
        description: Deprecated after Sep 31, 2021, will be removed after Dec 31, 2022
        title: |-
          *
          @deprecated:
           Huan(202109): Wrapper types must not be used going forward.
             https://cloud.google.com/apis/design/design_patterns#optional_primitive_fields
      id:
        type: string
  puppetMessageSendUrlResponse:
    type: object
    properties:
      idStringValueDeprecated:
        type: string
        description: Deprecated after Sep 31, 2021, will be removed after Dec 31, 2022
        title: |-
          *
          @deprecated:
           Huan(202109): Wrapper types must not be used going forward.
             https://cloud.google.com/apis/design/design_patterns#optional_primitive_fields
      id:
        type: string
  puppetMessageType:
    type: string
    enum:
      - MESSAGE_TYPE_UNSPECIFIED
      - MESSAGE_TYPE_ATTACHMENT
      - MESSAGE_TYPE_AUDIO
      - MESSAGE_TYPE_CONTACT
      - MESSAGE_TYPE_CHAT_HISTORY
      - MESSAGE_TYPE_EMOTCION
      - MESSAGE_TYPE_IMAGE
      - MESSAGE_TYPE_TEXT
      - MESSAGE_TYPE_LOCATION
      - MESSAGE_TYPE_MINI_PROGRAM
      - MESSAGE_TYPE_GROUP_NOTE
      - MESSAGE_TYPE_TRANSFER
      - MESSAGE_TYPE_RED_ENVELOPE
      - MESSAGE_TYPE_RECALLED
      - MESSAGE_TYPE_URL
      - MESSAGE_TYPE_VIDEO
      - MESSAGE_TYPE_POST
      - MESSAGE_TYPE_CHANNEL
      - MESSAGE_TYPE_SYSTEM
      - MESSAGE_TYPE_MARKDOWN
      - MESSAGE_TYPE_CALL_RECORD
      - MESSAGE_TYPE_CHANNEL_CARD
    default: MESSAGE_TYPE_UNSPECIFIED
    description: |-
      - MESSAGE_TYPE_ATTACHMENT: 文件消息
       - MESSAGE_TYPE_AUDIO: 音频
       - MESSAGE_TYPE_CONTACT: 名片
       - MESSAGE_TYPE_CHAT_HISTORY: 聊天记录，wxwork暂不支持
       - MESSAGE_TYPE_EMOTCION: 表情
       - MESSAGE_TYPE_IMAGE: 图片
       - MESSAGE_TYPE_TEXT: 文本
       - MESSAGE_TYPE_LOCATION: 地址
       - MESSAGE_TYPE_MINI_PROGRAM: 小程序
       - MESSAGE_TYPE_GROUP_NOTE: 群接龙消息，wxwork中没有
       - MESSAGE_TYPE_TRANSFER: 转账，wxwork中没有
       - MESSAGE_TYPE_RED_ENVELOPE: 红包，wxwork中没有
       - MESSAGE_TYPE_RECALLED: 撤回
       - MESSAGE_TYPE_URL: 链接
       - MESSAGE_TYPE_VIDEO: 视频
       - MESSAGE_TYPE_POST: 特殊的复合类型，wxwork中没有
       - MESSAGE_TYPE_CHANNEL: 视频号
       - MESSAGE_TYPE_SYSTEM: 系统消息
       - MESSAGE_TYPE_MARKDOWN: MarkDown
       - MESSAGE_TYPE_CALL_RECORD: 通话记录
       - MESSAGE_TYPE_CHANNEL_CARD: 视频号名片
    title: 消息类型
  puppetMessageUrlResponse:
    type: object
    properties:
      urlLinkDeprecated:
        type: string
        description: >-
          deprecated after Sep 31, 2021, remove compatible code after Dec 31,
          2022
        title: |-
          *
          Huan(202110): We should use payload instead of JSON.stringify string
           The compatible code will be removed after Dec 31, 2022
      urlLink:
        $ref: '#/definitions/puppetUrlLinkPayload'
  puppetMessageVoiceRequest:
    type: object
    properties:
      id:
        type: string
  puppetMessageVoiceResponse:
    type: object
    properties:
      fileBox:
        type: string
  puppetMessageVoiceTextRequest:
    type: object
    properties:
      id:
        type: string
  puppetMessageVoiceTextResponse:
    type: object
    properties:
      text:
        type: string
      noSpeech:
        type: boolean
  puppetMiniProgramPayload:
    type: object
    properties:
      appid:
        type: string
        title: appId，形式如wx4ff94de0d8038c25
      description:
        type: string
        title: 描述(副标题)
      pagePath:
        type: string
        title: 访问路径
      iconUrl:
        type: string
        title: 图标路径
      shareId:
        type: string
        title: 发送小程序的用户id，可不填
      thumbUrl:
        type: string
        title: 缩略图路径
      title:
        type: string
        title: 标题
      username:
        type: string
        title: 关联公众号id，形式gh_69105b80ea75@app
      thumbKey:
        type: string
        title: 缩略图的key，可不填
  puppetMomentCoverageRequest:
    type: object
    properties:
      fileBox:
        type: string
  puppetMomentCoverageResponse:
    type: object
    properties:
      fileBox:
        type: string
  puppetMomentPublishRequest:
    type: object
    properties:
      post:
        $ref: '#/definitions/puppetPostPayloadClient'
  puppetMomentPublishResponse:
    type: object
    properties:
      momentId:
        type: string
  puppetMomentSignatureRequest:
    type: object
    properties:
      text:
        type: string
  puppetMomentSignatureResponse:
    type: object
    properties:
      text:
        type: string
  puppetMomentUnpublishResponse:
    type: object
  puppetMomentVisibleListResponse:
    type: object
    properties:
      contactIds:
        type: array
        items:
          type: string
  puppetOptionalBoolean:
    type: string
    enum:
      - BOOL_UNSET
      - BOOL_FALSE
      - BOOL_TRUE
    default: BOOL_UNSET
  puppetPayloadType:
    type: string
    enum:
      - PAYLOAD_TYPE_UNSPECIFIED
      - PAYLOAD_TYPE_MESSAGE
      - PAYLOAD_TYPE_CONTACT
      - PAYLOAD_TYPE_ROOM
      - PAYLOAD_TYPE_ROOM_MEMBER
      - PAYLOAD_TYPE_FRIENDSHIP
      - PAYLOAD_TYPE_POST
      - PAYLOAD_TYPE_TAG
      - PAYLOAD_TYPE_TAG_GROUP
      - PAYLOAD_TYPE_WXXD_PRODUCT
      - PAYLOAD_TYPE_WXXD_ORDER
      - PAYLOAD_TYPE_CALL
    default: PAYLOAD_TYPE_UNSPECIFIED
    title: 数值必须与 @juzi/wechaty-puppet 的 DirtyType 严格一致。
  puppetPostPayloadClient:
    type: object
    properties:
      parentId:
        type: string
        title: 转发的上一级id,评论时如果是回复，则是回复的评论的id，否则是朋友圈的id
      rootId:
        type: string
        title: 转发的根id，评论时应该是朋友圈的id
      type:
        $ref: '#/definitions/puppetPostType'
      sayableList:
        type: array
        items:
          type: object
          $ref: '#/definitions/puppetPostSayable'
      visibleList:
        type: array
        items:
          type: string
      location:
        $ref: '#/definitions/puppetLocationPayload'
  puppetPostPayloadRequest:
    type: object
    properties:
      postId:
        type: string
  puppetPostPayloadResponse:
    type: object
    properties:
      post:
        $ref: '#/definitions/puppetPostPayloadServer'
  puppetPostPayloadSayableRequest:
    type: object
    properties:
      postId:
        type: string
      sayableId:
        type: string
  puppetPostPayloadSayableResponse:
    type: object
    properties:
      sayable:
        $ref: '#/definitions/puppetPostSayable'
  puppetPostPayloadServer:
    type: object
    properties:
      parentId:
        type: string
        title: 转发的上一级id
      rootId:
        type: string
        title: 转发的根id
      type:
        $ref: '#/definitions/puppetPostType'
      sayableList:
        type: array
        items:
          type: object
          $ref: '#/definitions/puppetPostSayable'
      contactId:
        type: string
      timestamp:
        type: string
        format: date-time
      children:
        type: integer
        format: int32
        title: counters 计数器
      descendant:
        type: integer
        format: int32
      like:
        type: integer
        format: int32
      visibleList:
        type: array
        items:
          type: string
      location:
        $ref: '#/definitions/puppetLocationPayload'
  puppetPostSayable:
    type: object
    properties:
      type:
        $ref: '#/definitions/puppetSayableType'
      id:
        type: string
        title: 服务器端获取的Post只传回id，异步进行获取
      text:
        type: string
      fileBox:
        type: string
        title: FileBox.toJSON()
      urlLink:
        $ref: '#/definitions/puppetUrlLinkPayload'
      channel:
        $ref: '#/definitions/puppetChannelPayload'
      miniProgram:
        $ref: '#/definitions/puppetMiniProgramPayload'
      mentionIdList:
        type: array
        items:
          type: string
        title: 文本类型的sayable可传，朋友圈暂不支持
  puppetPostTapRequest:
    type: object
    properties:
      postId:
        type: string
      type:
        $ref: '#/definitions/puppetTapType'
      tap:
        type: boolean
        title: 点赞还是取消
  puppetPostTapResponse:
    type: object
    properties:
      tap:
        type: boolean
  puppetPostType:
    type: string
    enum:
      - POST_TYPE_UNSPECIFIED
      - POST_TYPE_MOMENT
      - POST_TYPE_CHANNEL
      - POST_TYPE_MESSAGE
      - POST_TYPE_BROADCAST
      - POST_TYPE_TEXT_BUTTON
      - POST_TYPE_GOODS_CARD
    default: POST_TYPE_UNSPECIFIED
    title: |-
      - POST_TYPE_MOMENT: 朋友圈
       - POST_TYPE_CHANNEL: 视频号——原始设计走post，实际目前采用message
       - POST_TYPE_MESSAGE: 消息——富媒体消息
       - POST_TYPE_BROADCAST: 群发
       - POST_TYPE_TEXT_BUTTON: puppet-mini 按钮消息
       - POST_TYPE_GOODS_CARD: puppet-mini 商品消息
  puppetReferrer:
    type: object
    properties:
      contactId:
        type: string
      roomId:
        type: string
    title: >-
      *

      "Referrer" and "Referral" refers to different things. "Referrer" is
      something or somebody who refers. "Referral" is the act of referring.
       - https://english.stackexchange.com/questions/33135/referrer-versus-referral-versus-referer
  puppetRefreshQRCodeRequest:
    type: object
  puppetRoomAddResponse:
    type: object
  puppetRoomAddV2Response:
    type: object
    properties:
      successIds:
        type: array
        items:
          type: string
      failedIds:
        type: array
        items:
          type: string
      failedReasons:
        type: array
        items:
          type: string
  puppetRoomAdminsResponse:
    type: object
  puppetRoomAnnounceResponse:
    type: object
    properties:
      textStringValueDeprecated:
        type: string
        title: DEPRECATED, will be removed after Dec 31, 2022
      text:
        type: string
  puppetRoomAntiSpamStrategy:
    type: object
    properties:
      id:
        type: string
      name:
        type: string
  puppetRoomAvatarResponse:
    type: object
    properties:
      fileBox:
        type: string
  puppetRoomCreateRequest:
    type: object
    properties:
      contactIds:
        type: array
        items:
          type: string
        title: 初始群成员id
      topic:
        type: string
        title: 群名称
  puppetRoomCreateResponse:
    type: object
    properties:
      id:
        type: string
  puppetRoomDelResponse:
    type: object
  puppetRoomDelV2Response:
    type: object
    properties:
      successIds:
        type: array
        items:
          type: string
      failedIds:
        type: array
        items:
          type: string
      failedReasons:
        type: array
        items:
          type: string
  puppetRoomDismissResponse:
    type: object
  puppetRoomInvitationAcceptByQRCodeResponse:
    type: object
    properties:
      roomId:
        type: string
      chatId:
        type: string
  puppetRoomInvitationAcceptResponse:
    type: object
  puppetRoomInvitationPayloadResponse:
    type: object
    properties:
      id:
        type: string
      inviterId:
        type: string
        title: 邀请者id
      topic:
        type: string
        title: 群名称
      memberCount:
        type: integer
        format: int32
        title: 群成员数量
      memberIds:
        type: array
        items:
          type: string
        title: 群成员id列表
      timestampUint64Deprecated:
        type: string
        format: uint64
        description: 'Deprecated: will be removed after Dec 31, 2022'
        title: |-
          *
          @deprecated will be removed after Dec 31, 2022
           Huan(202109): use receive_time(10) instead
      avatar:
        type: string
        title: 群头像
      invitation:
        type: string
        title: 在企微中为群邀请的链接地址
      receiverId:
        type: string
        title: 收到群邀请的成员id
      receiveTime:
        type: string
        format: date-time
        title: 时间戳
  puppetRoomListResponse:
    type: object
    properties:
      ids:
        type: array
        items:
          type: string
  puppetRoomMemberJoinSceneType:
    type: string
    enum:
      - ROOM_MEMBER_JOIN_SCENE_TYPE_UNKNOWN
      - ROOM_MEMBER_JOIN_SCENE_TYPE_ADD
      - ROOM_MEMBER_JOIN_SCENE_TYPE_INVITE_LINK
      - ROOM_MEMBER_JOIN_SCENE_TYPE_QRCODE
      - ROOM_MEMBER_JOIN_SCENE_TYPE_OTHER
    default: ROOM_MEMBER_JOIN_SCENE_TYPE_UNKNOWN
    title: 类型枚举
  puppetRoomMemberListResponse:
    type: object
    properties:
      memberIds:
        type: array
        items:
          type: string
  puppetRoomMemberPayloadResponse:
    type: object
    properties:
      id:
        type: string
      roomAlias:
        type: string
        title: 联系人在群内的别名（群备注）
      inviterId:
        type: string
        title: 邀请者id
      avatar:
        type: string
        title: 头像
      name:
        type: string
        title: 名称
      additionalInfo:
        type: string
      joinTime:
        type: number
        format: double
      joinScene:
        $ref: '#/definitions/puppetRoomMemberJoinSceneType'
  puppetRoomOwnerTransferResponse:
    type: object
  puppetRoomParseDynamicQRCodeResponse:
    type: object
    properties:
      qrcode:
        type: string
        title: 二维码url
      qrcodeImageUrl:
        type: string
        title: 二维码图片url
      roomName:
        type: string
        title: 群名称
  puppetRoomPayloadResponse:
    type: object
    properties:
      id:
        type: string
      topic:
        type: string
        title: 群名称
      avatar:
        type: string
        title: 群头像
      ownerId:
        type: string
        title: 群主id
      adminIds:
        type: array
        items:
          type: string
        title: 群管理员id列表
      memberIds:
        type: array
        items:
          type: string
        title: 群成员id列表
      handle:
        type: string
        title: IM内部id，企微中为群的chat_id
      additionalInfo:
        type: string
      roomRemark:
        type: string
      external:
        type: boolean
      createTime:
        type: string
        format: date-time
  puppetRoomPermissionResponse:
    type: object
    properties:
      inviteConfirm:
        $ref: '#/definitions/puppetOptionalBoolean'
      adminOnlyManage:
        $ref: '#/definitions/puppetOptionalBoolean'
      adminOnlyAtAll:
        $ref: '#/definitions/puppetOptionalBoolean'
      muteAll:
        $ref: '#/definitions/puppetOptionalBoolean'
      forbidRoomTopicEdit:
        $ref: '#/definitions/puppetOptionalBoolean'
      disableMemberMutualAdd:
        $ref: '#/definitions/puppetOptionalBoolean'
  puppetRoomQRCodeResponse:
    type: object
    properties:
      qrcode:
        type: string
  puppetRoomQuitResponse:
    type: object
  puppetRoomRemarkResponse:
    type: object
  puppetRoomTopicResponse:
    type: object
    properties:
      topicStringValueDeprecated:
        type: string
        title: DEPRECATED, will be removed after Dec 31, 2022
      topic:
        type: string
  puppetSayableType:
    type: string
    enum:
      - SAYABLE_TYPE_TEXT
      - SAYABLE_TYPE_FILE
      - SAYABLE_TYPE_URL
      - SAYABLE_TYPE_CHANNEL
      - SAYABLE_TYPE_MINIPROGRAM
    default: SAYABLE_TYPE_TEXT
  puppetStartResponse:
    type: object
  puppetStopResponse:
    type: object
  puppetTagContactTagAddRequest:
    type: object
    properties:
      tagIds:
        type: array
        items:
          type: string
        title: 要打的标签的id列表
      contactIds:
        type: array
        items:
          type: string
        title: 要打标签的联系人id列表
  puppetTagContactTagAddResponse:
    type: object
  puppetTagContactTagListResponse:
    type: object
    properties:
      tagIds:
        type: array
        items:
          type: string
  puppetTagContactTagRemoveRequest:
    type: object
    properties:
      tagIds:
        type: array
        items:
          type: string
      contactIds:
        type: array
        items:
          type: string
  puppetTagContactTagRemoveResponse:
    type: object
  puppetTagGroupAddRequest:
    type: object
    properties:
      tagGroupName:
        type: string
  puppetTagGroupAddResponse:
    type: object
    properties:
      tagGroupId:
        type: string
  puppetTagGroupDeleteRequest:
    type: object
    properties:
      tagGroupId:
        type: string
  puppetTagGroupDeleteResponse:
    type: object
  puppetTagGroupListResponse:
    type: object
    properties:
      tagGroupIds:
        type: array
        items:
          type: string
  puppetTagGroupPayloadRequest:
    type: object
    properties:
      groupId:
        type: string
  puppetTagGroupPayloadResponse:
    type: object
    properties:
      payload:
        $ref: '#/definitions/wechatyPuppetTagGroupPayload'
  puppetTagGroupTagListResponse:
    type: object
    properties:
      tagIds:
        type: array
        items:
          type: string
  puppetTagPayloadRequest:
    type: object
    properties:
      tagId:
        type: string
  puppetTagPayloadResponse:
    type: object
    properties:
      payload:
        $ref: '#/definitions/wechatyPuppetTagPayload'
  puppetTagTagAddRequest:
    type: object
    properties:
      deprecatedTagName:
        type: string
      tagGroupId:
        type: string
      tagName:
        type: array
        items:
          type: string
  puppetTagTagAddResponse:
    type: object
    properties:
      deprecatedTagId:
        type: string
      tagInfo:
        type: array
        items:
          type: object
          $ref: '#/definitions/puppetTagTagInfo'
  puppetTagTagContactListResponse:
    type: object
    properties:
      contactIds:
        type: array
        items:
          type: string
  puppetTagTagDeleteRequest:
    type: object
    properties:
      deprecatedTagId:
        type: string
      tagId:
        type: array
        items:
          type: string
  puppetTagTagDeleteResponse:
    type: object
  puppetTagTagInfo:
    type: object
    properties:
      tagId:
        type: string
      tagName:
        type: string
  puppetTagTagListResponse:
    type: object
    properties:
      tagIds:
        type: array
        items:
          type: string
  puppetTagTagModifyRequest:
    type: object
    properties:
      deprecatedTagId:
        type: string
      deprecatedTagNewName:
        type: string
      tagNewInfo:
        type: array
        items:
          type: object
          $ref: '#/definitions/puppetTagTagInfo'
  puppetTagTagModifyResponse:
    type: object
    properties:
      deprecatedTagId:
        type: string
      deprecatedTagName:
        type: string
      tagInfo:
        type: array
        items:
          type: object
          $ref: '#/definitions/puppetTagTagInfo'
  puppetTagType:
    type: string
    enum:
      - Unspecific
      - PERSONAL
      - CORPORATION
    default: Unspecific
    title: |-
      - PERSONAL: 个人标签
       - CORPORATION: 企业标签
  puppetTapType:
    type: string
    enum:
      - TAP_TYPE_UNSPECIFIED
      - TAP_TYPE_LIKE
    default: TAP_TYPE_UNSPECIFIED
  puppetTextContent:
    type: object
    properties:
      type:
        $ref: '#/definitions/puppetTextContentType'
      text:
        type: string
      data:
        $ref: '#/definitions/puppetTextContentData'
  puppetTextContentData:
    type: object
    properties:
      contactId:
        type: string
  puppetTextContentType:
    type: string
    enum:
      - TEXT_CONTENT_TYPE_REGULAR
      - TEXT_CONTENT_TYPE_AT
    default: TEXT_CONTENT_TYPE_REGULAR
  puppetUploadRequest:
    type: object
    properties:
      chunk:
        type: string
        format: byte
  puppetUploadResponse:
    type: object
    properties:
      id:
        type: string
  puppetUrlLinkPayload:
    type: object
    properties:
      description:
        type: string
        title: 描述
      thumbnailUrl:
        type: string
        title: 缩略图地址
      title:
        type: string
        title: 标题
      url:
        type: string
        title: 文章地址
  puppetVersionResponse:
    type: object
    properties:
      version:
        type: string
  rpcStatus:
    type: object
    properties:
      code:
        type: integer
        format: int32
      message:
        type: string
      details:
        type: array
        items:
          type: object
          $ref: '#/definitions/protobufAny'
  wechatyPuppetTagGroupPayload:
    type: object
    properties:
      id:
        type: string
      name:
        type: string
      type:
        $ref: '#/definitions/puppetTagType'
  wechatyPuppetTagPayload:
    type: object
    properties:
      id:
        type: string
      name:
        type: string
        title: 标签名
      groupId:
        type: string
        title: 所属标签组的id，可为空
      type:
        $ref: '#/definitions/puppetTagType'

