Workaround for PAI to work on Yeastar gateways.

Sourced from Yeastar:

NOTE: Sample GnCustomCfg is also attached to this KB.

1) - Add Custom config patch

There is a problem for TE that it could not load all the custom config lines of the extensions_custom.conf. So we need to add this patch first.

1 - Download the patch file from this link: 

2 - Login the TE FTP and copy the file into the persistent folder.

FTP login guide:

3 - Login the SSH of TE to create a script to load GnCustomCfg when system boots.

Login SSH followed by this article: How to Log in SSH?

cd /persistent, create a file, then put the content into the script.


sleep 30

cp /persistent/GnCustomCfg  /www/MyCGI

chmod 777 /www/MyCGI/GnCustomCfg

4 - reboot TE to let the change take effect

2) -  Add PAI & Diversion Header for SIP INVITE

In the following, we introduce a solution by customizing the config file.

It requires the Linux knowledge to accomplish. Especially the VI command. Also the knowledge of the custom config method: How to Create Custom Config Files in Yeastar Device.

If you don't know how to handle this solution. You can try to seek help from your IT or a Linux skilled technician..

1 - Login SSH followed by this article: How to Log in SSH?

2 - Create extensions_custom.conf in the /persistent/custom-cfg/ via SSH. And fill in the content in extensions_custom.conf

Replace XXX, YYY as required. If you need to invoke A Party caller ID, you can use this string to replace XXX/YYY : ${CALLERID(num)}


exten = s,1,NOOP(do call out)                                                               

exten = s,2,GotoIf(${DB_EXISTS(oblacklist/${ARG3})}?Blacklist-Handle,s,1)                       

exten = s,3,Gotoif($[${LEN(${FromSystemAlert})}>0]?6:4)})                                       

exten = s,4,Gotoif($[${LEN(${ARG$[${ARG1}+4]})}>0]?5:6)                                         

exten = s,5,Authenticate(${ARG$[${ARG1}+4]})                                                       

exten = s,6,Set(TCOUNT=4)                                                                        

exten = s,n,Set(CDR(userfield)=Outbound)                                                           

exten = s,n,Set(OldCallerID=${IF($[${LEN(${MACRO_CONTEXT:13})} > 0]?${MACRO_CONTEXT:13}:${PINUSER_CONTEXT:13})})                                 

exten = s,n,Set(TOUCH_MONITOR=${OldCallerID}-${ARG3})                                           

exten = s,n,NOOP(${DOD_${ARG${TCOUNT}}_${OldCallerID}})                                         

exten = s,n,Set(TIMEOUT(absolute)=${IF($[${LEN(${ABSOLUTE_TIMEOUT_${OldCallerID}})} > 0]?${ABSOLUTE_TIMEOUT_${OldCallerID}}:${ABSOLUTE_TIMEOUT})})

exten = s,n,Set(DLSTAT=UNKNOW})                                                                 

exten = s,n,SetCktCustom(sendrpid,no,no)                                                           

exten = s,n,Gotoif(${ARG1}>0?1-dial,1)                                                             

exten = 1-dial,1,Gotoif($[$[${TCOUNT}-3]>${ARG1}]?nextrouter,1)                                   

exten = 1-dial,2,Gotoif($[${LEN(${DOD_${ARG${TCOUNT}}_${CALLERID(num)}})} > 2]?setdod,1:1-dial,3) 

exten = 1-dial,3,Set(CALLERID(name)=${IF($[${LEN(${CID_${ARG${TCOUNT}}})} > 2]?${CID_${ARG${TCOUNT}}}:${CALLERID(name)})})                       

exten = 1-dial,4,Set(CALLERID(num)=${IF($[${LEN(${CID_${ARG${TCOUNT}}})} > 2]?${CID_${ARG${TCOUNT}}}:${CALLERID(num)})})                         

exten = 1-dial,5,Set(_SIPSRTP=${SIPPEER(${ARG${TCOUNT}},srtpcapable)})                             

exten = 1-dial,6,Set(OUTDIALOPT=${IF($[${LEN(${GSM_${ARG${TCOUNT}}})} > 0]?tTkKWwXxr:${DIALOPTIONS})})                                           

exten = 1-dial,7,NOOP(null for std)                                                               

exten = 1-dial,8,Gotoif($[${LEN(${FromSystemAlert})}>0]?sys-dial,1)})                             

exten = 1-dial,9,SIPAddHeader(P-Asserted-Identity: "XXX" <>)                   

exten = 1-dial,10,SIPAddHeader(Diversion: "YYY" <>)                             

exten = 1-dial,11,Ringing()                                                                       

exten = 1-dial,12,Dial(${${ARG${TCOUNT}}}/${ARG2}${PREFIX_${ARG${TCOUNT}}}${ARG3},,${OUTDIALOPT})  

exten = 1-dial,n,Goto(1-${DIALSTATUS},1)                                                           

exten = sys-dial,1,Macro(sysdial,${${ARG${TCOUNT}}}/${ARG2}${PREFIX_${ARG${TCOUNT}}}${ARG3},,${OUTDIALOPT}) 

exten = setdod,1,Set(CALLERID(name)=${DOD_${ARG${TCOUNT}}_${CALLERID(num)}})                       

exten = setdod,2,Set(CALLERID(num)=${DOD_${ARG${TCOUNT}}_${CALLERID(num)}})                      

exten = setdod,3,Goto(1-dial,5)                                                                   

exten = 1-BUSY,1,Set(DLSTAT=9-${DIALSTATUS})                                                    

exten = 1-BUSY,2,Goto(2-dial,1)                                                                 

exten = 1-CHANUNAVAIL,1,Set(DLSTAT=9-${DIALSTATUS})                                             

exten = 1-CHANUNAVAIL,2,Goto(2-dial,1))                                                           

exten = 1-CONGESTION,1,Set(DLSTAT=9-${DIALSTATUS})                                                 

exten = 1-CONGESTION,2,Goto(2-dial,1)                                                           

exten = 2-dial,1,Set(TCOUNT=$[${TCOUNT}+1])                                                     

exten = 2-dial,2,Goto(1-dial,1)                                                                   

exten = 1-out,1,playback(all-busy-now-try-call-later,noanswer)                                  

exten = 1-out,2,Hangup()                                                                           

exten = 9-BUSY,1,playback(all-busy-now-try-call-later,noanswer)                                 

exten = 9-BUSY,2,Hangup()                                                                       

exten = 9-CHANUNAVAIL,1,playback(all-busy-now-try-call-later,noanswer)                             

exten = 9-CHANUNAVAIL,2,Hangup()                                                                   

exten = 9-CONGESTION,1,playback(all-busy-now-try-call-later,noanswer)                           

exten = 9-CONGESTION,2,Hangup()                                                                 

exten = nextrouter,1,GotoIf($[${LEN(${NEXTROUTER})} > 0]?${NEXTROUTER},${ORGINEXTEN},1:${DLSTAT},1) 

exten = h,1,NOOP(no thing to do)                   

Save the file and quit.

3 - Input commands:


asterisk -rx "dialplan reload"

4 - Make call tests.