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 связанной сущности
|
||||
ToEntityType string `json:"to_entity_type"` // Тип связанной сущности (leads, contacts, companies, customers, catalog_elements)
|
||||
Metadata struct {
|
||||
CatalogID int `json:"catalog_id"` // ID каталога
|
||||
Quantity int `json:"quantity"` // Количество прикрепленных элементов каталогов
|
||||
//CatalogID int `json:"catalog_id"` // ID каталога
|
||||
//Quantity int `json:"quantity"` // Количество прикрепленных элементов каталогов
|
||||
IsMain bool `json:"is_main"` // Является ли контакт главным
|
||||
UpdatedBy int `json:"updated_by"` // ID пользователя, от имени которого осуществляется прикрепление
|
||||
PriceID int `json:"price_id"` // ID поля типа Цена, которое будет установлено для привязанного элемента в контексте сущности
|
||||
//UpdatedBy int `json:"updated_by"` // ID пользователя, от имени которого осуществляется прикрепление
|
||||
//PriceID int `json:"price_id"` // ID поля типа Цена, которое будет установлено для привязанного элемента в контексте сущности
|
||||
} `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) {
|
||||
fmt.Println("check contact")
|
||||
|
||||
// 1 ищем контакт в котором совпадает и телефон и емайл
|
||||
if resultInfo.Phone != "" && resultInfo.Email != "" {
|
||||
phoneMatchedContacts := make(map[int32]bool)
|
||||
@ -413,6 +411,7 @@ func (wc *PostDeals) chooseAndCreateContact(ctx context.Context, result model.Am
|
||||
for _, contact := range contactVariants {
|
||||
if contact.Field == resultInfo.Email {
|
||||
if _, ok := phoneMatchedContacts[contact.AmoID]; ok {
|
||||
fmt.Println("нашлось телефон и емайл в бд, с одинаковым амоид", resultInfo.Name, resultInfo.Phone, resultInfo.Email)
|
||||
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 {
|
||||
fmt.Println("нашлось телефон и емайл в бд, но это пока разные контакты", resultInfo.Name, resultInfo.Phone, resultInfo.Email)
|
||||
// делаем обновление телефона там где уже есть email
|
||||
var valuePhone []models.FieldsValues
|
||||
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{
|
||||
Name: name,
|
||||
UpdatedBy: 0,
|
||||
ResponsibleUserID: result.PerformerID,
|
||||
CustomFieldsValues: valuePhone,
|
||||
}, result.SubDomain, result.AccessToken, emailContactID)
|
||||
if err != nil {
|
||||
@ -451,14 +457,29 @@ func (wc *PostDeals) chooseAndCreateContact(ctx context.Context, result model.Am
|
||||
return 0, err
|
||||
}
|
||||
|
||||
_, err = wc.amoClient.LinkedContactToContact(models.LinkedContactReq{
|
||||
EntityID: emailContactID,
|
||||
ToEntityID: phoneContactID,
|
||||
ToEntityType: string(model.ContactsType),
|
||||
}, result.SubDomain, result.AccessToken)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
// todo пока без линковки
|
||||
//_, err = wc.amoClient.LinkedContactToContact([]models.LinkedContactReq{
|
||||
// {
|
||||
// ToEntityID: emailContactID,
|
||||
// ToEntityType: "contacts",
|
||||
// //Metadata: struct {
|
||||
// // //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
|
||||
}
|
||||
@ -481,9 +502,17 @@ func (wc *PostDeals) chooseAndCreateContact(ctx context.Context, result model.Am
|
||||
}
|
||||
if !emailExists && resultInfo.Email != "" {
|
||||
// email пустой обновляем контакт добавляя email, если не пустой
|
||||
fmt.Println("нашлось телефон, емайл не пустой, а в бд пустой. обновляем контакт", resultInfo.Name, resultInfo.Phone, resultInfo.Email)
|
||||
var valueEmail []models.FieldsValues
|
||||
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{
|
||||
Name: name,
|
||||
UpdatedBy: 0,
|
||||
ResponsibleUserID: result.PerformerID,
|
||||
CustomFieldsValues: valueEmail,
|
||||
}, result.SubDomain, result.AccessToken, contact.AmoID)
|
||||
if err != nil {
|
||||
@ -501,6 +530,7 @@ func (wc *PostDeals) chooseAndCreateContact(ctx context.Context, result model.Am
|
||||
}
|
||||
if emailExists && resultInfo.Email != "" {
|
||||
// email не пустой значит это новый контакт создаем если наш email тоже не пустой
|
||||
fmt.Println("нашлось телефон, емайл не пустой и в бд не пустой. создаем новый контакт", resultInfo.Name, resultInfo.Phone, resultInfo.Email)
|
||||
name := resultInfo.Name
|
||||
if name == "" {
|
||||
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
|
||||
}
|
||||
// если пустой то это нужный контакт возвращаем его id, так как если мейл пустой у нас но номер совпадает а в бд не пустой значит оно нам надо
|
||||
fmt.Println("нашлось телефон, емайл пустой возвращаем существующий контакт", resultInfo.Name, resultInfo.Phone, resultInfo.Email)
|
||||
return contact.AmoID, nil
|
||||
}
|
||||
}
|
||||
@ -566,9 +597,17 @@ func (wc *PostDeals) chooseAndCreateContact(ctx context.Context, result model.Am
|
||||
}
|
||||
if !phoneExists && resultInfo.Phone != "" {
|
||||
// телефон пустой обновляем контакт добавляя телефон, если не пустой
|
||||
fmt.Println("нашлось емайл, телефон не пустой, а в бд пустой. обновляем контакт", resultInfo.Name, resultInfo.Phone, resultInfo.Email)
|
||||
var valuePhone []models.FieldsValues
|
||||
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{
|
||||
Name: name,
|
||||
UpdatedBy: 0,
|
||||
ResponsibleUserID: result.PerformerID,
|
||||
CustomFieldsValues: valuePhone,
|
||||
}, result.SubDomain, result.AccessToken, contact.AmoID)
|
||||
if err != nil {
|
||||
@ -586,6 +625,7 @@ func (wc *PostDeals) chooseAndCreateContact(ctx context.Context, result model.Am
|
||||
}
|
||||
if phoneExists && resultInfo.Phone != "" {
|
||||
// телефон не пустой значит это новый контакт создаем если наш телефон не пустой
|
||||
fmt.Println("нашлось емайл, телефон не пустой и в бд не пустой. создаем новый контакт", resultInfo.Name, resultInfo.Phone, resultInfo.Email)
|
||||
name := resultInfo.Name
|
||||
if name == "" {
|
||||
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, так как если телефон пустой у нас но мейл совпадает а в бд не пустой значит оно нам надо
|
||||
fmt.Println("нашлось емайл, телефон пустой возвращаем существующий контакт", resultInfo.Name, resultInfo.Phone, resultInfo.Email)
|
||||
return contact.AmoID, nil
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fmt.Println("ничего не нашлось, создаем новый контакт", resultInfo.Name, resultInfo.Phone, resultInfo.Email)
|
||||
// если дошлю до сюда то это новый контакт с новым email and phone
|
||||
name := resultInfo.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 {
|
||||
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)
|
||||
if err != nil {
|
||||
a.logger.Error("error marshal req in Linked Contact To Contact:", zap.Error(err))
|
||||
|
Loading…
Reference in New Issue
Block a user