From be71ee8e264270f92891155763d2261101307d03 Mon Sep 17 00:00:00 2001 From: moha-abdi Date: Tue, 10 Sep 2024 12:57:43 +0300 Subject: [PATCH] Remove no-longer needed images from .github/images/ --- .github/images/accountant.png | Bin 679 -> 0 bytes .github/images/banner.png | Bin 6022 -> 22655 bytes .github/images/jigsaw.png | Bin 1470 -> 0 bytes .github/images/mapping.png | Bin 876 -> 0 bytes .github/images/networking.png | Bin 1758 -> 0 bytes .github/images/new | 1 - .github/images/phone-call.png | Bin 620 -> 0 bytes .github/images/planning.png | Bin 1337 -> 0 bytes .github/images/woman.png | Bin 568 -> 0 bytes README.md | 42 +++++++++++----------------------- requirements.txt | 1 + 11 files changed, 14 insertions(+), 30 deletions(-) delete mode 100644 .github/images/accountant.png delete mode 100644 .github/images/jigsaw.png delete mode 100644 .github/images/mapping.png delete mode 100644 .github/images/networking.png delete mode 100644 .github/images/new delete mode 100644 .github/images/phone-call.png delete mode 100644 .github/images/planning.png delete mode 100644 .github/images/woman.png diff --git a/.github/images/accountant.png b/.github/images/accountant.png deleted file mode 100644 index af00189ad605ce0d41f67508fa4ac5445906a458..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 679 zcmV;Y0$BZtP)ugRwa0ZQl8M=l#C;*IVbD=kh=2y#MDp74oqN>o5bq(TmHt zQX;M-M&krdVODB=BHD1^e+hPCZ;t&iE@JY(537-}egi~dGwJ;_lum)c-P=eqE z=HMg-Gwh@ACX1j7ze*%e@B^!J?1fPoi@j(pBY7h}#qlnz#Z*BYt%+0C30hE520;TR z#2oGTiElWF{yc&v+$@9Om2j1V_?TLMop#E)q9<5V2EjCZ77B1bHlkTj*3nYIZP=Y- zpD0LqX`ELJ;z(>Yaa_nFxsh@##%AHimO?JUiV>2G#Z%O$)>^SexS~5aTMj`TzDJ@2 z)i^I)Pa5M4ReoLcV}v?L2i?X(JP@wzF*@+aaDnt2s{Ai;W5`y~d>j{Aa(zs=7~7(4 z9^Rn~`!GEf+l;%0u4ve9cc4?K#O*kO@wgD@HMoZLaomCBxQ<&`ma*A_xXXvwDpY2I z&N!cm=jajSTN6*SA>}(I+Ky!r95STmG&Z3d@39ASh1aYb&*G_z(T)Yh1o!0kp4o!* zns9%F#0gd!F6~0ni?aH8g16D$FQ}tG$G1=TFAc)8o7wD&u?km(zB7PH_>kk@jZ1O- zGOrF2tP#{B2CgaL-y=x43w;$hW4M-!Q7b&5gkx7p6;cr@aT@26g}AfpeK$=LC-kWp-(lG)7B1P&)K%_UNDMh+~ln_E!NN6IR zgn$q_BnU#l5P0JE_s^48a6R0000O4fG#d007iz0D!WV zj*?7?xcl`M`NU^tWTj)|{o?4EaJ9P*`FI2r4sdZGf63{8N1#Zct78pIg&SFzKG?#< z67X3t@Uh$2Y~J^)!<_$!LHhPD0f4Kl|9%vJ!Vl~K058Dcv6fZXhy9|3P_zmY!0~45 z;N@i>Vg5xhR~2gYN;80*(?8GkIoqRyAZT|`yfMc z(>7Al-U~HAuZPw9Dk%31W$)wo1IMj~R~MA|+<;elTRaqh8>`P;{=oI90Hx9iX_L{{ z)rx6j%)^va?ni_^e78Z->&IWj3s(<}BPRi(PRfNMO3VPpvm&FCNbuJicHDsMzU?I` z(;`LyorueSQ}vpn%m99lV~lJZ+g%<7#ZeGIKVCmlG>sY2a?AkG$otG%{f;4%HpZ(g zB2eiy_PfN(yRPo(ogTxp03$k^6531!fLzRs7xfV3so)n|h6miej`Y{wR~!W1U55Bv z(d3}o4JxTEYoKwx`$Yv?vBt(7d*w@Gh{ZiKDz}F*I>U8wbkEi(B&l~F@A5JfaK@yi zJ0#H*aGD5GKBsj^N-PZnME+0-zVeN7D`vJ2Aj++Ioe4_~N%nd}Y1RAsp6l&oVTva! zF9g|jf8U%22=-Z4-s3D^rHG0T;-X39YM+(;fiL@>&Au-V&VKv^auJel2r}qux zez`p$r}Re$Ji^$iRzqSW?>(GPI#m=tx; zB^D$7!2wWT_TxtBt(%6A1oQ_1UlRoxw;u7+l=29AYf`e@2i)d0pp3o#h0-ooka1eO zm&r9NPTRZm=9N$Y>UzJnG}Rv9lO`SW8?rHI0|D?Fjao8hugauu@`0OT&_M$=Q!rf`+x(cD8ggGF(v@p=@RX04{E?l zAk&Gh9&HO{uVq?mdvWOpO%)n|bF&$@vhcG-iWRTnZf3fIP(Vl09?>rS9Yu`Q@c1=K zAKI9^KZw^$Ljl9o@b|Q>l$!K=^@TL#v)I*~3>&R|fZ0GS#<*Fwo}!eDI<&&`*_SpZ zg6U5{%CPx9fVaO-Rc%kRnG1lm(}&-A{Y(|`U-L;DXL<$&fSL&;2j>%@1aL}XJv$%i z(g1=V&|!#L^GtvUNh*9%>BS9zyfPgI)~oslpjlAyZmBZy3m4!InRI8sL>wUR=I`HL zP5(g=0C@Xg-qxQ+j05mo-_NTZ$|pn#Ft&#{1~P~S(8kP4mU~YBBke2ekBMqOp#gM$ z@j>|q1gQdo-M9BOCJxNR0l^;I{+jJ(OH2SY<#`+H*Y#F_t&zUAnk(ffic(ecfq<8B zDDt564P=X;Y^RK&pT#Ktp$5tVT;nU+nblsCdDjdB1^!Zyd3?DTlRsCI$SJX0jLjd4 z09t^@T{wJ;0z?*1t7zvKq9yaRaxnpSxzJ1iVfzTw3qP_l?7;2)p^UzLfNO3=JKqpB zS;#FHlXmykcoqdF2jRV{xtLKqMsgn-4cilJ8EA7g^)Xk=Lg`t=+D*$^+ zobk-fc_ZqWz6aBvoN2!lFaQRc{wP*O>UU7~#tdR`Urn~u9svMC>7kb#EMz!Ay-##u zW}ky-W3=oc#3@-pG=;03dtlsR0s|Ppo)`C(DDgR#D(1C)q3!^sRzDXY(R1J5{Jj}9 zJs^%X0x~Tq2n4tW{v8o=G_5wPjIg22-3HRci4*}R8mLvtd( z%jL5lxo_Ng*iB`6`f<-xV92zec9CxgA9!|D6zz1ggR1wc{^&Vl#?R?<^V4-a&1&xI z)Ws#Fq$3)XhOzv4TM)SM^YlNK#%y(DNm45T-9jaVGdUZrIk$m&WNdO=nx?+P!&xFG zY+i0^L0yi5LMo{x4M#eE~b4pT1U>Wm}VL6KUot5LM!#NeTlR6%mS+ zkps09rH1Z89o^q!sdyk~qs_vfkLkJ*rX>QJ`?}3Gb(Kj~hiTQQqXHRPbA@H(Dek!@79(kO zaUI^f(jtBzbJ20_qv1JayhP$HbWoRTvXHhstl$pV>00;zMYIt+6@F%a6S}{ zyWY38@ph$`m(T`k>If7Pxjbrk%7Qb)nocMpV=0JRc$GUpt$apb^+s`xVMdI04CULlpbJh8qD0(K}Rk z1me&`+rf(c(*?iytSxXhQ;?rzlIrl%@cclw0T_2#S4k+>qk)3cA;0FcK(=0q<*=xK zjkh*_7fKkmxcyd*&z6!K$G47&ab5jKvt!n&cCx@R9+U)&K)n>;B2ivxXvi>p3s+*j z0Jt;&lX;>JE35UII5n(uc9y_8hD;^ghCfhCdh?0{#8Zi)hdLYtF^Pd|r}Qt#kYM}k z)Zoi<^!pXHZ4=PMj(jFFxn|j*Y-kcINTCn%vj|%}>0N%ki;tl0Jm!)U|J3-P_+R0{ zoMLr>Sd1R-tlj?~F{%>s-uXlEK>uG|TqL$Q8kiSI`EczQXC~zB@a@_J#Zi6vAfT5< z>y2)(l>v^UNSD*r39GI@)FOW87ep`Tf2G{NHw@20zog}XD)kf6#EI3qRT&8*XF3p1`6l^Zeg|DsRU(Ta-ztOfLWI$-R9#lrHX*I1RI=7Au<&9; zTi#=5i!|$nYZL3ThZL(#b@yMfXxM4ksXxG+DF`)Pa@_(=DD4torO9l*Jd7WA$Z;c` ze%y7OTR*dv-2GeUUDq1?FmGfShra9E+1EXeNU<)S5IXg(^DeiPevOt}@2)HJd3344 z=nGS?Th0~tHKrmLl=;&!b$PWbNpts*pH5csZ7@EA=OZw}GJ9EtbFcMYrZ1Xv zP#IRM&hs;EZ;U@U)SW}h|Mc#Epgrw^OZsNEZi)ZiprY|x+X6vV?8_%&Mbz>5#zW$9 z=LkwyL6E)_ra0OAHa|r3w@L+uhzb4}KOpn8aAK_ep>-^h7;{0Ep1`~8y*PbTI`Mu4 zZGv#@#8$=aPnU2d&ND_Iuu`y@^KNP%#mxSMkCY|2z|J*>9k8X-kBx z5gtkNfq4Qhd248HZIA!x9OWfs8)(WX@IDsc;OqghZMk|Cu^z`J|0(|Ib7e8s+r9eC z-SP!gb?;7nzWe^gA7v1&;~?%gO#5}DMdW($qJsD@;!l!%AeL#CuILCKb#=*?I1@M_ zItqOTtsM)+GSR$I8vyq()b4Z4wWZGzCrL({a|6_rEhkr(c}%L+AU_s7cQhU^h|Q6> ze22N}nooYh=5)-(z&&7j6>#dCwnN0_H#Wguejq14gG@)nuK;>N@ zZBr5kE}g9M?m>O_

DJBt6WY*>F@0zBX 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 literal 6022 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 Ww@L|LK1=)ur>?A{RQd8v=>Gsiyn`D6 diff --git a/.github/images/jigsaw.png b/.github/images/jigsaw.png deleted file mode 100644 index 76b397931355be5e4fe857cc92d98b546e04f405..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1470 zcmV;v1ws0WP)kMNKJ1rO;A{q(mO6 zB~WVsA&M;;Y*4`<;ZsEk7D9rh1DC7%Fz1X(Elx|e29E%~s&8Ij+SoGOt@yV+ zY^Ri9-LmK6rX(Lj+lWHCl%NFw0A5Q^ktj(1L^}nC*(lN}6FKJybBeea=^<<sY0=mZ0-Kt=q%a8cf5J(mQ05I6&M@zj2 zgI#_eEsOqWvt;BPP;?zWodqQx0~G{fRQ(M85gq4Fbn!n*?~H^u4SA04zM&5Fj=s3o zn_hUzWv!?;3PSruK!kg85g4gdy0q>`?2a1PW}^#qy^&a?=WVAVV;|M*l7%iEYh z0U#&RNtVV$5x1&OOFB+~X*$XewJ=@hpd1kB=zFzW1ah->h^qme^>_M7XP=RDcohZ! z&nCywM5_e=PCD_(ql zqUYPcx(ANOTBJQoVq6Qy1iF2G&!NVajR0f-y^{n80bf4PHmNj8Bv>|gbZ|QdHHefp zsbH0akc^t1{soy4VMJvNR&z+JXmfl4j>7@(z(*5#rk=3-sJiM!)m86D#nc2IJCKG{f0x)SG{Hwq#`|k~J+}Bod@`8JpPh)LHYv^|XX5Ad} z6ufo*@6;hi&qimj6s3q*gr#Pg0WA8@0$zpT0NuYI zfqeHG92vQ2s;NM2>AU8-=JqH0+-^!-cEgIaSmC#Q8*IkN(D5ya38Q%CfQrueHLzzD z!0bwV;2XPj|MhC5G?yVQF$QJVhvDgNMd!~YV2tCD)jMt(dfi%uPt~5>@gv#8z~dhl z*s>z*O5LC{e|GWfqf^B>bX^D2bm0E>G)E@l#+hD}?kt3@yc)Z|IST*~jRtTI<23&m zOlC)HXZ8obh7)Rlrg$MpA(MhU&6nY?{2Z4`-^2c6r=e;ZN?s~J{Hkqtr~Gj4!%t1p zp4v|f_ev2lbhzn~khSwCDn-PN7No1_uRDjn+H&|hdr*C?5$_bPgr@($g$Mv401^Z# zq$nw`m}S2G1CL$2o|z+)yrHg`OB-^t+4aNk^USm)e*BX+xLR|Vv-3xIQna&ux(dc1 z1CVu}T-NdD@dN!0)wg{ettFZ!pH=`g+%>#8D>)vYZC&R&c;ZaX;<>36E{8o}kxaAy Y0Sfj;8R(2|4*&oF07*qoM6N<$g0h;V9smFU diff --git a/.github/images/mapping.png b/.github/images/mapping.png deleted file mode 100644 index 0095821e81a10c7eca4b6c8b159e0af726f5e7ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 876 zcmV-y1C#uTP)e4B_3`-iF&#wrHHm&g#7GY2COQ z05U!14k$GF`~0Vpo2J{;A#ehW;bnN`Ff*~@8;x%o2U7q52+D93fp#|a`dfpph$P}; z@&56E0Yfb(+fZd_-Q0v|1F1(%eT`iy000;=Tm^-L1Tn=cFi$F~N3{>5BlmV~-g2@! zR&CDev8`%c{j`TpV`&aG$MKgr2wr#Hm(#G`fVycr?OP#b@ z0H&o*&VWj6r#83@0FzHff^&kq<^*^7WF(k`=z3K1dCZR5#8~^Jc_0q{*8Z~oJCN4o zq)xl7Jmo+UF=eGTm3@dbdVIUv{~Q2Ld(CpT`7ng`1WMJAzyK6|V!>`={yx5`;7Tmf z;8YKEJ*qj!My|#gYguu>M)W0>KY;X+noc~O()Jb9nA4$MzMIHAsniRqr5ObClW1Sy z^+F{&E+at_{0snCQN@Ga`euMw*P|MZjYPC8zHkaSz&0f5aIpJAQZJ7*L%>%?@)plH{TQ2X0j^fJDx=aAGAnEd&XOiYFnG=o+ zdic6KP&*6S=}JK6HEVyFRRmT(W+(zp{0+jODnLC2D4&4)Z+rZ)WNe=_@7RRajHlsu z?JYA)iJ=d5Px!Z$M!hB*SuXcR@sfMS?&Q zFR=j<6NZ{e8nu}rP1BU5)6{eUR3goIk$zJyK5INWZh!|irj zl3O@HM7aOaq?k>)+jfrE+Z^=#JNrBl896Tz5wvM(@ySJ-9H-kZ`(3U%;&~t47#gK# zD}R4yxpjRV5rJFSrBp5#f_1-eag2#)XT87CB%7ZL(?pzVsQEB9%VZLLb@8IG|LD;f z5y#0>3D!EpX_e`{C`>`2xS5Zx9;-OJ4s->Uf=#wL1o1+ zf5l5cM)50?W%2KO{&R-`KuA^O+4BH48gE-qh&%%YpY#-5mCnt3&RV z5a?G7beo9VuhXjkq?AdsKUyuwSLp8biY;w4J>ntX?eR&I7yv>iTt!8jw^*Lpuu=0} zZ?FH&y?fmNQ2oj)sx-^pMv#GVb&6oOG+l)-ens!qV)5BON^h#PdE{{Z#o>d6S*Wo9vYFi)WoY@1u^M z0a|V?`a0M*0;^RVYBUeVn9T1k&&YURpKLBMBqfE+=fwaZ5{uH~qN4!-0Sd7D4>T@1 z8UiRL*kP+D_(EcIYWT{P-v!J61Q3bZuMZ6+r6eZe;n-MZ;~!rP0Kk*^k17G+`p^(S z=nGZ=pyxQo-VL4u7!g5jw5(m1mDLa*6U+6^NoDcbg$e+;ajwyuV^Dbd{yBgPogJml zzK)iK;s~QL#LML8T(&ODe9VxZ{a<$*2LLX6*Tri$uGgGsX_3Zeu2V=9Do7M6#AOx8 zkDUBM*=@7+++Q33W}(nsm7nG69zka~K1zXt$qN{UV(NpqM^ANJ(>!U*fCRUrV-dim1S zi8H4MoL<*vF2I(N!0iL*8;w?1EE0)0x7)n~aXIVX%iXqf-1_{>QwH;z>Y$^TkRW>~ zyWr-fE<5qOk4DE_G&<%Yp7&9E=T%RnW$k#V(cG#rnwLGGjm<6?skb?(-sYg#?1JH7 zfXMWms=t14#LM$OI&`egox3S-DtA-f)S+W_Zl3p1^?|=T)kaHsFfGRz*LkL?VdhLz z!wh3wcd$`YtCWuwTk~W9aQOHU-`T1#?b)g@?V;L_`~a{a|4~h3cvxvLt=Qq1Eo(ga zSp@)$jd34GrRO{?Qz>2(0)dv>7h9@`hG4QXs;s;7+p{B=+TKvFu!QeEu>YJ+ zt%})IJgLb}Tnqp>)As|mz4of}`|%0?#GUEC{a=9lYENsA#?bE=zLhXJKIXhT$?pLG z*R`&RxHb8&j*fay@T+y0^%DSqV}Nb2Pdwunz0LP`^alelB6=VgnwlEH_w|iE5KqcT z%1n^_;RjbB$1_WEnS}j&WWrxL-QV?Hu;KvlAHPO5QxY$!@Bjb+07*qoM6N<$f|7<+ Apa1{> diff --git a/.github/images/new b/.github/images/new deleted file mode 100644 index 8b13789..0000000 --- a/.github/images/new +++ /dev/null @@ -1 +0,0 @@ - diff --git a/.github/images/phone-call.png b/.github/images/phone-call.png deleted file mode 100644 index c31d2d0126eaeb792b761c20942ea731357900c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 620 zcmV-y0+aoTP)MzCV_|S* zE^l&Yo9;Xs0005&NklDLcj+;8SjSO1b%mf>*hHP* z#wNiwJ?0jtC&NVU`Chx6c2kA@a%Ymy-YPv$eY6$awq9_-C!<5K*nq>O9fGyyhahc% zV3vNhN$9NKHjYG!;6hq;2*!AzFZYrE1FF3AQdJ1Xdt%6eBs|l3kL>uje)(&GjFv>7 zfQClFAr_Vd;bDEHM}UEqX%>V0000;K~zYIjh1^%m1P{qKhN_%=Wq^!Xe8hTq_lZk5(-Mr)Ue!A z@j{yyA`xBL&C8Z^X3o-_Yt1>O<+PmQZI&y^%jTw8PTLU4;kDWb7vcoO8>nzN@B2Pa zf1v1*b6np)f6w!Nf4}GZyS<`s*3^b1FD?(D4We0d>UzMLyDG=mW%j7(ewpioTea64 zr!3vG2JxK0F!k)x*89qL2kLqn4bQ>v)y)x)}b;lfC}d|IbQZ0-B0=cu6OZ! z1YkPc@hHj5&r1L~q7P%H4K>L>UvR%Hsc8L2x{T~TJa<{lt-yHk;)toGN)itc>l1NZ z{G!{~K}x*$S`-2h0_N{``RfT01|-1OldUKH+D5R*^Xm4ENm;pbB*GTPv_)qhFMLU8 zeH!pY((`}9Hc}4jwfN3m%aWh8NpxnOM`&FfiG0>B!Cl7}VvAJ)cH|qb+|nd>l?c&( zz=VM?09_gH8b zuj#ZA&v{z+?%umX{Zdqr@@-l3iUHj%hNX7U6adQ-VeLts1>IsGBh?}{s_l*t@Xkm{ ztWTtKWLAPGES$FCmA=-3x3eNkzhIxm)y7cgz2aPoa$U3m8Qwoah>7a@Ju^BpLgWuo zlDA>CiLDJM zD_wRL`l)Y`Jo`i^R~H>+XPMnm79ca#qFf_OXHkU~*a=P_m6*Yw#-CpP#?S<;uNKiBe)TyJkkt zU2$m;ONu`fm@`1mp$j(Y$rjB)sJX3qW02yT<3W~;i;6(>^uie1U$O9qfF+z?3nmz2 z4n6Ji)5^3dVCWo1s!bUX~QmH6EcS$;GBx{WioWLtw2l&YIlv1 z@^GYay(8ZMEn!~~hTJw%&SvOl8$cvxPR-6pt#sE{OFX8xZ%>gW%iG00000NkvXXu0mjf0LX{z diff --git a/.github/images/woman.png b/.github/images/woman.png deleted file mode 100644 index be6ac95acabd2552d35113c33abfa349fd8737eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 568 zcmV-80>}M{P)XP+`+c7GJm=v*qc4Hej~!TpxpD6Y zUf>RX{!Ica@EGliH6A&Cgu$3)m3X!$BDZH8iUOxF*VqNcE^}5 zRNcW!EWw+EWL{%wj7c^a!cO6mn{YL9hk7+wiy7Rl5ud;<9H=rFs0jQhjDZh0i^W)% z0hg!8%Yb8#=vnZo8K@fP0eeoQkM#ut3WNZc#(-U;t# z7R4?a!=@7B0pWK%!xOBp;0+2LS2{Kp2{WdR6T$-;#FCc>a%cn(+%esGzz+_AdDV0000

- PySIP: Python SIP Library for Custom VoIP Solutions + Python SIP Library for Custom VoIP Solutions

**PySIP** is an asynchronous Python library designed to simplify working with the Session Initiation Protocol (SIP) for VoIP communication. Whether you're building automated call systems, interactive voice response (IVR) menus, or any SIP-based application, PySIP gives you the flexibility to create and manage SIP accounts, handle calls, and implement custom logic with ease. @@ -11,14 +11,10 @@ - - @@ -27,9 +23,6 @@ - @@ -38,9 +31,6 @@ - @@ -49,9 +39,6 @@ - @@ -60,9 +47,6 @@ - @@ -93,7 +77,7 @@ ### Step 1: Clone the repository ```bash -git clone https://github.com/yourusername/PySIP.git +git clone https://github.com/moha-abdi/PySIP.git cd PySIP ``` @@ -185,19 +169,19 @@ The `SipAccount` class is at the core of PySIP. It handles all account-related t account = SipAccount(username, password, server) ``` -#### **Registering**: +#### **Registering**: Call the `register()` method to register the SIP account with the server: ```python await account.register() ``` -#### **Making Calls**: +#### **Making Calls**: The `make_call(destination)` method initiates a call to the destination number: ```python call = account.make_call("destination_number") ``` -#### **Unregistering**: +#### **Unregistering**: When you're done, unregister the account to gracefully close the session: ```python await account.unregister() @@ -215,13 +199,13 @@ The `CallHandler` is responsible for handling the call flow. It allows you to sa await call_handler.say("Welcome to our service.") ``` -#### **Gathering user input**: -Use `gather_and_say()` to gather input from the user, such as pressing a digit: +#### **Gathering user input**: +Use `gather()` to gather input from the user, such as pressing a digit: ```python -option = await call_handler.gather_and_say(length=1, delay=5) +dtmf_key = await call_handler.gather(length=1, timeout=5) ``` -#### **Transferring the call**: +#### **Transferring the call**: You can forward the call to another number: ```python await call_handler.transfer_to("1234567890") @@ -234,13 +218,13 @@ await call_handler.transfer_to("1234567890") The `UdpHandler` is an internal module that manages the asynchronous sending and receiving of SIP messages over the network. -#### **Sending a message**: +#### **Sending a message**: The `send_message()` method sends a UDP message to the SIP server or peer: ```python self.transport.sendto(message) ``` -#### **Receiving a datagram**: +#### **Receiving a datagram**: The `datagram_received()` method handles incoming messages, placing them in a queue for processing: ```python self.data_q.put_nowait(data) @@ -311,6 +295,6 @@ Contributions are welcome! If you would like to contribute to the development of --- -
-

Made with ❤️ by the Moha Abdi

+
+

Made with ❤️ by the Moha Abdi

diff --git a/requirements.txt b/requirements.txt index a411335..bf0a05f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,3 +2,4 @@ pydub requests edge-tts janus +python-dotenv
Feature Description
- Account Icon - Complete SIP Account Management
- Flow Icon - Custom Call Flows
- Network Icon - UDP Transport Layer
- Phone Icon - Flexible Call Handling
- Puzzle Icon - Fully Extensible