Documentation ¶
Index ¶
- Constants
- Variables
- func HandleFlowStartBatch(bg context.Context, config *config.Config, db *sqlx.DB, rp *redis.Pool, ...) error
- func HandleIVRStatus(ctx context.Context, db *sqlx.DB, rp *redis.Pool, org *models.OrgAssets, ...) error
- func HangupCall(ctx context.Context, config *config.Config, db *sqlx.DB, ...) error
- func RegisterClientType(channelType models.ChannelType, constructor ClientConstructor)
- func RequestCallStart(ctx context.Context, config *config.Config, db *sqlx.DB, org *models.OrgAssets, ...) (*models.ChannelConnection, error)
- func RequestCallStartForConnection(ctx context.Context, config *config.Config, db *sqlx.DB, ...) error
- func ResumeIVRFlow(ctx context.Context, config *config.Config, db *sqlx.DB, rp *redis.Pool, ...) error
- func StartIVRCron(mr *mailroom.Mailroom) error
- func StartIVRFlow(ctx context.Context, db *sqlx.DB, rp *redis.Pool, client Client, ...) error
- func WriteErrorResponse(ctx context.Context, db *sqlx.DB, client Client, ...) error
- type CallID
- type Client
- type ClientConstructor
- type RunExpiration
Constants ¶
const ( NilCallID = CallID("") NilAttachment = utils.Attachment("") // ErrorMessage that is spoken to an IVR user if an error occurs ErrorMessage = "An error has occurred, please try again later." )
Variables ¶
var CallEndedError = fmt.Errorf("call ended")
CallEndedError is our constant error for when a call has ended
var WriteAttachments = true
WriteAttachments controls whether we write attachments, used during unit testing
Functions ¶
func HandleFlowStartBatch ¶ added in v0.0.74
func HandleFlowStartBatch(bg context.Context, config *config.Config, db *sqlx.DB, rp *redis.Pool, batch *models.FlowStartBatch) error
HandleFlowStartBatch starts a batch of contacts in an IVR flow
func HandleIVRStatus ¶ added in v0.0.74
func HandleIVRStatus(ctx context.Context, db *sqlx.DB, rp *redis.Pool, org *models.OrgAssets, client Client, conn *models.ChannelConnection, r *http.Request, w http.ResponseWriter) error
HandleIVRStatus is called on status callbacks for an IVR call. We let the client decide whether the call has ended for some reason and update the state of the call and session if so
func HangupCall ¶ added in v0.0.74
func HangupCall(ctx context.Context, config *config.Config, db *sqlx.DB, conn *models.ChannelConnection) error
HangupCall hangs up the passed in call also taking care of updating the status of our call in the process
func RegisterClientType ¶
func RegisterClientType(channelType models.ChannelType, constructor ClientConstructor)
RegisterClientType registers the passed in channel type with the passed in constructor
func RequestCallStart ¶
func RequestCallStart(ctx context.Context, config *config.Config, db *sqlx.DB, org *models.OrgAssets, start *models.FlowStartBatch, contact *models.Contact) (*models.ChannelConnection, error)
RequestCallStart creates a new ChannelSession for the passed in flow start and contact, returning the created session
func RequestCallStartForConnection ¶ added in v0.0.74
func ResumeIVRFlow ¶ added in v0.0.74
func ResumeIVRFlow( ctx context.Context, config *config.Config, db *sqlx.DB, rp *redis.Pool, s3Client s3iface.S3API, resumeURL string, client Client, org *models.OrgAssets, channel *models.Channel, conn *models.ChannelConnection, c *models.Contact, urn urns.URN, r *http.Request, w http.ResponseWriter) error
ResumeIVRFlow takes care of resuming the flow in the passed in start for the passed in contact and URN
func StartIVRCron ¶ added in v0.0.74
StartIVRCron starts our cron job of retrying errored calls
func StartIVRFlow ¶ added in v0.0.74
func StartIVRFlow( ctx context.Context, db *sqlx.DB, rp *redis.Pool, client Client, resumeURL string, org *models.OrgAssets, channel *models.Channel, conn *models.ChannelConnection, c *models.Contact, urn urns.URN, startID models.StartID, r *http.Request, w http.ResponseWriter) error
StartIVRFlow takes care of starting the flow in the passed in start for the passed in contact and URN
func WriteErrorResponse ¶ added in v0.0.74
func WriteErrorResponse(ctx context.Context, db *sqlx.DB, client Client, conn *models.ChannelConnection, w http.ResponseWriter, rootErr error) error
WriteErrorResponse marks the passed in connection as errored and writes the appropriate error response to our writer
Types ¶
type Client ¶ added in v0.0.74
type Client interface { RequestCall(client *http.Client, number urns.URN, handleURL string, statusURL string) (CallID, error) HangupCall(client *http.Client, externalID string) error WriteSessionResponse(session *models.Session, resumeURL string, req *http.Request, w http.ResponseWriter) error WriteErrorResponse(w http.ResponseWriter, err error) error WriteEmptyResponse(w http.ResponseWriter, msg string) error InputForRequest(r *http.Request) (string, utils.Attachment, error) StatusForRequest(r *http.Request) (models.ConnectionStatus, int) PreprocessResume(ctx context.Context, db *sqlx.DB, rp *redis.Pool, conn *models.ChannelConnection, r *http.Request) ([]byte, error) ValidateRequestSignature(r *http.Request) error DownloadMedia(url string) (*http.Response, error) URNForRequest(r *http.Request) (urns.URN, error) CallIDForRequest(r *http.Request) (string, error) }
Client defines the interface IVR clients must satisfy
type ClientConstructor ¶
ClientConstructor defines our signature for creating a new IVR client from a channel
type RunExpiration ¶ added in v0.0.74
type RunExpiration struct { OrgID models.OrgID `db:"org_id"` FlowID models.FlowID `db:"flow_id"` ContactID flows.ContactID `db:"contact_id"` RunID models.FlowRunID `db:"run_id"` SessionID models.SessionID `db:"session_id"` ExpiresOn time.Time `db:"expires_on"` ConnectionID models.ConnectionID `db:"connection_id"` }