Soporte & Consultoria

Soporte Remoto y Consultoria skype : ambiorixg12.
Nota no se brinda ningun tipo de consulta o soporte fuera del blog de forma gratuita

domingo, 31 de diciembre de 2023

IAX2 trunk

[20026] ; server  accept registrations and calls


 deny=0.0.0.0/0.0.0.0

secret=af3c4078d

transfer=yes

context=from-internal

host=dynamic

type=friend

port=4569

qualify=yes

dial=IAX2/20026

accountcode=

permit=0.0.0.0/0.0.0.0

requirecalltoken=no

callerid=asreceived



[c2006]  ; client

username=20026
type=friend
secret=af3c4078d
requirecalltoken=no
qualify=no
host=10.0.0.45
encryption=no
context=from-trunk
auth=plaintext


register=>20026:af3c4078d@10.0.0.45

viernes, 22 de diciembre de 2023

setting file as asteirsk channel variables

 <?php

// Read the input string from a file

$inputString = file_get_contents('/home/voipessential/info_1.conf');


// Command line parameter

$searchValue = isset($argv[1]) ? $argv[1] : '';


// Explode the input string into an array based on the '-' delimiter

$lines = explode("\n", $inputString);

$dataArray = [];


// Iterate through each line and explode based on the '-' delimiter

foreach ($lines as $line) {

    $values = explode('-', $line);

    $dataArray[] = $values;

}


// Check if the search value is found in any array

foreach ($dataArray as $array) {

    if (in_array($searchValue, $array)) {

        // Set each value of the array as an Asterisk variable

        foreach ($array as $key => $value) {

            setAsteriskVariable($key, $value);

        }


        echo "Asterisk variables set for the array where the search value '$searchValue' is found.\n";

        break; // Stop after the first occurrence

    }

}


// Function to set Asterisk variable

function setAsteriskVariable($variableName, $variableValue) {

    // Set Asterisk variable

    echo "SET VARIABLE $variableName \"$variableValue\"\n";

}

?>


/home/voipessential/info_1.conf

59945-17542920051-600-14088772222
59955-19549063330-900-18003333330
57000-19546868344
57999-12159486620-400-18002314334
59867-17542912260
59868-18009860534



;;get  queue  time out and other values
same => n,AGI(/home/voipessential/set_variable.php,17542920051)
same => n,NoOp(Variable Value: ${1} ${2} ${3})

jueves, 2 de noviembre de 2023

custom ring group

 #!/usr/bin/php -q

<?php

set_time_limit(130);

require_once("/var/lib/asterisk/agi-bin/phpagi.php");

error_reporting(E_ALL);

$agi = new AGI();

$agi->answer();


$file = fopen("/var/www/html/custom_codes/devices.txt", "r");

$fileContent = '';

while (!feof($file)) {


 $line = fgets($file);



if (!empty($line)) {

  $dialstring .= "SIP/$line";

  }


$dialstring=trim($dialstring);




}

$agi->verbose("Dial($dialstring)");


$agi->exec('DIAL', "$dialstring"."SIP/dummy");


fclose($file);

?>



devices.txt


6122&

6146&

5101&

5102&



[custom_ring]

exten=>_x.,1,AGI(/var/www/html/custom_codes/ring_devices.php)

same=>n,hangup()


domingo, 10 de septiembre de 2023

Session-Expires

  From the Session-Expires header field in the response, both UAs know

   that a session timer is active, when it will expire, and who is
   refreshing.  At some point before the expiration, the currently
   active refresher generates a session refresh request, which is a
   re-INVITE or UPDATE [3] request.  If the refresher never gets a
   response to that session refresh request, it sends a BYE to terminate
   the session.  Similarly, if the other side never gets the session
   refresh request before the session expires, it sends a BYE.

https://www.ietf.org/rfc/rfc4028.html

domingo, 18 de junio de 2023

Asterisk Rocky Linux 9 Realtime

 1- Update system

 dnf  update


2- Insall epel repo


dnf install epel-release


3-  Install unixODBC-devl


dnf --enablerepo=crb install unixODBC-devel


dnf  install unixODBC


4- Install Python devel


dnf install python-devel


5 Install Python pip


dnf install python-pip


6- Install Python-Mysql and  mysql-connector-odbc


dnf --enablerepo=epel-testing install python3-mysqlclient



7- Install  this packages

dnf  install unixODBC unixODBC-devel libtool-ltdl libtool-ltdl-devel


if     libtool-ltdl-devel  doesnt  get install run this



dnf --enablerepo=resilientstorage install libtool-ltdl-devel





8 Install core development packages


dnf groupinstall -y --allowerasing core base "Development Tools"


9 Install these  dev packages


dnf install -y make wget openssl-devel ncurses-devel newt-devel libxml2-devel kernel-devel gcc gcc-c++ sqlite-devel


dnf install -y initscripts svn chkconfig


10 Install Asterisk

cd /usr/src/


  1.  wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20-current.tar.gz


  1. tar zxvf asterisk*


  1. rm *.gz


  1. cd asterisk-20*


  1.  contrib/scripts/install_prereq install


  1. ./configure --libdir=/usr/lib64 --with-pjproject-bundled --with-jansson-bundled && make menuselect && make && make install

  2.    make samples

  3.    make config

  4.    ldconfig

  5.     /etc/init.d/asterisk start

  6.    asterisk -rvvvvvvvv



11)  Create a MySQL password  and Asterisk realtime DB

sudo dnf install mariadb-server


sudo systemctl start mariadb


sudo systemctl status mariadb


sudo systemctl enable mariadb


mysqladmin -u root -p password 'asterisk'




  1. mysqladmin -u root password 'asterisk'



  1. mysqladmin -u root -pasterisk create asterisk




First, install Alembic:
# pip install alembic
Then, move to the Asterisk source directory containing the Alembic scripts:
# cd contrib/ast-db-manage/
Next, edit the config.ini.sample file and change the sqlalchemy.url option, e.g.
sqlalchemy.url = mysql://root:password@localhost/asterisk
such that the URL matches the username and password required to access your database.
Then rename the config.ini.sample file to config.ini
# cp config.ini.sample config.ini
Finally, use Alembic to setup the database tables:
# alembic -c config.ini upgrade head
You'll see something similar to:
# alembic -c config.ini upgrade head
INFO  [alembic.migration] Context impl MySQLImpl.
INFO  [alembic.migration] Will assume non-transactional DDL.
INFO  [alembic.migration] Running upgrade None -> 4da0c5f79a9c, Create tables
INFO  [alembic.migration] Running upgrade 4da0c5f79a9c -> 43956d550a44, Add tables for pjsip
#
You can then connect to MySQL to see that the tables were created:
# mysql -u root -p -D asterisk

mysql> show tables;
+--------------------+
| Tables_in_asterisk |
+--------------------+
| alembic_version    |
| iaxfriends         |
| meetme             |
| musiconhold        |
| ps_aors            |
| ps_auths           |
| ps_contacts        |
| ps_domain_aliases  |
| ps_endpoint_id_ips |
| ps_endpoints       |
| sippeers           |
| voicemail          |
+--------------------+
12 rows in set (0.00 sec)
mysql> quit


12) Install  alembic


 pip install alembic

 

 alembic --version





13) Install connector


  dnf install mariadb-connector-c


    dnf install mariadb-connector-odbc



14 ) Install PHP


dnf install php


dnf install php-mysqlnd




Configuration files.

/etc/odbc.ini

[asterisk]
Description           = MySQL connection to 'asterisk' database
Driver                = MariaDB
Database              = asterisk
Server                = localhost
UserName              = root
Password              = asterisk
Port                  = 3306
Socket                = /var/lib/mysql/mysql.sock


/etc/odbcinst.ini
# Driver from the mariadb-connector-odbc package
# Setup from the unixODBC package
[MariaDB]
Description     = ODBC for MariaDB
Driver          = /usr/lib/libmaodbc.so
Driver64        = /usr/lib64/libmaodbc.so
FileUsage = 1

/etc/asterisk/res_odbc.conf
[asterisk]
enabled => yes
dsn => asterisk
username => admin
password => asterisk
pre-connect => yes


/etc/asterisk/cdr_adaptive_odbc.conf

[asterisk]
connection=asterisk
table=cdr
alias start => calldate




module reload res_odbc.so

Check connection

asterisk_realtime*CLI> odbc show all

ODBC DSN Settings
-----------------

  Name:   asterisk
  DSN:    asterisk
    Number of active connections: 1 (out of 1)
    Logging: Disabled




/etc/asterisk/sorcery.conf
[res_pjsip] ; Realtime PJSIP configuration wizard
endpoint=realtime,ps_endpoints
auth=realtime,ps_auths
aor=realtime,ps_aors
domain_alias=realtime,ps_domain_aliases
contact=realtime,ps_contacts

[res_pjsip_endpoint_identifier_ip]
identify=realtime,ps_endpoint_id_ips

[res_pjsip_outbound_registration]
registration=realtime,ps_registrations




/etc/asterisk/extconfig.conf
ps_endpoints => odbc,asterisk
ps_auths => odbc,asterisk
ps_aors => odbc,asterisk
ps_domain_aliases => odbc,asterisk
ps_endpoint_id_ips => odbc,asterisk
ps_contacts => odbc,asterisk
ps_registrations = odbc,asterisk


etc/asterisk/modules.conf
preload => res_odbc.so
preload => res_config_odbc.so
noload => chan_sip.so 


/etc/asterisk/pjsip.conf
[transport-udp]
type=transport
protocol=udp
bind=0.0.0.0

RESTART the asterisk service after add the transport


core restart now



----------------------------php code----
php /home/ambiorix/insert_device.php 2222

<?php
$link = mysqli_connect("localhost", "root", "asterisk", "asterisk");

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$sip_device ="$argv[1]";

$query1 = "INSERT INTO `ps_aors` (`id`, `max_contacts`) VALUES ($sip_device, 1)";
if (mysqli_query($link, $query1)) {
    printf("Query 1 executed successfully.\n");
} else {
    printf("Error executing query 1: %s\n", mysqli_error($link));
}

$query2 = "INSERT INTO `ps_auths` (`id`, `auth_type`, `password`, `username`) VALUES ($sip_device, 'userpass', $sip_device, $sip_device)";
if (mysqli_query($link, $query2)) {
    printf("Query 2 executed successfully.\n");
} else {
    printf("Error executing query 2: %s\n", mysqli_error($link));
}

$query3 = "INSERT INTO `ps_endpoints` (`id`, `transport`, `aors`, `auth`, `context`, `disallow`, `allow`, `direct_media`) 
VALUES ($sip_device, 'transport-udp', '$sip_device', '$sip_device', 'testing', 'all', 'g722', 'no')";
if (mysqli_query($link, $query3)) {
    printf("Query 3 executed successfully.\n");
} else {
    printf("Error executing query 3: %s\n", mysqli_error($link));
}

/* close connection */
mysqli_close($link);
?>


Source


https://centos.pkgs.org/9-stream/centos-crb-x86_64/unixODBC-devel-2.3.9-4.el9.x86_64.rpm.html


https://rockylinux.pkgs.org/8/rockylinux-appstream-x86_64/unixODBC-devel-2.3.7-1.el8.i686.rpm.html


https://rockylinux.pkgs.org/8/rockylinux-appstream-x86_64/libtool-ltdl-devel-2.4.6-25.el8.x86_64.rpm.html


https://centos.pkgs.org/9-stream/centos-resilientstorage-x86_64/libtool-ltdl-devel-2.4.6-44.el9.i686.rpm.html









https://rockylinux.pkgs.org/9/rockylinux-appstream-x86_64/compat-openssl11-1.1.1k-4.el9_0.i686.rpm.html


https://rockylinux.pkgs.org/9/rockylinux-appstream-aarch64/mariadb-connector-c-3.2.6-1.el9_0.aarch64.rpm.html



https://rockylinux.pkgs.org/9/rockylinux-appstream-aarch64/mariadb-connector-odbc-3.1.12-3.el9.aarch64.rpm.html


sábado, 22 de abril de 2023

Originate command example

 channel originate Local/18097243481@internal extension 1020@playing-audio



[internal]

exten => _18[024]9nxxxxxx,1,Dial(PJSIP/${EXTEN}@8001)

same=>n,hangup()



[playing-audio]

exten=>1020,1,Wait(1)

exten=>1020,n,Playback(/home/ambiorixg12/Downloads/tarjeta)

same=>n,hangup()

jueves, 26 de enero de 2023

Asterisk queue cli manipulation

 Get  queue name channel name sort by longest  waiting


 asterisk -x " queue show " | grep SIP | awk '{print $2 " " $4} ' | sort -k 2 -rn 


SIP/voipessential-in-00000022 24:17,

SIP/voipessential-in-00000023 9:32,

SIP/voipessential-in-00000025 3:20,

SIP/voipessential-in-00000024 3:25


 asterisk -x " queue show" | grep has | awk -Fhas '{print $1}'

9000 

6000 

7000 

7205007949 

8000 



SIP/voipessential-in-00000022

Find if  a channel  is  in an specific queue

asterisk  -x " queue show  7205007949" | grep 'SIP/voipessential-in-00000022' | awk '{print $2}'


SIP/voipessential-in-00000022

martes, 24 de enero de 2023

redirect based on afile

 <?php

$queues=file("/home/phpagi-2.20/info.conf");

print_r($queues);


//$queues = explode("-",$queues);


foreach($queues as $key=> $value){


$q=explode("-",$value);


echo shell_exec("php /home/phpagi-2.20/redirect.php $q[0] $q[1]");


}

?>



file content


queue did

support-106

101-201

102-202

103-203


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


<?php
$queue=$argv[1];
 $dst=$argv[2];

//$chan=shell_exec("asterisk -x \" core show channels concise\" | awk -F! '{print $1}' |awk 'NR==1'");
echo $chan=shell_exec("asterisk -x \" queue show $queue\" | grep SIP | awk '{print $2}' |awk 'NR==1'");
$chan =preg_replace('/\s+/', '',$chan);

echo  "$chan\n";
echo $redirectn=shell_exec("/usr/sbin/asterisk -x \"channel redirect $chan redirect,$dst,1\"");


?>



AMI check calls and redirect calls

 <?php

$command="core show  channels";


$socket = fsockopen("10.0.0.200","5038", $errno, $errstr, 10);

      if (!$socket){

        echo "$errstr ($errno)\n";

        }else{

            fputs($socket, "Action: Login\r\n");

            fputs($socket, "UserName: admin\r\n");

            fputs($socket, "Secret: 144\r\n\r\n");

            fputs($socket, "Action: Command\r\n");

            fputs($socket, "Command: $command\r\n\r\n");

           fputs($socket, "Action: Logoff\r\n\r\n");

           while (!feof($socket)){


echo  $result=fgets($socket);


}

}

?>



[public]


exten=>_x.,1,Answer()

same=>n,Set(calls=${SHELL(php /home/phpagi-2.20/calls_ami.php  | grep "active calls"  | awk  '{print $2}')})

same=>n,Set(trunk=issabel)

same=>n,Set(limit=0)

same=>n,GotoIf($["${calls:0:-1}">="${limit}"]?queue)

same=>n,Dial(SIP/${trunk}/${EXTEN})

same=>n,hangup

same=>n(queue),queue(support)

same=>n,hangup





<?php

$queue=$argv[1];

 $dst=$argv[2];


//$chan=shell_exec("asterisk -x \" core show channels concise\" | awk -F! '{print $1}' |awk 'NR==1'");

echo $chan=shell_exec("asterisk -x \" queue show $queue\" | grep SIP | awk '{print $2}' |awk 'NR==1'");

$chan =preg_replace('/\s+/', '',$chan);


echo  "$chan\n";

echo $redirectn=shell_exec("/usr/sbin/asterisk -x \"channel redirect $chan redirect,$dst,1\"");



?>





[redirect]

exten=>_x.,1,Noop(******transferring call***)

same=>n,Dial(SIP/${trunk}/${EXTEN})



jueves, 19 de enero de 2023

pjsip configuration

extensions.conf

;;;;;;;;;;;


[internal]

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

same=>n,hangup()


exten => _*6XXX,1,Dial(${PJSIP_DIAL_CONTACTS(${EXTEN:1})})

same=>n,hangup()



exten => _x.,1,Dial(PJSIP/${EXTEN}@8001)

same=>n,hangup()


;exten => _9NXXNXXXXXX,1,Dial(PJSIP/mytrunk/sip:${EXTEN:1}@203.0.113.1:5060)

;same=>n,hangup()



[from-freepbx]

exten=>_x.,1,Dial(PJSIP/${EXTEN},45)

same=>n,hangup()



[from-gateway]

exten=>8001,1,NooP( incoming call from ${CALLERID(num)})

same=>n,Set(pseudodid=${PJSIP_HEADER(read,From)})

same=>n,Set(pseudodid=${CUT(pseudodid,@,1)})

same=>n,Set(__pseudodid=${CUT(pseudodid,<,1)})

same=>n,Set(__phone=${pseudodid})

same=>n,Set(CALLERID(num)=${phone})

same=>n,Dial(PJSIP/6000)

same=>n,hangup()



;;;;;;;;pjsip.conf;;;;;;;;;;;;;;;;;;;;


[transport-udp]

type=transport

protocol=udp

bind=0.0.0.0:5060

local_net=10.0.0.0/24


;;;;;;;;;;;;;


[6000]

type=endpoint

context=internal

disallow=all

allow=ulaw

allow=alaw

callerid=6000

direct_media=no

force_rport=yes

ice_support=yes

identify_by=username

mailboxes= 6000

moh_suggest=default

rewrite_contact=yes

rtp_symmetric=yes

send_diversion=yes 

send_pai=yes    ; Send the P Asserted Identity header (default: "no")

send_rpid=yes   ; Send the Remote Party ID header (default: "no")

trust_id_inbound=no

trust_id_outbound=no 

allow_transfer=yes

from_user=6000

mwi_from_user=6000

set_var=id=6001;name=ambiorix

auth=6000

aors=6000

direct_media=no

transport=transport-udp


[6000]

type=auth

auth_type=userpass

password=19111@@!

username=6000


[6000]

type=aor

max_contacts= 5

qualify_frequency=1    ; Interval at which to qualify an AoR (default: "0")

authenticate_qualify=no

remove_existing=yes

maximum_expiration=7200        ; Maximum time to keep an AoR (default: "7200")

minimum_expiration=6000  ; Minimum keep alive time for an AoR (default: "60")

default_expiration=3600

mailboxes=6000

authenticate_qualify=no


;;;;;;;;;;;;

[6001]

type=endpoint

context=internal

disallow=all

allow=ulaw

allow=alaw

callerid=6001

direct_media=no

force_rport=yes

ice_support=yes

identify_by=username

mailboxes= 6001

moh_suggest=default

rewrite_contact=yes

rtp_symmetric=yes

send_diversion=yes 

send_pai=yes    ; Send the P Asserted Identity header (default: "no")

send_rpid=yes   ; Send the Remote Party ID header (default: "no")

trust_id_inbound=no

trust_id_outbound=no 

allow_transfer=yes

from_user=6001

mwi_from_user=6001

set_var=id=6001;name=ambiorix

auth=6001

aors=6001

direct_media=no

transport=transport-udp


[6001]

type=auth

auth_type=userpass

password=19111@@!

username=6001


[6001]

type=aor

max_contacts= 5

qualify_frequency=1    ; Interval at which to qualify an AoR (default: "0")

authenticate_qualify=no

remove_existing=yes

maximum_expiration=7200        ; Maximum time to keep an AoR (default: "7200")

minimum_expiration=6000  ; Minimum keep alive time for an AoR (default: "60")

default_expiration=3600

mailboxes=6001

authenticate_qualify=no

;;;;;;;;;;;;;;;;;;;;;;;;;;;;



[6002]

type=endpoint

context=internal

disallow=all

allow=ulaw

allow=alaw

callerid=6002

direct_media=no

force_rport=yes

ice_support=yes

identify_by=username

mailboxes= 6002

moh_suggest=default

rewrite_contact=yes

rtp_symmetric=yes

send_diversion=yes 

send_pai=yes    ; Send the P Asserted Identity header (default: "no")

send_rpid=yes   ; Send the Remote Party ID header (default: "no")

trust_id_inbound=no

trust_id_outbound=no 

allow_transfer=yes

from_user=6002

mwi_from_user=6002

set_var=id=6001;name=ambiorix

auth=6002

aors=6002

direct_media=no

transport=transport-udp


[6002]

type=auth

auth_type=userpass

password=19111@@!

username=6002


[6002]

type=aor

max_contacts= 5

qualify_frequency=1    ; Interval at which to qualify an AoR (default: "0")

authenticate_qualify=no

remove_existing=yes

maximum_expiration=7200        ; Maximum time to keep an AoR (default: "7200")

minimum_expiration=6000  ; Minimum keep alive time for an AoR (default: "60")

default_expiration=3600

mailboxes=6000

authenticate_qualify=no


;;;;;;;;;;;;trunks ;;;;;;;;;;;;;;;;;;;;;;


[twilio]

type=aor

contact=sip:ambiorixg12.pstn.us1.twilio.com:5060

qualify_frequency=100

authenticate_qualify=no

remove_existing=yes

maximum_expiration=7200        ; Maximum time to keep an AoR (default: "7200")

minimum_expiration=6000  ; Minimum keep alive time for an AoR (default: "60")

default_expiration=3600 

authenticate_qualify=no



[twilio]

type=endpoint

context=from-trunk

disallow=all

allow=ulaw

allow=alaw

direct_media=no

force_rport=yes

ice_support=yes

moh_suggest=default

rewrite_contact=yes

rtp_symmetric=yes

send_diversion=yes

send_pai=yes    ; Send the P Asserted Identity header (default: "no")

send_rpid=yes   ; Send the Remote Party ID header (default: "no")

trust_id_inbound=yes

trust_id_outbound=yes

allow_transfer=yes

from_user=twilio

set_var=id=twilio;name=twilio_trunk

aors=twilio

direct_media=no

transport=transport-udp



[twilio]

type=identify

endpoint=twilio

match=54.172.60.0/8

match=68.183.142.204






[8001]

type=endpoint

context=from-gateway

disallow=all

allow=ulaw

allow=alaw

direct_media=no

force_rport=yes

ice_support=yes

identify_by=username

moh_suggest=default

rewrite_contact=yes

rtp_symmetric=yes

send_diversion=yes 

send_pai=yes    ; Send the P Asserted Identity header (default: "no")

send_rpid=yes   ; Send the Remote Party ID header (default: "no")

trust_id_inbound=yes

trust_id_outbound=yes 

allow_transfer=yes

auth=8001

aors=8001

direct_media=no

transport=transport-udp


[8001]

type=auth

auth_type=userpass

password=19111139z733

username=8001


[8001]

type=aor

max_contacts= 5

qualify_frequency=1    ; Interval at which to qualify an AoR (default: "0")

authenticate_qualify=no

remove_existing=yes

maximum_expiration=7200        ; Maximum time to keep an AoR (default: "7200")

minimum_expiration=6000  ; Minimum keep alive time for an AoR (default: "60")

default_expiration=3600

mailboxes=8001

authenticate_qualify=no


;;;;;;;;;;registration;;;;;;;;;;;;


[FreePBX]

type=auth

auth_type=userpass

password=rz#6c2a6aa9e3f52e

username=311



[FreePBX]

type = registration

server_uri = sip:155.138.223.92:28641;udp

client_uri = sip:311@155.138.223.92:28641;udp

outbound_auth=FreePBX

contact_user=6002  ;send incoming calls to this extension

expiration=120

line=yes

endpoint=FreePBX

max_retries=10


[FreePBX]

type=endpoint

context=from-freepbx ; context for incomings

disallow=all

allow=ulaw

allow=alaw

direct_media=no

force_rport=yes

ice_support=ye

identify_by=ip ; this will  aut incoming callsh base on  the ip on the identify section

moh_suggest=default

rewrite_contact=yes

rtp_symmetric=yes

send_diversion=yes

send_pai=yes    ; Send the P Asserted Identity header (default: "no")

send_rpid=yes   ; Send the Remote Party ID header (default: "no")

trust_id_inbound=yes

trust_id_outbound=yes

allow_transfer=yes

direct_media=no

transport=transport-udp


[FreePBX]

type=identify

endpoint=FreePBX

match=155.138.223.92 ;carrier source ip


https://wiki.asterisk.org/wiki/display/AST/Asterisk+20+Configuration_res_pjsip_outbound_registration#Asterisk20Configuration_res_pjsip_outbound_registration-registration_max_retries

https://wiki.asterisk.org/wiki/display/AST/Asterisk+20+Configuration_res_pjsip

https://wiki.asterisk.org/wiki/display/AST/res_pjsip+Configuration+Examples