AGI-1.2.1: A library for writing AGI scripts for Asterisk

Network.AGI

Synopsis

Documentation

data Digit Source

DTMF digits

Constructors

Pound 
Star 
Zero 
One 
Two 
Three 
Four 
Five 
Six 
Seven 
Eight 
Nine 

ppDigit :: Digit -> CharSource

convert a Digit to its ASCII representation

ppEscapeDigits :: [Digit] -> StringSource

convert a list of Digits into a quoted string. The quoted string format is used by many AGI commands

digitsToInteger :: [Digit] -> Maybe IntegerSource

convert a list of Digits to an Integer. Will fail if the list is empty or contains * or #

run :: AGI a -> Handler -> IO aSource

Top-level wrapper for single-shot AGI scripts.

Example:

 main = run yourAGI Ignore

fastAGI :: Maybe PortID -> (HostName -> PortNumber -> AGI a) -> IO ()Source

Top-level for long running AGI scripts.

Example:

 main = fastAGI Nothing yourAGI

You should be sure to compile with -threaded. Note that yourAGI may be running simultaneously in multiple threads, so you will need some concurrency control for shared data.

TODO: support a hang-up handler

runInternal :: AGI a -> Handle -> Handle -> IO aSource

runInternal - run an AGI script using the supplied Handles for input and output

You probably want run or fastAGI. This function is exposed so that 3rd party libraries such as HAppS can easily add support for FastAGI support.

TODO: support general method of handling extra arguments (query_string vs command-line arguments)

sendRecv :: Command -> AGI StringSource

send an AGI Command, and return the Response

this function provides the low-level send/receive functionality.

answerSource

Arguments

:: AGI Bool

True on success, False on failure

answer channel if not already in answer state

hangUpSource

Arguments

:: Maybe String

channel to hangup, or current channel if not specified

-> AGI Bool 

hangUp the specified channel

getDataSource

Arguments

:: FilePath

file to stream

-> Maybe Integer

timout in ms after keypress (default: 2000 ms)

-> Maybe Integer

max

-> AGI (Maybe ([Digit], Bool))

Nothing on failure, Just (digits, timeout) on success

play a file and return and digits pressed

See also: streamFile

sayDigitsSource

Arguments

:: [Digit]

digits to say

-> [Digit]

digits which can stop playback

-> AGI (Maybe (Maybe Digit))

Nothing on error, Just Nothing on success. Just (Just digit) if interrupted.

say the given digit string

sayNumberSource

Arguments

:: Integer

number to say

-> [Digit]

return early if any of these digits are received

-> AGI (Maybe (Maybe Digit))

Nothing on failure, Just Nothing on success, Just (Just digit) if key is pressed

sayNumber says the specified number

streamFileSource

Arguments

:: FilePath

file to stream

-> [Digit]

escape digits

-> Maybe Integer

sample offset

-> AGI (Either Integer (Maybe Digit, Integer))

On failure: Left endpos. On success: Right (Maybe Digit, endpos)

playback the specified file, can be interupted by the given digits.

See also: getData

waitForDigitSource

Arguments

:: Integer

timeout in milliseconds, -1 to block indefinitely

-> AGI (Maybe (Maybe Digit))

|Nothing| on error, |Just Nothing| on timeout, |Just (Just digit)| on success

wait for channel to receive a DTMF digit.

See also: getData for multiple digits

recordSource

Arguments

:: FilePath

record to this file

-> SoundType

|GSM | WAV|

-> [Digit]

stop recording if one of these digits is entered

-> Maybe Integer

maximum record time in milliseconds, -1 for no timeout

-> Maybe Integer

offset samples

-> Bool

beep to indicate recording has begun

-> Maybe Integer

stop recording if this many seconds of silence passes

-> AGI (RecordResult, Integer)

exit condition, endpos=offset

record channel to a file