Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Asteriskβ„’: Π±ΡƒΠ΄ΡƒΡ‰Π΅Π΅ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ΠΈΠΈ Π’Ρ‚ΠΎΡ€ΠΎΠ΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 43

Автор Π”ΠΆΠΈΠΌ МСггСлСн

ВмСсто этого ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ макрос, содСрТащий список Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… шагов, ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всС Π΄ΠΎΠ±Π°Π²ΠΎΡ‡Π½Ρ‹Π΅ Π½ΠΎΠΌΠ΅Ρ€Π° использовали Π΅Π³ΠΎ. Π’ этом случаС ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ придСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ макрос, ΠΈ это обСспСчит ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ всСх элСмСнтов Π΄ΠΈΠ°Π»ΠΏΠ»Π°Π½Π°, ΡΡΡ‹Π»Π°ΡŽΡ‰ΠΈΡ…ΡΡ Π½Π° Π½Π΅Π³ΠΎ.

Π’Π΅, ΠΊΡ‚ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π·Π½Π°ΠΊΠΎΠΌ с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, замСтят, Ρ‡Ρ‚ΠΎ макросы ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅ΡΡ‚ΡŒ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… соврСмСнных языках программирования. Если Π²Ρ‹ Π½Π΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, Π½Π΅ Π²ΠΎΠ»Π½ΡƒΠΉΡ‚Π΅ΡΡŒ, ΠΌΡ‹ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΠΌ вас с созданиСм макроса.

Π›ΡƒΡ‡ΡˆΠΈΠΉ способ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ макрос - ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π΅Π³ΠΎ Π² Π΄Π΅Π»Π΅, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ прямо сСйчас ΠΈ приступим.

ОписаниС макроса

Π”Π°Π²Π°ΠΉΡ‚Π΅ возьмСм Π»ΠΎΠ³ΠΈΠΊΡƒ Π΄ΠΈΠ°Π»ΠΏΠ»Π°Π½Π°, которая использовалась Π²Ρ‹ΡˆΠ΅ для настройки голосовой ΠΏΠΎΡ‡Ρ‚Ρ‹ Π”ΠΆΠΎΠ½Π°, ΠΈ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΠΌ Π΅Π΅ Π² макрос. Π—Π°Ρ‚Π΅ΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этого макроса обСспСчим Π”ΠΆΠΎΠ½Ρƒ ΠΈ Π”ΠΆΠ΅ΠΉΠ½ (ΠΈ ΠΈΡ… ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌ) Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ возмоТности.

ОписаниС макроса ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° контСксты. (По сути, ΠΌΠΎΠΆΠ½ΠΎ Π΄Π°ΠΆΠ΅ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ это Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ нСбольшиС контСксты с ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ.) Для описания макроса ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ слуТСбноС слово macro-, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт имя макроса, ΠΈ вся эта конструкция Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки: [macro-voicemail]

ИмСна макросов Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒΡΡ со слуТСбного слова macro-. Π­Ρ‚ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π°Π΅Ρ‚ ΠΈΡ… ΠΎΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… контСкстов. ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ Π²Π½ΡƒΡ‚Ρ€ΠΈ макроса Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ΡΡ практичСски Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ всСм ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌ элСмСнтам Π΄ΠΈΠ°Π»ΠΏΠ»Π°- Π½Π°; СдинствСнноС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ - макросы ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄ΠΎΠ±Π°Π²ΠΎΡ‡Π½Ρ‹ΠΉ Π½ΠΎΠΌΠ΅Ρ€ s. Π’Π²Π΅Π΄Π΅ΠΌ Π»ΠΎΠ³ΠΈΠΊΡƒ голосовой ΠΏΠΎΡ‡Ρ‚Ρ‹ Π² макрос, замСняя ΠΏΠΎ Ρ…ΠΎΠ΄Ρƒ Π΄ΠΎΠ±Π°Π²ΠΎΡ‡Π½Ρ‹Π΅ Π½ΠΎΠΌΠ΅Ρ€Π° Π½Π° s:

[macro-voicemail]

exten => s,1,Dial(${JOHN},10)

exten => s,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail)

exten => s,n(unavail),Voicemail( [email protected],u)

exten => s,n,Hangup()

exten => s,n(busy),VoiceMail( [email protected],b)

exten => s,n,Hangup()

Для Π½Π°Ρ‡Π°Π»Π° Ρ…ΠΎΡ€ΠΎΡˆΠΎ, Π½ΠΎ Π½Π΅ идСально, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹ΠΉ макрос ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π”ΠΆΠΎΠ½Π° ΠΈ Π½ΠΎΠΌΠ΅Ρ€Π° Π΅Π³ΠΎ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ ящика. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΈ подходящим Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π”ΠΆΠΎΠ½Π°, Π½ΠΎ ΠΈ для всСх Π΅Π³ΠΎ сослуТивцСв, Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ макроса - Π΅Π³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ. Но ΠΏΡ€Π΅ΠΆΠ΄Π΅ рассмотрим, ΠΊΠ°ΠΊ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ² макроса Π² Π΄ΠΈΠ°Π»ΠΏΠ»Π°Π½Π΅.

Π’Ρ‹Π·ΠΎΠ² макроса ΠΈΠ· Π΄ΠΈΠ°Π»ΠΏΠ»Π°Π½Π°

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ макрос Π² Π΄ΠΈΠ°Π»ΠΏΠ»Π°Π½Π΅ Π½Π°ΠΌ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Macro(). Оно Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ макрос ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Π² Π½Π΅Π³ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹. НапримСр, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ наш макрос голосовой ΠΏΠΎΡ‡Ρ‚Ρ‹ ΠΈΠ· Π΄ΠΈΠ°Π»- ΠΏΠ»Π°Π½Π°, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

exten => 101,1,Macro(voicemail) ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Macro() опрСдСляСт Ρ‚Π°ΠΊΠΆΠ΅ нСсколько ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. К Π½ΠΈΠΌ относятся: ${MACRO_CONTEXT}

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ контСкст, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±Ρ‹Π» Π²Ρ‹Π·Π²Π°Π½ макрос. ${MACRO_EXTEN}

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ Π΄ΠΎΠ±Π°Π²ΠΎΡ‡Π½Ρ‹ΠΉ Π½ΠΎΠΌΠ΅Ρ€, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±Ρ‹Π» Π²Ρ‹Π·Π²Π°Π½ макрос.

${MACRO_PRIORITY}

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±Ρ‹Π» Π²Ρ‹Π·Π²Π°Π½ макрос.

${ARG n}

n-Π½Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΉ Π² макрос. НапримСр, ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π±Ρ‹Π» Π±Ρ‹ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ${ARG1}, Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ - ${ARG2} ΠΈ Ρ‚. Π΄.

Как Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ Ρ€Π°Π½Π΅Π΅, описанный Π²Ρ‹ΡˆΠ΅ макрос Π±Ρ‹Π» ТСстко ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ для Π”ΠΆΠΎΠ½Π°, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΌ. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ Π΅Π³ΠΎ ΠΈ вмСсто Π½ΠΎΠΌΠ΅Ρ€Π° ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ ящика 101 Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ${MACRO_EXTEN}. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ макроса ΠΈΠ· Π΄ΠΎΠ±Π°Π²ΠΎΡ‡Π½ΠΎΠ³ΠΎ Π½ΠΎΠΌΠ΅Ρ€Π° 101 сообщСния голосовой ΠΏΠΎΡ‡Ρ‚Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π² ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹ΠΉ ящик 101; Ссли макрос Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½ ΠΈΠ· Π΄ΠΎΠ±Π°Π²ΠΎΡ‡Π½ΠΎΠ³ΠΎ Π½ΠΎΠΌΠ΅Ρ€Π° 102, сообщСния ΠΏΠΎΠΉΠ΄ΡƒΡ‚ Π² ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹ΠΉ ящик 102, ΠΈ Ρ‚. Π΄.: [macro-voicemail] exten => s,1,Dial(${JOHN},10)

exten => s,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail) exten => s,n(unavail),Voicemail(${MACRO_EXTEN}@default,u) exten => s,n,Hangup()

exten => s,n(busy),VoiceMail(${MACRO_EXTEN}@default,b) exten => s,n,Hangup()

ИспользованиС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π² макросС

Π˜Ρ‚Π°ΠΊ, ΠΌΡ‹ ΡƒΠΆΠ΅ Π±Π»ΠΈΠ·ΠΊΠΈ ΠΊ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΡŽ Ρ‚ΠΎΠ³ΠΎ макроса, ΠΊΠ°ΠΊΠΎΠΉ Π½Π°ΠΌ Π½ΡƒΠΆΠ΅Π½, ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ внСсти послСднСС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅. НСобходимо ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π² макрос ΠΊΠ°Π½Π°Π», ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π²Ρ‹Π·ΠΎΠ²Ρ‹, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π΄ΠΎ сих ΠΏΠΎΡ€ Π² Π½Π΅ΠΌ ТСстко прописан ΠΊΠ°Π½Π°Π» ${JOHN} (ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, ΠΌΡ‹ опрСдСляли ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ JOHN ΠΊΠ°ΠΊ ΠΊΠ°Π½Π°Π» для Π·Π²ΠΎΠ½ΠΊΠΎΠ² Π”ΠΆΠΎΠ½Ρƒ?). ΠŸΠ΅Ρ€Π΅Π΄Π°Π΄ΠΈΠΌ ΠΊΠ°Π½Π°Π» ΠΊΠ°ΠΊ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ - ΠΈ наш ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ макрос Π±ΡƒΠ΄Π΅Ρ‚ Π³ΠΎΡ‚ΠΎΠ²: [macro-voicemail] exten => s,1,Dial(${ARG1},10)

exten => s,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail) exten => s,n(unavail),Voicemail(${MCARO_EXTEN}@default,u)

exten => s,n,Hangup()

exten => s,n(busy),VoiceMail(${MCARO_EXTEN}@default,b) exten => s,n,Hangup()

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° макрос Π³ΠΎΡ‚ΠΎΠ², Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Π΄ΠΈΠ°Π»ΠΏΠ»Π°Π½Π΅. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ вызываСтся макрос для обСспСчСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ голосовой ΠΏΠΎΡ‡Ρ‚Ρ‹ для Π”ΠΆΠΎΠ½Π°, Π”ΠΆΠ΅ΠΉΠ½ ΠΈ Π”ΠΆΠ΅ΠΊΠ°:

exten => 101,1,Macro(voicemail,${JOHN}) exten => 102,1,Macro(voicemail,${JANE}) exten => 103,1,Macro(voicemail,${JACK})

И для 50 ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ этот Π΄ΠΈΠ°Π»ΠΏΠ»Π°Π½ сохранит свою Ρ‡Π΅Ρ‚ΠΊΠΎΡΡ‚ΡŒ ΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ; для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ просто Π±ΡƒΠ΄Π΅Ρ‚ создана строка со ссылкой Π½Π° макрос, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ слоТным, насколько это Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ. ΠœΠΎΠΆΠ΅Ρ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°ΠΆΠ΅ нСсколько Ρ€Π°Π·Π½Ρ‹Ρ… макросов для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ executives (руководство), courtesy_phones (Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Ρ‹ справочной слуТбы), call_center_agents (Π°Π³Π΅Π½Ρ‚Ρ‹ Ρ†Π΅Π½Ρ‚Ρ€Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ²), analog_ sets (Π°Π½Π°Π»ΠΎΠ³ΠΎΠ²Ρ‹Π΅ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Ρ‹), sales_department (ΠΎΡ‚Π΄Π΅Π» ΠΏΡ€ΠΎΠ΄Π°ΠΆ) ΠΈ Ρ‚. Π΄. Π‘ΠΎΠ»Π΅Π΅ слоТная вСрсия макроса ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ: [macro-voicemail] exten => s,1,Dial(${ARG1},20) exten => s,n,Goto(s-${DIALSTATUS},1) exten => s-NOANSWER,1,Voicemail(${MACRO_EXTEN},u) exten => s-NOANSWER,n,Goto(incoming,s,1) exten => s-BUSY,1,Voicemail(${MACRO_EXTEN},b) exten => s-BUSY,n,Goto(incoming,s,1) exten => _s-.,1,Goto(s-NOANSWER,1)

Π­Ρ‚ΠΎΡ‚ макрос ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹ΠΉ эффСкт прилоТСния Dial(): Dial() Π·Π°Π΄Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ DIALSTATUS ΠΊΠ°ΠΊ ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΡΡ‚ΠΈ ΠΈΠ»ΠΈ Π½Π΅ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΡΡ‚ΠΈ Π²Ρ‹Π·ΠΎΠ²Π°. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ NOANSWER (Π½Π΅ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚) ΠΈ BUSY (занято), Π° всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Ρ‚Ρ€Π°ΠΊΡ‚ΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ NOANSWER.

ИспользованиС Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Asterisk (AstDB)

Ну Ρ‡Ρ‚ΠΎ, ΠΏΠΎΠΊΠ° Π΄ΠΎΠ²ΠΎΠ»ΡŒΠ½Ρ‹? Π”Π°Π»ΡŒΡˆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π΅Ρ‰Π΅ интСрСснСС! Π’ Asterisk Π΅ΡΡ‚ΡŒ ΠΌΠΎΡ‰Π½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ для хранСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ называСтся Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ… Asterisk (AstDB). AstDB обСспСчиваСт простой способ хранСния Π΄Π°Π½Π½Ρ‹Ρ… для использования Π² Π΄ΠΈΠ°Π»ΠΏΠ»Π°Π½Π΅.

Для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠΏΡ‹Ρ‚ использования рСляционных Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ PostgreSQL ΠΈΠ»ΠΈ MySQL, Π·Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… Asterisk Π½Π΅ являСтся Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠΉ рСляционной Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…. Π­Ρ‚ΠΎ Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… Berkeley DB вСрсии 1. БущСствуСт нСсколько способов хранСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Asterisk Π² рСляционной Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ рСляционных Π±Π°Π·Π°Ρ… Π΄Π°Π½Π½Ρ‹Ρ… рассказываСтся Π² Π³Π»Π°Π²Π΅ 12.

Π‘Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… Asterisk Ρ…Ρ€Π°Π½ΠΈΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ Π² Π³Ρ€ΡƒΠΏΠΏΠ°Ρ…, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… сСмСйствами, значСния ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ. НапримСр, Ссли Π±Ρ‹ Ρƒ нас имСлось сСмСйство test, ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ с ΠΊΠ»ΡŽΡ‡ΠΎΠΌ count. КаТдоС хранящССся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ассоциировано с ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ сСмСйством.

Π₯Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π² AstDB

Для сохранСния Π½ΠΎΠ²ΠΎΠ³ΠΎ значСния Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… Asterisk ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ SetQ[77], Π½ΠΎ с Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ задаСтся пСрСмСнная Π½Π΅ ΠΊΠ°Π½Π°Π»Π°, Π° AstDB. НапримСр, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ ΠΊΠ»ΡŽΡ‡Ρƒ count сСмСйства test Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 1, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

exten => 456,1,Set(DB(test/count)=1)

Если Π² сСмСйствС test ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΠΊΠ»ΡŽΡ‡ count, Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½Π΅Π½ΠΎ Π½Π° Π½ΠΎΠ²ΠΎΠ΅. Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ значСния ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки Asterisk, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ database put сСмСйство ΠΊΠ»ΡŽΡ‡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Для нашСго ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π½Π°Π΄ΠΎ ввСсти ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅: data base put test count 1.

Π˜Π·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· AstDB

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Asterisk ΠΈ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ всС Ρ‚ΠΎ ΠΆΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Set(). Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ count (ΠΎΠΏΡΡ‚ΡŒ ΠΆΠ΅ ΠΈΠ· сСмСйства test), присвоим Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ COUNT ΠΈ Π·Π°Ρ‚Π΅ΠΌ воспроизвСдСм это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π°Π±ΠΎΠ½Π΅Π½Ρ‚Ρƒ:

exten => 456,1,Set(DB(test/count)=1) exten => 456,n,Set(COUNT=${DB(test/count)}) exten => 456,n,SayNumber(${COUNT})

Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки Asterisk, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ database get сСмСйство ΠΊΠ»ΡŽΡ‡. Для просмотра всСго содСрТимого AstDB ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π° database show.

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· AstDB

БущСствуСт Π΄Π²Π° способа удалСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Asterisk.

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΊΠ»ΡŽΡ‡, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ DB DELETE().

Оно ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΊΠ»ΡŽΡ‡Ρƒ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°:

; удаляСт ΠΊΠ»ΡŽΡ‡ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π·Π° ΠΎΠ΄ΠΈΠ½ шаг

exten => 457,1,Verbose(0, The value was ${DB_DELETE(test/count)})

Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ всС сСмСйство ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ DBdeltree(). Оно ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ всСго ΠΎΠ΄ΠΈΠ½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ - имя сСмСйства ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°Ρ‰Π΅Π³ΠΎ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΡŽ. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ всС сСмСйство test, Π΄Π΅Π»Π°Π΅ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

exten => 457,1,DBdeltree(test)

Для удалСния ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΈ сСмСйств ΠΊΠ»ΡŽΡ‡Π΅ΠΉ AstDB ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ database del ΠΊΠ»ΡŽΡ‡ ΠΈ database deltree сСмСйство соотвСтствСнно.

ИспользованиС AstDB в диалпланС

БущСствуСт бСсконСчноС число Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² использования Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Asterisk Π² Π΄ΠΈΠ°Π»ΠΏΠ»Π°Π½Π΅. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ AstDB, рассмотрим Π΄Π²Π° простых ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ - простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ вычислСния, Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ постоянство Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Asterisk (имССтся Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° устойчива ΠΊ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ°ΠΌ систСмы). Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ BLACKLIST() Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ Π½ΠΎΠΌΠ΅Ρ€Π° ΠΊ Ρ‡Π΅Ρ€Π½ΠΎΠΌΡƒ списку ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π΅Π³ΠΎ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ.

Для Π½Π°Ρ‡Π°Π»Π° Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ с воспроизвСдСниСм счСта ΠΈΠ·Π²Π»Π΅Ρ‡Π΅ΠΌ число (Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π° count) ΠΈΠ· Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ присвоим Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ COUNT. Если Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ»ΡŽΡ‡ Π½Π΅ сущСствуСт, DB() Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ NULL (Π½Π΅Ρ‚ значСния). Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ значСния Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, Π²Π²Π΅Π΄Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ISNULL(), которая Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΎ Π»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π’ случаС Ссли этого Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ, ΠΌΡ‹ присвоим AstDB исходноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 1 с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ прилоТСния Set(). Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ нас ΠΊ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Ρƒ 1. Π­Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π΄ΠΎΠ±Π°Π²ΠΎΡ‡Π½ΠΎΠ³ΠΎ Π½ΠΎΠΌΠ΅Ρ€Π°: