MCPcopy Index your code
hub / github.com/NdoleStudio/httpsms / SendMessage

Method SendMessage

api/pkg/services/message_service.go:483–528  ·  view source on GitHub ↗

SendMessage a new message

(ctx context.Context, params MessageSendParams)

Source from the content-addressed store, hash-verified

481
482// SendMessage a new message
483func (service *MessageService) SendMessage(ctx context.Context, params MessageSendParams) (*entities.Message, error) {
484 ctx, span := service.tracer.Start(ctx)
485 defer span.End()
486
487 ctxLogger := service.tracer.CtxLogger(service.logger, span)
488
489 sendAttempts, sim, messagesPerMinute := service.phoneSettings(ctx, params.UserID, phonenumbers.Format(params.Owner, phonenumbers.E164))
490
491 eventPayload := events.MessageAPISentPayload{
492 MessageID: uuid.New(),
493 UserID: params.UserID,
494 Encrypted: params.Encrypted,
495 MaxSendAttempts: sendAttempts,
496 RequestID: params.RequestID,
497 Owner: phonenumbers.Format(params.Owner, phonenumbers.E164),
498 Contact: params.Contact,
499 RequestReceivedAt: params.RequestReceivedAt,
500 Content: params.Content,
501 Attachments: params.Attachments,
502 ScheduledSendTime: params.SendAt,
503 ExactSendTime: params.SendAt != nil,
504 SIM: sim,
505 }
506
507 event, err := service.createMessageAPISentEvent(params.Source, eventPayload)
508 if err != nil {
509 msg := fmt.Sprintf("cannot create %T from payload with message id [%s]", event, eventPayload.MessageID)
510 return nil, service.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg))
511 }
512 ctxLogger.Info(fmt.Sprintf("created event [%s] with id [%s] and message id [%s] and user [%s]", event.Type(), event.ID(), eventPayload.MessageID, eventPayload.UserID))
513
514 message, err := service.storeSentMessage(ctx, eventPayload)
515 if err != nil {
516 msg := fmt.Sprintf("cannot store message with id [%s]", eventPayload.MessageID)
517 return nil, service.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg))
518 }
519
520 timeout := service.getSendDelay(ctxLogger, eventPayload, params, messagesPerMinute)
521 if _, err = service.eventDispatcher.DispatchWithTimeout(ctx, event, timeout); err != nil {
522 msg := fmt.Sprintf("cannot dispatch event type [%s] and id [%s]", event.Type(), event.ID())
523 return nil, service.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg))
524 }
525
526 ctxLogger.Info(fmt.Sprintf("[%s] event with ID [%s] dispatched succesfully for message [%s] with user [%s] and delay [%s]", event.Type(), event.ID(), eventPayload.MessageID, eventPayload.UserID, timeout))
527 return message, err
528}
529
530// MissedCallParams parameters for sending a new message
531type MissedCallParams struct {

Callers 6

RespondToMissedCallMethod · 0.95
MessagesMethod · 0.80
StoreMethod · 0.80
sendSMSMethod · 0.80
PostSendMethod · 0.80
BulkSendMethod · 0.80

Calls 9

phoneSettingsMethod · 0.95
storeSentMessageMethod · 0.95
getSendDelayMethod · 0.95
DispatchWithTimeoutMethod · 0.80
StartMethod · 0.65
CtxLoggerMethod · 0.65
WrapErrorSpanMethod · 0.65
InfoMethod · 0.65

Tested by

no test coverage detected