BRIDGE-AI / pyVoIP

Pure python VoIP/SIP/RTP library. Currently supports PCMA, PCMU, and telephone-event
https://pypi.org/project/pyVoIP/
GNU General Public License v3.0
2 stars 0 forks source link

[처음넷] 전화 걸기(통화 발신) #2

Open BRIDGE-AI opened 3 months ago

BRIDGE-AI commented 3 months ago

brief.

BRIDGE-AI commented 3 months ago

처음넷 문의

1차

보낸 사람: 김 형준 <hjoon.kim@bridgelabs.io>
날짜: 2024년 7월 8일 월요일 오후 5:16
받는 사람: "(주)처음넷" <info@fn070.com>
주제: [BRIDGE AI] 소프트폰 통화 발신 방법 문의

안녕하세요.
BRIDGE AI 김형준입니다.

저희가 개발한 python기반 pbx에서 통화 발신을 테스트 중인데, 잘 안돼서 기술 문의 드려요.

사용중인 회선 : 07076830773

저희가 보유중인 07076830773 번호에 REGI 한 후에 01027667137로 발송을 위해서 아래 패킷을 보내는데,
타겟 번호에 벨이 울리지 않고, 회신되는 패킷도 없는 것 같습니다.

아마 발신을 위한 패킷 구성이 잘못 되어서 그런 것으로 의심 되는데, 혹시 확인해주실 수 있을까요?
ps. 수신은 잘 되고 있습니다.

INVITE sip:01027667137@211.233.26.247 SIP/2.0
Via: SIP/2.0/UDP 0.0.0.0:5060;branch=z9hG4bK4e07408562bedb8b60ce05c1d
Max-Forwards: 70
Contact: <sip:07076830783@0.0.0.0>
To: <sip:01027667137@211.233.26.247>
From: <sip:07076830783@0.0.0.0>;tag=35663387
Call-ID: 4b227777d4dd1fc61c6f884f48641d02@0.0.0.0:5060
CSeq: 1 INVITE
Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, NOTIFY, REGISTER, MESSAGE, SUBSCRIBE, REFER
Content-Type: application/sdp
User-Agent: pyVoIP 2.0.0a5
Content-Length: 220

v=0
o=pyVoIP 1 3 IN IP4 0.0.0.0
s=pyVoIP 2.0.0a5
c=IN IP4 0.0.0.0
t=0 0
m=audio 10638 RTP/AVP 0 101
a=rtpmap:0 PCMU/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-15
a=ptime:20
a=maxptime:150
a=sendrecv

감사합니다.
보낸 사람: "(주)처음넷" <info@fn070.com>
날짜: 2024년 7월 9일 화요일 오전 9:21
받는 사람: 김 형준 <hjoon.kim@bridgelabs.io>
주제: Re: [BRIDGE AI] 소프트폰 통화 발신 방법 문의

안녕하세요. 처음넷 입니다.

[그림] 

Contact 와 From에  IP가 0.0.0.0으로 잡혀있어 메시지를 보낸 후 받을 라우팅이 안되어 있는것으로 판단됩니다.

image

2차

보낸 사람: 김 형준 <hjoon.kim@bridgelabs.io>
날짜: 2024년 7월 10일 수요일 오후 8:41
받는 사람: "(주)처음넷" <info@fn070.com>
주제: Re: [BRIDGE AI] 소프트폰 통화 발신 방법 문의

안녕하세요~
회신 감사합니다!
아주 큰 도움이 됩니다!

패킷 문제가 아니고, 네트워크 관련 코드에 문제가 있나 싶어서 확인하느라 인사가 늦었어요. (_ _)
외부 네트워크에서 netcat 명령을 사용해서 udp로 위에서 수정한 부분의 IP로 패킷을 보내봤는데 받아지더라고요.

알려주신 내용을 참고해서 패킷을 아래와 같이 수정해 보았는데, 여전히 이 패킷에 대한 응답 패킷은 없는 것 같아서 다시 한 번 문의 드려도 될까요?

INVITE sip:01027667137@211.233.26.247 SIP/2.0
Via: SIP/2.0/UDP 0.0.0.0:5060;branch=z9hG4bK4e07408562bedb8b60ce05c1d
Max-Forwards: 70
Contact: <sip:07076830783@43.202.127.199>
To: <sip:01027667137@211.233.26.247>
From: <sip:07076830783@43.202.127.199>;tag=0e192597
Call-ID: 4b227777d4dd1fc61c6f884f48641d02@0.0.0.0:5060
CSeq: 1 INVITE
Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, NOTIFY, REGISTER, MESSAGE, SUBSCRIBE, REFER
Content-Type: application/sdp
User-Agent: pyVoIP 2.0.0a5
Content-Length: 220

v=0
o=pyVoIP 1 3 IN IP4 0.0.0.0
s=pyVoIP 2.0.0a5
c=IN IP4 0.0.0.0
t=0 0
m=audio 14531 RTP/AVP 0 101
a=rtpmap:0 PCMU/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-15
a=ptime:20
a=maxptime:150
a=sendrecv

이 주소는 아래의 사용중인 회선 0773에 대해 트렁크 레지 등록되어 있는 IP입니다.

발신을 위해 보낸 위의 패킷에서 잘못된 부분이 있는지 다시 한 번 봐주실 수 있을까요?
혹은 위의 내용으로 211.233.26.247에서 로그 확인이 가능하다면 왜 발신 연결이 안되는지 알 수 있지 않을까 싶어요.

현재 개발에 사용중인 회선 : 07076830773

ps. 지난번 질문에서 말씀드린 회선은 서비스 중인 회선이고, 지금 개발에 사용중인 회선이랑 달라서 다시 공유 드려요~

업무가 바쁘신 줄 알면서 염치 불구하고 어려운 기술 문의 드립니다. (_ _)
감사합니다.
보낸 사람: "(주)처음넷" <info@fn070.com>
날짜: 2024년 7월 11일 목요일 오전 9:16
받는 사람: 김 형준 <hjoon.kim@bridgelabs.io>
주제: Re: [BRIDGE AI] 소프트폰 통화 발신 방법 문의

안녕하세요. 처음넷 입니다.

당사 Proxy 서버(211.233.26.247) 로 인입된 INVITE 메세지는 없으며, 트렁크 REGISTER 메세지만 있습니다.

보내는 SIP메세지에 문제가 있어도 ACK, BYE, CANCEL 등의 메세지를 사용중이신 장비에서 받아야 정상적으로 Proxy 서버에 인입이 된 것으로 

사용중이신 방화벽이나 교환기 또는 G/W 장비 확인 하시기 바랍니다.

감사합니다.
BRIDGE-AI commented 3 months ago

패킷 비교

전화가 걸려올 때 처음넷에서 보내는 INVITE패킷

INVITE sip:07076830783@0.0.0.0:5060;user=phone SIP/2.0
Via: SIP/2.0/UDP 211.233.26.247:5060;branch=z9hG4bK2a6aaa6f_102
Via: SIP/2.0/UDP 3.39.185.227:5060;branch=z9hG4bK2a6aaa6f
From: <sip:01027667137@211.233.26.247>;tag=813ff0e7fb8caac457ae6ed02f1ea252
To: <sip:07076830783@0.0.0.0>
Record-Route: <sip:211.233.26.247;lr>
Call-ID: 211.233.26.247_7fe3e83612b58e74706a8ddc6fda768e@3.39.185.227
CSeq: 102 INVITE
Contact: <sip:01027667137@211.233.26.247:5060;user=phone>
Max-Forwards: 69
Content-Type: application/sdp
Content-Length: 200

v=0
o=root 876702393 876702393 IN IP4 211.233.26.249
s=GP ARS 1.0
c=IN IP4 211.233.26.249
t=0 0
m=audio 20560 RTP/AVP 0 8
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=maxptime:150
a=sendrecv

전화를 걸 때 보내는 INVITE패킷

v=0 o=pyVoIP 1 3 IN IP4 0.0.0.0 s=pyVoIP 2.0.0a5 c=IN IP4 0.0.0.0 t=0 0 m=audio 10983 RTP/AVP 0 101 a=rtpmap:0 PCMU/8000 a=rtpmap:101 telephone-event/8000 a=fmtp:101 0-15 a=ptime:20 a=maxptime:150 a=sendrecv



패킷 비교에서 content body의 `o=pyVoIP 1 3 IN IP4 0.0.0.0`, `c=IN IP4 0.0.0.0` 부분 IP주소가 외부 접근 가능주소 여부가 다른 부분을 확인하여 테스트 해 본 결과
c=IN IP4 0.0.0.0 부분에 외부 접근 가능한 `43.202.127.199`로 세팅하니 전화가 걸려 오는 것으로 확인됨
BRIDGE-AI commented 3 months ago

FIX

pyVoIP/SIP/client.pydef gen_invite(self, ...) -> str:에서 body의 c=를 작성하는 코드에서 기존 self.bind_ip 대신 callback_ip = "43.202.127.199"를 사용하도록 수정

VoIPPhone생성시 callback_ip를 받아서 가지고 있다가 SIPClient.invite()할 때 넘겨서 SIPClient.gen_invite()로 전달