Nie sądzę by była konieczność włączania wbudowanego pullupu, skoro normalnie masz tam jakieś napięcie z zewnątrz.
Bezpieczna granica stanu wysokiego (nieprzekraczalna jeśli to ma być niezawodne) to 3.6V o ile MCU jest zasilane dość idealnym napięciem 3.3V (zasadniczo chodzi o to, by napięcie na wejściu NIGDY nie było wyższe więcej niż o 0.3V od realnego napięcia zasilania MCU)
Tam masz podobny wątek, gdzie jest świetnie opisane zastosowanie diod impulsowych (w celu separacji potencjalnie wyższego napięcia zewnętrznego od wejścia MCU) - to przy założeniu, że badany sygnał jest zwierany do masy
Ponieważ jednak może być inaczej - przykładowo napięcie wejściowe w stanie dzwonienia może być niższe od zera! to trzeba po prostu zmierzyć/sprawdzić/wybadać schemat (przy odrobinie chęci pewnie da się go zrysować przynajmniej w kluczowych miejscach z PCB domofonu, skoro serwisówka nie do zdobycia), więc moim zdaniem rozwiązanie z transoptorem jest idealne (jeśli LED statusu świeci lub miga w trakcie dzwonienia).
Swoją drogą jeśli miga, to też będziesz musiał filtrować sygnał.
PS w wypadku gdyby sygnał był niższy od zera, to niestety też występują ograniczenia wytrzymałości wejść GPIO - sygnał wejściowy nie może myć niższy niż -0.3V mierzone względem masy (słownie: minus trzy dziesiąte wolta).