×

asterisk extension calls between res_pjsip and chan_sip

hqy hqy 发表于2019-04-03 15:26:14 浏览2202 评论0

抢沙发发表评论

As you know, asterisk has integrated pjsip for sip signalling since asterisk-11. pjsip has advantages of faster and flexiblility than chan_sip.

If you are used to use chan_sip, you' d better to migrate your projects from chan_sip to res_pjsip. But at the beginning, sometimes, you also need to use both of them.

This article tries to illustate how to handle this job.



1. compile and install asterisk-13.5.0 with pjsip enabled, you can refer to the following steps 

"How to Install Asterisk 13 and PJSIP on CentOS 6"

http://blogs.digium.com/2015/02/24/install-asterisk-13-pjsip-centos-6/



2. configure chan_sip and pjsip extensions

the following conf file contents is not full file that i displayed here, it is the only must!

chan_sip to use port 5060 as sip signalling as default:



1) /etc/asterisk/sip.conf

[general]

udpbindaddr=0.0.0.0



2) res_pjsip to use port 5070 as sip signalling:

/etc/asterisk/pjsip.conf

[transport-udp]

type=transport

protocol=udp    ;udp,tcp,tls,ws,wss

bind=0.0.0.0:5070



3) create two pjsip extension 6001, and 6002 (also in pjsip.conf)

[6001]

type=endpoint

transport=transport-udp

context=from-internal

disallow=all

allow=ulaw

allow=alaw

allow=gsm

auth=auth6001

aors=6001



[auth6001]

type=auth

auth_type=userpass

password=6001

username=6001



[6001]

type=aor

max_contacts=1

;contact=sip:6001@192.168.66:5060



[6002]

type=endpoint

transport=transport-udp

context=from-internal

disallow=all

allow=ulaw

allow=alaw

auth=auth6002

aors=6002



[auth6002]

type=auth

auth_type=userpass

password=6002

username=6002



[6002]

type=aor

max_contacts=2



4) create two chan_sip extension 805, 806

extensions_additional.conf



[ext-local]

include => ext-local-custom

exten => 805,1,Macro(exten-vm,novm,805)

exten => 805,hint,SIP/805

exten => 806,1,Macro(exten-vm,novm,806)

exten => 806,hint,SIP/806



sip_additional.conf



[805]

username=805

type=friend

TermType=0

secret=freepbx321ext

record_out=Adhoc

record_in=Adhoc

qualify=yes

port=5060

pickupgroup=1

nat=yes

mailbox=805@device

host=dynamic

dtmfmode=rfc2833

DispReg=0

context=from-internal

canreinvite=no

calllimit=2

callgroup=1

callerid=device <805>



[806]

username=806

type=friend

TermType=0

secret=freepbx321ext

record_out=Adhoc

record_in=Adhoc

qualify=yes

port=5060

pickupgroup=1

nat=yes

mailbox=806@device

host=dynamic

dtmfmode=rfc2833

DispReg=0

context=from-internal

canreinvite=no

calllimit=2

callgroup=1

callerid=device <806>



5) destination for pjsip extensions

extensions_additional.conf



[ext-pjsip]

exten => _6XXX,1,Dial(PJSIP/${EXTEN})



6) dialplan for 'from-internal' of extensions.conf

[from-internal]

;allow phones to use applications

include => app-userlogonoff

include => app-directory

include => app-dnd

include => app-callforward

include => app-callwaiting

include => app-messagecenter

include => app-calltrace

include => parkedcalls

include => from-internal-custom

;allow phones to dial other extensions

include => ext-fax

include => ext-local

include => ext-group

include => ext-queues

include => ext-zapbarge

include => ext-meetme

include => ext-record

include => ext-test

include => ext-pjsip

;allow phones to access trunks

include => outbound-allroutes

exten => s,1,Macro(hangupcall)

exten => h,1,Macro(hangupcall)



[default]

include => ext-local

include => ext-pjsip

exten => s,1,Playback(vm-goodbye)

exten => s,2,Macro(hangupcall)



sip_additonal.conf should be included in sip.conf

extensions_additional.conf should be included in extensions.conf



3. examine extensions in the dialplan

you can reload asterisk

[root@zhenwen ~]# asterisk -vvvr

zhenwen*CLI> core reload 

zhenwen*CLI> module show like res_pjsip.so

Module                         Description                              Use Count  Status      Support Level

res_pjsip.so                   Basic SIP resource                       24         Running              core

1 modules loaded

zhenwen*CLI> module show like chan_sip.so

Module                         Description                              Use Count  Status      Support Level

chan_sip.so                    Session Initiation Protocol (SIP)        0          Running              core

1 modules loaded



now register 4 ip phones to asterisk server (which ip addredd is to 192.168.1.66)  with exetension 805, 806, 6001, 6002 . 

zhenwen*CLI> sip show peers

Name/username             Host                                    Dyn Forcerport Comedia    ACL Port     Status      Description                      

805/805                   192.168.1.124                            D  Yes        Yes            2158     OK (100 ms)                                  

806/806                   192.168.1.124                            D  Yes        Yes            7458     OK (100 ms)                                  

2 sip peers [Monitored: 2 online, 0 offline Unmonitored: 0 online, 0 offline]



zhenwen*CLI> pjsip show endpoints

 Endpoint:  <Endpoint/CID.....................................>  <State.....>  <Channels.>

    I/OAuth:  <AuthId/UserName...........................................................>

        Aor:  <Aor............................................>  <MaxContact>

      Contact:  <Aor/ContactUri..........................> <Hash....> <Status> <RTT(ms)..>

  Transport:  <TransportId........>  <Type>  <cos>  <tos>  <BindAddress..................>

   Identify:  <Identify/Endpoint.........................................................>

        Match:  <criteria.........................>

    Channel:  <ChannelId......................................>  <State.....>  <Time.....>

        Exten: <DialedExten...........>  CLCID: <ConnectedLineCID.......>

==========================================================================================





 Endpoint:  6001                                                 Not in use    0 of inf

     InAuth:  auth6001/6001

        Aor:  6001                                               1

      Contact:  6001/sip:6001@192.168.1.30:10860;rinstance 184588825f Unknown         nan

  Transport:  transport-udp             udp      0      0  0.0.0.0:5070





 Endpoint:  6002                                                 Not in use    0 of inf

     InAuth:  auth6002/6002

        Aor:  6002                                               2

      Contact:  6002/sip:6002@192.168.1.30:65515;rinstance 2096239e2c Unknown         nan

  Transport:  transport-udp             udp      0      0  0.0.0.0:5070





Objects found: 2



4. make calls between extensions.

1) chan_sip extensions: 805 --> 806

dial 806 from 805, then 805 answers the call.



2) res_pjsip extensions: 6001-->6002

dial 6002 from 6001, then 6002 answers the call.



3) see channels in the system

zhenwen*CLI> core show channels

Channel              Location             State   Application(Data)             

SIP/805-00000024     s@macro-dial:11      Up      Dial(SIP/806,45,Wwtm)         

SIP/806-00000025     (None)               Up      AppDial((Outgoing Line))      

PJSIP/6002-00000022  (None)               Up      AppDial((Outgoing Line))      

PJSIP/6001-00000021  6002@from-internal:1 Up      Dial(PJSIP/6002)              

4 active channels

2 active calls

52 calls processed

zhenwen*CLI> 

the two calls are setup.



4) call between res_pjsip extension and chan_sip extension

hangup the above calls.

dial 805 from 6001. then 6001 answers the call;

dial 6002 from 806, then 806 answers the call. 

now we see the channels:



zhenwen*CLI> core show channels

Channel              Location             State   Application(Data)             

SIP/805-00000028     6001@from-internal:1 Up      Dial(PJSIP/6001)              

SIP/806-00000029     (None)               Up      AppDial((Outgoing Line))      

PJSIP/6002-00000026  s@macro-dial:11      Up      Dial(SIP/806,45,Wwtm)         

PJSIP/6001-00000025  (None)               Up      AppDial((Outgoing Line))      

4 active channels

2 active calls

56 calls processed

zhenwen*CLI> 



5. uses pjsip extension as queue member



1) configure queue 200, login 6001 to the queue.



zhenwen*CLI> queue add member PJSIP/6001 to 200

Added interface 'PJSIP/6002' to queue '200'



zhenwen*CLI> queue show

default has 0 calls (max unlimited) in 'ringall' strategy (0s holdtime, 0s talktime), W:0, C:0, A:0, SL:0.0% within 0s

   No Members

   No Callers



200 has 0 calls (max 30) in 'leastrecent' strategy (4s holdtime, 42s talktime), W:0, C:1, A:0, SL:0.0% within 0s

   Members: 

      PJSIP/6001 (ringinuse enabled) (dynamic) (In use) has taken 1 calls (last was 150806 secs ago)

   No Callers



2) make call to 200

dial 200 from 805, then 6001 rings, answer 6001.



zhenwen*CLI> queue show

default has 0 calls (max unlimited) in 'ringall' strategy (0s holdtime, 0s talktime), W:0, C:0, A:0, SL:0.0% within 0s

   No Members

   No Callers



200 has 0 calls (max 30) in 'leastrecent' strategy (3s holdtime, 42s talktime), W:0, C:1, A:0, SL:0.0% within 0s

   Members: 

      PJSIP/6001 (ringinuse enabled) (dynamic) (in call) (In use) has taken no calls yet

   No Callers





zhenwen*CLI> 



zhenwen*CLI> core show channels

Channel              Location             State   Application(Data)             

SIP/805-0000002a     200@q200:4           Up      Queue(200,t,,,60)             

PJSIP/6001-00000027  200@from-internal:1  Up      AppQueue((Outgoing Line))     

2 active channels

1 active call

57 calls processed

zhenwen*CLI> 





6. uses asterisk cli to make outbound call

use cli command 'channel originate' to dial extensions.



zhenwen*CLI> channel originate PJSIP/6001 extension 805@ext-local

zhenwen*CLI> channel originate SIP/806 extension 6002@ext-pjsip

  == Using SIP RTP CoS mark 5

    -- Called 806

    -- SIP/806-0000002c is ringing

    -- SIP/806-0000002c is ringing

    -- SIP/806-0000002c answered

    -- Executing [6002@ext-pjsip:1] Dial("SIP/806-0000002c", "PJSIP/6002") in new stack

    -- Called PJSIP/6002

    -- PJSIP/6002-00000029 is ringing

    -- PJSIP/6002-00000029 answered SIP/806-0000002c

    -- Channel PJSIP/6002-00000029 joined 'simple_bridge' basic-bridge <035b50ce-a644-443a-b1ca-07161c3477a3>

    -- Channel SIP/806-0000002c joined 'simple_bridge' basic-bridge <035b50ce-a644-443a-b1ca-07161c3477a3>

zhenwen*CLI> 

zhenwen*CLI> core show channels

Channel              Location             State   Application(Data)             

SIP/805-0000002b     (None)               Up      AppDial((Outgoing Line))      

SIP/806-0000002c     6002@ext-pjsip:1     Up      Dial(PJSIP/6002)              

PJSIP/6002-00000029  (None)               Up      AppDial((Outgoing Line))      

PJSIP/6001-00000028  s@macro-dial:11      Up      Dial(SIP/805,45,Wwtm)         

4 active channels

2 active calls

59 calls processed



7. uses asterisk manager to make calls

login to asterisk manager,

then send the following command:

Action: Originate

Channel: SIP/805

Context: default

Exten: 6001

Priority: 1

Callerid: 805

Timeout: 30000



asterisk cli displays:

  == Using SIP RTP CoS mark 5

    -- Called 805

    -- SIP/805-0000002d is ringing

    -- SIP/805-0000002d is ringing

    -- SIP/805-0000002d answered

    -- Executing [6001@default:1] Dial("SIP/805-0000002d", "PJSIP/6001") in new stack

    -- Called PJSIP/6001

    -- PJSIP/6001-0000002a is ringing

    -- PJSIP/6001-0000002a answered SIP/805-0000002d

    -- Channel PJSIP/6001-0000002a joined 'simple_bridge' basic-bridge <381573a4-c31e-40e4-b657-309a06cec842>

    -- Channel SIP/805-0000002d joined 'simple_bridge' basic-bridge <381573a4-c31e-40e4-b657-309a06cec842>



zhenwen*CLI> core show channels

Channel              Location             State   Application(Data)             

SIP/805-0000002d     6001@default:1       Up      Dial(PJSIP/6001)              

PJSIP/6001-0000002a  (None)               Up      AppDial((Outgoing Line))      

2 active channels

1 active call

60 calls processed

zhenwen*CLI> 



8. dial into meetme room

we configure a meetme room in extensions.conf

[ext-meetme]

; general confrooms with no pin requered , 2017-08-03 Yin Zhenwen

exten => _2XXX!,1,Answer

exten => _2XXX!,n,MeetMe(${EXTEN},qdsMF)



now, we use 4 phones to dial 2806 into the same room.

zhenwen*CLI> meetme list 2806

User #: 01         6001 6001                 Channel: PJSIP/6001-0000002b     (unmonitored) 00:00:44

User #: 02         6002 6002                 Channel: PJSIP/6002-0000002c     (unmonitored) 00:00:30

User #: 03          805 device               Channel: SIP/805-0000002e     (unmonitored) 00:00:19

User #: 04          806 device               Channel: SIP/806-0000002f     (unmonitored) 00:00:09

4 users in that conference.

zhenwen*CLI> 



ok, the room has 4 talkers.



---------

summerize: we have configured and tested calls between res_pjsip and chan_sip extensions at the following scenario:

1) dial from extensions

2) dial to queue

3) dial from cli command

4) dial from manager command

5) dial into meetme room


--------------------- 

作者:far_away_12 

来源:CSDN 

原文:https://blog.csdn.net/Yin_Zhenwen/article/details/77891617 

版权声明:本文为博主原创文章,转载请附上博文链接!


打赏

本文链接:https://www.kinber.cn/post/484.html 转载需授权!

分享到:


推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

 您阅读本篇文章共花了: 

群贤毕至

访客