Skip to content

ContactAttachment теряет vcf_info и max_info — Max API оборачивает их в "payload" #28

@IlyaUhlianitsa

Description

@IlyaUhlianitsa

Проблема

Когда пользователь делится контактом через кнопку request_contact, ContactAttachment десериализуется со всеми полями данных в null (VcfInfo, MaxInfo, PhoneNumber, FullName), хотя Type="contact" заполнен корректно.

Корневая причина

Реальный Max API оборачивает данные контакта в объект payload:

{
  "type": "contact",
  "payload": {
    "vcf_info": "BEGIN:VCARD\nTEL:+...\nEND:VCARD",
    "max_info": { "user_id": 123, "first_name": "..." }
  }
}

Но начиная с версии 0.5.2-alpha (изменение «flat attachments») ContactAttachment читает vcf_info и max_info напрямую с корня аттача, поэтому они остаются null.

Доказательство, что реальный API использует nested формат

Официальный Go SDK от команды Max — max-messenger/max-bot-api-client-go — описывает схему так:

type ContactAttachment struct {
    Attachment
    Payload ContactAttachmentPayload \`json:"payload"\`
}
type ContactAttachmentPayload struct {
    VcfInfo string \`json:"vcf_info,omitempty"\`
    TamInfo *User  \`json:"max_info"\`
}

То есть данные находятся внутри payload. Мы также захватили реальный ответ /updates через runtime debugger — формат тот же.

Шаги воспроизведения

  1. Отправить сообщение с InlineKeyboard, содержащим кнопку с Type = ButtonType.RequestContact.
  2. Нажать на кнопку в реальном Max-клиенте и поделиться контактом.
  3. Проверить message.Body.Attachments[0] — это ContactAttachment, у которого все поля null, кроме Type.

Заявление 0.5.2-alpha «все attachment-модели переведены на плоский формат» вероятно справедливо для photo/video/audio/document — но для contact это не так; реальный API использует nested.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions