アスタリスク、FreeBSD、および少しの空き時間を使用してアラームを設定する方法

私は朝仕事に座っています。 同僚は遅れています。特別なことは何もありません。 退屈。 最後に、遅刻者が到着し、目覚まし時計に従って目覚めなかったことを訴えます。 開始しなかったか、聞こえなかったか、もう覚えていません。 仕事の電話を早朝に手配してみませんか?



すぐに言ってやった。 私は目覚まし時計を書くことにしました。



どのように実装しますか?



Dialplanは、彼がすでに最小ではないため、触らないことにしました。私はそれを複雑にしたくありません。 そのため、クラウンで実行され、必要なデータを使用してコールファイルを作成するシェルスクリプトを作成することが決定されました。



スクリプト自体を誰といつ呼び出すかを書き留めるのは不便に思えたので、フォームのテキストファイルalarmnumbers.txtが作成されました。



89993332211 1000 1100 1200 1300 1400 1500 1600 /recs/macroform-robot_dity 89993332211 1005 1105 1205 1305 1405 XXXX XXXX /recs/macroform-robot_dity
      
      







最初が電話番号である場合、電話の時間を示すスペースで区切られた7つのブロックがあります。月曜日の最初のブロック、火曜日の2番目のブロックなどです。 最後に、電話を取り上げた場合に再生されるファイルへのパス。 これは、アスタリスクが食べられる任意のサウンドファイルである必要があります。 ファイル名は許可なく書き込まれ、アスターは必要なものを選択します。 サウンドファイルをまったく省略できます。この場合、受話器を取り上げると、通話はすぐにリセットされます。 さて、時間ではなくXXXXは目を覚まさないことを示します。 たとえば、週末に。



ファイルには必要な数の行を含めることができますが、繰り返し番号を使用することもできます。 もちろん、このソリューションは最適ではありませんが、目覚まし時計の使用はIT部門内でのみ想定されているため、非常に適しています。 win_serverボールに配置し、mount_smbfsを使用してFreeBSDにフックしました。



スクリプト自体は、1日1回クラウンで実行されます。 つまり 誰とどこに電話をかけるかは、毎日00.02に更新されます。



スクリプトの機能を見てみましょう。



 #!/bin/sh echo 'START!' filename=/recs/alarmnumbers.txt CallFileName=AlarmFile NewCallFilesPath=/var/spool/asterisk/outgoing_new/ AsteriskCallFilePath=/var/spool/asterisk/outgoing/
      
      







どこにあるのか、アスタリスクの呼び出しファイルに名前を付ける方法を示します(ところで、ファイル名は彼にとって重要ではありません。任意に指定できます)

filename-誰といつのリストを持つファイル

CallFileName-便宜上の呼び出しファイルの名前

NewCallFilesPath-生成された呼び出しファイルのディレクトリ。 アスターがそれらを取得する場所でそれらを作成することは不可能です-彼はそれらを素早く頻繁に読み、不完全に読むことができます。 このディレクトリは、アスタが実行する呼び出しファイルを探すディレクトリと同じセクションにある必要があります。

AsteriskCallFilePath-アスターが呼び出しファイルを読み取るディレクトリ。 なぜなら 私はFreeBSDを持っていますが、別の場所に置くことができます。



 currentdate=$(date +%Y%m%d) weekday=$(date +%u) var0=0
      
      







現在の時刻と曜日を覚えておいてください。



 case "$weekday" in 1)wd="13-16";; 2)wd="18-21";; 3)wd="23-26";; 4)wd="28-31";; 5)wd="33-36";; 6)wd="38-41";; 7)wd="43-46";; esac
      
      







曜日に応じて、 alarmnumbers.txtで適切なブロックを選択します。 これらはcutのオプションです。



 cat $filename | while read line do DialTime=$(echo $line | cut -c$wd) var0=`expr $var0 + 1` number=$(echo $line | cut -c1-11) dialwavfile=$(echo $line | cut -c48-200)
      
      







alarmnumbers.txtを読みます 。 行ごとに、各行から目的のパラメーターを選択します。

DialTime-呼び出し時間。ここでは、前に設定したwdパラメーターを使用します。

number-呼び出し先の番号

dialwavfile-サウンドファイル



 echo "Channel: SIP/providername/$number" > "$NewCallFilesPath$CallFileName$DialTime$var0.call" echo "CallerID: CompanyNumber" >> "$NewCallFilesPath$CallFileName$DialTime$var0.call" echo "MaxRetries: 2" >> "$NewCallFilesPath$CallFileName$DialTime$var0.call" echo "RetryTime: 450" >> "$NewCallFilesPath$CallFileName$DialTime$var0.call" echo "WaitTime: 20" >> "$NewCallFilesPath$CallFileName$DialTime$var0.call" echo "Application: Playback" >> "$NewCallFilesPath$CallFileName$DialTime$var0.call" echo "Data: $dialwavfile" >> "$NewCallFilesPath$CallFileName$DialTime$var0.call" echo "Archive: yes" >> "$NewCallFilesPath$CallFileName$DialTime$var0.call"
      
      







呼び出しファイルを作成します。 彼は次のような構造になります。



 Channel: SIP/providername/89993332211 CallerID: CompanyNumber MaxRetries: 2 RetryTime: 450 WaitTime: 20 Application: Playback Data: /recs/macroform-robot_dity Archive: yes
      
      







チャンネル -何を呼び出すかによって、任意のチャンネルが示されます。 私は外線電話のごちそうがあります。 内部番号を呼び出す場合は、さまざまなチャネルを置換する条件を追加する必要があります。

CallerID-明らかだと思います。 外部回線への呼び出しであり、プロバイダーがCallerIDの変更を許可していない場合は関係ありません。

MaxRetries-電話取りませんでしたか? 関係ありません! もう一度電話しましょう、起きなかったのですか? このパラメーターは、サブスクライバーを呼び出そうとする回数を示します

RetryTime-数秒でコールバック

WaitTime-非常に多くの秒数の間、加入者を呼び出します。

アプリケーション -これは、加入者が電話に出た場合に使用されるアスタリスクアプリケーションです。

データ -前の行のアプリケーションのデータ

アーカイブ -実行した呼び出しファイルを分析用に保存します。たとえば



 chmod 755 $NewCallFilesPath$CallFileName$DialTime$var0.call chown asterisk $NewCallFilesPath$CallFileName$DialTime$var0.call chgrp asterisk $NewCallFilesPath$CallFileName$DialTime$var0.call
      
      







アスタリスクが起動されたユーザーを読み取り、変更、削除する権利を付与します。



 time=$(echo $line | cut -c$wd) case $time in XXXX) rm $NewCallFilesPath$CallFileName$DialTime$var0.call ;; "") rm $NewCallFilesPath$CallFileName$DialTime$var0.call ;; *) touch -t "$currentdate$time" "$NewCallFilesPath$CallFileName$DialTime$var0.call" ;; esac
      
      







ここでは、時間の代わりにXXXXが示されている場合、変更の時間を修正するか、呼び出しファイルを削除します。

呼び出しファイルを使用する際の重要なポイントの1つ。 アスタリスクは、現在の日時以下のファイルのみを読み取ります。 したがって、将来の変更時刻を指定すると、アスターは適切な時刻が来るまで待機します。



 mv $NewCallFilesPath$CallFileName$varr$var0.call $AsteriskCallFilePath
      
      







作成したファイルをアスターに移動して食べます。



 done echo "HAPPY END!!!" exit 0
      
      







スクリプトを完成させます。 すべては彼と一緒です。



その実装を冠に留めるだけです。 彼にパフォーマンスの権利を与えることを忘れないでください。



 2 0 * * * /usr/bin/my/alarm.sh
      
      







まあ、一般的に、目覚まし時計は準備ができています。 alarmnumbers.txtに入力して、呼び出しを待ちます。 私たちは3週間適切に働いています。 グリッチは発見されていません。



結果は何ですか?



スケジュールが設定されたアラームを受け取りました。 スケジュールから曜日を除外することができます。 システムは呼び出しファイルを作成し、適切なタイミングが来るとアスタリスクを実行します。 複雑なことは何もありません。



悪い点:







批判、コメント、改善の提案を歓迎します。



All Articles