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

Network.AGI

Synopsis

Documentation

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)

data SoundType Source

Constructors

WAV 
GSM 

sendRecv :: Command -> AGI StringSource

answerSource

Arguments

:: AGI Bool

True on success, False on failure

answer channel if not already in answer state

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

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)

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.

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