module Web.FBMessenger.API.Bot.SendAPI
(
getUserProfileInfo
, removeWelcomeMessage
, sendTextMessage
, sendStructuredMessage
, setWelcomeMessage
, subscribedApps
, uploadImageMessage
, api
, FBMessengerSendAPI
, Token (..)
) where
import Control.Monad.Trans.Except (runExceptT)
import Data.Proxy
import Data.Text (Text)
import qualified Data.Text as T
import Network.HTTP.Client (Manager)
import Servant.API
import Servant.Client
import Servant.Client.MultipartFormData
import Web.FBMessenger.API.Bot.Requests
import Web.FBMessenger.API.Bot.Responses
newtype Token = Token Text
deriving (Show, Eq, Ord, ToHttpApiData, FromHttpApiData)
type GraphAPIAccessToken = QueryParam "access_token" Token
graphAPIBaseUrl :: BaseUrl
graphAPIBaseUrl = BaseUrl Https "graph.facebook.com" 443 "/v2.6/me"
type FBMessengerSendAPI =
GraphAPIAccessToken :> "messages"
:> ReqBody '[JSON] SendTextMessageRequest
:> Post '[JSON] MessageResponse
:<|> GraphAPIAccessToken :> "messages"
:> MultipartFormDataReqBody (UploadImageMessageRequest FileUpload)
:> Post '[JSON] MessageResponse
:<|> GraphAPIAccessToken :> "messages"
:> ReqBody '[JSON] SendStructuredMessageRequest
:> Post '[JSON] MessageResponse
:<|> GraphAPIAccessToken :> "subscribed_apps"
:> Post '[JSON] SubscriptionResponse
:<|> GraphAPIAccessToken :> Capture "page_id" Text :> "thread_settings"
:> ReqBody '[JSON] WelcomeMessageRequest
:> Post '[JSON] WelcomeMessageResponse
:<|> GraphAPIAccessToken :> Capture "page_id" Text :> "thread_settings"
:> ReqBody '[JSON] WelcomeMessageRequest
:> Delete '[JSON] WelcomeMessageResponse
:<|> GraphAPIAccessToken :> QueryParam "fields" Text :> Capture "user_id" Text
:> Get '[JSON] UserProfileResponse
api :: Proxy FBMessengerSendAPI
api = Proxy
sendTextMessage_ :: Maybe Token -> SendTextMessageRequest -> Manager -> BaseUrl -> ClientM MessageResponse
uploadImageMessage_ :: Maybe Token -> UploadImageMessageRequest FileUpload -> Manager -> BaseUrl -> ClientM MessageResponse
sendStructuredMessage_ :: Maybe Token -> SendStructuredMessageRequest -> Manager -> BaseUrl -> ClientM MessageResponse
subscribedApps_ :: Maybe Token -> Manager -> BaseUrl -> ClientM SubscriptionResponse
welcomeMessage_ :: Maybe Token -> Text -> WelcomeMessageRequest -> Manager -> BaseUrl -> ClientM WelcomeMessageResponse
deleteWMessage_ :: Maybe Token -> Text -> WelcomeMessageRequest -> Manager -> BaseUrl -> ClientM WelcomeMessageResponse
userProfile_ :: Maybe Token -> Maybe Text -> Text -> Manager -> BaseUrl -> ClientM UserProfileResponse
sendTextMessage_
:<|> uploadImageMessage_
:<|> sendStructuredMessage_
:<|> subscribedApps_
:<|> welcomeMessage_
:<|> deleteWMessage_
:<|> userProfile_ = client api
sendTextMessage :: Maybe Token -> SendTextMessageRequest -> Manager -> IO (Either ServantError MessageResponse)
sendTextMessage = run graphAPIBaseUrl sendTextMessage_
uploadImageMessage :: Maybe Token -> UploadImageMessageRequest FileUpload -> Manager -> IO (Either ServantError MessageResponse)
uploadImageMessage = run graphAPIBaseUrl uploadImageMessage_
sendStructuredMessage :: Maybe Token -> SendStructuredMessageRequest -> Manager -> IO (Either ServantError MessageResponse)
sendStructuredMessage = run graphAPIBaseUrl sendStructuredMessage_
subscribedApps :: Maybe Token -> Manager -> IO (Either ServantError SubscriptionResponse)
subscribedApps token manager = runExceptT $ subscribedApps_ token manager graphAPIBaseUrl
setWelcomeMessage :: Maybe Token -> Text -> WelcomeMessageRequest -> Manager -> IO (Either ServantError WelcomeMessageResponse)
setWelcomeMessage token pageId message manager = runExceptT $ welcomeMessage_ token pageId message manager graphAPIBaseUrl
removeWelcomeMessage :: Maybe Token -> Text -> Manager -> IO (Either ServantError WelcomeMessageResponse)
removeWelcomeMessage token pageId manager = runExceptT $ deleteWMessage_ token pageId welcomeDeleteMessage manager graphAPIBaseUrl
getUserProfileInfo :: Maybe Token -> Text -> Manager -> IO (Either ServantError UserProfileResponse)
getUserProfileInfo token userId manager = runExceptT $ userProfile_ token userProfileFields userId manager graphAPIBaseUrl
userProfileFields :: Maybe Text
userProfileFields = pure $ T.pack "first_name,last_name,profile_pic,locale,timezone,gender"
welcomeDeleteMessage :: WelcomeMessageRequest
welcomeDeleteMessage = WelcomeEmptyMessage
run :: BaseUrl -> (Maybe Token -> a -> Manager -> BaseUrl -> ClientM b) -> Maybe Token -> a -> Manager -> IO (Either ServantError b)
run b e t r m = runExceptT $ e t r m b