5 Website Development Tips To Boost Your Business Growth Exponentially

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

I have decided to dedicate some time to make a great system that 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 Lumia 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:

 {phocadownload view=file|id=9|target=s}

{phocadownload view=file|id=10|target=s}

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


Published on: Mar 03, 2021

Categories: Web Development

    No Comments yet! Be the first one to write.


    Leave a Reply

    Your email address will not be published. Required fields are marked *