Passing incoming call to Zoom meeting SIP address

I have a use case (student advising at a university) where I need to be able to pass/forward an incoming call to the SIP address for a Zoom meeting.

Every Zoom meeting has a SIP address by default in the format of [meetingID].[passcode]@zoomcrc.com.

At this point, I’m just testing for feasibility, so I’m setting up a sample Zoom meeting as an extension on my FreePBX 15 system.

Looking through this forum, I found the suggestion of adding custom extension for an external SIP address. So I used Admin > Config Edit to add the following lines to extensions_custom.conf:

[from-internal-custom]
;ZoomSIP
exten => 13579,1,Dial(SIP/[redacted].[redacted]@zoomcrc.com)

(I am redacting the Zoom meeting ID and passcode for security, but the actual config contains the digits.)

When I dial the extension, I get the “Your call cannot be completed as dialed” message.

Here is what I’m seeing in the logs for the call (again, with Zoom details redacted but correct in the logs):

793	[2022-06-01 08:46:39] VERBOSE[6037][C-00000f26] netsock2.c: Using SIP RTP TOS bits 184	
794	[2022-06-01 08:46:39] VERBOSE[6037][C-00000f26] netsock2.c: Using SIP RTP CoS mark 5	
795	[2022-06-01 08:46:39] VERBOSE[26582][C-00000f26] pbx.c: Executing [[email protected]:1] Dial("SIP/500-0001af98", "SIP/[redacted].[redacted]@zoomcrc.com") in new stack	
796	[2022-06-01 08:46:39] VERBOSE[26582][C-00000f26] netsock2.c: Using SIP RTP TOS bits 184	
797	[2022-06-01 08:46:39] VERBOSE[26582][C-00000f26] netsock2.c: Using SIP RTP CoS mark 5	
798	[2022-06-01 08:46:39] VERBOSE[26582][C-00000f26] app_dial.c: Called SIP/[redacted].[redacted]@zoomcrc.com	
799	[2022-06-01 08:46:39] VERBOSE[26582][C-00000f26] app_dial.c: SIP/zoomcrc.com-0001af99 is ringing	
800	[2022-06-01 08:46:40] VERBOSE[26582][C-00000f26] app_dial.c: SIP/zoomcrc.com-0001af99 redirecting info has changed, passing it to SIP/500-0001af98	
801	[2022-06-01 08:46:40] VERBOSE[26582][C-00000f26] app_dial.c: SIP/zoomcrc.com-0001af99 is busy	
802	[2022-06-01 08:46:40] VERBOSE[26582][C-00000f26] app_dial.c: Everyone is busy/congested at this time (1:1/0/0)	
803	[2022-06-01 08:46:40] VERBOSE[26582][C-00000f26] pbx.c: Executing [[email protected]:2] NoCDR("SIP/500-0001af98", "") in new stack	
804	[2022-06-01 08:46:40] VERBOSE[26582][C-00000f26] pbx.c: Executing [[email protected]:3] Progress("SIP/500-0001af98", "") in new stack	
805	[2022-06-01 08:46:40] VERBOSE[26582][C-00000f26] pbx.c: Executing [[email protected]:4] Wait("SIP/500-0001af98", "1") in new stack	
806	[2022-06-01 08:46:41] VERBOSE[26582][C-00000f26] pbx.c: Executing [[email protected]:5] Playback("SIP/500-0001af98", "silence/1&cannot-complete-as-dialed&check-number-dial-again,noanswer") in new stack	
807	[2022-06-01 08:46:41] VERBOSE[26582][C-00000f26] file.c: <SIP/500-0001af98> Playing 'silence/1.ulaw' (language 'en')	
808	[2022-06-01 08:46:42] VERBOSE[26582][C-00000f26] file.c: <SIP/500-0001af98> Playing 'cannot-complete-as-dialed.ulaw' (language 'en')	
809	[2022-06-01 08:46:44] VERBOSE[26582][C-00000f26] file.c: <SIP/500-0001af98> Playing 'check-number-dial-again.ulaw' (language 'en')	
810	[2022-06-01 08:46:45] VERBOSE[26582][C-00000f26] pbx.c: Executing [[email protected]:1] Macro("SIP/500-0001af98", "hangupcall") in new stack	
811	[2022-06-01 08:46:45] VERBOSE[26582][C-00000f26] pbx.c: Executing [[email protected]:1] GotoIf("SIP/500-0001af98", "1?theend") in new stack	
812	[2022-06-01 08:46:45] VERBOSE[26582][C-00000f26] pbx_builtins.c: Goto (macro-hangupcall,s,3)	
813	[2022-06-01 08:46:45] VERBOSE[26582][C-00000f26] pbx.c: Executing [[email protected]:3] ExecIf("SIP/500-0001af98", "0?Set(CDR(recordingfile)=)") in new stack	
814	[2022-06-01 08:46:45] VERBOSE[26582][C-00000f26] pbx.c: Executing [[email protected]:4] Hangup("SIP/500-0001af98", "") in new stack	
815	[2022-06-01 08:46:45] VERBOSE[26582][C-00000f26] app_macro.c: Spawn extension (macro-hangupcall, s, 4) exited non-zero on 'SIP/500-0001af98' in macro 'hangupcall'	
816	[2022-06-01 08:46:45] VERBOSE[26582][C-00000f26] pbx.c: Spawn extension (from-internal, h, 1) exited non-zero on 'SIP/500-0001af98'

I believe the salient lines from those logs are:

799	[2022-06-01 08:46:39] VERBOSE[26582][C-00000f26] app_dial.c: SIP/zoomcrc.com-0001af99 is ringing	
800	[2022-06-01 08:46:40] VERBOSE[26582][C-00000f26] app_dial.c: SIP/zoomcrc.com-0001af99 redirecting info has changed, passing it to SIP/500-0001af98	
801	[2022-06-01 08:46:40] VERBOSE[26582][C-00000f26] app_dial.c: SIP/zoomcrc.com-0001af99 is busy	
802	[2022-06-01 08:46:40] VERBOSE[26582][C-00000f26] app_dial.c: Everyone is busy/congested at this time (1:1/0/0)	

Any suggestions on how we might get this working?

Thanks,

Jeremy.

You are using a deprecated channel driver.

For that driver, you need set it into promiscuous redirect mode. There are equivalent settings for chan_pjsip (as I remember it there are three options).

By default when they try and blind transfer you, Asterisk will interpret the user part of the address as a local extension, but you need it to use the whole URI as an external address.

I haven’t tried this; this is just what I assume from the message.

I think you will need to create a trunk to be able to set the redirect option. chan_pjsip will be better here, as well, as it allows you to specify the domain in the dialstring, even when using a customised end point.

I tried to set this up, using a regular pjsip extension 1119. I changed the Dial parameter to
PJSIP/1119/sip:[email protected]
and tried to call 1119.
The resulting INVITE seems ok to me:

<--- Transmitting SIP request (959 bytes) to UDP:162.255.36.11:5060 --->
INVITE sip:[email protected] SIP/2.0
Via: SIP/2.0/UDP xx.xx.xx.xx:xxxx;rport;branch=z9hG4bKPjafe44b02-dbaa-44de-b89f-fb7448586e62
From: "Stewart" <sip:[email protected]>;tag=94c95635-6b5b-435c-bc7f-a5e2dfe295e5
To: <sip:[email protected]>
Contact: <sip:[email protected]:xxxx>
Call-ID: 1a09fb7c-2d7d-4ba1-95f5-1778e2c2e54e
CSeq: 1519 INVITE
Allow: OPTIONS, REGISTER, SUBSCRIBE, NOTIFY, PUBLISH, INVITE, ACK, BYE, CANCEL, UPDATE, PRACK, MESSAGE, REFER
Supported: 100rel, timer, replaces, norefersub, histinfo
Session-Expires: 1800
Min-SE: 90
Max-Forwards: 70
User-Agent: FPBX-15.0.17.48(16.19.0)
Content-Type: application/sdp
Content-Length:   261
...

but the replies were

<--- Received SIP response (516 bytes) from UDP:162.255.36.11:5060 --->
SIP/2.0 180 Ringing
Via: SIP/2.0/UDP xx.xx.xx.xx:xxxx;rport=10816;branch=z9hG4bKPjafe44b02-dbaa-44de-b89f-fb7448586e62;received=162.255.36.96
Contact: <sip:[email protected]:5060>;isfocus
To: <sip:[email protected]>;tag=64dadb2d
From: "Stewart"<sip:[email protected]>;tag=94c95635-6b5b-435c-bc7f-a5e2dfe295e5
Call-ID: 1a09fb7c-2d7d-4ba1-95f5-1778e2c2e54e
CSeq: 1519 INVITE
Server: Room Connector Controller,Version: 2.6.79,BuildTime: 2022/03/29 18:33:08
Content-Length: 0

<--- Received SIP response (471 bytes) from UDP:162.255.36.11:5060 --->
SIP/2.0 480 Temporarily Unavailable
Via: SIP/2.0/UDP xx.xx.xx.xx:xxxx;rport=10816;branch=z9hG4bKPjafe44b02-dbaa-44de-b89f-fb7448586e62;received=162.255.36.96
To: <sip:[email protected]>;tag=64dadb2d
From: "Stewart"<sip:[email protected]>;tag=94c95635-6b5b-435c-bc7f-a5e2dfe295e5
Call-ID: 1a09fb7c-2d7d-4ba1-95f5-1778e2c2e54e
CSeq: 1519 INVITE
Server: Room Connector Controller,Version: 2.6.79,BuildTime: 2022/03/29 18:33:08
Content-Length: 0

I don’t know what’s wrong. Perhaps it doesn’t like the caller ID or requires some other header. If you have a working example (from another device or PBX), post that and we can find the equivalent for FreePBX.

I spent some time hacking around with Zoom. Your INVITE to Zoom must be TLS, must contain a video offer, and (most likely, depending on what your Zoom admin requires) must offer SRTP.

TLS and SRTP are straightforward. Including a video offer if your client doesn’t have video is a bit of a trick.

1 Like

Thanks for these incredibly useful comments!

@billsimon’s comment suggests that my initial idea of SIP transfer either won’t work given that we’re not doing video or would take a lot of effort to get working.

One fallback for our use case would be to just forward/transfer the call to a Zoom phone number, which leads to the next question:

When calling the Zoom phone number, you need to enter the meeting ID and passcode via DTMF.

Is it possible to transfer an incoming call to a remote phone number AND also send some DTMF strings to that remote phone number as part of the transfer?

Take a look at the Asterisk wiki or core show application Dial from Asterisk, particularly the “D” option:

D([called][:calling[:progress[:mfprogress[:mfwink[:sfprogress[:sfwink]]]]]]
  : Send the specified DTMF strings *after* the called party has answered,
  but before the call gets bridged.  The <called> DTMF string is sent to the
  called party, and the <calling> DTMF string is sent to the calling party. 
  Both arguments can be used alone.  If <progress> is specified, its DTMF is
  sent to the called party immediately after receiving a 'PROGRESS' message.
  See 'SendDTMF' for valid digits

The word “progress” is missing before “is”, although the OP should not need the early media feature.

Oops, should have used code block so the brackets didn’t get interpreted as tags. Fixed.

This topic was automatically closed 31 days after the last reply. New replies are no longer allowed.