Network.AGI
- data Digit
- data AGI a
- run :: AGI a -> Handler -> IO a
- fastAGI :: Maybe PortID -> (HostName -> PortNumber -> AGI a) -> IO ()
- runInternal :: AGI a -> Handle -> Handle -> IO a
- ppDigit :: Digit -> Char
- ppEscapeDigits :: [Digit] -> String
- data SoundType
- sendRecv :: Command -> AGI String
- answer :: AGI Bool
- hangUp :: Maybe String -> AGI Bool
- getData :: FilePath -> Maybe Integer -> Maybe Integer -> AGI (Maybe ([Digit], Bool))
- data RecordResult
- = FailureToWrite
- | FailureOnWaitFor
- | HangUp
- | Interrupted Digit
- | Timeout
- | RandomError String
- sayDigits :: [Digit] -> [Digit] -> AGI (Maybe (Maybe Digit))
- sayNumber :: Integer -> [Digit] -> AGI (Maybe (Maybe Digit))
- streamFile :: FilePath -> [Digit] -> Maybe Integer -> AGI (Either Integer (Maybe Digit, Integer))
- waitForDigit :: Integer -> AGI (Maybe (Maybe Digit))
- record :: FilePath -> SoundType -> [Digit] -> Maybe Integer -> Maybe Integer -> Bool -> Maybe Integer -> AGI (RecordResult, Integer)
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)
ppEscapeDigits :: [Digit] -> StringSource
answer channel if not already in answer state
data RecordResult Source
Constructors
| FailureToWrite | |
| FailureOnWaitFor | |
| HangUp | |
| Interrupted Digit | |
| Timeout | |
| RandomError String |
Instances
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
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.
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 |