package model import "time" type AmoAccountUser struct { ID int64 `json:"id"` // ID пользователя AmoID int32 `json:"amoID"` // ID компании в амо, к которой пользователь принадлежит AmoUserID int32 `json:"amoUserID"` // ID пользователя в амо Name string `json:"name"` // Имя Email string `json:"email"` // Email Role int32 `json:"role"` // Роль Group int32 `json:"group"` // Группа Deleted bool `json:"deleted"` CreatedAt time.Time `json:"createdAt"` } type AmoAccount struct { ID int64 `json:"id"` // ID компании AccountID string `json:"accountID"` // ID аккаунта нас AmoID int32 `json:"amoID"` // ID компании в амо Name string `json:"name"` // Название Deleted bool `json:"deleted"` CreatedAt time.Time `json:"createdAt"` Subdomain string `json:"subdomain"` // поддомен Country string `json:"country"` // Страна DriveURL string `json:"driveURL"` // URL объктного хранилища Stale bool `json:"stale"` // флаг "не свежести" если с токенами все в порядке - false, если просрочились то true } type UserGroups struct { ID int `json:"id" bson:"id"` Name string `json:"name" bson:"name"` UUID interface{} `json:"uuid" bson:"uuid"` } type Token struct { AccountID string `json:"account_id"` // id в квизе RefreshToken string `json:"refresh_token"` // 80 дней AccessToken string `json:"access_token"` // 20 минут AuthCode string `json:"auth_code"` Expiration int64 `json:"expiration"` // таймшамп времени когда кончится AccessToken CreatedAt int64 `json:"created_at"` // таймшамп времени создания, нужен для отслеживания 80 дней } type Pipeline struct { // айдишник в нашей системе Primary Key ID int64 `json:"ID"` /* - айдишник воронки в амо*/ Amoid int32 `json:"AmoID"` /* - связь с аккаунтом в интеграции амо id аккаунта в амо*/ AccountID int32 `json:"AccountID"` /* - название воронки в амо*/ Name string `json:"Name"` /* - флаг архивной воронки в амо*/ Isarchive bool `json:"IsArchive"` /* - флаг мягкого удаления*/ Deleted bool `json:"Deleted"` /* - таймштамп создания воронки в нашей системе*/ Createdat int64 `json:"CreatedAt"` } type Step struct { /* - айдишник в нашей системе Primary Key*/ ID int64 `json:"ID"` /* - айдишник шага воронки в амо*/ Amoid int32 `json:"AmoID"` /* - айдишник воронки в амо*/ Pipelineid int32 `json:"PipelineID"` /* - связь с аккаунтом в интеграции амо id в амо*/ Accountid int32 `json:"AccountID"` /* - название воронки в амо*/ Name string `json:"Name"` /* - цвет шага в амо*/ Color string `json:"Color"` /* - флаг мягкого удаления*/ Deleted bool `json:"Deleted"` /* - таймштамп создания воронки в нашей системе*/ Createdat int64 `json:"CreatedAt"` } type Tag struct { /* - айдишник в нашей системе Primary Key*/ ID int64 `json:"ID"` /* - айдишник тега в амо*/ Amoid int32 `json:"AmoID"` /* - связь с аккаунтом в интеграции амо id аккаунта в амо*/ Accountid int32 `json:"AccountID"` /* - сущность, к которой принадлежит этот тег. Наверное, стоит сделать через enum в базе*/ Entity EntityType `json:"Entity"` /* - название тега в амо*/ Name string `json:"Name"` /* - цвет тега в амо*/ Color *string `json:"Color"` /* - флаг мягкого удаления*/ Deleted bool `json:"Deleted"` /* - таймштамп создания тега в нашей системе*/ Createdat int64 `json:"CreatedAt"` } type Field struct { /* - айдишник в нашей системе Primary Key*/ ID int64 `json:"ID"` /* - айдишник кастомного поля в амо*/ Amoid int32 `json:"AmoID"` /* - кодовое слово в амо*/ Code string `json:"Code"` /* - связь с аккаунтом в интеграции амо id аккаунта в амо*/ Accountid int32 `json:"AccountID"` /* - название воронки в амо*/ Name string `json:"Name"` /* - тип сущности в амо, для которой это кастомное поле*/ Entity EntityType `json:"Entity"` /* - тип поля https://www.amocrm.ru/developers/content/crm_platform/custom-fields#%D0%94%D0%BE%D1%81%D1%82%D1%83%D0%BF%D0%BD%D1%8B%D0%B5-%D1%82%D0%B8%D0%BF%D1%8B-%D0%BF%D0%BE%D0%BB%D0%B5%D0%B9*/ Type FieldType `json:"Type"` /* - флаг мягкого удаления*/ Deleted bool `json:"Deleted"` /* - таймштамп создания воронки в нашей системе*/ Createdat int64 `json:"CreatedAt"` } type EntityType string const ( LeadsType EntityType = "leads" ContactsType EntityType = "contacts" CompaniesType EntityType = "companies" CustomersType EntityType = "customers" ) type Rule struct { /* - айдишник в нашей системе*/ ID int64 `json:"ID"` /* - связь с аккаунтом в интеграции амо id в амо*/ Accountid int32 `json:"AccountID"` /* - айдишник опроса*/ Quizid int32 `json:"QuizID"` /* - айдишник ответственного за сделку*/ Performerid int32 `json:"PerformerID"` /* - айдишник воронки*/ Pipelineid int32 `json:"PipelineID"` /* - айдишник этапа*/ Stepid int32 `json:"StepID"` /* - список UTM для этого опроса*/ //Utms []int32 `json:"UTMs"` /* - правила заполнения полей сущностей в амо*/ Fieldsrule Fieldsrule `json:"FieldsRule"` // теги добавляемые к сделке TagsToAdd TagsToAdd `json:"TagsToAdd"` /* - флаг мягкого удаления*/ Deleted bool `json:"Deleted"` /* - таймштамп создания воронки в нашей системе*/ Createdat int64 `json:"CreatedAt"` } type TagsToAdd struct { Lead []int64 `json:"Lead"` Contact []int64 `json:"Contact"` Company []int64 `json:"Company"` Customer []int64 `json:"Customer"` } type Fieldsrule struct { Lead FieldRule `json:"Lead"` Contact ContactRules `json:"Contact"` Company FieldRule `json:"Company"` Customer FieldRule `json:"Customer"` } type FieldRule struct { /* - сопоставление айдишника вопроса полю, которое будет заполняться ответом. соответственно QuestionID это айдишник вопроса. это я так мэпу пытался записать*/ Questionid map[int]int `json:"QuestionID"` // ключ id вопроса значение id астомного поля } type ContactRules struct { // ключ имя, значение id кастомного поля ContactRuleMap map[string]int Questionid map[int]int `json:"QuestionID"` // ключ id вопроса значение id астомного поля } type QuizContact struct { FormContact struct { Fields struct { Name ContactField `json:"name"` Email ContactField `json:"email"` Phone ContactField `json:"phone"` Text ContactField `json:"text"` Address ContactField `json:"address"` } `json:"fields"` } `json:"formContact"` } type ContactField struct { Text string `json:"text"` InnerText string `json:"innerText"` Key string `json:"key"` Required bool `json:"required"` Used bool `json:"used"` } type ContactQuizConfig string const ( TypeContactName ContactQuizConfig = "name" TypeContactEmail ContactQuizConfig = "email" TypeContactPhone ContactQuizConfig = "phone" TypeContactText ContactQuizConfig = "text" TypeContactAddress ContactQuizConfig = "address" ) //type UTM struct { // /* - айдишник в нашей системе Primary Key*/ // ID int64 `json:"ID"` // /* - айдишник кастомного поля в амо*/ // Amofieldid int32 `json:"AmoFieldID"` // /* - айдишник квиза*/ // Quizid int32 `json:"QuizID"` // /* - связь с аккаунтом в интеграции амо id амо*/ // Accountid int32 `json:"AccountID"` // /* - название тега в амо*/ // Name string `json:"Name"` // /* - флаг мягкого удаления*/ // Deleted bool `json:"Deleted"` // /* - таймштамп создания тега в нашей системе*/ // Createdat int64 `json:"CreatedAt"` //} type FieldType string const ( TypeAmoText FieldType = "text" //Текст TypeAmoNumeric FieldType = "numeric" //Число TypeAmoCheckbox FieldType = "checkbox" //Флаг TypeAmoSelect FieldType = "select" //Список TypeAmoMultiselect FieldType = "multiselect" //Мультисписок TypeAmoDate FieldType = "date" //Дата TypeAmoUrl FieldType = "url" // Ссылка TypeAmoTextarea FieldType = "textarea" // Текстовая область TypeAmoRadiobutton FieldType = "radiobutton" // Переключатель TypeAmoStreetAddress FieldType = "streetaddress" // Короткий адрес TypeAmoSmartAddress FieldType = "smart_address" // Адрес TypeAmoBirthday FieldType = "birthday" // День рождения TypeAmoLegalEntity FieldType = "legal_entity" // Юр. лицо TypeAmoDateTime FieldType = "date_time" // Дата и время TypeAmoPrice FieldType = "price" //Цена TypeAmoCategory FieldType = "category" // Категория TypeAmoItems FieldType = "items" // Предметы TypeAmoTrackingData FieldType = "tracking_data" // Отслеживаемые данные TypeAmoLinkedEntity FieldType = "linked_entity" // Связь с другим элементом TypeAmoChainedList FieldType = "chained_list" // Каталоги и списки (платная опция Супер-поля) TypeAmoMonetary FieldType = "monetary" // Денежное (платная опция Супер-поля) TypeAmoFile FieldType = "file" // Файл TypeAmoPayer FieldType = "payer" // Плательщик (только в списке Счета-покупки) TypeAmoSupplier FieldType = "supplier" // Поставщик (только в списке Счета-покупки) TypeAmoMultiText FieldType = "multitext" // что то чего нет в списке полей но она есть в амо)) ) var TypeMapping = map[string]FieldType{ "variant": TypeAmoText, //TypeAmoChainedList, "images": TypeAmoText, //TypeAmoFile, "varimg": TypeAmoText, //TypeAmoFile, "file": TypeAmoFile, "text": TypeAmoText, "emoji": TypeAmoText, "select": TypeAmoText, //TypeAmoSelect, "date": TypeAmoText, //TypeAmoDate, "number": TypeAmoText, //TypeAmoNumeric, "page": TypeAmoText, "rating": TypeAmoText, "result": TypeAmoText, } type AmoUsersTrueResults struct { QuizID int64 AnswerID int64 Result bool QuestionID int64 Content string Session string AccessToken string AmoAccountID int32 UTMs UTMSavingMap FieldsRule Fieldsrule TagsToAdd TagsToAdd PerformerID int32 StepID int32 PipelineID int32 PerformerName string SubDomain string QuizAccountID string DriveURL string } // возможно стоит добавить enum? тип ContactQuizConfig уже есть type ContactAmo struct { ID int64 AccountID int32 // id аккаунта в амо к которому привязан контакт AmoID int32 // id контакта в амо Field string // значение поля }