/* * TamTam Bot API */ package tamtam import "encoding/json" type ActionRequestBody struct { Action SenderAction `json:"action"` } type AttachmentType string const ( AttachmentImage AttachmentType = "image" AttachmentVideo = "video" AttachmentAudio = "audio" AttachmentFile = "file" AttachmentContact = "contact" AttachmentSticker = "sticker" AttachmentShare = "share" AttachmentLocation = "location" AttachmentKeyboard = "inline_keyboard" ) // Generic schema representing message attachment type Attachment struct { Type AttachmentType `json:"type,omitempty"` } type AttachmentPayload struct { // Media attachment URL Url string `json:"url"` } // Request to attach some data to message type AttachmentRequest struct { Type string `json:"type,omitempty"` } type AudioAttachment struct { Type string `json:"type,omitempty"` Payload AttachmentPayload `json:"payload"` } // Request to attach audio to message. MUST be the only attachment in message type AudioAttachmentRequest struct { Type string `json:"type,omitempty"` Payload UploadedInfo `json:"payload"` } // You will receive this update when bot has been added to chat type BotAddedToChatUpdate struct { UpdateType string `json:"update_type,omitempty"` // Unix-time when event has occured Timestamp int64 `json:"timestamp"` // Chat id where bot was added ChatId int64 `json:"chat_id"` // User id who added bot to chat UserId int64 `json:"user_id"` } // You will receive this update when bot has been removed from chat type BotRemovedFromChatUpdate struct { UpdateType string `json:"update_type,omitempty"` // Unix-time when event has occured Timestamp int64 `json:"timestamp"` // Chat identifier bot removed from ChatId int64 `json:"chat_id"` // User id who removed bot from chat UserId int64 `json:"user_id"` } // Bot gets this type of update as soon as user pressed `Start` button type BotStartedUpdate struct { UpdateType string `json:"update_type,omitempty"` // Unix-time when event has occured Timestamp int64 `json:"timestamp"` // Dialog identifier where event has occurred ChatId int64 `json:"chat_id"` // User pressed the 'Start' button UserId int64 `json:"user_id"` } type Button struct { Type string `json:"type,omitempty"` // Visible text of button Text string `json:"text"` // Intent of button. Affects clients representation. Intent Intent `json:"intent"` } // Object sent to bot when user presses button type Callback struct { // Unix-time when user pressed the button Timestamp int64 `json:"timestamp"` // Current keyboard identifier CallbackId string `json:"callback_id"` // Button payload Payload string `json:"payload"` // User pressed the button User User `json:"user"` } // Send this object when your bot wants to react to when a button is pressed type CallbackAnswer struct { UserId int64 `json:"user_id,omitempty"` // Fill this if you want to modify current message Message NewMessageBody `json:"message,omitempty"` // Fill this if you just want to send one-time notification to user Notification string `json:"notification,omitempty"` } // After pressing this type of button client sends to server payload it contains type CallbackButton struct { Type string `json:"type,omitempty"` // Visible text of button Text string `json:"text"` // Intent of button. Affects clients representation. Intent Intent `json:"intent"` // Button payload Payload string `json:"payload"` } type Chat struct { // Chats identifier ChatId int64 `json:"chat_id"` // Type of chat. One of: dialog, chat, channel Type ChatType `json:"type"` // Chat status. One of: - active: bot is active member of chat - removed: bot was kicked - left: bot intentionally left chat - closed: chat was closed Status ChatStatus `json:"status"` // Visible title of chat Title string `json:"title"` // Icon of chat Icon Image `json:"icon"` // Time of last event occured in chat LastEventTime int64 `json:"last_event_time"` // Number of people in chat. Always 2 for `dialog` chat type ParticipantsCount int32 `json:"participants_count"` // Identifier of chat owner. Visible only for chat admins OwnerId int64 `json:"owner_id,omitempty"` // Participants in chat with time of last activity. Can be *null* when you request list of chats. Visible for chat admins only Participants map[string]int64 `json:"participants,omitempty"` // Is current chat publicly available. Always `false` for dialogs IsPublic bool `json:"is_public"` // Link on chat if it is public Link string `json:"link,omitempty"` // Chat description Description map[string]interface{} `json:"description"` } // ChatAdminPermission : Chat admin permissions type ChatAdminPermission string // List of ChatAdminPermission const ( READ_ALL_MESSAGES ChatAdminPermission = "read_all_messages" ADD_REMOVE_MEMBERS ChatAdminPermission = "add_remove_members" ADD_ADMINS ChatAdminPermission = "add_admins" CHANGE_CHAT_INFO ChatAdminPermission = "change_chat_info" PIN_MESSAGE ChatAdminPermission = "pin_message" WRITE ChatAdminPermission = "write" ) type ChatList struct { // List of requested chats Chats []Chat `json:"chats"` // Reference to the next page of requested chats Marker int64 `json:"marker"` } type ChatMember struct { // Users identifier UserId int64 `json:"user_id"` // Users visible name Name string `json:"name"` // Unique public user name. Can be `null` if user is not accessible or it is not set Username string `json:"username"` // URL of avatar AvatarUrl string `json:"avatar_url"` // URL of avatar of a bigger size FullAvatarUrl string `json:"full_avatar_url"` LastAccessTime int64 `json:"last_access_time"` IsOwner bool `json:"is_owner"` IsAdmin bool `json:"is_admin"` JoinTime int64 `json:"join_time"` // Permissions in chat if member is admin. `null` otherwise Permissions []ChatAdminPermission `json:"permissions"` } type ChatMembersList struct { // Participants in chat with time of last activity. Visible only for chat admins Members []ChatMember `json:"members"` // Pointer to the next data page Marker int64 `json:"marker"` } type ChatPatch struct { Icon PhotoAttachmentRequestPayload `json:"icon,omitempty"` Title string `json:"title,omitempty"` } // ChatStatus : Chat status for current bot type ChatStatus string // List of ChatStatus const ( ACTIVE ChatStatus = "active" REMOVED ChatStatus = "removed" LEFT ChatStatus = "left" CLOSED ChatStatus = "closed" SUSPENDED ChatStatus = "suspended" ) // Bot gets this type of update as soon as title has been changed in chat type ChatTitleChangedUpdate struct { UpdateType string `json:"update_type,omitempty"` // Unix-time when event has occured Timestamp int64 `json:"timestamp"` // Chat identifier where event has occurred ChatId int64 `json:"chat_id"` // User who changed title UserId int64 `json:"user_id"` // New title Title string `json:"title"` } // ChatType : Type of chat. Dialog (one-on-one), chat or channel type ChatType string // List of ChatType const ( DIALOG ChatType = "dialog" CHAT ChatType = "chat" CHANNEL ChatType = "channel" ) type ContactAttachment struct { Type string `json:"type,omitempty"` Payload ContactAttachmentPayload `json:"payload"` } type ContactAttachmentPayload struct { // User info in VCF format VcfInfo string `json:"vcfInfo"` // User info TamInfo User `json:"tamInfo"` } // Request to attach contact card to message. MUST be the only attachment in message type ContactAttachmentRequest struct { Type string `json:"type,omitempty"` Payload ContactAttachmentRequestPayload `json:"payload"` } type ContactAttachmentRequestPayload struct { // Contact name Name string `json:"name"` // Contact identifier ContactId int64 `json:"contactId"` // Full information about contact in VCF format VcfInfo string `json:"vcfInfo"` // Contact phone in VCF format VcfPhone string `json:"vcfPhone"` } // Server returns this if there was an exception to your request type Error struct { // Error Error string `json:"error,omitempty"` // Error code Code string `json:"code"` // Human-readable description Message string `json:"message"` } type FileAttachment struct { Type string `json:"type,omitempty"` Payload AttachmentPayload `json:"payload"` } // Request to attach file to message. MUST be the only attachment in message type FileAttachmentRequest struct { Type string `json:"type,omitempty"` Payload UploadedFileInfo `json:"payload"` } // List of all WebHook subscriptions type GetSubscriptionsResult struct { // Current suscriptions Subscriptions []Subscription `json:"subscriptions"` } // Generic schema describing image object type Image struct { // URL of image Url string `json:"url"` } // Buttons in messages type InlineKeyboardAttachment struct { Type string `json:"type,omitempty"` // Unique identifier of keyboard CallbackId string `json:"callback_id"` Payload Keyboard `json:"payload"` } // Request to attach keyboard to message type InlineKeyboardAttachmentRequest struct { Type string `json:"type,omitempty"` Payload InlineKeyboardAttachmentRequestPayload `json:"payload"` } type InlineKeyboardAttachmentRequestPayload struct { // Two-dimensional array of buttons Buttons [][]Button `json:"buttons"` } // Intent : Intent of button type Intent string // List of Intent const ( POSITIVE Intent = "positive" NEGATIVE Intent = "negative" DEFAULT Intent = "default" ) // Keyboard is two-dimension array of buttons type Keyboard struct { Buttons [][]Button `json:"buttons"` } // After pressing this type of button user follows the link it contains type LinkButton struct { Type string `json:"type,omitempty"` // Visible text of button Text string `json:"text"` // Intent of button. Affects clients representation. Intent Intent `json:"intent"` Url string `json:"url"` } type LinkedMessage struct { // Type of linked message Type MessageLinkType `json:"type"` // User sent this message Sender User `json:"sender"` // Chat where message was originally posted ChatId int64 `json:"chat_id"` Message MessageBody `json:"message"` } type LocationAttachment struct { Type string `json:"type,omitempty"` Latitude float64 `json:"latitude"` Longitude float64 `json:"longitude"` } // Request to attach keyboard to message type LocationAttachmentRequest struct { Type string `json:"type,omitempty"` Latitude float64 `json:"latitude"` Longitude float64 `json:"longitude"` } // Message in chat type Message struct { // User that sent this message Sender User `json:"sender"` // Message recipient. Could be user or chat Recipient Recipient `json:"recipient"` // Unix-time when message was created Timestamp int64 `json:"timestamp"` // Forwarder or replied message Link LinkedMessage `json:"link,omitempty"` // Body of created message. Text + attachments. Could be null if message contains only forwarded message. Body MessageBody `json:"body"` } // Schema representing body of message type MessageBody struct { // Unique identifier of message Mid string `json:"mid"` // Sequence identifier of message in chat Seq int64 `json:"seq"` // Message text Text string `json:"text"` // Message attachments. Could be one of `Attachment` type. See description of this schema Attachments []Attachment `json:"attachments"` // In case this message is repled to, it is the unique identifier of the replied message ReplyTo string `json:"reply_to,omitempty"` } // You will get this `update` as soon as user presses button type MessageCallbackUpdate struct { UpdateType string `json:"update_type,omitempty"` // Unix-time when event has occured Timestamp int64 `json:"timestamp"` Callback Callback `json:"callback"` // Original message containing inline keyboard. Can be `null` in case it had been deleted by the moment a bot got this update. Message Message `json:"message"` } // You will get this `update` as soon as message is created type MessageCreatedUpdate struct { UpdateType string `json:"update_type,omitempty"` // Unix-time when event has occured Timestamp int64 `json:"timestamp"` // Newly created message Message Message `json:"message"` } // You will get this `update` as soon as message is edited type MessageEditedUpdate struct { UpdateType string `json:"update_type,omitempty"` // Unix-time when event has occured Timestamp int64 `json:"timestamp"` // Edited message Message Message `json:"message"` } // MessageLinkType : Type of linked message type MessageLinkType string // List of MessageLinkType const ( FORWARD MessageLinkType = "forward" REPLY MessageLinkType = "reply" ) // Paginated list of messages type MessageList struct { // List of messages Messages []Message `json:"messages"` } // You will get this `update` as soon as message is removed type MessageRemovedUpdate struct { UpdateType string `json:"update_type,omitempty"` // Unix-time when event has occured Timestamp int64 `json:"timestamp"` // Identifier of removed message MessageId string `json:"message_id"` } // You will get this `update` as soon as message is restored type MessageRestoredUpdate struct { UpdateType string `json:"update_type,omitempty"` // Unix-time when event has occured Timestamp int64 `json:"timestamp"` // Restored message identifier MessageId string `json:"message_id"` } type NewMessageBody struct { // Message text Text string `json:"text"` // Single message attachment. Attachment interface{} `json:"attachment,omitempty"` // Message attachments. See `AttachmentRequest` and it's inheritors for full information. Attachments []interface{} `json:"attachments,omitempty"` // If false, chat participants wouldn't be notified Notify bool `json:"notify,omitempty"` } // Image attachment type PhotoAttachment struct { Type string `json:"type,omitempty"` Payload PhotoAttachmentPayload `json:"payload"` } type PhotoAttachmentPayload struct { // Unique identifier of this image PhotoId int64 `json:"photo_id"` Token string `json:"token"` // Image URL Url string `json:"url"` } type PhotoAttachmentRequest struct { Type string `json:"type,omitempty"` Payload PhotoAttachmentRequestPayload `json:"payload"` } // Request to attach image. All fields are mutually exclusive. type PhotoAttachmentRequestPayload struct { // If specified, given URL will be attached to message as image Url string `json:"url,omitempty"` // Token of any existing attachment Token string `json:"token,omitempty"` // Tokens were obtained after uploading images Photos map[string]PhotoToken `json:"photos,omitempty"` } type PhotoToken struct { // Encoded information of uploaded image Token string `json:"token"` } // This is information you will recieve as soon as an image uploaded type PhotoTokens struct { Photos map[string]PhotoToken `json:"photos"` } // New message recepient. Could be user or chat type Recipient struct { // Chat identifier ChatId int64 `json:"chat_id"` // Chat type ChatType ChatType `json:"chat_type"` // User identifier, if message was sent to user UserId int64 `json:"user_id"` } // After pressing this type of button client sends new message with attachment of curent user contact type RequestContactButton struct { Type string `json:"type,omitempty"` // Visible text of button Text string `json:"text"` // Intent of button. Affects clients representation. Intent Intent `json:"intent"` } // After pressing this type of button client sends new message with attachment of current user geo location type RequestGeoLocationButton struct { Type string `json:"type,omitempty"` // Visible text of button Text string `json:"text"` // Intent of button. Affects clients representation. Intent Intent `json:"intent"` // If *true*, sends location without asking user's confirmation Quick bool `json:"quick,omitempty"` } type SendMessageResult struct { Message Message `json:"message"` } // SenderAction : Different actions to send to chat members type SenderAction string // List of SenderAction const ( TYPING_ON SenderAction = "typing_on" TYPING_OFF SenderAction = "typing_off" SENDING_PHOTO SenderAction = "sending_photo" SENDING_VIDEO SenderAction = "sending_video" SENDING_AUDIO SenderAction = "sending_audio" MARK_SEEN SenderAction = "mark_seen" ) type ShareAttachment struct { Type string `json:"type,omitempty"` Payload AttachmentPayload `json:"payload"` } // Simple response to request type SimpleQueryResult struct { // `true` if request was successful. `false` otherwise Success bool `json:"success"` } type StickerAttachment struct { Type string `json:"type,omitempty"` Payload AttachmentPayload `json:"payload"` } // Request to attach sticker. MUST be the only attachment request in message type StickerAttachmentRequest struct { Type string `json:"type,omitempty"` Payload StickerAttachmentRequestPayload `json:"payload"` } type StickerAttachmentRequestPayload struct { // Sticker code Code string `json:"code"` } // Schema to describe WebHook subscription type Subscription struct { // WebHook URL Url string `json:"url"` // Unix-time when subscription was created Time int64 `json:"time"` // Update types bot subscribed for UpdateTypes []string `json:"update_types"` Version string `json:"version"` } // Request to set up WebHook subscription type SubscriptionRequestBody struct { // URL of HTTP(S)-endpoint of your bot Url string `json:"url"` // List of update types your bot want to receive. See `Update` object for a complete list of types UpdateTypes []string `json:"update_types,omitempty"` // Version of API. Affects model representation Version string `json:"version,omitempty"` } type UpdateType string const ( UpdateTypeMessageCallback UpdateType = "message_callback" UpdateTypeMessageCreated = "message_created" UpdateTypeMessageRemoved = "message_removed" UpdateTypeMessageEdited = "message_edited" UpdateTypeMessageRestored = "message_restored" UpdateTypeBotAdded = "bot_added" UpdateTypeBotRemoved = "bot_removed" UpdateTypeUserAdded = "user_added" UpdateTypeUserRemoved = "user_removed" UpdateTypeBotStarted = "bot_started" UpdateTypeChatTitleChanged = "chat_title_changed" ) // `Update` object repsesents different types of events that happened in chat. See its inheritors type Update struct { UpdateType UpdateType `json:"update_type,omitempty"` // Unix-time when event has occured Timestamp int64 `json:"timestamp"` } type UpdateMessageCallback struct { Update Callback Callback `json:"callback"` Message Message `json:"message"` } type UpdateMessageCreated struct { Update Message Message `json:"message"` } type UpdateMessageEdited struct { Update Message Message `json:"message"` } type UpdateMessageRestored struct { Update MessageID string `json:"message_id"` } type UpdateMessageRemoved struct { Update MessageID string `json:"message_id"` } type UpdateBotAdded struct { Update ChatID int64 `json:"chat_id"` UserID int64 `json:"user_id"` } type UpdateBotRemoved struct { Update ChatID int64 `json:"chat_id"` UserID int64 `json:"user_id"` } type UpdateBotStarted struct { Update ChatID int64 `json:"chat_id"` UserID int64 `json:"user_id"` } type UpdateChatTitleChanged struct { Update ChatID int64 `json:"chat_id"` UserID int64 `json:"user_id"` Title string `json:"title"` } type UpdateUserAdded struct { Update ChatID int64 `json:"chat_id"` UserID int64 `json:"user_id"` InviterID int64 `json:"inviter_id"` } type UpdateUserRemoved struct { Update ChatID int64 `json:"chat_id"` UserID int64 `json:"user_id"` AdminID int64 `json:"admin_id"` } // List of all updates in chats your bot participated in type UpdateList struct { // Page of updates Updates []json.RawMessage `json:"updates"` // Pointer to the next data page Marker int64 `json:"marker"` } // Endpoint you should upload to your binaries type UploadEndpoint struct { // URL to upload Url string `json:"url"` } // UploadType : Type of file uploading type UploadType string // List of UploadType const ( PHOTO UploadType = "photo" VIDEO UploadType = "video" AUDIO UploadType = "audio" FILE UploadType = "file" ) // This is information you will recieve as soon as a file is uploaded type UploadedFileInfo struct { // Unique file identifier FileId int64 `json:"fileId"` } // This is information you will recieve as soon as audio/video is uploaded type UploadedInfo struct { Id int64 `json:"id"` } type User struct { // Users identifier UserId int64 `json:"user_id"` // Users visible name Name string `json:"name"` // Unique public user name. Can be `null` if user is not accessible or it is not set Username string `json:"username"` } // You will receive this update when user has been added to chat where bot is administrator type UserAddedToChatUpdate struct { UpdateType string `json:"update_type,omitempty"` // Unix-time when event has occured Timestamp int64 `json:"timestamp"` // Chat identifier where event has occured ChatId int64 `json:"chat_id"` // User added to chat UserId int64 `json:"user_id"` // User who added user to chat InviterId int64 `json:"inviter_id"` } type UserIdsList struct { UserIds []int64 `json:"user_ids"` } // You will receive this update when user has been removed from chat where bot is administrator type UserRemovedFromChatUpdate struct { UpdateType string `json:"update_type,omitempty"` // Unix-time when event has occured Timestamp int64 `json:"timestamp"` // Chat identifier where event has occured ChatId int64 `json:"chat_id"` // User removed from chat UserId int64 `json:"user_id"` // Administrator who removed user from chat AdminId int64 `json:"admin_id"` } type UserWithPhoto struct { // Users identifier UserId int64 `json:"user_id"` // Users visible name Name string `json:"name"` // Unique public user name. Can be `null` if user is not accessible or it is not set Username string `json:"username"` // URL of avatar AvatarUrl string `json:"avatar_url"` // URL of avatar of a bigger size FullAvatarUrl string `json:"full_avatar_url"` } type VideoAttachment struct { Type string `json:"type,omitempty"` Payload AttachmentPayload `json:"payload"` } // Request to attach video to message type VideoAttachmentRequest struct { Type string `json:"type,omitempty"` Payload UploadedInfo `json:"payload"` }