From 9077b5f88927a7612c0528e21366601833bc42e3 Mon Sep 17 00:00:00 2001 From: Rowan Seymour Date: Fri, 13 Aug 2021 12:46:13 -0500 Subject: [PATCH 1/4] Reinstate channel connection error_count and write it --- core/models/channel_connection.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/core/models/channel_connection.go b/core/models/channel_connection.go index 0dcd9d5e5..20bae1e63 100644 --- a/core/models/channel_connection.go +++ b/core/models/channel_connection.go @@ -73,6 +73,7 @@ type ChannelConnection struct { ConnectionType ConnectionType `json:"connection_type" db:"connection_type"` Duration int `json:"duration" db:"duration"` RetryCount int `json:"retry_count" db:"retry_count"` + ErrorCount int `json:"error_count" db:"retry_count"` NextAttempt *time.Time `json:"next_attempt" db:"next_attempt"` ChannelID ChannelID `json:"channel_id" db:"channel_id"` ContactID ContactID `json:"contact_id" db:"contact_id"` @@ -111,6 +112,7 @@ INSERT INTO channel_id, contact_id, contact_urn_id, + error_count, retry_count ) @@ -126,6 +128,7 @@ VALUES( :channel_id, :contact_id, :contact_urn_id, + 0, 0 ) RETURNING @@ -196,6 +199,7 @@ SELECT cc.connection_type as connection_type, cc.duration as duration, cc.retry_count as retry_count, + cc.error_count as error_count, cc.next_attempt as next_attempt, cc.channel_id as channel_id, cc.contact_id as contact_id, @@ -232,6 +236,7 @@ SELECT cc.connection_type as connection_type, cc.duration as duration, cc.retry_count as retry_count, + cc.error_count as error_count, cc.next_attempt as next_attempt, cc.channel_id as channel_id, cc.contact_id as contact_id, @@ -273,6 +278,7 @@ SELECT cc.connection_type as connection_type, cc.duration as duration, cc.retry_count as retry_count, + cc.error_count as error_count, cc.next_attempt as next_attempt, cc.channel_id as channel_id, cc.contact_id as contact_id, @@ -352,6 +358,7 @@ func (c *ChannelConnection) MarkErrored(ctx context.Context, db Queryer, now tim if c.c.RetryCount < ConnectionMaxRetries && retryWait != nil { c.c.RetryCount++ + c.c.ErrorCount++ next := now.Add(*retryWait) c.c.NextAttempt = &next } else { @@ -360,8 +367,8 @@ func (c *ChannelConnection) MarkErrored(ctx context.Context, db Queryer, now tim } _, err := db.ExecContext(ctx, - `UPDATE channels_channelconnection SET status = $2, ended_on = $3, retry_count = $4, next_attempt = $5, modified_on = NOW() WHERE id = $1`, - c.c.ID, c.c.Status, c.c.EndedOn, c.c.RetryCount, c.c.NextAttempt, + `UPDATE channels_channelconnection SET status = $2, ended_on = $3, retry_count = $4, error_count = $5, next_attempt = $6, modified_on = NOW() WHERE id = $1`, + c.c.ID, c.c.Status, c.c.EndedOn, c.c.RetryCount, c.c.ErrorCount, c.c.NextAttempt, ) if err != nil { From e0b898e3dd5de19eeb13eca008dc0ed5580b8334 Mon Sep 17 00:00:00 2001 From: Rowan Seymour Date: Fri, 13 Aug 2021 16:33:56 -0500 Subject: [PATCH 2/4] Add ChannelConnection.errorReason and start populating --- core/ivr/ivr.go | 10 +++-- core/ivr/twiml/twiml.go | 25 +++++++----- core/ivr/vonage/vonage.go | 28 ++++++++------ core/models/channel_connection.go | 62 ++++++++++++++++++++---------- core/tasks/ivr/worker_test.go | 4 +- mailroom_test.dump | Bin 1859158 -> 1859218 bytes 6 files changed, 81 insertions(+), 48 deletions(-) diff --git a/core/ivr/ivr.go b/core/ivr/ivr.go index e2e4fbda5..79ccaec5b 100644 --- a/core/ivr/ivr.go +++ b/core/ivr/ivr.go @@ -78,7 +78,9 @@ type Client interface { ResumeForRequest(r *http.Request) (Resume, error) - StatusForRequest(r *http.Request) (models.ConnectionStatus, int) + // StatusForRequest returns the call status for the passed in request, and if it's an error the reason, + // and if available, the current call duration + StatusForRequest(r *http.Request) (models.ConnectionStatus, models.ConnectionError, int) PreprocessResume(ctx context.Context, db *sqlx.DB, rp *redis.Pool, conn *models.ChannelConnection, r *http.Request) ([]byte, error) @@ -445,7 +447,7 @@ func ResumeIVRFlow( } // make sure our call is still happening - status, _ := client.StatusForRequest(r) + status, _, _ := client.StatusForRequest(r) if status != models.ConnectionStatusInProgress { err := conn.UpdateStatus(ctx, rt.DB, status, 0, time.Now()) if err != nil { @@ -588,7 +590,7 @@ func buildMsgResume( // ended for some reason and update the state of the call and session if so func HandleIVRStatus(ctx context.Context, rt *runtime.Runtime, oa *models.OrgAssets, client Client, conn *models.ChannelConnection, r *http.Request, w http.ResponseWriter) error { // read our status and duration from our client - status, duration := client.StatusForRequest(r) + status, errorReason, duration := client.StatusForRequest(r) // if we errored schedule a retry if appropriate if status == models.ConnectionStatusErrored { @@ -609,7 +611,7 @@ func HandleIVRStatus(ctx context.Context, rt *runtime.Runtime, oa *models.OrgAss return errors.Wrapf(err, "unable to load flow: %d", start.FlowID()) } - conn.MarkErrored(ctx, rt.DB, time.Now(), flow.IVRRetryWait()) + conn.MarkErrored(ctx, rt.DB, time.Now(), flow.IVRRetryWait(), errorReason) if conn.Status() == models.ConnectionStatusErrored { return client.WriteEmptyResponse(w, fmt.Sprintf("status updated: %s next_attempt: %s", conn.Status(), conn.NextAttempt())) diff --git a/core/ivr/twiml/twiml.go b/core/ivr/twiml/twiml.go index f95ba7150..dd67d3e34 100644 --- a/core/ivr/twiml/twiml.go +++ b/core/ivr/twiml/twiml.go @@ -287,37 +287,42 @@ func (c *client) ResumeForRequest(r *http.Request) (ivr.Resume, error) { } } -// StatusForRequest returns the current call status for the passed in status (and optional duration if known) -func (c *client) StatusForRequest(r *http.Request) (models.ConnectionStatus, int) { +// StatusForRequest returns the call status for the passed in request, and if it's an error the reason, +// and if available, the current call duration +func (c *client) StatusForRequest(r *http.Request) (models.ConnectionStatus, models.ConnectionError, int) { // we re-use our status callback for AMD results which will have an AnsweredBy field but no CallStatus field answeredBy := r.Form.Get("AnsweredBy") if answeredBy != "" { switch answeredBy { case "machine_start", "fax": - return models.ConnectionStatusErrored, 0 + return models.ConnectionStatusErrored, models.ConnectionErrorMachine, 0 } - return models.ConnectionStatusInProgress, 0 + return models.ConnectionStatusInProgress, models.ConnectionNoError, 0 } status := r.Form.Get("CallStatus") switch status { case "queued", "ringing": - return models.ConnectionStatusWired, 0 + return models.ConnectionStatusWired, models.ConnectionNoError, 0 case "in-progress", "initiated": - return models.ConnectionStatusInProgress, 0 + return models.ConnectionStatusInProgress, models.ConnectionNoError, 0 case "completed": duration, _ := strconv.Atoi(r.Form.Get("CallDuration")) - return models.ConnectionStatusCompleted, duration + return models.ConnectionStatusCompleted, models.ConnectionNoError, duration - case "busy", "no-answer", "canceled", "failed": - return models.ConnectionStatusErrored, 0 + case "busy": + return models.ConnectionStatusErrored, models.ConnectionErrorBusy, 0 + case "no-answer": + return models.ConnectionStatusErrored, models.ConnectionErrorNoAnswer, 0 + case "canceled", "failed": + return models.ConnectionStatusErrored, models.ConnectionNoError, 0 default: logrus.WithField("call_status", status).Error("unknown call status in status callback") - return models.ConnectionStatusFailed, 0 + return models.ConnectionStatusFailed, models.ConnectionErrorProvider, 0 } } diff --git a/core/ivr/vonage/vonage.go b/core/ivr/vonage/vonage.go index 4bbe551c3..a00f78f81 100644 --- a/core/ivr/vonage/vonage.go +++ b/core/ivr/vonage/vonage.go @@ -543,47 +543,53 @@ type StatusRequest struct { } // StatusForRequest returns the current call status for the passed in status (and optional duration if known) -func (c *client) StatusForRequest(r *http.Request) (models.ConnectionStatus, int) { +func (c *client) StatusForRequest(r *http.Request) (models.ConnectionStatus, models.ConnectionError, int) { // this is a resume, call is in progress, no need to look at the body if r.Form.Get("action") == "resume" { - return models.ConnectionStatusInProgress, 0 + return models.ConnectionStatusInProgress, models.ConnectionNoError, 0 } status := &StatusRequest{} bb, err := readBody(r) if err != nil { logrus.WithError(err).Error("error reading status request body") - return models.ConnectionStatusErrored, 0 + return models.ConnectionStatusErrored, models.ConnectionNoError, 0 } err = json.Unmarshal(bb, status) if err != nil { logrus.WithError(err).WithField("body", string(bb)).Error("error unmarshalling ncco status") - return models.ConnectionStatusErrored, 0 + return models.ConnectionStatusErrored, models.ConnectionNoError, 0 } // transfer status callbacks have no status, safe to ignore them if status.Status == "" { - return models.ConnectionStatusInProgress, 0 + return models.ConnectionStatusInProgress, models.ConnectionNoError, 0 } switch status.Status { case "started", "ringing": - return models.ConnectionStatusWired, 0 + return models.ConnectionStatusWired, models.ConnectionNoError, 0 case "answered": - return models.ConnectionStatusInProgress, 0 + return models.ConnectionStatusInProgress, models.ConnectionNoError, 0 case "completed": duration, _ := strconv.Atoi(status.Duration) - return models.ConnectionStatusCompleted, duration + return models.ConnectionStatusCompleted, models.ConnectionNoError, duration - case "rejected", "busy", "unanswered", "timeout", "failed", "machine": - return models.ConnectionStatusErrored, 0 + case "busy": + return models.ConnectionStatusErrored, models.ConnectionErrorBusy, 0 + case "rejected", "unanswered", "timeout": + return models.ConnectionStatusErrored, models.ConnectionErrorNoAnswer, 0 + case "machine": + return models.ConnectionStatusErrored, models.ConnectionErrorMachine, 0 + case "failed": + return models.ConnectionStatusErrored, models.ConnectionErrorProvider, 0 default: logrus.WithField("status", status.Status).Error("unknown call status in ncco callback") - return models.ConnectionStatusFailed, 0 + return models.ConnectionStatusFailed, models.ConnectionErrorProvider, 0 } } diff --git a/core/models/channel_connection.go b/core/models/channel_connection.go index 20bae1e63..f65462d3a 100644 --- a/core/models/channel_connection.go +++ b/core/models/channel_connection.go @@ -20,6 +20,9 @@ const NilConnectionID = ConnectionID(0) // ConnectionStatus is the type for the status of a connection type ConnectionStatus string +// ConnectionError is the type for the reason of an errored connection +type ConnectionError null.String + // ConnectionDirection is the type for the direction of a connection type ConnectionDirection string @@ -39,16 +42,19 @@ const ( // connection status constants const ( - ConnectionStatusPending = ConnectionStatus("P") - ConnectionStatusQueued = ConnectionStatus("Q") - ConnectionStatusWired = ConnectionStatus("W") - ConnectionStatusInProgress = ConnectionStatus("I") - ConnectionStatusBusy = ConnectionStatus("B") - ConnectionStatusFailed = ConnectionStatus("F") - ConnectionStatusErrored = ConnectionStatus("E") - ConnectionStatusNoAnswer = ConnectionStatus("N") - ConnectionStatusCancelled = ConnectionStatus("C") - ConnectionStatusCompleted = ConnectionStatus("D") + ConnectionStatusPending = ConnectionStatus("P") // used for initial creation in database + ConnectionStatusQueued = ConnectionStatus("Q") // call can't be wired yet and is queued locally + ConnectionStatusWired = ConnectionStatus("W") // call has been requested on the IVR provider + ConnectionStatusInProgress = ConnectionStatus("I") // call was answered and is in progress + ConnectionStatusCompleted = ConnectionStatus("D") // call was completed successfully + ConnectionStatusErrored = ConnectionStatus("E") // temporary failure (will be retried) + ConnectionStatusFailed = ConnectionStatus("F") // permanent failure + + ConnectionErrorProvider = ConnectionError("P") + ConnectionErrorBusy = ConnectionError("B") + ConnectionErrorNoAnswer = ConnectionError("N") + ConnectionErrorMachine = ConnectionError("M") + ConnectionNoError = ConnectionError("") ConnectionMaxRetries = 3 @@ -72,8 +78,9 @@ type ChannelConnection struct { EndedOn *time.Time `json:"ended_on" db:"ended_on"` ConnectionType ConnectionType `json:"connection_type" db:"connection_type"` Duration int `json:"duration" db:"duration"` - RetryCount int `json:"retry_count" db:"retry_count"` - ErrorCount int `json:"error_count" db:"retry_count"` + RetryCount int `json:"retry_count" db:"retry_count"` // TODO replace use with error_count + ErrorReason null.String `json:"error_reason" db:"error_reason"` + ErrorCount int `json:"error_count" db:"error_count"` NextAttempt *time.Time `json:"next_attempt" db:"next_attempt"` ChannelID ChannelID `json:"channel_id" db:"channel_id"` ContactID ContactID `json:"contact_id" db:"contact_id"` @@ -89,13 +96,16 @@ func (c *ChannelConnection) ID() ConnectionID { return c.c.ID } // Status returns the status of this connection func (c *ChannelConnection) Status() ConnectionStatus { return c.c.Status } -func (c *ChannelConnection) NextAttempt() *time.Time { return c.c.NextAttempt } -func (c *ChannelConnection) ExternalID() string { return c.c.ExternalID } -func (c *ChannelConnection) OrgID() OrgID { return c.c.OrgID } -func (c *ChannelConnection) ContactID() ContactID { return c.c.ContactID } -func (c *ChannelConnection) ContactURNID() URNID { return c.c.ContactURNID } -func (c *ChannelConnection) ChannelID() ChannelID { return c.c.ChannelID } -func (c *ChannelConnection) StartID() StartID { return c.c.StartID } +func (c *ChannelConnection) ExternalID() string { return c.c.ExternalID } +func (c *ChannelConnection) OrgID() OrgID { return c.c.OrgID } +func (c *ChannelConnection) ContactID() ContactID { return c.c.ContactID } +func (c *ChannelConnection) ContactURNID() URNID { return c.c.ContactURNID } +func (c *ChannelConnection) ChannelID() ChannelID { return c.c.ChannelID } +func (c *ChannelConnection) StartID() StartID { return c.c.StartID } + +func (c *ChannelConnection) ErrorReason() ConnectionError { return ConnectionError(c.c.ErrorReason) } +func (c *ChannelConnection) ErrorCount() int { return c.c.ErrorCount } +func (c *ChannelConnection) NextAttempt() *time.Time { return c.c.NextAttempt } const insertConnectionSQL = ` INSERT INTO @@ -199,6 +209,7 @@ SELECT cc.connection_type as connection_type, cc.duration as duration, cc.retry_count as retry_count, + cc.error_reason as error_reason, cc.error_count as error_count, cc.next_attempt as next_attempt, cc.channel_id as channel_id, @@ -236,6 +247,7 @@ SELECT cc.connection_type as connection_type, cc.duration as duration, cc.retry_count as retry_count, + cc.error_reason as error_reason, cc.error_count as error_count, cc.next_attempt as next_attempt, cc.channel_id as channel_id, @@ -278,6 +290,7 @@ SELECT cc.connection_type as connection_type, cc.duration as duration, cc.retry_count as retry_count, + cc.error_reason as error_reason, cc.error_count as error_count, cc.next_attempt as next_attempt, cc.channel_id as channel_id, @@ -352,11 +365,18 @@ func (c *ChannelConnection) MarkStarted(ctx context.Context, db Queryer, now tim } // MarkErrored updates the status for this connection to errored and schedules a retry if appropriate -func (c *ChannelConnection) MarkErrored(ctx context.Context, db Queryer, now time.Time, retryWait *time.Duration) error { +func (c *ChannelConnection) MarkErrored(ctx context.Context, db Queryer, now time.Time, retryWait *time.Duration, errorReason ConnectionError) error { c.c.Status = ConnectionStatusErrored + c.c.ErrorReason = null.String(errorReason) c.c.EndedOn = &now - if c.c.RetryCount < ConnectionMaxRetries && retryWait != nil { + // TODO remove this once we only use error_count + errorCount := c.c.ErrorCount + if c.c.RetryCount > errorCount { + errorCount = c.c.RetryCount + } + + if errorCount < ConnectionMaxRetries && retryWait != nil { c.c.RetryCount++ c.c.ErrorCount++ next := now.Add(*retryWait) diff --git a/core/tasks/ivr/worker_test.go b/core/tasks/ivr/worker_test.go index 6ae035b59..05671071e 100644 --- a/core/tasks/ivr/worker_test.go +++ b/core/tasks/ivr/worker_test.go @@ -102,8 +102,8 @@ func (c *MockClient) ResumeForRequest(r *http.Request) (ivr.Resume, error) { return nil, nil } -func (c *MockClient) StatusForRequest(r *http.Request) (models.ConnectionStatus, int) { - return models.ConnectionStatusFailed, 10 +func (c *MockClient) StatusForRequest(r *http.Request) (models.ConnectionStatus, models.ConnectionError, int) { + return models.ConnectionStatusFailed, models.ConnectionErrorProvider, 10 } func (c *MockClient) PreprocessResume(ctx context.Context, db *sqlx.DB, rp *redis.Pool, conn *models.ChannelConnection, r *http.Request) ([]byte, error) { diff --git a/mailroom_test.dump b/mailroom_test.dump index f85d1aabcf4b7de2a6aa068b496f9b00ae170fb0..a05e40b3b47cf86e2737bbb0546f37f9353e69bf 100644 GIT binary patch delta 66362 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 _i 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 L-{(hl@#6juH}8A3 delta 66567 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

rR6H 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 Date: Fri, 13 Aug 2021 16:52:23 -0500 Subject: [PATCH 3/4] Revert previous to query to fetch calls to retry so we only look as statuses Q and E --- core/models/channel_connection.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/models/channel_connection.go b/core/models/channel_connection.go index f65462d3a..0a7c50138 100644 --- a/core/models/channel_connection.go +++ b/core/models/channel_connection.go @@ -303,7 +303,7 @@ FROM LEFT OUTER JOIN flows_flowstart_connections fsc ON cc.id = fsc.channelconnection_id WHERE cc.connection_type = 'V' AND - cc.status IN ('Q', 'N', 'B', 'E') AND + cc.status IN ('Q', 'E') AND next_attempt < NOW() ORDER BY cc.next_attempt ASC From f64cd83b5842903e9409c2de33d19a3f1daccc07 Mon Sep 17 00:00:00 2001 From: Rowan Seymour Date: Mon, 16 Aug 2021 12:03:52 -0500 Subject: [PATCH 4/4] Add tests for Twilio AMD, fix update of error_reason --- core/ivr/twiml/twiml.go | 10 +-- core/ivr/vonage/vonage.go | 17 ++--- core/models/channel_connection.go | 5 +- web/ivr/ivr_test.go | 116 ++++++++++++++++++++---------- 4 files changed, 95 insertions(+), 53 deletions(-) diff --git a/core/ivr/twiml/twiml.go b/core/ivr/twiml/twiml.go index dd67d3e34..3bdc2c707 100644 --- a/core/ivr/twiml/twiml.go +++ b/core/ivr/twiml/twiml.go @@ -297,28 +297,28 @@ func (c *client) StatusForRequest(r *http.Request) (models.ConnectionStatus, mod case "machine_start", "fax": return models.ConnectionStatusErrored, models.ConnectionErrorMachine, 0 } - return models.ConnectionStatusInProgress, models.ConnectionNoError, 0 + return models.ConnectionStatusInProgress, "", 0 } status := r.Form.Get("CallStatus") switch status { case "queued", "ringing": - return models.ConnectionStatusWired, models.ConnectionNoError, 0 + return models.ConnectionStatusWired, "", 0 case "in-progress", "initiated": - return models.ConnectionStatusInProgress, models.ConnectionNoError, 0 + return models.ConnectionStatusInProgress, "", 0 case "completed": duration, _ := strconv.Atoi(r.Form.Get("CallDuration")) - return models.ConnectionStatusCompleted, models.ConnectionNoError, duration + return models.ConnectionStatusCompleted, "", duration case "busy": return models.ConnectionStatusErrored, models.ConnectionErrorBusy, 0 case "no-answer": return models.ConnectionStatusErrored, models.ConnectionErrorNoAnswer, 0 case "canceled", "failed": - return models.ConnectionStatusErrored, models.ConnectionNoError, 0 + return models.ConnectionStatusErrored, "", 0 default: logrus.WithField("call_status", status).Error("unknown call status in status callback") diff --git a/core/ivr/vonage/vonage.go b/core/ivr/vonage/vonage.go index a00f78f81..a05b628dd 100644 --- a/core/ivr/vonage/vonage.go +++ b/core/ivr/vonage/vonage.go @@ -546,37 +546,38 @@ type StatusRequest struct { func (c *client) StatusForRequest(r *http.Request) (models.ConnectionStatus, models.ConnectionError, int) { // this is a resume, call is in progress, no need to look at the body if r.Form.Get("action") == "resume" { - return models.ConnectionStatusInProgress, models.ConnectionNoError, 0 + return models.ConnectionStatusInProgress, "", 0 } - status := &StatusRequest{} bb, err := readBody(r) if err != nil { logrus.WithError(err).Error("error reading status request body") - return models.ConnectionStatusErrored, models.ConnectionNoError, 0 + return models.ConnectionStatusErrored, models.ConnectionErrorProvider, 0 } + + status := &StatusRequest{} err = json.Unmarshal(bb, status) if err != nil { logrus.WithError(err).WithField("body", string(bb)).Error("error unmarshalling ncco status") - return models.ConnectionStatusErrored, models.ConnectionNoError, 0 + return models.ConnectionStatusErrored, models.ConnectionErrorProvider, 0 } // transfer status callbacks have no status, safe to ignore them if status.Status == "" { - return models.ConnectionStatusInProgress, models.ConnectionNoError, 0 + return models.ConnectionStatusInProgress, "", 0 } switch status.Status { case "started", "ringing": - return models.ConnectionStatusWired, models.ConnectionNoError, 0 + return models.ConnectionStatusWired, "", 0 case "answered": - return models.ConnectionStatusInProgress, models.ConnectionNoError, 0 + return models.ConnectionStatusInProgress, "", 0 case "completed": duration, _ := strconv.Atoi(status.Duration) - return models.ConnectionStatusCompleted, models.ConnectionNoError, duration + return models.ConnectionStatusCompleted, "", duration case "busy": return models.ConnectionStatusErrored, models.ConnectionErrorBusy, 0 diff --git a/core/models/channel_connection.go b/core/models/channel_connection.go index 0a7c50138..b6953c7dc 100644 --- a/core/models/channel_connection.go +++ b/core/models/channel_connection.go @@ -54,7 +54,6 @@ const ( ConnectionErrorBusy = ConnectionError("B") ConnectionErrorNoAnswer = ConnectionError("N") ConnectionErrorMachine = ConnectionError("M") - ConnectionNoError = ConnectionError("") ConnectionMaxRetries = 3 @@ -387,8 +386,8 @@ func (c *ChannelConnection) MarkErrored(ctx context.Context, db Queryer, now tim } _, err := db.ExecContext(ctx, - `UPDATE channels_channelconnection SET status = $2, ended_on = $3, retry_count = $4, error_count = $5, next_attempt = $6, modified_on = NOW() WHERE id = $1`, - c.c.ID, c.c.Status, c.c.EndedOn, c.c.RetryCount, c.c.ErrorCount, c.c.NextAttempt, + `UPDATE channels_channelconnection SET status = $2, ended_on = $3, retry_count = $4, error_reason = $5, error_count = $6, next_attempt = $7, modified_on = NOW() WHERE id = $1`, + c.c.ID, c.c.Status, c.c.EndedOn, c.c.RetryCount, c.c.ErrorReason, c.c.ErrorCount, c.c.NextAttempt, ) if err != nil { diff --git a/web/ivr/ivr_test.go b/web/ivr/ivr_test.go index ba7fa3d8c..1ebc8c8d4 100644 --- a/web/ivr/ivr_test.go +++ b/web/ivr/ivr_test.go @@ -11,6 +11,7 @@ import ( "sync" "testing" + "github.com/nyaruka/gocommon/jsonx" "github.com/nyaruka/goflow/test" "github.com/nyaruka/mailroom/config" "github.com/nyaruka/mailroom/core/models" @@ -30,6 +31,30 @@ import ( ivr_tasks "github.com/nyaruka/mailroom/core/tasks/ivr" ) +// mocks the Twilio API +func mockTwilioHandler(w http.ResponseWriter, r *http.Request) { + r.ParseForm() + logrus.WithField("method", r.Method).WithField("url", r.URL.String()).WithField("form", r.Form).Info("test server called") + if strings.HasSuffix(r.URL.String(), "Calls.json") { + to := r.Form.Get("To") + if to == "+16055741111" { + w.WriteHeader(http.StatusCreated) + w.Write([]byte(`{"sid": "Call1"}`)) + } else if to == "+16055742222" { + w.WriteHeader(http.StatusCreated) + w.Write([]byte(`{"sid": "Call2"}`)) + } else if to == "+16055743333" { + w.WriteHeader(http.StatusCreated) + w.Write([]byte(`{"sid": "Call3"}`)) + } else { + w.WriteHeader(http.StatusNotFound) + } + } + if strings.HasSuffix(r.URL.String(), "recording.mp3") { + w.WriteHeader(http.StatusOK) + } +} + func TestTwilioIVR(t *testing.T) { ctx, _, db, rp := testsuite.Get() rc := rp.Get() @@ -41,25 +66,7 @@ func TestTwilioIVR(t *testing.T) { }() // start test server - ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - r.ParseForm() - logrus.WithField("method", r.Method).WithField("url", r.URL.String()).WithField("form", r.Form).Info("test server called") - if strings.HasSuffix(r.URL.String(), "Calls.json") { - to := r.Form.Get("To") - if to == "+16055741111" { - w.WriteHeader(http.StatusCreated) - w.Write([]byte(`{"sid": "Call1"}`)) - } else if to == "+16055743333" { - w.WriteHeader(http.StatusCreated) - w.Write([]byte(`{"sid": "Call2"}`)) - } else { - w.WriteHeader(http.StatusNotFound) - } - } - if strings.HasSuffix(r.URL.String(), "recording.mp3") { - w.WriteHeader(http.StatusOK) - } - })) + ts := httptest.NewServer(http.HandlerFunc(mockTwilioHandler)) defer ts.Close() twiml.BaseURL = ts.URL @@ -73,37 +80,51 @@ func TestTwilioIVR(t *testing.T) { // add auth tokens db.MustExec(`UPDATE channels_channel SET config = '{"auth_token": "token", "account_sid": "sid", "callback_domain": "localhost:8090"}' WHERE id = $1`, testdata.TwilioChannel.ID) - // create a flow start for cathy and george - parentSummary := json.RawMessage(`{"flow": {"name": "IVR Flow", "uuid": "2f81d0ea-4d75-4843-9371-3f7465311cce"}, "uuid": "8bc73097-ac57-47fb-82e5-184f8ec6dbef", "status": "active", "contact": {"id": 10000, "name": "Cathy", "urns": ["tel:+16055741111?id=10000&priority=50"], "uuid": "6393abc0-283d-4c9b-a1b3-641a035c34bf", "fields": {"gender": {"text": "F"}}, "groups": [{"name": "Doctors", "uuid": "c153e265-f7c9-4539-9dbc-9b358714b638"}], "timezone": "America/Los_Angeles", "created_on": "2019-07-23T09:35:01.439614-07:00"}, "results": {}}`) - + // create a flow start for cathy bob, and george + parentSummary := json.RawMessage(`{ + "flow": {"name": "IVR Flow", "uuid": "2f81d0ea-4d75-4843-9371-3f7465311cce"}, + "uuid": "8bc73097-ac57-47fb-82e5-184f8ec6dbef", + "status": "active", + "contact": { + "id": 10000, + "name": "Cathy", + "urns": ["tel:+16055741111?id=10000&priority=50"], + "uuid": "6393abc0-283d-4c9b-a1b3-641a035c34bf", + "fields": {"gender": {"text": "F"}}, + "groups": [{"name": "Doctors", "uuid": "c153e265-f7c9-4539-9dbc-9b358714b638"}], + "timezone": "America/Los_Angeles", + "created_on": "2019-07-23T09:35:01.439614-07:00" + }, + "results": {} + }`) start := models.NewFlowStart(testdata.Org1.ID, models.StartTypeTrigger, models.FlowTypeVoice, testdata.IVRFlow.ID, models.DoRestartParticipants, models.DoIncludeActive). - WithContactIDs([]models.ContactID{testdata.Cathy.ID, testdata.George.ID}). + WithContactIDs([]models.ContactID{testdata.Cathy.ID, testdata.Bob.ID, testdata.George.ID}). WithParentSummary(parentSummary) err := models.InsertFlowStarts(ctx, db, []*models.FlowStart{start}) - assert.NoError(t, err) + require.NoError(t, err) // call our master starter err = starts.CreateFlowBatches(ctx, db, rp, nil, start) - assert.NoError(t, err) + require.NoError(t, err) // start our task - task, err := queue.PopNextTask(rc, queue.HandlerQueue) - assert.NoError(t, err) + task, err := queue.PopNextTask(rc, queue.BatchQueue) + require.NoError(t, err) batch := &models.FlowStartBatch{} - err = json.Unmarshal(task.Task, batch) - assert.NoError(t, err) + jsonx.MustUnmarshal(task.Task, batch) - // request our call to start + // request our calls to start err = ivr_tasks.HandleFlowStartBatch(ctx, config.Mailroom, db, rp, batch) - assert.NoError(t, err) + require.NoError(t, err) + // check our 3 contacts have 3 wired calls testsuite.AssertQuery(t, db, `SELECT COUNT(*) FROM channels_channelconnection WHERE contact_id = $1 AND status = $2 AND external_id = $3`, testdata.Cathy.ID, models.ConnectionStatusWired, "Call1").Returns(1) - - testsuite.AssertQuery(t, db, - `SELECT COUNT(*) FROM channels_channelconnection WHERE contact_id = $1 AND status = $2 AND external_id = $3`, - testdata.George.ID, models.ConnectionStatusWired, "Call2").Returns(1) + testsuite.AssertQuery(t, db, `SELECT COUNT(*) FROM channels_channelconnection WHERE contact_id = $1 AND status = $2 AND external_id = $3`, + testdata.Bob.ID, models.ConnectionStatusWired, "Call2").Returns(1) + testsuite.AssertQuery(t, db, `SELECT COUNT(*) FROM channels_channelconnection WHERE contact_id = $1 AND status = $2 AND external_id = $3`, + testdata.George.ID, models.ConnectionStatusWired, "Call3").Returns(1) tcs := []struct { label string @@ -240,6 +261,25 @@ func TestTwilioIVR(t *testing.T) { expectedStatus: 200, expectedResponse: "", }, + { + label: "call3 started", + url: fmt.Sprintf("/ivr/c/%s/handle?action=start&connection=3", testdata.TwilioChannel.UUID), + form: nil, + expectedStatus: 200, + contains: []string{`Hello there. Please enter one or two. This flow was triggered by Cathy`}, + }, + { + label: "answer machine detection sent to tell us we're talking to a voicemail", + url: fmt.Sprintf("/ivr/c/%s/status", testdata.TwilioChannel.UUID), + form: url.Values{ + "CallSid": []string{"Call3"}, + "AccountSid": []string{"sid"}, + "AnsweredBy": []string{"machine_start"}, + "MachineDetectionDuration": []string{"2000"}, + }, + expectedStatus: 200, + contains: []string{"