add logs and debug logic with contacts
This commit is contained in:
parent
135217fc38
commit
09a4271a9a
@ -39,11 +39,11 @@ type LinkedContactReq struct {
|
|||||||
ToEntityID int32 `json:"to_entity_id"` // ID связанной сущности
|
ToEntityID int32 `json:"to_entity_id"` // ID связанной сущности
|
||||||
ToEntityType string `json:"to_entity_type"` // Тип связанной сущности (leads, contacts, companies, customers, catalog_elements)
|
ToEntityType string `json:"to_entity_type"` // Тип связанной сущности (leads, contacts, companies, customers, catalog_elements)
|
||||||
Metadata struct {
|
Metadata struct {
|
||||||
CatalogID int `json:"catalog_id"` // ID каталога
|
//CatalogID int `json:"catalog_id"` // ID каталога
|
||||||
Quantity int `json:"quantity"` // Количество прикрепленных элементов каталогов
|
//Quantity int `json:"quantity"` // Количество прикрепленных элементов каталогов
|
||||||
IsMain bool `json:"is_main"` // Является ли контакт главным
|
IsMain bool `json:"is_main"` // Является ли контакт главным
|
||||||
UpdatedBy int `json:"updated_by"` // ID пользователя, от имени которого осуществляется прикрепление
|
//UpdatedBy int `json:"updated_by"` // ID пользователя, от имени которого осуществляется прикрепление
|
||||||
PriceID int `json:"price_id"` // ID поля типа Цена, которое будет установлено для привязанного элемента в контексте сущности
|
//PriceID int `json:"price_id"` // ID поля типа Цена, которое будет установлено для привязанного элемента в контексте сущности
|
||||||
} `json:"metadata"`
|
} `json:"metadata"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -397,8 +397,6 @@ func (wc *PostDeals) constructField(ctx context.Context, allAnswers []model.Resu
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (wc *PostDeals) chooseAndCreateContact(ctx context.Context, result model.AmoUsersTrueResults, resultInfo model.ResultContent, existingContacts map[int32][]model.ContactAmo, dateCreating int64, contactFields []models.FieldsValues, contactRuleMap map[string]int) (int32, error) {
|
func (wc *PostDeals) chooseAndCreateContact(ctx context.Context, result model.AmoUsersTrueResults, resultInfo model.ResultContent, existingContacts map[int32][]model.ContactAmo, dateCreating int64, contactFields []models.FieldsValues, contactRuleMap map[string]int) (int32, error) {
|
||||||
fmt.Println("check contact")
|
|
||||||
|
|
||||||
// 1 ищем контакт в котором совпадает и телефон и емайл
|
// 1 ищем контакт в котором совпадает и телефон и емайл
|
||||||
if resultInfo.Phone != "" && resultInfo.Email != "" {
|
if resultInfo.Phone != "" && resultInfo.Email != "" {
|
||||||
phoneMatchedContacts := make(map[int32]bool)
|
phoneMatchedContacts := make(map[int32]bool)
|
||||||
@ -413,6 +411,7 @@ func (wc *PostDeals) chooseAndCreateContact(ctx context.Context, result model.Am
|
|||||||
for _, contact := range contactVariants {
|
for _, contact := range contactVariants {
|
||||||
if contact.Field == resultInfo.Email {
|
if contact.Field == resultInfo.Email {
|
||||||
if _, ok := phoneMatchedContacts[contact.AmoID]; ok {
|
if _, ok := phoneMatchedContacts[contact.AmoID]; ok {
|
||||||
|
fmt.Println("нашлось телефон и емайл в бд, с одинаковым амоид", resultInfo.Name, resultInfo.Phone, resultInfo.Email)
|
||||||
return contact.AmoID, nil
|
return contact.AmoID, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -435,11 +434,18 @@ func (wc *PostDeals) chooseAndCreateContact(ctx context.Context, result model.Am
|
|||||||
}
|
}
|
||||||
|
|
||||||
if phoneContactID != 0 && emailContactID != 0 && phoneContactID != emailContactID {
|
if phoneContactID != 0 && emailContactID != 0 && phoneContactID != emailContactID {
|
||||||
|
fmt.Println("нашлось телефон и емайл в бд, но это пока разные контакты", resultInfo.Name, resultInfo.Phone, resultInfo.Email)
|
||||||
// делаем обновление телефона там где уже есть email
|
// делаем обновление телефона там где уже есть email
|
||||||
var valuePhone []models.FieldsValues
|
var valuePhone []models.FieldsValues
|
||||||
valuePhone = tools.AddContactFields(valuePhone, resultInfo.Phone, model.TypeContactPhone, contactRuleMap)
|
valuePhone = tools.AddContactFields(valuePhone, resultInfo.Phone, model.TypeContactPhone, contactRuleMap)
|
||||||
|
name := resultInfo.Name
|
||||||
|
if name == "" {
|
||||||
|
name = fmt.Sprintf("empty name, quiz %d, triggered by answer - %d", result.QuizID, result.AnswerID)
|
||||||
|
}
|
||||||
_, err := wc.amoClient.UpdateContact(models.CreateContactReq{
|
_, err := wc.amoClient.UpdateContact(models.CreateContactReq{
|
||||||
|
Name: name,
|
||||||
|
UpdatedBy: 0,
|
||||||
|
ResponsibleUserID: result.PerformerID,
|
||||||
CustomFieldsValues: valuePhone,
|
CustomFieldsValues: valuePhone,
|
||||||
}, result.SubDomain, result.AccessToken, emailContactID)
|
}, result.SubDomain, result.AccessToken, emailContactID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -451,14 +457,29 @@ func (wc *PostDeals) chooseAndCreateContact(ctx context.Context, result model.Am
|
|||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = wc.amoClient.LinkedContactToContact(models.LinkedContactReq{
|
// todo пока без линковки
|
||||||
EntityID: emailContactID,
|
//_, err = wc.amoClient.LinkedContactToContact([]models.LinkedContactReq{
|
||||||
ToEntityID: phoneContactID,
|
// {
|
||||||
ToEntityType: string(model.ContactsType),
|
// ToEntityID: emailContactID,
|
||||||
}, result.SubDomain, result.AccessToken)
|
// ToEntityType: "contacts",
|
||||||
if err != nil {
|
// //Metadata: struct {
|
||||||
return 0, err
|
// // //CatalogID int `json:"catalog_id"`
|
||||||
}
|
// // //Quantity int `json:"quantity"`
|
||||||
|
// // IsMain bool `json:"is_main"`
|
||||||
|
// // //UpdatedBy int `json:"updated_by"`
|
||||||
|
// // //PriceID int `json:"price_id"`
|
||||||
|
// //}(struct {
|
||||||
|
// // //CatalogID int
|
||||||
|
// // //Quantity int
|
||||||
|
// // IsMain bool
|
||||||
|
// // //UpdatedBy int
|
||||||
|
// // //PriceID int
|
||||||
|
// //}{IsMain: true}),
|
||||||
|
// },
|
||||||
|
//}, result.SubDomain, result.AccessToken, phoneContactID)
|
||||||
|
//if err != nil {
|
||||||
|
// return 0, err
|
||||||
|
//}
|
||||||
|
|
||||||
return emailContactID, nil
|
return emailContactID, nil
|
||||||
}
|
}
|
||||||
@ -481,9 +502,17 @@ func (wc *PostDeals) chooseAndCreateContact(ctx context.Context, result model.Am
|
|||||||
}
|
}
|
||||||
if !emailExists && resultInfo.Email != "" {
|
if !emailExists && resultInfo.Email != "" {
|
||||||
// email пустой обновляем контакт добавляя email, если не пустой
|
// email пустой обновляем контакт добавляя email, если не пустой
|
||||||
|
fmt.Println("нашлось телефон, емайл не пустой, а в бд пустой. обновляем контакт", resultInfo.Name, resultInfo.Phone, resultInfo.Email)
|
||||||
var valueEmail []models.FieldsValues
|
var valueEmail []models.FieldsValues
|
||||||
valueEmail = tools.AddContactFields(valueEmail, resultInfo.Email, model.TypeContactEmail, contactRuleMap)
|
valueEmail = tools.AddContactFields(valueEmail, resultInfo.Email, model.TypeContactEmail, contactRuleMap)
|
||||||
|
name := resultInfo.Name
|
||||||
|
if name == "" {
|
||||||
|
name = fmt.Sprintf("empty name, quiz %d, triggered by answer - %d", result.QuizID, result.AnswerID)
|
||||||
|
}
|
||||||
_, err := wc.amoClient.UpdateContact(models.CreateContactReq{
|
_, err := wc.amoClient.UpdateContact(models.CreateContactReq{
|
||||||
|
Name: name,
|
||||||
|
UpdatedBy: 0,
|
||||||
|
ResponsibleUserID: result.PerformerID,
|
||||||
CustomFieldsValues: valueEmail,
|
CustomFieldsValues: valueEmail,
|
||||||
}, result.SubDomain, result.AccessToken, contact.AmoID)
|
}, result.SubDomain, result.AccessToken, contact.AmoID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -501,6 +530,7 @@ func (wc *PostDeals) chooseAndCreateContact(ctx context.Context, result model.Am
|
|||||||
}
|
}
|
||||||
if emailExists && resultInfo.Email != "" {
|
if emailExists && resultInfo.Email != "" {
|
||||||
// email не пустой значит это новый контакт создаем если наш email тоже не пустой
|
// email не пустой значит это новый контакт создаем если наш email тоже не пустой
|
||||||
|
fmt.Println("нашлось телефон, емайл не пустой и в бд не пустой. создаем новый контакт", resultInfo.Name, resultInfo.Phone, resultInfo.Email)
|
||||||
name := resultInfo.Name
|
name := resultInfo.Name
|
||||||
if name == "" {
|
if name == "" {
|
||||||
name = fmt.Sprintf("empty name, quiz %d, triggered by answer - %d", result.QuizID, result.AnswerID)
|
name = fmt.Sprintf("empty name, quiz %d, triggered by answer - %d", result.QuizID, result.AnswerID)
|
||||||
@ -543,6 +573,7 @@ func (wc *PostDeals) chooseAndCreateContact(ctx context.Context, result model.Am
|
|||||||
return contactID, nil
|
return contactID, nil
|
||||||
}
|
}
|
||||||
// если пустой то это нужный контакт возвращаем его id, так как если мейл пустой у нас но номер совпадает а в бд не пустой значит оно нам надо
|
// если пустой то это нужный контакт возвращаем его id, так как если мейл пустой у нас но номер совпадает а в бд не пустой значит оно нам надо
|
||||||
|
fmt.Println("нашлось телефон, емайл пустой возвращаем существующий контакт", resultInfo.Name, resultInfo.Phone, resultInfo.Email)
|
||||||
return contact.AmoID, nil
|
return contact.AmoID, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -566,9 +597,17 @@ func (wc *PostDeals) chooseAndCreateContact(ctx context.Context, result model.Am
|
|||||||
}
|
}
|
||||||
if !phoneExists && resultInfo.Phone != "" {
|
if !phoneExists && resultInfo.Phone != "" {
|
||||||
// телефон пустой обновляем контакт добавляя телефон, если не пустой
|
// телефон пустой обновляем контакт добавляя телефон, если не пустой
|
||||||
|
fmt.Println("нашлось емайл, телефон не пустой, а в бд пустой. обновляем контакт", resultInfo.Name, resultInfo.Phone, resultInfo.Email)
|
||||||
var valuePhone []models.FieldsValues
|
var valuePhone []models.FieldsValues
|
||||||
valuePhone = tools.AddContactFields(valuePhone, resultInfo.Phone, model.TypeContactPhone, contactRuleMap)
|
valuePhone = tools.AddContactFields(valuePhone, resultInfo.Phone, model.TypeContactPhone, contactRuleMap)
|
||||||
|
name := resultInfo.Name
|
||||||
|
if name == "" {
|
||||||
|
name = fmt.Sprintf("empty name, quiz %d, triggered by answer - %d", result.QuizID, result.AnswerID)
|
||||||
|
}
|
||||||
_, err := wc.amoClient.UpdateContact(models.CreateContactReq{
|
_, err := wc.amoClient.UpdateContact(models.CreateContactReq{
|
||||||
|
Name: name,
|
||||||
|
UpdatedBy: 0,
|
||||||
|
ResponsibleUserID: result.PerformerID,
|
||||||
CustomFieldsValues: valuePhone,
|
CustomFieldsValues: valuePhone,
|
||||||
}, result.SubDomain, result.AccessToken, contact.AmoID)
|
}, result.SubDomain, result.AccessToken, contact.AmoID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -586,6 +625,7 @@ func (wc *PostDeals) chooseAndCreateContact(ctx context.Context, result model.Am
|
|||||||
}
|
}
|
||||||
if phoneExists && resultInfo.Phone != "" {
|
if phoneExists && resultInfo.Phone != "" {
|
||||||
// телефон не пустой значит это новый контакт создаем если наш телефон не пустой
|
// телефон не пустой значит это новый контакт создаем если наш телефон не пустой
|
||||||
|
fmt.Println("нашлось емайл, телефон не пустой и в бд не пустой. создаем новый контакт", resultInfo.Name, resultInfo.Phone, resultInfo.Email)
|
||||||
name := resultInfo.Name
|
name := resultInfo.Name
|
||||||
if name == "" {
|
if name == "" {
|
||||||
name = fmt.Sprintf("empty name, quiz %d, triggered by answer - %d", result.QuizID, result.AnswerID)
|
name = fmt.Sprintf("empty name, quiz %d, triggered by answer - %d", result.QuizID, result.AnswerID)
|
||||||
@ -629,12 +669,14 @@ func (wc *PostDeals) chooseAndCreateContact(ctx context.Context, result model.Am
|
|||||||
}
|
}
|
||||||
|
|
||||||
// если пустой то это нужный контакт возвращаем его id, так как если телефон пустой у нас но мейл совпадает а в бд не пустой значит оно нам надо
|
// если пустой то это нужный контакт возвращаем его id, так как если телефон пустой у нас но мейл совпадает а в бд не пустой значит оно нам надо
|
||||||
|
fmt.Println("нашлось емайл, телефон пустой возвращаем существующий контакт", resultInfo.Name, resultInfo.Phone, resultInfo.Email)
|
||||||
return contact.AmoID, nil
|
return contact.AmoID, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fmt.Println("ничего не нашлось, создаем новый контакт", resultInfo.Name, resultInfo.Phone, resultInfo.Email)
|
||||||
// если дошлю до сюда то это новый контакт с новым email and phone
|
// если дошлю до сюда то это новый контакт с новым email and phone
|
||||||
name := resultInfo.Name
|
name := resultInfo.Name
|
||||||
if name == "" {
|
if name == "" {
|
||||||
|
@ -804,10 +804,10 @@ func (a *Amo) UpdateContact(req models.CreateContactReq, domain, accessToken str
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *Amo) LinkedContactToContact(req models.LinkedContactReq, domain, accessToken string) (*models.LinkedContactResponse, error) {
|
func (a *Amo) LinkedContactToContact(req []models.LinkedContactReq, domain, accessToken string, id int32) (*models.LinkedContactResponse, error) {
|
||||||
for {
|
for {
|
||||||
if a.rateLimiter.Check() {
|
if a.rateLimiter.Check() {
|
||||||
uri := fmt.Sprintf("https://%s/api/v4/contacts/link", domain)
|
uri := fmt.Sprintf("https://%s/api/v4/contacts/%d/link", domain, id)
|
||||||
bodyBytes, err := json.Marshal(req)
|
bodyBytes, err := json.Marshal(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
a.logger.Error("error marshal req in Linked Contact To Contact:", zap.Error(err))
|
a.logger.Error("error marshal req in Linked Contact To Contact:", zap.Error(err))
|
||||||
|
Loading…
Reference in New Issue
Block a user