Skip to content

Commit

Permalink
Merge pull request #805 from nyaruka/WAC-pair-limit-retry
Browse files Browse the repository at this point in the history
Add send error for channel and contact pair limit hit that allow retr…
  • Loading branch information
rowanseymour authored Nov 25, 2024
2 parents 9e07701 + 3693fe4 commit d10f7e3
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 2 deletions.
7 changes: 7 additions & 0 deletions handlers/meta/handlers.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
"fmt"
"net/http"
"net/url"
"slices"
"strconv"
"strings"
"time"
Expand Down Expand Up @@ -51,6 +52,8 @@ var (
"account": "ACCOUNT_UPDATE",
"agent": "HUMAN_AGENT",
}

wacThrottlingErrorCodes = []int{4, 80007, 130429, 131048, 131056, 133016}
)

// keys for extra in channel events
Expand Down Expand Up @@ -1090,6 +1093,10 @@ func (h *handler) requestWAC(payload whatsapp.SendRequest, accessToken string, r
return courier.ErrResponseUnparseable
}

if slices.Contains(wacThrottlingErrorCodes, respPayload.Error.Code) {
return courier.ErrConnectionThrottled
}

if respPayload.Error.Code != 0 {
return courier.ErrFailedWithReason(strconv.Itoa(respPayload.Error.Code), respPayload.Error.Message)
}
Expand Down
26 changes: 24 additions & 2 deletions handlers/meta/whataspp_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -679,15 +679,37 @@ var whatsappOutgoingTests = []OutgoingTestCase{
ExpectedError: courier.ErrResponseUnparseable,
},
{
Label: "Error",
Label: "Error Channel Contact Pair limit hit",
MsgText: "Pair limit",
MsgURN: "whatsapp:250788123123",
MockResponses: map[string][]*httpx.MockResponse{
"*/12345_ID/messages": {
httpx.NewMockResponse(403, nil, []byte(`{ "error": {"message": "(#131056) (Business Account, Consumer Account) pair rate limit hit","code": 131056 }}`)),
},
},
ExpectedError: courier.ErrConnectionThrottled,
},
{
Label: "Error Throttled",
MsgText: "Error",
MsgURN: "whatsapp:250788123123",
MockResponses: map[string][]*httpx.MockResponse{
"*/12345_ID/messages": {
httpx.NewMockResponse(403, nil, []byte(`{ "error": {"message": "(#130429) Rate limit hit","code": 130429 }}`)),
},
},
ExpectedError: courier.ErrFailedWithReason("130429", "(#130429) Rate limit hit"),
ExpectedError: courier.ErrConnectionThrottled,
},
{
Label: "Error",
MsgText: "Error",
MsgURN: "whatsapp:250788123123",
MockResponses: map[string][]*httpx.MockResponse{
"*/12345_ID/messages": {
httpx.NewMockResponse(403, nil, []byte(`{ "error": {"message": "(#368) Temporarily blocked for policies violations","code": 368 }}`)),
},
},
ExpectedError: courier.ErrFailedWithReason("368", "(#368) Temporarily blocked for policies violations"),
},
{
Label: "Error Connection",
Expand Down

0 comments on commit d10f7e3

Please sign in to comment.