Copyright | (c) Anton Gushcha, 2016 |
---|---|
License | MIT |
Maintainer | ncrashed@gmail.com |
Stability | experimental |
Portability | Portable |
Safe Haskell | None |
Language | Haskell2010 |
The module contains general and simplified functions to call smsc.ru service for sending SMS/MMS messages.
The general API is provided by genericSmsSend
function, but it is too overengineered to be used
as is. Thats why several simplified wrappers are presented.
First, you need to provide SmscConfig
value:
cfg <- defaultSmscConfig let testSmscConfig = cfg { smscLogin = "mylogin" , smscPassword = "mypass" }
After that you can send a SMS:
res <- simpleSmsSend testSmscConfig testPhone "Test message" case res of Left er -> printLn $ "message sending: " ++ show er Right _ -> return ()
Or check how much it would cost to you:
res <- getSimpleSmsCost testSmscConfig testPhone "Test message" case res of Left er -> assertFailure $ "message costing: " <> show er Right v -> putStrLn $ "message cost: " <> show v
- type SMSCAPI = SendEndpoint
- data SendResponse
- = SendError {
- sendError :: !Text
- sendErrorCode :: !SendErrorCode
- sendErrorId :: !(Maybe Text)
- | SendSuccess {
- sendSuccId :: !(Maybe Word)
- sendSuccCnt :: !Word
- sendSuccCost :: !(Maybe Text)
- sendSuccBalance :: !(Maybe Text)
- sendSuccPhones :: !(Maybe [PhoneResp])
- = SendError {
- data PhoneResp = PhoneResp {
- phoneNumber :: !Text
- phoneMccmnc :: !Text
- phoneCost :: !Text
- phoneStatus :: !Text
- phoneError :: !Text
- type SendEndpoint = "sys" :> ("send.php" :> (QueryParam "login" Text :> (QueryParam "psw" Text :> (QueryParam "phones" Text :> (QueryParam "mes" Text :> (QueryParam "id" Text :> (QueryParam "sender" Text :> (QueryParam "translit" Text :> (QueryParam "tinyurl" Text :> (QueryParam "time" Text :> (QueryParam "tz" Text :> (QueryParam "period" Double :> (QueryParam "freq" Word :> (QueryParam "flash" Word :> (QueryParam "bin" Text :> (QueryParam "push" Word :> (QueryParam "hlr" Word :> (QueryParam "ping" Word :> (QueryParam "mms" Word :> (QueryParam "mail" Word :> (QueryParam "call" Word :> (QueryParam "voice" Text :> (QueryParam "param" Text :> (QueryParam "subj" Text :> (QueryParam "charset" Text :> (QueryParam "cost" Word :> (QueryParam "fmt" Word :> (QueryParam "list" Text :> (QueryParam "valid" Text :> (QueryParam "maxsms" Word :> (QueryParam "imgcode" Text :> (QueryParam "userip" Text :> (QueryParam "err" Word :> (QueryParam "op" Word :> (QueryParam "pp" Text :> (ReqBody `[OctetStream]` ByteString :> Post `[JSON]` SendResponse))))))))))))))))))))))))))))))))))))
- genericSmsSend :: Maybe Text -> Maybe Text -> Maybe Text -> Maybe Text -> Maybe Text -> Maybe Text -> Maybe Text -> Maybe Text -> Maybe Text -> Maybe Text -> Maybe Double -> Maybe Word -> Maybe Word -> Maybe Text -> Maybe Word -> Maybe Word -> Maybe Word -> Maybe Word -> Maybe Word -> Maybe Word -> Maybe Text -> Maybe Text -> Maybe Text -> Maybe Text -> Maybe Word -> Maybe Word -> Maybe Text -> Maybe Text -> Maybe Word -> Maybe Text -> Maybe Text -> Maybe Word -> Maybe Word -> Maybe Text -> ByteString -> Manager -> BaseUrl -> ClientM SendResponse
- data SmscConfig = SmscConfig {
- smscLogin :: !Text
- smscPassword :: !Text
- smscManager :: !Manager
- smscBaseUrl :: !BaseUrl
- defaultSmscConfig :: MonadIO m => m SmscConfig
- simpleSmsSend :: MonadIO m => SmscConfig -> Text -> Text -> m (Either Text SendResponse)
- getSimpleSmsCost :: MonadIO m => SmscConfig -> Text -> Text -> m (Either Text Text)
API
type SMSCAPI = SendEndpoint Source
All supported API of smsc.ru service
Endpoints
data SendResponse Source
Response for SendEndpoint
SendError | Server returned error payload |
| |
SendSuccess | Server retunred success payload |
|
Additional info about phone number
PhoneResp | |
|
type SendEndpoint = "sys" :> ("send.php" :> (QueryParam "login" Text :> (QueryParam "psw" Text :> (QueryParam "phones" Text :> (QueryParam "mes" Text :> (QueryParam "id" Text :> (QueryParam "sender" Text :> (QueryParam "translit" Text :> (QueryParam "tinyurl" Text :> (QueryParam "time" Text :> (QueryParam "tz" Text :> (QueryParam "period" Double :> (QueryParam "freq" Word :> (QueryParam "flash" Word :> (QueryParam "bin" Text :> (QueryParam "push" Word :> (QueryParam "hlr" Word :> (QueryParam "ping" Word :> (QueryParam "mms" Word :> (QueryParam "mail" Word :> (QueryParam "call" Word :> (QueryParam "voice" Text :> (QueryParam "param" Text :> (QueryParam "subj" Text :> (QueryParam "charset" Text :> (QueryParam "cost" Word :> (QueryParam "fmt" Word :> (QueryParam "list" Text :> (QueryParam "valid" Text :> (QueryParam "maxsms" Word :> (QueryParam "imgcode" Text :> (QueryParam "userip" Text :> (QueryParam "err" Word :> (QueryParam "op" Word :> (QueryParam "pp" Text :> (ReqBody `[OctetStream]` ByteString :> Post `[JSON]` SendResponse)))))))))))))))))))))))))))))))))))) Source
Endpoint for sending sms, this is low-level most general API that is used to build small helper functions.
Client
:: Maybe Text | login |
-> Maybe Text | psw |
-> Maybe Text | phones |
-> Maybe Text | mes |
-> Maybe Text | id |
-> Maybe Text | sender |
-> Maybe Text | translit |
-> Maybe Text | tinyurl |
-> Maybe Text | time |
-> Maybe Text | tz |
-> Maybe Double | period |
-> Maybe Word | freq |
-> Maybe Word | flash |
-> Maybe Text | bin |
-> Maybe Word | push |
-> Maybe Word | hlr |
-> Maybe Word | ping |
-> Maybe Word | mms |
-> Maybe Word | |
-> Maybe Word | call |
-> Maybe Text | voice |
-> Maybe Text | param |
-> Maybe Text | subj |
-> Maybe Text | charset |
-> Maybe Word | cost |
-> Maybe Word | fmt, should be always 3 |
-> Maybe Text | list |
-> Maybe Text | valid |
-> Maybe Word | maxsms |
-> Maybe Text | imgcode |
-> Maybe Text | userip |
-> Maybe Word | err |
-> Maybe Word | op |
-> Maybe Text | pp |
-> ByteString | Request body (voice messages and etc) |
-> Manager | |
-> BaseUrl | |
-> ClientM SendResponse |
The most generic call to the send endpoint
Simplified
data SmscConfig Source
Required common info for smsc API
SmscConfig | |
|
defaultSmscConfig :: MonadIO m => m SmscConfig Source
:: MonadIO m | |
=> SmscConfig | Authorisation and other general config |
-> Text | Phone |
-> Text | Message |
-> m (Either Text SendResponse) |
Simple send message to given phone