@@ -94,14 +94,6 @@ func (s *WhatsAppService) resolveRecipientAddress(canonicalPhone string) string
9494 return canonicalPhone
9595}
9696
97- func shouldRetryWithLegacyServer (err error ) bool {
98- if err == nil {
99- return false
100- }
101- msg := err .Error ()
102- return strings .Contains (msg , "failed to get user info" ) || strings .Contains (msg , "rate-overlimit" )
103- }
104-
10597// ValidateAndCanonicalizeRecipient validates and canonicalizes a WhatsApp phone number.
10698// It removes all non-numeric characters and validates the result has at least 6 digits.
10799func (s * WhatsAppService ) ValidateAndCanonicalizeRecipient (recipient string ) (string , error ) {
@@ -194,19 +186,6 @@ func (s *WhatsAppService) SendMessage(ctx context.Context, to string, body strin
194186 }
195187 err = s .client .SendMessage (ctx , sendTo , body )
196188 if err != nil {
197- if sendTo == canonicalTo && shouldRetryWithLegacyServer (err ) {
198- legacyTo := fmt .Sprintf ("%s@%s" , canonicalTo , types .LegacyUserServer )
199- slog .Warn ("WhatsAppService SendMessage retrying with legacy server" , "to" , legacyTo , "phone" , canonicalTo )
200- retryErr := s .client .SendMessage (ctx , legacyTo , body )
201- if retryErr == nil {
202- s .safeEmitReceipt (models.Receipt {To : canonicalTo , Status : models .MessageStatusSent , Time : time .Now ().Unix ()})
203- slog .Info ("WhatsAppService message sent via legacy server" , "to" , legacyTo , "phone" , canonicalTo )
204- return nil
205- }
206- slog .Error ("WhatsAppService SendMessage legacy retry failed" , "error" , retryErr , "to" , legacyTo , "phone" , canonicalTo )
207- return retryErr
208- }
209-
210189 slog .Error ("WhatsAppService SendMessage error" , "error" , err , "to" , sendTo , "phone" , canonicalTo )
211190 return err
212191 }
@@ -434,38 +413,35 @@ func (s *WhatsAppService) handleIncomingMessage(evt *events.Message) {
434413 senderAlt := evt .Info .SenderAlt .ToNonAD ()
435414
436415 var phoneJID types.JID
437- var lidJID types.JID
438-
439- if evt .Info .AddressingMode == types .AddressingModeLID {
440- lidJID = sender
441- phoneJID = senderAlt
442- } else {
443- phoneJID = sender
444- lidJID = senderAlt
445- }
446-
447- if phoneJID .User == "" || (phoneJID .Server != types .DefaultUserServer && phoneJID .Server != types .LegacyUserServer ) {
448- phoneJID = sender
416+ for _ , candidate := range []types.JID {senderAlt , sender } {
417+ if candidate .User == "" {
418+ continue
419+ }
420+ if candidate .Server == types .DefaultUserServer || candidate .Server == types .LegacyUserServer {
421+ phoneJID = candidate
422+ break
423+ }
449424 }
450425
451- if phoneJID .User != "" {
452- fromNumber = phoneJID .User
453- if ! strings .HasPrefix (fromNumber , "+" ) {
454- fromNumber = "+" + fromNumber
455- }
426+ if phoneJID .User == "" {
427+ slog .Warn ("WhatsAppService unable to determine phone JID; dropping message" ,
428+ "sender" , sender .String (),
429+ "senderAlt" , senderAlt .String (),
430+ "addressingMode" , evt .Info .AddressingMode )
431+ return
456432 }
457433
458- if fromNumber == "" {
459- fromNumber = sender .User
460- if ! strings .HasPrefix (fromNumber , "+" ) {
461- fromNumber = "+" + fromNumber
462- }
434+ fromNumber = phoneJID .User
435+ if ! strings .HasPrefix (fromNumber , "+" ) {
436+ fromNumber = "+" + fromNumber
463437 }
464438
465439 if canonical , err := s .ValidateAndCanonicalizeRecipient (fromNumber ); err == nil {
466440 canonicalPhone = canonical
467- if lidJID .User != "" && lidJID .Server == types .HiddenUserServer {
468- s .storeRecipientLID (canonicalPhone , lidJID .String ())
441+ if sender .Server == types .HiddenUserServer {
442+ s .storeRecipientLID (canonicalPhone , sender .String ())
443+ } else if senderAlt .Server == types .HiddenUserServer {
444+ s .storeRecipientLID (canonicalPhone , senderAlt .String ())
469445 }
470446 }
471447
0 commit comments