From 3693b72249c7fc9882d42ddd06b119469606e1e8 Mon Sep 17 00:00:00 2001 From: Robi9 Date: Wed, 22 Nov 2023 11:54:36 -0300 Subject: [PATCH 1/7] Add support for searching for Vtex products --- core/handlers/msg_catalog_created_test.go | 6 +- core/models/catalog_products_test.go | 14 +-- go.mod | 4 +- go.sum | 4 +- services/external/weni/service.go | 140 +++++++++++++++++++--- services/external/weni/service_test.go | 65 +++++++++- 6 files changed, 193 insertions(+), 40 deletions(-) diff --git a/core/handlers/msg_catalog_created_test.go b/core/handlers/msg_catalog_created_test.go index bfd2ecaa4..c6b61746a 100644 --- a/core/handlers/msg_catalog_created_test.go +++ b/core/handlers/msg_catalog_created_test.go @@ -41,6 +41,8 @@ func TestMsgCatalogCreated(t *testing.T) { {"product_retailer_id": "eb2305cc-bf39-43ad-a069-bbbfb6401acc"}, }, false, + "", + "", true, ), }, @@ -53,11 +55,13 @@ func TestMsgCatalogCreated(t *testing.T) { {"product_retailer_id": "63157bd2-6f94-4dbb-b394-ea4eb07ce156"}, }, false, + "", + "", true, ), }, testdata.Bob: []flows.Action{ - actions.NewSendMsgCatalog(handlers.NewActionUUID(), "No URNs", "", "", "View Products", "i want a water bottle", nil, false, false), + actions.NewSendMsgCatalog(handlers.NewActionUUID(), "No URNs", "", "", "View Products", "i want a water bottle", nil, false, "", "", false), }, }, Msgs: handlers.ContactMsgMap{ diff --git a/core/models/catalog_products_test.go b/core/models/catalog_products_test.go index e4389dc53..59514797e 100644 --- a/core/models/catalog_products_test.go +++ b/core/models/catalog_products_test.go @@ -1,10 +1,8 @@ package models_test import ( - "context" "fmt" "testing" - "time" "github.com/nyaruka/mailroom/core/models" "github.com/nyaruka/mailroom/testsuite" @@ -16,11 +14,6 @@ func TestCatalogProducts(t *testing.T) { ctx, _, db, _ := testsuite.Get() defer testsuite.Reset(testsuite.ResetDB) - // _, err := db.Exec(catalogProductDDL) - // if err != nil { - // t.Fatal(err) - // } - _, err := db.Exec(`INSERT INTO public.wpp_products_catalog (uuid, facebook_catalog_id, "name", created_on, modified_on, is_active, channel_id, org_id) VALUES('2be9092a-1c97-4b24-906f-f0fbe3e1e93e', '123456789', 'Catalog Dummy', now(), now(), true, $1, $2); @@ -52,10 +45,7 @@ func TestChannelUUIDForChannelID(t *testing.T) { ctx, _, db, _ := testsuite.Get() defer testsuite.Reset(testsuite.ResetAll) - ctxp, cancelp := context.WithTimeout(ctx, time.Second*5) - defer cancelp() - - ctp, err := models.ChannelUUIDForChannelID(ctxp, db, testdata.TwilioChannel.ID) + ctp, err := models.ChannelUUIDForChannelID(ctx, db, testdata.TwilioChannel.ID) assert.NoError(t, err) - assert.Equal(t, ctp, testdata.Org2Channel.UUID) + assert.Equal(t, ctp, testdata.TwilioChannel.ID) } diff --git a/go.mod b/go.mod index 4384e1268..f90883e1d 100644 --- a/go.mod +++ b/go.mod @@ -70,6 +70,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 v0.3.0-goflow-0.144.3 - +replace github.com/nyaruka/goflow => github.com/weni-ai/goflow v0.3.0-goflow-0.144.3-vtex-2-develop diff --git a/go.sum b/go.sum index 597bf4f67..643a3c9b1 100644 --- a/go.sum +++ b/go.sum @@ -204,8 +204,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 v0.3.0-goflow-0.144.3 h1:I6d3rcMBCS56McFVq0eAN17Nk8sPVDf/315uCosOWtM= -github.com/weni-ai/goflow v0.3.0-goflow-0.144.3/go.mod h1:o0xaVWP9qNcauBSlcNLa79Fm2oCPV+BDpheFRa/D40c= +github.com/weni-ai/goflow v0.3.0-goflow-0.144.3-vtex-2-develop h1:F54s7heobBMI3sIWtQdmiIzYqOxQzHGe7CiQn8iWf0o= +github.com/weni-ai/goflow v0.3.0-goflow-0.144.3-vtex-2-develop/go.mod h1:o0xaVWP9qNcauBSlcNLa79Fm2oCPV+BDpheFRa/D40c= go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= diff --git a/services/external/weni/service.go b/services/external/weni/service.go index aa28f99be..12164fe86 100644 --- a/services/external/weni/service.go +++ b/services/external/weni/service.go @@ -5,12 +5,14 @@ import ( "encoding/json" "fmt" "net/http" + "net/url" "strconv" "sync" "time" "github.com/jmoiron/sqlx" "github.com/nyaruka/gocommon/httpx" + "github.com/nyaruka/gocommon/jsonx" "github.com/nyaruka/goflow/assets" "github.com/nyaruka/goflow/flows" "github.com/nyaruka/goflow/utils" @@ -78,7 +80,7 @@ func (s *service) Call(session flows.Session, params assets.MsgCatalogParam, log content := params.ProductSearch productList, traceWeniGPT, err := GetProductListFromChatGPT(ctx, s.rtConfig, content) - callResult.TraceWeniGPT = traceWeniGPT + callResult.Traces = append(callResult.Traces, traceWeniGPT) if err != nil { return callResult, err } @@ -98,20 +100,30 @@ func (s *service) Call(session flows.Session, params assets.MsgCatalogParam, log return callResult, err } - productRetailerIDS := []string{} + productRetailerIDS := map[string][]string{} productRetailerIDMap := make(map[string]struct{}) + searchResult := []string{} + var trace *httpx.Trace for _, product := range productList { - searchResult, trace, err := GetProductListFromSentenX(product, catalog.FacebookCatalogID(), searchThreshold, s.rtConfig) - callResult.TraceSentenx = trace + if params.SearchType == "default" { + searchResult, trace, err = GetProductListFromSentenX(product, catalog.FacebookCatalogID(), searchThreshold, s.rtConfig) + callResult.Traces = append(callResult.Traces, trace) + } else if params.SearchType == "vtex" { + searchResult, trace, err = GetProductListFromVtex(product, params.SearchUrl, params.ApiType) + callResult.Traces = append(callResult.Traces, trace) + if searchResult == nil { + continue + } + } if err != nil { - return callResult, errors.Wrapf(err, "on iterate to search products on sentenx") + return callResult, errors.Wrapf(err, "on iterate to search products") } for _, prod := range searchResult { - productRetailerID := prod["product_retailer_id"] + productRetailerID := prod _, exists := productRetailerIDMap[productRetailerID] if !exists { - productRetailerIDS = append(productRetailerIDS, productRetailerID) + productRetailerIDS[product] = append(productRetailerIDS[product], productRetailerID) productRetailerIDMap[productRetailerID] = struct{}{} } } @@ -152,7 +164,7 @@ func GetProductListFromWeniGPT(rtConfig *runtime.Config, content string) ([]stri return products["products"], trace, nil } -func GetProductListFromSentenX(productSearch string, catalogID string, threshold float64, rtConfig *runtime.Config) ([]map[string]string, *httpx.Trace, error) { +func GetProductListFromSentenX(productSearch string, catalogID string, threshold float64, rtConfig *runtime.Config) ([]string, *httpx.Trace, error) { client := sentenx.NewClient(http.DefaultClient, nil, rtConfig.SentenxBaseURL) searchParams := sentenx.NewSearchRequest(productSearch, catalogID, threshold) @@ -166,18 +178,12 @@ func GetProductListFromSentenX(productSearch string, catalogID string, threshold return nil, trace, errors.New("no products found on sentenx") } - pmap := make(map[string]struct{}) + pmap := []string{} for _, p := range searchResponse.Products { - pmap[p.ProductRetailerID] = struct{}{} - } - - result := []map[string]string{} - for k := range pmap { - mapElement := map[string]string{"product_retailer_id": k} - result = append(result, mapElement) + pmap = append(pmap, p.ProductRetailerID) } - return result, trace, nil + return pmap, trace, nil } func GetProductListFromChatGPT(ctx context.Context, rtConfig *runtime.Config, content string) ([]string, *httpx.Trace, error) { @@ -215,3 +221,103 @@ func GetProductListFromChatGPT(ctx context.Context, rtConfig *runtime.Config, co } return products["products"], trace, nil } + +func GetProductListFromVtex(productSearch string, searchUrl string, apiType string) ([]string, *httpx.Trace, error) { + var result []string + var trace *httpx.Trace + var err error + + if apiType == "legacy" { + result, trace, err = VtexLegacySearch(searchUrl, productSearch) + if err != nil { + return nil, trace, err + } + } else if apiType == "intelligent" { + result, trace, err = VtexIntelligentSearch(searchUrl, productSearch) + if err != nil { + return nil, trace, err + } + } + + return result, trace, nil +} + +func VtexLegacySearch(searchUrl string, productSearch string) ([]string, *httpx.Trace, error) { + url := fmt.Sprintf("%s/%s", searchUrl, productSearch) + + req, err := httpx.NewRequest("GET", url, nil, nil) + if err != nil { + return nil, nil, err + } + + client := &http.Client{} + trace, err := httpx.DoTrace(client, req, nil, nil, -1) + if err != nil { + return nil, trace, err + } + + response := []struct { + Items []struct { + ItemId string `json:"itemId"` + } `json:"items"` + }{} + + err = jsonx.Unmarshal(trace.ResponseBody, response) + if err != nil { + return nil, trace, err + } + + result := []string{} + + if len(response) == 0 { + return result, trace, nil + } + + for _, product := range response[0:5] { + product_retailer_id := product.Items[0].ItemId + result = append(result, product_retailer_id) + } + + return result, trace, nil +} + +func VtexIntelligentSearch(searchUrl string, productSearch string) ([]string, *httpx.Trace, error) { + query := url.Values{} + query.Add("query", productSearch) + query.Add("locale", "pt-BR") + query.Add("hideUnavailableItems", "true") + + url_ := fmt.Sprintf("%s?%s", searchUrl, query.Encode()) + + req, err := httpx.NewRequest("GET", url_, nil, nil) + if err != nil { + return nil, nil, err + } + + client := &http.Client{} + trace, err := httpx.DoTrace(client, req, nil, nil, -1) + if err != nil { + return nil, trace, err + } + + response := &struct { + Products []struct { + Items []struct { + ItemId string `json:"itemId"` + } `json:"items"` + } `json:"products"` + }{} + + err = jsonx.Unmarshal(trace.ResponseBody, response) + if err != nil { + return nil, trace, err + } + + result := []string{} + for _, product := range response.Products[0:5] { + product_retailer_id := product.Items[0].ItemId + result = append(result, product_retailer_id) + } + + return result, trace, nil +} diff --git a/services/external/weni/service_test.go b/services/external/weni/service_test.go index d0eb38993..723aa1b18 100644 --- a/services/external/weni/service_test.go +++ b/services/external/weni/service_test.go @@ -1,6 +1,7 @@ package catalogs_test import ( + "fmt" "net/http" "testing" @@ -20,7 +21,7 @@ import ( ) func TestService(t *testing.T) { - _, rt, _, _ := testsuite.Get() + _, rt, db, _ := testsuite.Get() defer dates.SetNowSource(dates.DefaultNowSource) session, _, err := test.CreateTestSession("", envs.RedactionPolicyNone) @@ -69,8 +70,35 @@ func TestService(t *testing.T) { ] }`), }, + "https://vtex.com.br/legacy/search": { + httpx.NewMockResponse(200, nil, `{ + [ + { + "items": [ + { + "itemId": "1236" + } + ] + } + ] + }`), + }, + "https://vtex.com.br/intelligent/search": { + httpx.NewMockResponse(200, nil, `{ + "products": [ + { + "items": [ + { + "itemId": "1234" + } + ] + } + + ] + }`), + }, })) - + catalogs.SetDB(db) catalogService := flows.NewMsgCatalog(static.NewMsgCatalog(assets.MsgCatalogUUID(testdata.Org1.UUID), "msg_catalog", "msg_catalog", assets.ChannelUUID(uuids.New()))) svc, err := catalogs.NewService(rt.Config, http.DefaultClient, nil, catalogService, map[string]string{}) @@ -82,13 +110,40 @@ func TestService(t *testing.T) { params := assets.MsgCatalogParam{ ProductSearch: "", ChannelUUID: uuids.UUID(testdata.TwilioChannel.UUID), + SearchType: "default", + SearchUrl: "", + ApiType: "", } call, err := svc.Call(session, params, logger.Log) assert.NoError(t, err) assert.NotNil(t, call) + fmt.Println(call.ProductRetailerIDS) + assert.Equal(t, "p1", call.ProductRetailerIDS["banana"]) + assert.NotNil(t, call.Traces) - assert.Equal(t, "p1", call.ProductRetailerIDS[0]) - assert.NotNil(t, call.TraceWeniGPT) - assert.NotNil(t, call.TraceSentenx) + params = assets.MsgCatalogParam{ + ProductSearch: "", + ChannelUUID: uuids.UUID(testdata.TwilioChannel.UUID), + SearchType: "vtex", + SearchUrl: "https://vtex.com.br/legacy/search", + ApiType: "legacy", + } + call, err = svc.Call(session, params, logger.Log) + assert.NoError(t, err) + assert.NotNil(t, call) + assert.Equal(t, "1236", call.ProductRetailerIDS["banana"]) + assert.NotNil(t, call.Traces) + params = assets.MsgCatalogParam{ + ProductSearch: "", + ChannelUUID: uuids.UUID(testdata.TwilioChannel.UUID), + SearchType: "vtex", + SearchUrl: "https://vtex.com.br/intelligent/search", + ApiType: "intelligent", + } + call, err = svc.Call(session, params, logger.Log) + assert.NoError(t, err) + assert.NotNil(t, call) + assert.Equal(t, "1234", call.ProductRetailerIDS["banana"]) + assert.NotNil(t, call.Traces) } From d95a01ab5c95744a7ffac8dbf44182ead0c01025 Mon Sep 17 00:00:00 2001 From: Robi9 Date: Fri, 24 Nov 2023 16:16:05 -0300 Subject: [PATCH 2/7] Fix unmarshal --- services/external/weni/service.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/services/external/weni/service.go b/services/external/weni/service.go index 12164fe86..260aaa871 100644 --- a/services/external/weni/service.go +++ b/services/external/weni/service.go @@ -262,7 +262,7 @@ func VtexLegacySearch(searchUrl string, productSearch string) ([]string, *httpx. } `json:"items"` }{} - err = jsonx.Unmarshal(trace.ResponseBody, response) + err = jsonx.Unmarshal(trace.ResponseBody, &response) if err != nil { return nil, trace, err } @@ -308,7 +308,7 @@ func VtexIntelligentSearch(searchUrl string, productSearch string) ([]string, *h } `json:"products"` }{} - err = jsonx.Unmarshal(trace.ResponseBody, response) + err = jsonx.Unmarshal(trace.ResponseBody, &response) if err != nil { return nil, trace, err } From 430ab35eda3f7cb1055ac8879815188cf547a6f7 Mon Sep 17 00:00:00 2001 From: Robi9 Date: Mon, 27 Nov 2023 16:48:59 -0300 Subject: [PATCH 3/7] Treat vtex url --- services/external/weni/service.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/services/external/weni/service.go b/services/external/weni/service.go index 260aaa871..80d58a317 100644 --- a/services/external/weni/service.go +++ b/services/external/weni/service.go @@ -7,6 +7,7 @@ import ( "net/http" "net/url" "strconv" + "strings" "sync" "time" @@ -243,7 +244,8 @@ func GetProductListFromVtex(productSearch string, searchUrl string, apiType stri } func VtexLegacySearch(searchUrl string, productSearch string) ([]string, *httpx.Trace, error) { - url := fmt.Sprintf("%s/%s", searchUrl, productSearch) + urlAfter := strings.TrimSuffix(searchUrl, "/") + url := fmt.Sprintf("%s/%s", urlAfter, productSearch) req, err := httpx.NewRequest("GET", url, nil, nil) if err != nil { @@ -287,7 +289,9 @@ func VtexIntelligentSearch(searchUrl string, productSearch string) ([]string, *h query.Add("locale", "pt-BR") query.Add("hideUnavailableItems", "true") - url_ := fmt.Sprintf("%s?%s", searchUrl, query.Encode()) + urlAfter := strings.TrimSuffix(searchUrl, "/") + + url_ := fmt.Sprintf("%s?%s", urlAfter, query.Encode()) req, err := httpx.NewRequest("GET", url_, nil, nil) if err != nil { From 13d3c5d3e82151024492a41cb350f14633c1695f Mon Sep 17 00:00:00 2001 From: Robi9 Date: Mon, 27 Nov 2023 18:58:58 -0300 Subject: [PATCH 4/7] Fix array size --- services/external/weni/service.go | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/services/external/weni/service.go b/services/external/weni/service.go index 80d58a317..60ca2b7ac 100644 --- a/services/external/weni/service.go +++ b/services/external/weni/service.go @@ -275,7 +275,10 @@ func VtexLegacySearch(searchUrl string, productSearch string) ([]string, *httpx. return result, trace, nil } - for _, product := range response[0:5] { + for i, product := range response { + if i == 5 { + break + } product_retailer_id := product.Items[0].ItemId result = append(result, product_retailer_id) } @@ -318,7 +321,10 @@ func VtexIntelligentSearch(searchUrl string, productSearch string) ([]string, *h } result := []string{} - for _, product := range response.Products[0:5] { + for i, product := range response.Products { + if i == 5 { + break + } product_retailer_id := product.Items[0].ItemId result = append(result, product_retailer_id) } From 81ade8649e3f5f7f2c5ec7235247c3ad5ec6ac15 Mon Sep 17 00:00:00 2001 From: Robi9 Date: Tue, 28 Nov 2023 10:54:23 -0300 Subject: [PATCH 5/7] Handle sql.ErrNoRows error for catalogs --- core/models/catalog_products.go | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/core/models/catalog_products.go b/core/models/catalog_products.go index 8190d94e6..6ac6c7e03 100644 --- a/core/models/catalog_products.go +++ b/core/models/catalog_products.go @@ -150,6 +150,10 @@ func loadCatalog(ctx context.Context, db *sqlx.DB, orgID OrgID) ([]assets.MsgCat } defer rows.Close() + if err == sql.ErrNoRows || !rows.Next() { + return nil, nil + } + catalog := make([]assets.MsgCatalog, 0) for rows.Next() { msgCatalog := &MsgCatalog{} @@ -161,6 +165,11 @@ func loadCatalog(ctx context.Context, db *sqlx.DB, orgID OrgID) ([]assets.MsgCat if err != nil { return nil, err } + + if err == nil && channelUUID == assets.ChannelUUID("") { + return nil, nil + } + msgCatalog.c.ChannelUUID = channelUUID msgCatalog.c.Type = "msg_catalog" catalog = append(catalog, msgCatalog) @@ -196,8 +205,13 @@ ORDER BY func ChannelUUIDForChannelID(ctx context.Context, db *sqlx.DB, channelID ChannelID) (assets.ChannelUUID, error) { var channelUUID assets.ChannelUUID err := db.GetContext(ctx, &channelUUID, `SELECT uuid FROM channels_channel WHERE id = $1 AND is_active = TRUE`, channelID) - if err != nil { + if err != nil && err != sql.ErrNoRows { return assets.ChannelUUID(""), errors.Wrapf(err, "no channel found with id: %d", channelID) } + + if err == sql.ErrNoRows { + return assets.ChannelUUID(""), nil + } + return channelUUID, nil } From 1af532b40443f3291e0a41caf9ee10a7a021c473 Mon Sep 17 00:00:00 2001 From: Robi9 Date: Tue, 28 Nov 2023 11:26:04 -0300 Subject: [PATCH 6/7] Add one more prompt for chatGPT --- services/external/weni/service.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/services/external/weni/service.go b/services/external/weni/service.go index 60ca2b7ac..3f8857e36 100644 --- a/services/external/weni/service.go +++ b/services/external/weni/service.go @@ -203,11 +203,15 @@ func GetProductListFromChatGPT(ctx context.Context, rtConfig *runtime.Config, co Role: chatgpt.ChatMessageRoleSystem, Content: "Always use this pattern: {\"products\": []}", } + prompt4 := chatgpt.ChatCompletionMessage{ + Role: chatgpt.ChatMessageRoleSystem, + Content: "Ensure that no product names are repeated, and each product should be in singular form without any numbers or quantities.", + } question := chatgpt.ChatCompletionMessage{ Role: chatgpt.ChatMessageRoleUser, Content: content, } - completionRequest := chatgpt.NewChatCompletionRequest([]chatgpt.ChatCompletionMessage{prompt1, prompt2, prompt3, question}) + completionRequest := chatgpt.NewChatCompletionRequest([]chatgpt.ChatCompletionMessage{prompt1, prompt2, prompt3, prompt4, question}) response, trace, err := chatGPTClient.CreateChatCompletion(completionRequest) if err != nil { return nil, trace, errors.Wrapf(err, "error on chatgpt call for list products") From c4a16977c9d56d8ee98972a09cd41300a6b003c4 Mon Sep 17 00:00:00 2001 From: Robi9 Date: Thu, 30 Nov 2023 21:13:57 -0300 Subject: [PATCH 7/7] update goflow version --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index f90883e1d..3d3d5b228 100644 --- a/go.mod +++ b/go.mod @@ -70,4 +70,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 v0.3.0-goflow-0.144.3-vtex-2-develop +replace github.com/nyaruka/goflow => github.com/weni-ai/goflow v0.4.0-goflow-0.144.3 diff --git a/go.sum b/go.sum index 643a3c9b1..a78ec3dad 100644 --- a/go.sum +++ b/go.sum @@ -204,8 +204,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 v0.3.0-goflow-0.144.3-vtex-2-develop h1:F54s7heobBMI3sIWtQdmiIzYqOxQzHGe7CiQn8iWf0o= -github.com/weni-ai/goflow v0.3.0-goflow-0.144.3-vtex-2-develop/go.mod h1:o0xaVWP9qNcauBSlcNLa79Fm2oCPV+BDpheFRa/D40c= +github.com/weni-ai/goflow v0.4.0-goflow-0.144.3 h1:CqWVO7qwOrTeZGdhuWTcYy2RvjUU9sxzMV7f25RIk6c= +github.com/weni-ai/goflow v0.4.0-goflow-0.144.3/go.mod h1:o0xaVWP9qNcauBSlcNLa79Fm2oCPV+BDpheFRa/D40c= go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=