diff --git a/res/res_pjsip.c b/res/res_pjsip.c
index 3ff60ee5b4b4d76f96bfb57911c9ab3da5a15a83..0cf162a2257fc434231d23306b1ea6a3aacddd02 100644
--- a/res/res_pjsip.c
+++ b/res/res_pjsip.c
@@ -1494,6 +1494,12 @@ static int sip_get_tpselector_from_endpoint(const struct ast_sip_endpoint *endpo
 	} else if (transport->state->factory) {
 		selector->type = PJSIP_TPSELECTOR_LISTENER;
 		selector->u.listener = transport->state->factory;
+	} else if (transport->type == AST_TRANSPORT_WS || transport->type == AST_TRANSPORT_WSS) {
+		/* The WebSocket transport has no factory as it can not create outgoing connections, so
+		 * even if an endpoint is locked to a WebSocket transport we let the PJSIP logic
+		 * find the existing connection if available and use it.
+		 */
+		return 0;
 	} else {
 		return -1;
 	}