From 2bb69b2c3030485ce257ab4222483e7607a3bc05 Mon Sep 17 00:00:00 2001 From: Rafael Soares Date: Mon, 28 Oct 2024 17:18:28 -0300 Subject: [PATCH 1/8] add to topic queue_uuid attribute --- core/handlers/ticket_opened_test.go | 2 +- core/models/topics.go | 6 +++++- core/models/topics_test.go | 2 ++ go.mod | 2 +- go.sum | 4 ++-- mailroom_test.dump | Bin 1907434 -> 1908890 bytes services/tickets/wenichats/service.go | 2 +- .../TestOpenAndForward_open_ticket.snap | 2 +- ...OpenAndForward_open_ticket_empty_body.snap | 2 +- 9 files changed, 14 insertions(+), 8 deletions(-) diff --git a/core/handlers/ticket_opened_test.go b/core/handlers/ticket_opened_test.go index 5f7941857..84f8443df 100644 --- a/core/handlers/ticket_opened_test.go +++ b/core/handlers/ticket_opened_test.go @@ -69,7 +69,7 @@ func TestTicketOpened(t *testing.T) { actions.NewOpenTicket( handlers.NewActionUUID(), assets.NewTicketerReference(testdata.Mailgun.UUID, "Mailgun (IT Support)"), - assets.NewTopicReference(testdata.SupportTopic.UUID, "Support"), + assets.NewTopicReference(testdata.SupportTopic.UUID, "Support", ""), "Where are my cookies?", assets.NewUserReference(testdata.Admin.Email, "Admin"), "Email Ticket", diff --git a/core/models/topics.go b/core/models/topics.go index 238ebcdaa..c8b1e45e1 100644 --- a/core/models/topics.go +++ b/core/models/topics.go @@ -26,6 +26,7 @@ type Topic struct { OrgID OrgID `json:"org_id"` Name string `json:"name"` IsDefault bool `json:"is_default"` + QueueUUID assets.QueueUUID `json:"queue_uuid"` } } @@ -44,13 +45,16 @@ func (t *Topic) Name() string { return t.t.Name } // Type returns the type func (t *Topic) IsDefault() bool { return t.t.IsDefault } +func (t *Topic) QueueUUID() assets.QueueUUID { return t.t.QueueUUID } + const selectOrgTopicsSQL = ` SELECT ROW_TO_JSON(r) FROM (SELECT t.id as id, t.uuid as uuid, t.org_id as org_id, t.name as name, - t.is_default as is_default + t.is_default as is_default, + t.queue_uuid as queue_uuid FROM tickets_topic t WHERE diff --git a/core/models/topics_test.go b/core/models/topics_test.go index 3053a795e..86750f7f3 100644 --- a/core/models/topics_test.go +++ b/core/models/topics_test.go @@ -3,6 +3,7 @@ package models_test import ( "testing" + "github.com/nyaruka/goflow/assets" "github.com/nyaruka/mailroom/core/models" "github.com/nyaruka/mailroom/testsuite" "github.com/nyaruka/mailroom/testsuite/testdata" @@ -22,6 +23,7 @@ func TestTopics(t *testing.T) { assert.Equal(t, 3, len(topics)) assert.Equal(t, testdata.DefaultTopic.UUID, topics[0].UUID()) + assert.Equal(t, assets.QueueUUID("5c85fdf7-d54a-49dd-97ed-7e10077a1f6a"), topics[0].QueueUUID()) assert.Equal(t, "General", topics[0].Name()) assert.Equal(t, testdata.SalesTopic.UUID, topics[1].UUID()) assert.Equal(t, "Sales", topics[1].Name()) diff --git a/go.mod b/go.mod index 2add9bd8e..1c03f9de0 100644 --- a/go.mod +++ b/go.mod @@ -79,4 +79,4 @@ go 1.17 replace github.com/nyaruka/gocommon => github.com/Ilhasoft/gocommon v1.16.2-weni -replace github.com/nyaruka/goflow => github.com/weni-ai/goflow v1.5.0 +replace github.com/nyaruka/goflow => github.com/weni-ai/goflow v1.5.1-staging diff --git a/go.sum b/go.sum index 4bd126c19..3f9583809 100644 --- a/go.sum +++ b/go.sum @@ -329,8 +329,8 @@ github.com/tj/assert v0.0.0-20171129193455-018094318fb0/go.mod h1:mZ9/Rh9oLWpLLD github.com/tj/go-elastic v0.0.0-20171221160941-36157cbbebc2/go.mod h1:WjeM0Oo1eNAjXGDx2yma7uG2XoyRZTq1uv3M/o7imD0= github.com/tj/go-kinesis v0.0.0-20171128231115-08b17f58cb1b/go.mod h1:/yhzCV0xPfx6jb1bBgRFjl5lytqVqZXEaeqWP8lTEao= github.com/tj/go-spin v1.1.0/go.mod h1:Mg1mzmePZm4dva8Qz60H2lHwmJ2loum4VIrLgVnKwh4= -github.com/weni-ai/goflow v1.5.0 h1:g2tfooIVKdTEGlS/QRqChb0ftRCL1MNf2GkJ/JelztY= -github.com/weni-ai/goflow v1.5.0/go.mod h1:o0xaVWP9qNcauBSlcNLa79Fm2oCPV+BDpheFRa/D40c= +github.com/weni-ai/goflow v1.5.1-staging h1:s4Nf81YuWeqTkevQzepXPbMxwAZYitWzwsKIFw2D+pk= +github.com/weni-ai/goflow v1.5.1-staging/go.mod h1:o0xaVWP9qNcauBSlcNLa79Fm2oCPV+BDpheFRa/D40c= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= diff --git a/mailroom_test.dump b/mailroom_test.dump index 8607679777ca826ecd71f4ca803d6fb4a02be522..30c36afddf9e0b507db011ace402a630e339d221 100644 GIT binary patch delta 60851 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

U)YODOVTk?aQy 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 diff --git a/services/tickets/wenichats/service.go b/services/tickets/wenichats/service.go index 2025355ed..0511702ad 100644 --- a/services/tickets/wenichats/service.go +++ b/services/tickets/wenichats/service.go @@ -112,7 +112,7 @@ func (s *service) Open(session flows.Session, topic *flows.Topic, body string, a } roomData.SectorUUID = s.sectorUUID - roomData.QueueUUID = string(topic.UUID()) + roomData.QueueUUID = string(topic.QueueUUID()) preferredURN := session.Contact().PreferredURN() if preferredURN != nil { roomData.Contact.URN = preferredURN.URN().String() diff --git a/services/tickets/wenichats/testdata/TestOpenAndForward_open_ticket.snap b/services/tickets/wenichats/testdata/TestOpenAndForward_open_ticket.snap index 1f71738a5..862bf15eb 100644 --- a/services/tickets/wenichats/testdata/TestOpenAndForward_open_ticket.snap +++ b/services/tickets/wenichats/testdata/TestOpenAndForward_open_ticket.snap @@ -6,4 +6,4 @@ Authorization: Bearer **************** Content-Type: application/json Accept-Encoding: gzip -{"queue_uuid":"ffc903f7-8cbb-443f-9627-87106842d1aa","sector_uuid":"1a4bae05-993c-4f3b-91b5-80f4e09951f2","contact":{"external_id":"5d76d86b-3bb9-4d5a-b822-c9d86f5d8e4f","name":"Ryan Lewis","urn":"tel:+12024561111?channel=57f1078f-88aa-46f4-a59a-948a5739c03d","groups":[{"uuid":"b7cf0d83-f1c9-411c-96fd-c511a4cfa86d","name":"Testers"},{"uuid":"4f1f98fc-27a7-4a69-bbdb-24744ba739a9","name":"Males"}]},"custom_fields":{"country":"brazil","mood":"angry"},"flow_uuid":"50c3706e-fedb-42c0-8eab-dda3335714b7"} \ No newline at end of file +{"queue_uuid":"5c85fdf7-d54a-49dd-97ed-7e10077a1f6a","sector_uuid":"1a4bae05-993c-4f3b-91b5-80f4e09951f2","contact":{"external_id":"5d76d86b-3bb9-4d5a-b822-c9d86f5d8e4f","name":"Ryan Lewis","urn":"tel:+12024561111?channel=57f1078f-88aa-46f4-a59a-948a5739c03d","groups":[{"uuid":"b7cf0d83-f1c9-411c-96fd-c511a4cfa86d","name":"Testers"},{"uuid":"4f1f98fc-27a7-4a69-bbdb-24744ba739a9","name":"Males"}]},"custom_fields":{"country":"brazil","mood":"angry"},"flow_uuid":"50c3706e-fedb-42c0-8eab-dda3335714b7"} \ No newline at end of file diff --git a/services/tickets/wenichats/testdata/TestOpenAndForward_open_ticket_empty_body.snap b/services/tickets/wenichats/testdata/TestOpenAndForward_open_ticket_empty_body.snap index db59d6cf9..38b6ad482 100644 --- a/services/tickets/wenichats/testdata/TestOpenAndForward_open_ticket_empty_body.snap +++ b/services/tickets/wenichats/testdata/TestOpenAndForward_open_ticket_empty_body.snap @@ -6,4 +6,4 @@ Authorization: Bearer **************** Content-Type: application/json Accept-Encoding: gzip -{"queue_uuid":"ffc903f7-8cbb-443f-9627-87106842d1aa","sector_uuid":"1a4bae05-993c-4f3b-91b5-80f4e09951f2","contact":{"external_id":"5d76d86b-3bb9-4d5a-b822-c9d86f5d8e4f","name":"Ryan Lewis","urn":"tel:+12024561111?channel=57f1078f-88aa-46f4-a59a-948a5739c03d","groups":[{"uuid":"b7cf0d83-f1c9-411c-96fd-c511a4cfa86d","name":"Testers"},{"uuid":"4f1f98fc-27a7-4a69-bbdb-24744ba739a9","name":"Males"}]},"custom_fields":{"activation_****************":"AACC55","age":"23","gender":"Male","join_date":"2017-12-02"},"flow_uuid":"50c3706e-fedb-42c0-8eab-dda3335714b7"} \ No newline at end of file +{"queue_uuid":"5c85fdf7-d54a-49dd-97ed-7e10077a1f6a","sector_uuid":"1a4bae05-993c-4f3b-91b5-80f4e09951f2","contact":{"external_id":"5d76d86b-3bb9-4d5a-b822-c9d86f5d8e4f","name":"Ryan Lewis","urn":"tel:+12024561111?channel=57f1078f-88aa-46f4-a59a-948a5739c03d","groups":[{"uuid":"b7cf0d83-f1c9-411c-96fd-c511a4cfa86d","name":"Testers"},{"uuid":"4f1f98fc-27a7-4a69-bbdb-24744ba739a9","name":"Males"}]},"custom_fields":{"activation_****************":"AACC55","age":"23","gender":"Male","join_date":"2017-12-02"},"flow_uuid":"50c3706e-fedb-42c0-8eab-dda3335714b7"} \ No newline at end of file From be78beda073ef01d2df64f57bf76c1f250de031b Mon Sep 17 00:00:00 2001 From: Robi9 Date: Tue, 3 Sep 2024 15:50:51 -0300 Subject: [PATCH 2/8] Refactor meta search --- services/external/weni/service.go | 88 ++++++++++++++++--------------- 1 file changed, 46 insertions(+), 42 deletions(-) diff --git a/services/external/weni/service.go b/services/external/weni/service.go index f68d294fd..4e696f0b4 100644 --- a/services/external/weni/service.go +++ b/services/external/weni/service.go @@ -193,6 +193,21 @@ func (s *service) Call(session flows.Session, params assets.MsgCatalogParam, log } } + retries := 2 + var productSections []flows.ProductEntry + var tracesMeta []*httpx.Trace + for i := 0; i < retries; i++ { + productSections, tracesMeta, err = ProductsSearchMeta(callResult.ProductRetailerIDS, fmt.Sprint(catalog.FacebookCatalogID()), s.rtConfig.WhatsappSystemUserToken) + callResult.Traces = append(callResult.Traces, tracesMeta...) + if err != nil { + continue + } + break + } + if err != nil { + return callResult, err + } + finalResult := &flows.MsgCatalogCall{} finalResult.Traces = callResult.Traces finalResult.ResponseJSON = callResult.ResponseJSON @@ -200,7 +215,7 @@ func (s *service) Call(session flows.Session, params assets.MsgCatalogParam, log finalResult.ProductRetailerIDS = allProductsSponsored } - for _, productEntry := range callResult.ProductRetailerIDS { + for _, productEntry := range productSections { newEntry := productEntry newEntry.ProductRetailerIDs = []string{} for _, productRetailerID := range productEntry.ProductRetailerIDs { @@ -224,22 +239,6 @@ func (s *service) Call(session flows.Session, params assets.MsgCatalogParam, log } } - retries := 2 - var newProductRetailerIDS []flows.ProductEntry - var tracesMeta []*httpx.Trace - for i := 0; i < retries; i++ { - newProductRetailerIDS, tracesMeta, err = ProductsSearchMeta(finalResult.ProductRetailerIDS, fmt.Sprint(catalog.FacebookCatalogID()), s.rtConfig.WhatsappSystemUserToken) - finalResult.Traces = append(finalResult.Traces, tracesMeta...) - if err != nil { - continue - } - break - } - if err != nil { - return finalResult, err - } - finalResult.ProductRetailerIDS = newProductRetailerIDS - return finalResult, nil } @@ -753,39 +752,44 @@ func fetchProducts(url string) (*Response, *httpx.Trace, error) { func ProductsSearchMeta(productEntryList []flows.ProductEntry, catalog string, whatsappSystemUserToken string) ([]flows.ProductEntry, []*httpx.Trace, error) { traces := []*httpx.Trace{} - for i, productEntry := range productEntryList { - filter, err := createFilter(productEntry.ProductRetailerIDs) - if err != nil { - return nil, nil, err - } - - params := url.Values{} - params.Add("fields", "[\"category\",\"name\",\"retailer_id\",\"availability\"]") - params.Add("summary", "true") - params.Add("access_token", whatsappSystemUserToken) - params.Add("filter", filter) - url_ := fmt.Sprintf("https://graph.facebook.com/v14.0/%s/products?%s", catalog, params.Encode()) + allIds := []string{} + for _, productEntry := range productEntryList { + allIds = append(allIds, productEntry.ProductRetailerIDs...) + } - response, trace, err := fetchProducts(url_) - traces = append(traces, trace) - if err != nil { - return nil, traces, err - } + filter, err := createFilter(allIds) + if err != nil { + return nil, nil, err + } - var productRetailerIDs []string + params := url.Values{} + params.Add("fields", "[\"category\",\"name\",\"retailer_id\",\"availability\"]") + params.Add("summary", "true") + params.Add("access_token", whatsappSystemUserToken) + params.Add("filter", filter) + url_ := fmt.Sprintf("https://graph.facebook.com/v14.0/%s/products?%s", catalog, params.Encode()) - // Process the data - for _, product := range response.Data { - productRetailerIDs = append(productRetailerIDs, product.RetailerID) - } - productEntryList[i].ProductRetailerIDs = productRetailerIDs + response, trace, err := fetchProducts(url_) + traces = append(traces, trace) + if err != nil { + return nil, traces, err } + newProductEntryList := []flows.ProductEntry{} for _, productEntry := range productEntryList { - if len(productEntry.ProductRetailerIDs) > 0 { - newProductEntryList = append(newProductEntryList, productEntry) + validProductIds := []string{} + for _, retailerId := range productEntry.ProductRetailerIDs { + for _, id := range response.Data { + if retailerId == id.RetailerID { + validProductIds = append(validProductIds, id.RetailerID) + } + } + } + if len(validProductIds) > 0 { + newProductEntryList = append(newProductEntryList, flows.ProductEntry{Product: productEntry.Product, ProductRetailerIDs: validProductIds}) } } + return newProductEntryList, traces, nil } From 43520735e34430c562e73834d47d7b14859a36c7 Mon Sep 17 00:00:00 2001 From: Robi9 Date: Wed, 30 Oct 2024 16:50:46 -0300 Subject: [PATCH 3/8] Truncate url for Meta search --- services/external/weni/service.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/services/external/weni/service.go b/services/external/weni/service.go index 4e696f0b4..1cea03a32 100644 --- a/services/external/weni/service.go +++ b/services/external/weni/service.go @@ -732,6 +732,7 @@ func fetchProducts(url string) (*Response, *httpx.Trace, error) { } t, err := httpx.DoTrace(client, req, nil, nil, -1) + t.Request.URL = truncateURL(t.Request.URL) if err != nil { return nil, t, err } @@ -799,3 +800,12 @@ var languages = map[string]string{ "por": "Você também pode gostar:", "spa": "También te puede interesar:", } + +func truncateURL(u *url.URL) *url.URL { + if len(u.String()) > 2048 { + if len(u.RawQuery) > 2048 { + u.RawQuery = u.RawQuery[:2048] + } + } + return u +} From a69386ad17fb98c8bc7f76985f290d75b5a5535d Mon Sep 17 00:00:00 2001 From: Robi9 Date: Thu, 31 Oct 2024 14:47:18 -0300 Subject: [PATCH 4/8] Fix size for url --- services/external/weni/service.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/external/weni/service.go b/services/external/weni/service.go index 1cea03a32..9c4a38fc0 100644 --- a/services/external/weni/service.go +++ b/services/external/weni/service.go @@ -804,7 +804,7 @@ var languages = map[string]string{ func truncateURL(u *url.URL) *url.URL { if len(u.String()) > 2048 { if len(u.RawQuery) > 2048 { - u.RawQuery = u.RawQuery[:2048] + u.RawQuery = u.RawQuery[:2047] } } return u From b7d8f84914e9be7c0057621fe4cf6e48d09b41a9 Mon Sep 17 00:00:00 2001 From: Robi9 Date: Thu, 31 Oct 2024 16:04:38 -0300 Subject: [PATCH 5/8] debug --- services/external/weni/service.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/services/external/weni/service.go b/services/external/weni/service.go index 9c4a38fc0..663830601 100644 --- a/services/external/weni/service.go +++ b/services/external/weni/service.go @@ -732,7 +732,9 @@ func fetchProducts(url string) (*Response, *httpx.Trace, error) { } t, err := httpx.DoTrace(client, req, nil, nil, -1) + fmt.Println("SIZE1: ", t.Request.URL) t.Request.URL = truncateURL(t.Request.URL) + fmt.Println("SIZE2: ", t.Request.URL) if err != nil { return nil, t, err } From 1527f3b8153637657a706255ddfc84274e52b718 Mon Sep 17 00:00:00 2001 From: Robi9 Date: Thu, 31 Oct 2024 17:02:02 -0300 Subject: [PATCH 6/8] Optimize truncateURL --- services/external/weni/service.go | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/services/external/weni/service.go b/services/external/weni/service.go index 663830601..0ee2cb2a8 100644 --- a/services/external/weni/service.go +++ b/services/external/weni/service.go @@ -732,9 +732,7 @@ func fetchProducts(url string) (*Response, *httpx.Trace, error) { } t, err := httpx.DoTrace(client, req, nil, nil, -1) - fmt.Println("SIZE1: ", t.Request.URL) t.Request.URL = truncateURL(t.Request.URL) - fmt.Println("SIZE2: ", t.Request.URL) if err != nil { return nil, t, err } @@ -804,9 +802,13 @@ var languages = map[string]string{ } func truncateURL(u *url.URL) *url.URL { - if len(u.String()) > 2048 { - if len(u.RawQuery) > 2048 { - u.RawQuery = u.RawQuery[:2047] + const maxLength = 2048 + if len(u.String()) > maxLength { + excessLength := len(u.String()) - maxLength + if excessLength < len(u.RawQuery) { + u.RawQuery = u.RawQuery[:len(u.RawQuery)-excessLength] + } else { + u.RawQuery = "" } } return u From 298becd8cb32e6f48390ac4d287f89e79fbb94a4 Mon Sep 17 00:00:00 2001 From: Roberta Moreira Date: Fri, 1 Nov 2024 15:52:21 -0300 Subject: [PATCH 7/8] Update WENI-CHANGELOG.md --- WENI-CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/WENI-CHANGELOG.md b/WENI-CHANGELOG.md index be0b9abd7..3d10c977d 100644 --- a/WENI-CHANGELOG.md +++ b/WENI-CHANGELOG.md @@ -1,3 +1,7 @@ +1.40.1 +---------- + * Refactor meta search + 1.40.0 ---------- * Use hideUnavailable for product search From 42a854eb237af154f445881a523a6b73019cc83c Mon Sep 17 00:00:00 2001 From: Rafael Soares Date: Wed, 13 Nov 2024 18:11:28 -0300 Subject: [PATCH 8/8] update weni-changelog for 1.40.2 --- WENI-CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/WENI-CHANGELOG.md b/WENI-CHANGELOG.md index 3d10c977d..831ed8358 100644 --- a/WENI-CHANGELOG.md +++ b/WENI-CHANGELOG.md @@ -1,3 +1,7 @@ +1.40.2 +---------- + * Add topic queue uuid + 1.40.1 ---------- * Refactor meta search