(5 - user rating)

User Rating: 3 / 5

Star ActiveStar ActiveStar ActiveStar InactiveStar Inactive
 


 

 Using windows 8 Push notifications on Asterisk and PJSIPS and Zoiper soft Phones

 

I have decided to dedicate some time to making a great system which should soon handle Microsoft Push Notifications ,  as well as Google and iOS  using Asterisk sip with or without PJSIP and/or IAX  with good debugging and error reporting. Since i Grabbed my new Nokia Luminia 530 for only 30 bucks..   I'm compelled to get it working so everyone can experience the benefits of Microsoft Push Notifications and VoIP Extensions.

I have received most of my Bases from Zoiper (First free Mobile sip phone open to use on any PBX for windows 8 phones)

http://www.zoiper.com/en/tutorials/push-notifications

 

Also Took some debugging methods from

http://pbxinaflash.com/community/index.php?threads/wp8-zoiper-client-push-notification.15832/

 

There are still a lot of issues with this,  and so far i have gotten SIP to work,  still working on PJSIP but got it working with a ugly hack..  which should be fixed soon

 

OPERATING ENVIRONMENT:

  1. Asterisk:  version (13) running as full VM on a Microsoft Azure server (Should Work with any version)
  2. FreePBX version (12) (Should Work with any version)
  3. Zoiper, Windows Phone Edition (v.1.0.2.0) as SIP client. Configured for "Push Notification" as per "Help, Tutorial..." section in the settings page of the client itself.
  4. CentOs 6.6 (shouldn't matter to much though)

 

BACKGROUND:

IMPLEMENTATION:
The somewhat modified / corrected shell script (see below) from the tutorial is used to send the push notification to Microsoft's MPNS servers, to notify the phone of the incoming call.
I Followed Manfred Koroschetz in calling it "zoiperpush.sh" and to place it in the "/var/lib/asterisk/agi-bin" folder, giving it permissions (+x) and user:group (asterisk:asterisk) so that asterisk can execute it.

Download The most up2date files:

 

  

 

In my concept ill be dedicating 10 extensions for windows phones 0-9  and will work with another 10 for iOS and Android later
Setting Debugging will display as much info about the channel as i could..  but soon will also send email on reason for fail if failed.

______________________________

 Dial Plan

_________________________________________________________

[from-internal-custom]
include => from-ZoiperPush

[ivr-2-custom]
include => from-ZoiperPush

[handler]

exten => addheader,1,Set(location2=PJSIP_HEADER(read,X-PUSH-URI))
exten => addheader,2,Set(location3=PJSIP_HEADER(read,X-PUSH-URI=))


[who-r-u]

exten => s,1,agi(googletts.agi,"Hi Can i please get your name followed by the pound sign?",en)
exten => s,n(record),agi(speech-recog.agi,en-US)
exten => s,n,Verbose(1,Script returned: ${confidence} , ${utterance})

;Check the probability of a successful recognition:
exten => s,n(success),GotoIf($["${confidence}" > "0.01"]?playback:retry)

;Playback the text:
exten => s,n(playback),agi(googletts.agi,"Thank you ${utterance} I will save this for future calls",en)

; Cache CallerID
exten => s,n,System(echo "${CALLERID(num)}" "${utterance}" >> /etc/asterisk/callerID.conf)
exten => s,n,Set(CALLERID(name)=${utterance})
exten => s,n,goto(from-ZoiperPush,${extenstion},29)

;Retry in case speech recognition wasn't successful:
exten => s,n(retry),agi(googletts.agi,"Can you please repeat more clearly?",en)
exten => s,n,goto(record)

exten => s,n(fail),agi(googletts.agi,"Failed to get speech data.",en)
exten => s,n(end),Hangup()


[from-ZoiperPush]
;    In this setup please make an extenstion 3000 - 3009 for MS Push
;    Google TTS and Voice recognition would be installed if the googletts.agi isnt found.  
;    If you are using Distro's that include this already you can commit out line 3 and 4.
;    You will also need to manually load / install  the module chan_slim required for  Google TTS


exten => _300X,1,Answer
exten => _300X,n,Set(debug=1)
exten => _300X,n,GotoIf($[${ISNULL(${SHELL(cat /var/lib/asterisk/agi-bin/googletts.agi | grep  "#!/usr/bin/env perl")})}]?:start)
exten => _300X,n,System(  yum install -y perl perl-libwww-perl perl-JSON sox cpan flac \; cd /usr/src  \;  wget http://sourceforge.net/projects/mpg123/files/mpg123/1.14.2/mpg123-1.14.2.tar.bz2/download  \; tar -xjvf download \; cd mpg123* \; ./configure \; make \; make install \;  rm -rf  mpg123* \; ln -s /usr/local/bin/mpg123 /usr/bin/mpg123 \; wget https://github.com/downloads/zaf/asterisk-googletts/asterisk-googletts-0.6.tar.gz / \; tar xvfz asterisk-googletts-0.6.tar.gz \; cd asterisk-googletts* \; cp googletts.agi  /var/lib/asterisk/agi-bin/googletts.agi \; wget https://github.com/zaf/asterisk-speech-recog/tarball/master \; tar xvfz master \; cd zaf* \; cp -R * /var/lib/asterisk/agi-bin/ \;  chown -R asterisk:asterisk  /var/lib/asterisk/agi-bin/ \; cpan JSON -y)
exten => _300X,n(start),NoOp(**WP8 Push Notification: ext: ${EXTEN}, callerID: ${CALLERID(num)} **)
exten => _30XX,n,Set(extenstion=${EXTEN})

exten => _300X,n,GotoIf($[${ISNULL(${SHELL(cat /etc/asterisk/callerID.conf | grep -R "${CALLERID(num)}" | cut -d " " -f2)})}]?:cacheCCID)
exten => _300X,n,GotoIf($["${CALLERID(num)}" = ""]?who-r-u,s,1)
exten => _300X,n,GotoIf($["foo${CALLERID(num)}" = "foo"]?who-r-u,s,1)
exten => _300X,n,GotoIf($["${CALLERID(name)}" = "${CALLERID(num)}"]?who-r-u,s,1)
exten => _300X,n,GotoIf($["${CALLERID(name):0:9}" = "Anonymous"]?who-r-u,s,1)
exten => _300X,n,GotoIf($["${CALLERID(name):0:7}" = "Unknown"]?who-r-u,s,1)
exten => _300X,n,GotoIf($["${CALLERID(num):0:7}" = "Private"]?who-r-u,s,1)
exten => _300X,n,GotoIf($["${CALLERID(name):0:7}" = "Private"]?who-r-u,s,1)
exten => _300X,n,GotoIf($["${CALLERID(num):0:10}" = "Restricted"]?who-r-u,s,1)
exten => _300X,n,GotoIf($["${CALLERID(num):0:4}" = "PSTN"]?who-r-u,s,1)

exten => _300X,n,GotoIf($[ 0 = 0 ]?29)
exten => _300X,27(cacheCCID),Set(CALLERID(name)=${SHELL(cat /etc/asterisk/callerID.conf | grep -R "${CALLERID(num)}" | cut -d " " -f2)})
exten => _300X,28,Verbose(1, Outgoing Caller ID: {$CALLERID(all)})
exten => _300X,29,GotoIf(${ISNULL(${SIPPEER(${EXTEN},codecs)})}?:100)
exten => _300X,30,GotoIf(${ISNULL(${PJSIP_ENDPOINT(${EXTEN},allow)})}?:200)
exten => _300X,31,GotoIf(${ISNULL(${IAXPEER(${EXTEN},codecs)})}?:300)

exten => _300X,n,GotoIf($["${codecs}" = ""]?nochan:100)
exten => _300X,n(nochan),NoOp(** Unable to determin channel type ${EXTEN} not available **)
exten => _300X,n,agi(googletts.agi,"The Extenstion your trying to reach does not exsist, Sending you back to the main IVR to re-try   good bye.",en)  ;  Exten dont have a codec so must not be setup
exten => _300X,n,Goto(ivr-2,s,1)  ;  Please change to go to the Context of your choice.

; Asterisk SIP


exten => _300X,100,Set(location=${DB(SIP/Registry/${EXTEN})})
exten => _300X,n,Verbose(0, getting push info "${location}" );

exten => _300X,n,GotoIf($[${REGEX("X-PUSH-URI" ${location})}]?sip-runscript:cacheuri)
exten => _300X,n(cacheuri),Set(location='${SHELL(cat /etc/asterisk/pushuri.conf | grep -R "${EXTEN}" | cut -d " " -f2)}')
exten => _300X,n,GotoIf($[${REGEX("X-PUSH-URI" ${location})}]?sip-runscript:XXXXXXX)

;if the following line is ran then there is no URI  in registration or in cache,  may need register zoiper first and copy the registration string to the following example
exten => _300X,n(XXXXXXX),Set(location='0.0.0.0:12345:3600:${EXTEN}:sip:${EXTEN}@0.0.0.0:48574,rinstance=1d02f625bec01f51,transport=UDP,X-PUSH-URI=http://s.notify.live.net/u/1/bn1/HmQAAABIJvDa7TlcHYdOD8P8GKw5K14l7MmE_eS_NeuMzo4h-AF32Y-pf_8Ux0XF24N5AIY1fV3InvnglTNyjJlFRByH/d2luZG93c3Bob25lZGVmYXVsdA/EW_BnIu3fUOH7FePoWYHNw/mdWiTaGBmvmq8Bc6a1kHWu41kJ4')

exten => _300X,n(sip-runscript),System(/var/lib/asterisk/agi-bin/zoiperpush.sh "${location}")
exten => _300X,n,NoOp(**Sript Result: ${SYSTEMSTATUS} **)
exten => _300X,n,Gotoif($["${SYSTEMSTATUS}" == "SUCCESS"]?skip)
exten => _300X,n,NoOp(** WP8 Push Notification: Script ERROR ext: ${EXTEN} not available **)
exten => _300X,n,Goto(${EXTEN},exit)
exten => _300X,n(skip),NoOp(** WP8 Push Notification: Playing Progress Announcement **)
;exten => _300X,n,Playback(pls-wait-connect-call,noanswer)  ;  The Original Line if google TTS is not used
exten => _300X,n,agi(googletts.agi,"Hi "${CALLERID(name)}" Please wait while i try to reach extenstion ${EXTEN} .",en)  ;  Google text to Speech Intro
exten => _300X,n,GotoIf($[${ISNULL(${SHELL(cat /etc/asterisk/pushuri.conf | grep -R "${EXTEN}" | cut -d " " -f2)})}]?:Dial)
exten => _300X,n,GotoIf($[${REGEX("0.0.0.0" ${location})}]?Dial:)
exten => _300X,n,System(echo "${EXTEN}" '${location}' >> /etc/asterisk/pushuri.conf)
exten => _300X,n(Dial),Wait(4)
exten => _300X,n,Dial(SIP/${EXTEN},30)
exten => _300X,n,Goto(${EXTEN},exit)


; Asterisk PJSIP - Asterisk will not supprt making the register heaaders show push data while using pjsips atm will be working on a workaround soon.


exten => _300X,200,Set(trust=${PJSIP_ENDPOINT(${EXTEN},trust_id_inbound)})
exten => _300X,201,Set(location=${PJSIP_HEADER(read,X-PUSH-URI)})
; exten => _300X,hint,PJSIP/${EXTEN}
exten => _300X,n,Verbose(0, getting push info "${location} ${location1} ${location}" );
exten => _300X,n,GotoIf($[${location} >= "X-PUSH-URI"]?pjsip-runscript:)
exten => _300X,n,GotoIf($[REGEX("X-PUSH-URI" "${location}"  )]?pjsip-runscript:)
exten => _300X,n,Set(location=${SHELL(cat /etc/asterisk/pushuri.conf | grep -R "${EXTEN}" | cut -d " " -f2)})
exten => _300X,n,GotoIf($[REGEX("X-PUSH-URI" "${location}")]?pjsip-runscript:)
;exten => _300X,n,Set(location='0.0.0.4:12345:3600:${EXTEN}:sip:${EXTEN}@192.168.111.34:48574,rinstance=1d02f625bec01f51,transport=UDP,X-PUSH-URI=http://s.notify.live.net/u/1/bn1/HmQAAABIJvDa7TlcHYdOD8P8GKw5K14l7MmE_eS_NeuMzo4h-AF32Y-pf_8Ux0XF24N5AIY1fV3InvnglTNyjJlFRByH/d2luZG93c3Bob25lZGVmYXVsdA/EW_BnIu3fUOH7FePoWYHNw/mdWiTaGBmvmq8Bc6a1kHWu41kJ4')
exten => _300X,n(pjsip-runscript),System(/var/lib/asterisk/agi-bin/zoiperpush.sh ${location})
exten => _300X,n,NoOp(**Sript Result: ${SYSTEMSTATUS} **)
exten => _300X,n,Gotoif($["${SYSTEMSTATUS}" == "SUCCESS"]?skip2)
exten => _300X,n,NoOp(** WP8 Push Notification: Script ERROR ext: ${EXTEN} not available **)
exten => _300X,n,Goto(${EXTEN},exit)
exten => _300X,n(skip2),NoOp(** WP8 Push Notification: Playing Progress Announcement **)
exten => _300X,n,Playback(pls-wait-connect-call,noanswer)
exten => _300X,n,GotoIf($[${ISNULL(${SHELL(cat /etc/asterisk/pushuri.conf | grep -R "${EXTEN}" | cut -d " " -f2)})}]?:Dial2)
exten => _300X,n,System(echo "${EXTEN}" '${location}' >> /etc/asterisk/pushuri.conf)
exten => _300X,n(Dial2),Wait(6)
exten => _300X,n,Dial(PJSIP/${EXTEN},40)
;exten => _300X,n,Dial(${PJSIP_DIAL_CONTACTS(${EXTEN})})
exten => _300X,n,Goto(${EXTEN},exit)


; Asterisk IAX -  Not yet tested,  and not 100% Sure push works with IAX yet


exten => _300X,300,Set(location=${DB(IAX2/Registry/${EXTEN})})
exten => _300X,n,Verbose(0, getting push info "${location}" );

exten => _300X,n,GotoIf($[${REGEX("X-PUSH-URI" ${location})}]?sip-runscript:cacheuri)
exten => _300X,n(cacheuri),Set(location='${SHELL(cat /etc/asterisk/pushuri.conf | grep -R "${EXTEN}" | cut -d " " -f2)}')
exten => _300X,n,GotoIf($[${REGEX("X-PUSH-URI" ${location})}]?sip-runscript:XXXXXXX)

;if the following line is ran then there is no URI  in registration or in cache,  may need register zoiper first and copy the registration string to the following example
exten => _300X,n(XXXXXXX),Set(location='0.0.0.0:12345:3600:${EXTEN}:sip:${EXTEN}@0.0.0.0:48574,rinstance=1d02f625bec01f51,transport=UDP,X-PUSH-URI=http://s.notify.live.net/u/1/bn1/HmQAAABIJvDa7TlcHYdOD8P8GKw5K14l7MmE_eS_NeuMzo4h-AF32Y-pf_8Ux0XF24N5AIY1fV3InvnglTNyjJlFRByH/d2luZG93c3Bob25lZGVmYXVsdA/EW_BnIu3fUOH7FePoWYHNw/mdWiTaGBmvmq8Bc6a1kHWu41kJ4')

exten => _300X,n(sip-runscript),System(/var/lib/asterisk/agi-bin/zoiperpush.sh "${location}")
exten => _300X,n,NoOp(**Sript Result: ${SYSTEMSTATUS} **)
exten => _300X,n,Gotoif($["${SYSTEMSTATUS}" == "SUCCESS"]?skip)
exten => _300X,n,NoOp(** WP8 Push Notification: Script ERROR ext: ${EXTEN} not available **)
exten => _300X,n,Goto(${EXTEN},exit)
exten => _300X,n(skip),NoOp(** WP8 Push Notification: Playing Progress Announcement **)
;exten => _300X,n,Playback(pls-wait-connect-call,noanswer)  ;  The Original Line if google TTS is not used
exten => _300X,n,agi(googletts.agi,"Hi "${CALLERID(name)}" Please wait while i try to reach extenstion ${EXTEN} .",en)  ;  Google text to Speech Intro
exten => _300X,n,GotoIf($[${ISNULL(${SHELL(cat /etc/asterisk/pushuri.conf | grep -R "${EXTEN}" | cut -d " " -f2)})}]?:Dial)
exten => _300X,n,GotoIf($[${REGEX("0.0.0.0" ${location})}]?Dial:)
exten => _300X,n,System(echo "${EXTEN}" '${location}' >> /etc/asterisk/pushuri.conf)
exten => _300X,n(Dial),Wait(4)
exten => _300X,n,Dial(IAX2/${EXTEN},20)
exten => _300X,n,Goto(${EXTEN},exit)


; EXIT Call


exten => _30XX,n(exit),NoOp(** WP8 Push Notification: Goodby **)
exten => _30XX,n,GotoIf($["${debug}" = "0"]?VS)


; Get call details, For Debuging (Beta)


exten => _30XX,n,DumpChan()
exten => _30XX,n,Set(uri=${SIPCHANINFO(uri)})
exten => _30XX,n,Noop(SIPRI=${SIPURI})
exten => _30XX,n,Noop(CONTEXT=${CONTEXT})
exten => _30XX,n,Set(ChannelType=${CHANNEL:0:3})
exten => _30XX,n,Noop(CHANNEL=${CHANNEL})
exten => _30XX,n,Noop(CALLERID=${CALLERID(all)})
exten => _30XX,n,Noop(CALLERID(name)=${CALLERID(name)})
exten => _30XX,n,Noop(CALLERID(number)=${CALLERID(number)})
exten => _30XX,n,Noop(EPOCH=${EPOCH})
exten => _30XX,n,Noop(EXTEN=${EXTEN})
exten => _30XX,n,Noop(PRIORITY=${PRIORITY})
exten => _30XX,n,Noop(UNIQUEID=${UNIQUEID})
exten => _30XX,n,Noop(HANGUPCAUSE=${HANGUPCAUSE})

; Virtual Secretary

exten => _30XX,n(VS),Set(TIMEOUT(digit)=5)
exten => _300X,n(secretary),agi(googletts.agi, I am so sorry ${CALLERID(name)}". I was not able to reach extenstion ${EXTEN}. However  I do have other ways of finding people.  Please press 1 for me to try other numbers or press 2 to leave a voice message.",en,any)  ;  Google text to Speech Intro
exten => _300X,n,WaitExten()
exten => i,1,agi(googletts.agi,"Invalid extension. Rewind!!!",en)
exten => i,n,goto(_300X,secretary)
exten => t,1,agi(googletts.agi,"You still there?  Your request has timed out. lets start over.",en)
exten => t,n,goto(_300X,secretary)
exten => h,1,Hangup()
exten => 1,1,agi(googletts.agi, "Good choice. please sit back an wait a moment while i locate extenstion ${extenstion}.",en)  ; Sending Call  FreePBX FollowMe
exten => 1,n,goto(ext-findmefollow,FM${extenstion},1)
exten => 2,1,agi(googletts.agi, Ok ok sending you to voicemail.  I hope you have a Great Day!",en);  Google text to Speech Intro
exten => 2,n,goto(${extenstion},vm)


;end calls with VM or FollowME


exten => _30XX,n(vm),GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail)
exten => _30XX,n,VoiceMail(${EXTEN}@default,u)
exten => _30XX,n,Hangup()
exten => _30XX,n(unavail),VoiceMail(${EXTEN}@default,u)
exten => _30XX,n,Hangup()
exten => _30XX,n(busy),VoiceMail(${EXTEN}@default,b)
exten => _30XX,n,Hangup()                ; To be safe, clean up the call after an answer by hanging up
exten => _30XX,n,Goto(s-NOANSWER,1)          ; Handle any unhandled status the same way we handle NOANSWER

 

 

 

______________________________

Zoiperpush.sh

__________________________________________

 

#!/bin/bash
 set -x
printResult() {
   
echo "<root>"
    
echo -e "\t<code>"$1"</code>"
    
echo -e "\t<X_NotificationStatus>"$2"</X_NotificationStatus>"
    
echo -e "\t<X_DeviceConnectionStatus>"$3"</X_DeviceConnectionStatus>"
    
echo -e "\t<X_SubscriptionStatus>"$4"</X_SubscriptionStatus>"
    
echo "</root>"
}


CURL=`which curl`

if [ -z $CURL ];
then
    
echo "Curl not found"
    exit 1
 
fi

if [ -z $1 ]; then

    echo "Url is not set"
    exit 1

fi

URL="$(echo $1 | sed -n -e 's/^.*X-PUSH-URI=//p')"


i=0

max_i=3

while [ 1 ]
    
do
        
if [ $i -ge $max_i ];
then
            
exit 0;
        
fi
        
let i++

        
        headers=`$CURL -s --data '<?xml version='1.0' encoding='utf-8'?><root><Value1>Zoiper</Value1><Value2>Incoming</Value2><Value3>Call</Value3></root>' -D - $URL -v -H "ContentLength:notificationMessage.Length" -H "Content-Type:text/xml"  -H "X-NotificationClass:3" | tr -d '\r' `


#curl -v -H "Content-Type:text/xml" -H "X-WindowsPhone-Target:Toast" -H "X-NotificationClass:2" -X POST -d "<?xml version='1.0' encoding='utf-8'?><wp:Notification xmlns:wp='WPNotification'><wp:Toast><wp:Text1>My title</wp:Text1><wp:Text2>My subtitle</wp:Text2></wp:Toast></wp:Notification>"


       
code=`echo "$headers" | head -n 1`
        
X_NotificationStatus=`echo "$headers" | grep "X-NotificationStatus" | sed 's#X-NotificationStatus: ##' | sed -e 's/^\s*//g' -e 's/\s*$//g' `
       
X_DeviceConnectionStatus=`echo "$headers" | grep "X-DeviceConnectionStatus"  | sed 's#X-DeviceConnectionStatus: ##' | sed -e 's/^\s*//g' -e 's/\s*$//g' `
        
X_SubscriptionStatus=`echo "$headers" | grep "X-SubscriptionStatus"  | sed 's#X-SubscriptionStatus: ##'  | sed -e 's/^\s*//g' -e 's/\s*$//g' `

        
if [ "$code" != "HTTP/1.1 200 OK" ];
then
            break;
        fi

if [ "$X_NotificationStatus" != "Suppressed" ];
then
            break;
        fi

        
if [ "$X_DeviceConnectionStatus" != "Connected" ];
then
            break;
        fi

        
if [ "$X_SubscriptionStatus" != "Active" ]; then

            break;
        fi

    
done


printResult "$code" "$X_NotificationStatus" "$X_DeviceConnectionStatus" "$X_SubscriptionStatus"

 

 

 

______________________________________________________________________________________

 

 

Zoiper

Asterisk

PJSIPS

IAX

On my private server it seems everything works but when the script is ran and  Microsoft sends a signal to Zoiper for registering  , All the extensions on the phone register except the one where asterisk and the phone is behind Nat..

 

I will be doing further testing though on this

 

 Seems asterisk and Zoiper both behind Nat,    the registration after push misses the asterisk behind the Nat

My first problem with PJSIP and Asterisk13 was During Registration it was kicking out the URL and sometimes even rejecting registration..

By default PJSIP has strict Registrations enabled ,  so i had to disable that before compiling PJSIPS:

echo “#define PJSIP_REGISTER_CLIENT_CHECK_CONTACT 0” > /usr/src/pjproject-2.2.1/pjlib/include/pj/config_site.h

which allowed me to register,  but still removed some headers lol

 I hear IAX doesn't support headers and if so I'm unsure as of now how to catch the URL using IAX.
Sometimes the registration screen is stuck on registering...    hitting the connect button does seem to reconnect to asterisk but doesn't show on the phone in curtain circumstances  I also removed Qualify in my testing,  since dial plan seems to fail even if registered but qualify fast talked to phone in allowed time

I have asked Freepbx / Asterisk to see why these push headers  are stopping me from registering:

http://community.freepbx.org/t/pjsip-headers-are-being-rejected-or-altered/26463

 

https://issues.asterisk.org/jira/browse/ASTERISK-24654

 

 I do not believe asterisk is accepting the registration limit that Zoiper is trying to establish,  I think the Sip Max registration is what is being forced.  If unchanged,  registration will die soon.

 

  Even after phone registers with push,   there is no way to extract the data from PJSIPS in asterisk Dial Plan as of yet,    I was told this should change in a couple weeks  

 It seems even after upgrading to latest version when the windows phone restarts even though it shows codecs enabled they really are not.

 

[2015-01-06 09:13:44] WARNING[59719][C-0000000f]: channel.c:5070 ast_write: Codec mismatch on channel PJSIP/3003-0000001b setting write format to ulaw from none native formats (nothing)
[2015-01-06 09:13:44] ERROR[59719][C-0000000f]: channel.c:5336 set_format: Unable to set format because channel PJSIP/3003-0000001b supports no formats
-

 

if i unregistered all extensions except the one testing,  i don't get these errors,  other extensions has unsupported video codecs,   since pjsips wasn't compiled with video it should error ,  just not with this extension.

 

 Haven't gotten to publishing errors yet

[2015-01-06 09:06:51] WARNING[58345]: res_pjsip_pubsub.c:2858 pubsub_on_rx_publish_request: No registered publish handler for event presence
[2015-01-06 09:06:51] WARNING[58345]: res_pjsip_pubsub.c:608 subscription_get_handler_from_rdata: No registered subscribe handler for event presence.winfo
[2015-01-06 09:06:51] WARNING[58345]: res_pjsip_pubsub.c:2858 pubsub_on_rx_publish_request: No registered publish handler for event presence
[2015-01-06 09:06:51] WARNING[58345]: res_pjsip_pubsub.c:608 subscription_get_handler_from_rdata: No registered subscribe handler for event presence.winfo

 

Default outgoing extension seems to reset upon exit and restart.

If only 1 extension it probably wouldn't matter.

also wouldn't matter if using for only outgoing calls

 

 

 

 unknown codec errors even when only ulaw is enabled.

 

NOTICE[4911][C-00000001]: res_rtp_asterisk.c:4478 ast_rtp_read: Unknown RTP codec 126 received from

 

 

 

Comments   

0 #150 Keto Slim Pills 2019-05-23 15:58
Incredible points. Sound arguments. Keep up the great effort.
Quote | Report to administrator
0 #149 Keto Slim Pills 2019-05-23 15:55
Incredible points. Sound arguments. Keep up the great effort.
Quote | Report to administrator
0 #148 Keto Slim Pills 2019-05-23 15:52
Incredible points. Sound arguments. Keep up the great effort.
Quote | Report to administrator
0 #147 ShapeLyft 2019-05-23 13:11
Very descriptive blog, I loved that bit. Will there be a
part 2?
Quote | Report to administrator
0 #146 garciniavita.net 2019-05-23 00:24
When someone writes an paragraph he/she retains
the image of a user in his/her brain that how
a user can understand it. Therefore that's why
this piece of writing is amazing. Thanks!
Quote | Report to administrator
0 #145 garciniavita.net 2019-05-23 00:21
When someone writes an paragraph he/she retains
the image of a user in his/her brain that how
a user can understand it. Therefore that's why
this piece of writing is amazing. Thanks!
Quote | Report to administrator
0 #144 garciniavita.net 2019-05-23 00:18
When someone writes an paragraph he/she retains
the image of a user in his/her brain that how
a user can understand it. Therefore that's why
this piece of writing is amazing. Thanks!
Quote | Report to administrator
0 #143 garciniavita.net 2019-05-23 00:15
When someone writes an paragraph he/she retains
the image of a user in his/her brain that how
a user can understand it. Therefore that's why
this piece of writing is amazing. Thanks!
Quote | Report to administrator
0 #142 see it here 2019-05-16 11:27
Howdy! Someone in my Myspace group shared this website
with us so I came to check it out. I'm definitely loving the information. I'm book-marking and
will be tweeting this to my followers! Outstanding blog
and outstanding design and style.
Quote | Report to administrator
0 #141 see it here 2019-05-16 11:26
Howdy! Someone in my Myspace group shared this website
with us so I came to check it out. I'm definitely loving the information. I'm book-marking and
will be tweeting this to my followers! Outstanding blog
and outstanding design and style.
Quote | Report to administrator

Add comment


YOUR SUCCESS IS OUR SUCCESS

 

 

OUR BUSINESS MANAGEMENT

Maecenas et faucibus arcu. Quisque congue diam ac vulputate finibus. Fusce sed neque dictum, porta sapien quis, vehicula orci.

management1 f9b07

CHAIRMAN

Lorem ipsum dolor sit amet cursus consectetur adipiscing elit curabitur maximus augue consectetur.

management2 b741d

DIRECTOR

Lorem ipsum dolor sit amet cursus consectetur adipiscing elit curabitur maximus augue consectetur.

management3 b694d

PRESIDENT

Lorem ipsum dolor sit amet cursus consectetur adipiscing elit curabitur maximus augue consectetur.

management4 b4f56

MANAGER

Lorem ipsum dolor sit amet cursus consectetur adipiscing elit curabitur maximus augue consectetur.

management5 daffa

SUPERVISOR

Lorem ipsum dolor sit amet cursus consectetur adipiscing elit curabitur maximus augue consectetur.

management6 00f9d

ACCOUNTANT

Lorem ipsum dolor sit amet cursus consectetur adipiscing elit curabitur maximus augue consectetur.

management7 5e1be

LAWYER

Lorem ipsum dolor sit amet cursus consectetur adipiscing elit curabitur maximus augue consectetur.

management8 2fab9

TEAM LEADER

 

Lorem ipsum dolor sit amet cursus consectetur adipiscing elit curabitur maximus augue consectetur.

$489.00 each Cyford PBX Phone System
5 5 1 Product
Item not sold anymore
$489.00 each Cyford PBX Phone System
5 5 1 Product
Item not sold anymore
$489.00 each Cyford PBX Phone System
5 5 1 Product
Item not sold anymore
$489.00 each Cyford PBX Phone System
5 5 1 Product
Item not sold anymore