Copyright | (c) Naoto Shimazaki 20172018 |
---|---|
License | MIT (see the file LICENSE) |
Maintainer | https://github.com/nshimaza |
Stability | experimental |
Safe Haskell | None |
Language | Haskell2010 |
Network.WebexTeams
Description
This module provides types and functions for accessing Cisco Webex Teams REST API.
The module is designed to improve type safety over the API. Each entity is separately typed. JSON messages contained in REST responses are decoded into appropriate type of Haskell record. JSON messages sent in REST requests are encoded only from correct type of record.
Some Webex Teams REST API return list of objects. Those APIs require HTTP Link Header based pagination. Haskell functions for those APIs automatically request subsequent pages as needed.
Examples
-- Sending a message to a room. let auth = Authorization "your authorization token" roomId = RoomId "Room ID your message to be sent" messageText = MessageText "your message" message = CreateMessage (Just roomId) Nothing Nothing (Just messageText) Nothing Nothing createEntity auth def createMessage >>= print . getResponseBody -- Obtaining detail of a user. let personId = PersonId "your person ID" getDetail auth def personId >>= print . getResponseBody -- Obtaining membership of a room as stream of object representing each membership relation. let filter = MembershipFilter yourRoomId Nothing Nothing runConduit $ streamListWithFilter auth def filter .| takeC 200 .| mapM_C print -- Create a room. let createRoom = CreateRoom "Title of the new room" Nothing createEntity auth def createRoom >>= print . getResponseBody -- Delete a room. deleteRoom auth def roomId >>= print . getResponseBody
List and steaming
The WebexTeams
module doesn't provide streaming API for REST response returning list of entities.
It is because the author of the package wants to keep it streaming library agnostic. Instead, it provides
ListReader
IO action to read list responses with automatic pagenation. Streaming APIs can be found in
separate packages like webex-teams-pipes or webex-teams-conduit.
Support for Lens
This package provides many of records representing objects communicated via Webex Teams REST API. Those records are designed to allow create lenses by Control.Lens.TH.makeFields.
Following example creates overloaded accessors for Person
, Room
and Team
.
makeFields ''Person makeFields ''Room makeFields ''Team
You can access personId
, roomId
and teamId
via overloaded accessor function id
like this.
let yourPersonId = yourPerson ^. id yourRoomId = yourRoom ^. id yourTeamId = yourTeam ^. id
This package does not provide pre-generated lenses for you because not everyone need it but you can make it by yourself so easily as described.
- class (WebexTeamsApiPath a, WebexTeamsResponse a) => WebexTeamsFilter a
- class FromJSON (ToList i) => WebexTeamsListItem i
- newtype Authorization = Authorization ByteString
- type CiscoSparkRequest = WebexTeamsRequest
- data WebexTeamsRequest = WebexTeamsRequest {}
- newtype Timestamp = Timestamp Text
- newtype ErrorCode = ErrorCode Text
- data ErrorTitle = ErrorTitle {}
- newtype Errors = Errors {}
- data Person = Person {
- personId :: PersonId
- personErrors :: Maybe Errors
- personEmails :: Maybe [Email]
- personDisplayName :: Maybe DisplayName
- personNickName :: Maybe NickName
- personFirstName :: Maybe FirstName
- personLastName :: Maybe LastName
- personAvatar :: Maybe AvatarUrl
- personOrgId :: Maybe OrganizationId
- personRoles :: Maybe [RoleId]
- personLicenses :: Maybe [LicenseId]
- personCreated :: Maybe Timestamp
- personTimezone :: Maybe Timezone
- personLastActivity :: Maybe Timestamp
- personStatus :: Maybe PersonStatus
- personInvitePending :: Maybe Bool
- personLoginEnabled :: Maybe Bool
- personType :: Maybe PersonType
- newtype PersonId = PersonId Text
- newtype Email = Email Text
- newtype DisplayName = DisplayName Text
- newtype NickName = NickName Text
- newtype FirstName = FirstName Text
- newtype LastName = LastName Text
- newtype AvatarUrl = AvatarUrl Text
- newtype Timezone = Timezone Text
- data PersonStatus
- data PersonType
- newtype PersonList = PersonList {
- personListItems :: [Person]
- data PersonFilter = PersonFilter {}
- data CreatePerson = CreatePerson {
- createPersonEmails :: Maybe [Email]
- createPersonDisplayName :: Maybe DisplayName
- createPersonFirstName :: Maybe FirstName
- createPersonLastName :: Maybe LastName
- createPersonAvatar :: Maybe AvatarUrl
- createPersonOrgId :: Maybe OrganizationId
- createPersonRoles :: Maybe [RoleId]
- createPersonLicenses :: Maybe [LicenseId]
- data UpdatePerson = UpdatePerson {}
- data Room = Room {}
- newtype RoomId = RoomId Text
- newtype RoomTitle = RoomTitle Text
- data RoomType
- newtype SipAddr = SipAddr Text
- newtype RoomList = RoomList {
- roomListItems :: [Room]
- data RoomFilter = RoomFilter {}
- data RoomFilterSortBy
- data CreateRoom = CreateRoom {}
- newtype UpdateRoom = UpdateRoom {}
- data Membership = Membership {
- membershipId :: MembershipId
- membershipErrors :: Maybe Errors
- membershipRoomId :: Maybe RoomId
- membershipPersonId :: Maybe PersonId
- membershipPersonEmail :: Maybe Email
- membershipPersonDisplayName :: Maybe DisplayName
- membershipPersonOrgId :: Maybe OrganizationId
- membershipIsModerator :: Maybe Bool
- membershipIsMonitor :: Maybe Bool
- membershipCreated :: Maybe Timestamp
- newtype MembershipId = MembershipId Text
- newtype MembershipList = MembershipList {}
- data MembershipFilter = MembershipFilter {}
- data CreateMembership = CreateMembership {}
- newtype UpdateMembership = UpdateMembership {}
- data Message = Message {
- messageId :: MessageId
- messageErrors :: Maybe Errors
- messageRoomId :: Maybe RoomId
- messageRoomType :: Maybe RoomType
- messageToPersonId :: Maybe PersonId
- messageToPersonEmail :: Maybe Email
- messageText :: Maybe MessageText
- messageHtml :: Maybe MessageHtml
- messageFiles :: Maybe [FileUrl]
- messagePersonId :: Maybe PersonId
- messagePersonEmail :: Maybe Email
- messageCreated :: Maybe Timestamp
- messageMentionedPeople :: Maybe [PersonId]
- newtype MessageId = MessageId Text
- newtype MessageText = MessageText Text
- newtype MessageHtml = MessageHtml Text
- newtype MessageMarkdown = MessageMarkdown Text
- newtype FileUrl = FileUrl Text
- newtype MessageList = MessageList {
- messageListItems :: [Message]
- data MessageFilter = MessageFilter {}
- data MentionedPeople
- data CreateMessage = CreateMessage {}
- newtype TeamName = TeamName Text
- newtype TeamId = TeamId Text
- data Team = Team {}
- newtype TeamList = TeamList {
- teamListItems :: [Team]
- newtype CreateTeam = CreateTeam {}
- newtype UpdateTeam = UpdateTeam {}
- data TeamMembership = TeamMembership {
- teamMembershipId :: TeamMembershipId
- teamMembershipErrors :: Maybe Errors
- teamMembershipTeamId :: Maybe TeamId
- teamMembershipPersonId :: Maybe PersonId
- teamMembershipPersonEmail :: Maybe Email
- teamMembershipPersonDisplayName :: Maybe DisplayName
- teamMembershipPersonOrgId :: Maybe OrganizationId
- teamMembershipIsModerator :: Maybe Bool
- teamMembershipCreated :: Maybe Timestamp
- newtype TeamMembershipId = TeamMembershipId Text
- newtype TeamMembershipList = TeamMembershipList {}
- newtype TeamMembershipFilter = TeamMembershipFilter {}
- data CreateTeamMembership = CreateTeamMembership {}
- newtype UpdateTeamMembership = UpdateTeamMembership {}
- data Organization = Organization {}
- newtype OrganizationId = OrganizationId Text
- newtype OrganizationDisplayName = OrganizationDisplayName Text
- newtype OrganizationList = OrganizationList {}
- data License = License {}
- newtype LicenseId = LicenseId Text
- newtype LicenseName = LicenseName Text
- newtype LicenseUnit = LicenseUnit Integer
- newtype LicenseList = LicenseList {
- licenseListItems :: [License]
- newtype LicenseFilter = LicenseFilter {}
- data Role = Role {}
- newtype RoleId = RoleId Text
- newtype RoleName = RoleName Text
- newtype RoleList = RoleList {
- roleListItems :: [Role]
- getDetail :: (MonadIO m, WebexTeamsDetail key) => Authorization -> WebexTeamsRequest -> key -> m (Response (ToResponse key))
- getDetailEither :: (MonadIO m, WebexTeamsDetail key) => Authorization -> WebexTeamsRequest -> key -> m (Response (Either JSONException (ToResponse key)))
- type ListReader a = IO [a]
- getListWithFilter :: (MonadIO m, WebexTeamsFilter filter, WebexTeamsListItem (ToResponse filter)) => Authorization -> WebexTeamsRequest -> filter -> m (ListReader (ToResponse filter))
- getTeamList :: MonadIO m => Authorization -> WebexTeamsRequest -> m (ListReader Team)
- getOrganizationList :: MonadIO m => Authorization -> WebexTeamsRequest -> m (ListReader Organization)
- getRoleList :: MonadIO m => Authorization -> WebexTeamsRequest -> m (ListReader Role)
- streamEntityWithFilter :: (MonadIO m, WebexTeamsFilter filter, WebexTeamsListItem (ToResponse filter)) => Authorization -> WebexTeamsRequest -> filter -> ConduitT () (ToResponse filter) m ()
- streamTeamList :: MonadIO m => Authorization -> WebexTeamsRequest -> ConduitT () Team m ()
- streamOrganizationList :: MonadIO m => Authorization -> WebexTeamsRequest -> ConduitT () Organization m ()
- streamRoleList :: MonadIO m => Authorization -> WebexTeamsRequest -> ConduitT () Role m ()
- createEntity :: (MonadIO m, WebexTeamsCreate createParams) => Authorization -> WebexTeamsRequest -> createParams -> m (Response (ToResponse createParams))
- createEntityEither :: (MonadIO m, WebexTeamsCreate createParams) => Authorization -> WebexTeamsRequest -> createParams -> m (Response (Either JSONException (ToResponse createParams)))
- updateEntity :: (MonadIO m, WebexTeamsUpdate updateParams) => Authorization -> WebexTeamsRequest -> updateParams -> m (Response (ToResponse updateParams))
- updateEntityEither :: (MonadIO m, WebexTeamsUpdate updateParams) => Authorization -> WebexTeamsRequest -> updateParams -> m (Response (Either JSONException (ToResponse updateParams)))
- defaultMessageFilter :: RoomId -> MessageFilter
- defaultTeamMembershipFilter :: TeamId -> TeamMembershipFilter
- deleteRoom :: MonadIO m => Authorization -> WebexTeamsRequest -> RoomId -> m (Response ())
- deleteMembership :: MonadIO m => Authorization -> WebexTeamsRequest -> MembershipId -> m (Response ())
- deleteMessage :: MonadIO m => Authorization -> WebexTeamsRequest -> MessageId -> m (Response ())
- deleteTeam :: MonadIO m => Authorization -> WebexTeamsRequest -> TeamId -> m (Response ())
- deleteTeamMembership :: MonadIO m => Authorization -> WebexTeamsRequest -> TeamMembershipId -> m (Response ())
Types
Class and Type Families
class (WebexTeamsApiPath a, WebexTeamsResponse a) => WebexTeamsFilter a Source #
Convert given filter condition parameter in a concrete type to HTTP query strings.
Minimal complete definition
Instances
WebexTeamsFilter PersonFilter Source # | User can list people with filter parameter. |
WebexTeamsFilter TeamMembershipFilter Source # | User can list team membership with filter parameter. |
WebexTeamsFilter RoomFilter Source # | User can list rooms with filter parameter. |
WebexTeamsFilter MembershipFilter Source # | User can list memberships with filter parameter. |
WebexTeamsFilter MessageFilter Source # | User can list messages with filter parameter. |
WebexTeamsFilter LicenseFilter Source # | User can list licenses with filter parameter. |
WebexTeamsFilter WebhookRoomFilter Source # | User can filter Webhook events from room. |
WebexTeamsFilter WebhookMessageFilter Source # | User can filter Webhook events from message. |
WebexTeamsFilter WebhookMembershipFilter Source # | User can filter Webhook events from membership. |
class FromJSON (ToList i) => WebexTeamsListItem i Source #
WebexTeamsListItem is a type class grouping types with following common usage.
- It is used for return value of get-detail APIs.
- It is used for element of return value of list APIs.
WebexTeamsListItem also associates the above type to wrapping list type (e.g. associates Person
to PersonList
).
Wrapping type (PersonList in this case) is necessary for parsing JSON from REST API but what we are
interested in is bare list such like [Person]. Type family association defined in this class
is used for type translation from type of items to type of wrapper.
Minimal complete definition
Instances
Common Types
newtype Authorization Source #
Authorization string against Webex Teams API to be contained in HTTP Authorization header of every request.
Constructors
Authorization ByteString |
Instances
type CiscoSparkRequest = WebexTeamsRequest Source #
Type synonym for backward compatibility.
data WebexTeamsRequest Source #
Wrapping Request
in order to provide easy default value specifically for Webex Teams public API.
Constructors
WebexTeamsRequest | |
Fields
|
Instances
Show WebexTeamsRequest Source # | |
Default WebexTeamsRequest Source # | Default parameters for HTTP request to Webex Teams REST API. |
Type representing timestamp. For now, it is just copied from API response JSON.
Error code for element level error potentially contained in List API responses.
data ErrorTitle Source #
ErrorTitle
represent concrete error code and reason. It appears in Errors
.
Constructors
ErrorTitle | |
Fields
|
Instances
Eq ErrorTitle Source # | |
Show ErrorTitle Source # | |
ToJSON ErrorTitle Source # | |
FromJSON ErrorTitle Source # |
|
Errors
is used for element level error in List API.
When list API failed to retrieve an element, it returns this object for the element
and response API status as successful instead of failing entire API request.
Refer to API Document for more detail.
Constructors
Errors | |
Fields |
People related types
Person
is detail description of Webex Teams user or bot.
Person is decoded from response JSON of Get Person Details REST call.
It is also element type of response of List People call.
Constructors
Person | |
Fields
|
Identifying Person
describing detail of Webex Teams user or bot.
Instances
Eq PersonId Source # | |
Show PersonId Source # | |
Generic PersonId Source # | |
ToJSON PersonId Source # | |
FromJSON PersonId Source # | |
WebexTeamsDetail PersonId Source # | User can get detail of a person. |
WebexTeamsResponse PersonId Source # | Get detail for a person API uses "PersonId' and responses |
WebexTeamsApiPath PersonId Source # | Get detail for a person API uses |
type Rep PersonId Source # | |
type ToResponse PersonId Source # | |
Email address of user.
Nickname of user.
First name of user.
Last name of user.
URL pointing to image file of Avatar.
Timezone in timezone name.
data PersonStatus Source #
Current status of Person
.
It can be updated automatically by recent activity or explicitly updated by user's operation
or propagated from vacation setting on email system.
Constructors
PersonStatusActive | The |
PersonStatusInactive | The |
PersonStatusOutOfOffice | Email system of the |
PersonStatusDoNotDisturb | The |
PersonStatusUnknown | The status of the |
Instances
Eq PersonStatus Source # | |
Show PersonStatus Source # | |
Generic PersonStatus Source # | |
ToJSON PersonStatus Source # |
|
FromJSON PersonStatus Source # |
|
type Rep PersonStatus Source # | |
data PersonType Source #
PersonType
indicates whether the Person is real human or bot.
Constructors
PersonTypePerson | The |
PersonTypeBot | The |
Instances
Eq PersonType Source # | |
Show PersonType Source # | |
ToJSON PersonType Source # | |
FromJSON PersonType Source # |
|
newtype PersonList Source #
PersonList
is decoded from response JSON of List People REST call. It is list of Person
.
Constructors
PersonList | |
Fields
|
Instances
Eq PersonList Source # | |
Show PersonList Source # | |
ToJSON PersonList Source # | |
FromJSON PersonList Source # |
|
data PersonFilter Source #
Optional query strings for people list API.
Constructors
PersonFilter | |
Fields
|
Instances
Eq PersonFilter Source # | |
Show PersonFilter Source # | |
Generic PersonFilter Source # | |
Default PersonFilter Source # | |
WebexTeamsFilter PersonFilter Source # | User can list people with filter parameter. |
WebexTeamsResponse PersonFilter Source # | List people API uses |
WebexTeamsApiPath PersonFilter Source # | List people API uses |
type Rep PersonFilter Source # | |
type ToResponse PersonFilter Source # | |
data CreatePerson Source #
CreatePerson
is encoded to request body JSON of Create a Person REST call.
Constructors
CreatePerson | |
Fields
|
Instances
Eq CreatePerson Source # | |
Show CreatePerson Source # | |
ToJSON CreatePerson Source # | |
FromJSON CreatePerson Source # |
|
WebexTeamsCreate CreatePerson Source # | User can create a person. |
WebexTeamsResponse CreatePerson Source # | Create person API uses "CreatePerson' and responses |
WebexTeamsApiPath CreatePerson Source # | Create person API uses |
type ToResponse CreatePerson Source # | |
data UpdatePerson Source #
UpdatePerson
is encoded to request body JSON of Update a Person REST call.
Constructors
UpdatePerson | |
Fields
|
Instances
Eq UpdatePerson Source # | |
Show UpdatePerson Source # | |
ToJSON UpdatePerson Source # | |
FromJSON UpdatePerson Source # |
|
WebexTeamsUpdate UpdatePerson Source # | User can update a person. |
WebexTeamsResponse UpdatePerson Source # | Update person API uses "UpdatePerson' and responses |
WebexTeamsApiPath UpdatePerson Source # | Update person API uses |
type ToResponse UpdatePerson Source # | |
Room related types
Room
is communication space in Webex Teams and called "Space" on UI.
Historically it was called Room on UI too but UI has been changed to "Space" in order to avoid
confusion with the concept "Room" associated to hardware facility of video conferencing on Webex Teams.
The name of Room is kept unchanged for backward compatibility.
Room is decoded from response JSON of Get Room Details REST call. It is also element type of response of List Rooms call.
Constructors
Room | |
Fields
|
Identifying Room
.
Instances
Eq RoomId Source # | |
Show RoomId Source # | |
Generic RoomId Source # | |
ToJSON RoomId Source # | |
FromJSON RoomId Source # | |
WebexTeamsDetail RoomId Source # | User can get detail of a room. |
WebexTeamsResponse RoomId Source # | Get detail for a room API uses "RoomId' and responses |
WebexTeamsApiPath RoomId Source # | Get detail for a room API uses |
type Rep RoomId Source # | |
type ToResponse RoomId Source # | |
Title text of Room
.
Constructors
RoomTypeDirect | The Room is for 1:1. Decoded from "direct". |
RoomTypeGroup | The Room is for group. Decoded from "group". |
SIP address.
Constructors
RoomList | |
Fields
|
data RoomFilter Source #
Optional query strings for room list API
Constructors
RoomFilter | |
Fields
|
Instances
Eq RoomFilter Source # | |
Show RoomFilter Source # | |
Generic RoomFilter Source # | |
Default RoomFilter Source # | |
WebexTeamsFilter RoomFilter Source # | User can list rooms with filter parameter. |
WebexTeamsResponse RoomFilter Source # | List rooms API uses |
WebexTeamsApiPath RoomFilter Source # | List rooms API uses |
type Rep RoomFilter Source # | |
type ToResponse RoomFilter Source # | |
data CreateRoom Source #
CreateRoom
is encoded to request body JSON of Create a Room REST call.
Constructors
CreateRoom | |
Fields
|
Instances
Eq CreateRoom Source # | |
Show CreateRoom Source # | |
ToJSON CreateRoom Source # | |
FromJSON CreateRoom Source # |
|
WebexTeamsCreate CreateRoom Source # | User can create a room. |
WebexTeamsResponse CreateRoom Source # | Create room API uses "CreateRoom' and responses |
WebexTeamsApiPath CreateRoom Source # | Create room API uses |
type ToResponse CreateRoom Source # | |
newtype UpdateRoom Source #
UpdateRoom
is encoded to request body JSON of Update a Room REST call.
Constructors
UpdateRoom | |
Fields |
Instances
Eq UpdateRoom Source # | |
Show UpdateRoom Source # | |
ToJSON UpdateRoom Source # | |
FromJSON UpdateRoom Source # |
|
WebexTeamsUpdate UpdateRoom Source # | User can update a room. |
WebexTeamsResponse UpdateRoom Source # | Update room API uses "UpdateRoom' and responses |
WebexTeamsApiPath UpdateRoom Source # | Update room API uses |
type ToResponse UpdateRoom Source # | |
Membership related types
data Membership Source #
Membership
is association between Room
and Person
.
It can be N:N relation. A Person can belong to multiple Room.
Membership is decoded from response JSON of Get Membership Details REST call.
It is also element type of response of List Memberships call.
Constructors
Membership | |
Fields
|
Instances
Eq Membership Source # | |
Show Membership Source # | |
ToJSON Membership Source # | |
FromJSON Membership Source # |
|
WebexTeamsListItem Membership Source # |
|
type ToList Membership Source # | |
newtype MembershipId Source #
Identifying Membership
.
Constructors
MembershipId Text |
Instances
Eq MembershipId Source # | |
Show MembershipId Source # | |
Generic MembershipId Source # | |
ToJSON MembershipId Source # | |
FromJSON MembershipId Source # | |
WebexTeamsDetail MembershipId Source # | User can get detail of a membership. |
WebexTeamsResponse MembershipId Source # | Get detail for a membership API uses "MembershipId' and responses |
WebexTeamsApiPath MembershipId Source # | Get detail for a membership API uses |
type Rep MembershipId Source # | |
type ToResponse MembershipId Source # | |
newtype MembershipList Source #
MembershipList
is decoded from response JSON of List Memberships REST call. It is list of Membership
.
Constructors
MembershipList | |
Fields |
Instances
Eq MembershipList Source # | |
Show MembershipList Source # | |
ToJSON MembershipList Source # | |
FromJSON MembershipList Source # |
|
data MembershipFilter Source #
Optional query strings for room membership list API
Constructors
MembershipFilter | |
Fields
|
Instances
Eq MembershipFilter Source # | |
Show MembershipFilter Source # | |
Generic MembershipFilter Source # | |
Default MembershipFilter Source # | |
WebexTeamsFilter MembershipFilter Source # | User can list memberships with filter parameter. |
WebexTeamsResponse MembershipFilter Source # | List memberships API uses |
WebexTeamsApiPath MembershipFilter Source # | List memberships API uses |
type Rep MembershipFilter Source # | |
type ToResponse MembershipFilter Source # | |
data CreateMembership Source #
CreateMembership
is encoded to request body JSON of Create a Membership REST call.
Constructors
CreateMembership | |
Fields
|
Instances
Eq CreateMembership Source # | |
Show CreateMembership Source # | |
ToJSON CreateMembership Source # | |
FromJSON CreateMembership Source # |
|
WebexTeamsCreate CreateMembership Source # | User can create a membership. |
WebexTeamsResponse CreateMembership Source # | Create membership API uses "CreateMembership' and responses |
WebexTeamsApiPath CreateMembership Source # | Create membership API uses |
type ToResponse CreateMembership Source # | |
newtype UpdateMembership Source #
UpdateMembership
is encoded to request body JSON of Update a Membership REST call.
Constructors
UpdateMembership | |
Fields |
Instances
Eq UpdateMembership Source # | |
Show UpdateMembership Source # | |
ToJSON UpdateMembership Source # | |
FromJSON UpdateMembership Source # |
|
WebexTeamsUpdate UpdateMembership Source # | User can update a membership. |
WebexTeamsResponse UpdateMembership Source # | Update membership API uses "UpdateMembership' and responses |
WebexTeamsApiPath UpdateMembership Source # | Update membership API uses |
type ToResponse UpdateMembership Source # | |
Message related types
Message
is a message posted to a Room
by some Person
.
Room is decoded from response JSON of Get Message Details REST call.
It is also element type of response of List Messages call.
Constructors
Message | |
Fields
|
Identifying Message
.
Instances
Eq MessageId Source # | |
Show MessageId Source # | |
Generic MessageId Source # | |
ToJSON MessageId Source # | |
FromJSON MessageId Source # | |
WebexTeamsDetail MessageId Source # | User can get detail of a message. |
WebexTeamsResponse MessageId Source # | Get detail for a message API uses "MessageId' and responses |
WebexTeamsApiPath MessageId Source # | Get detail for message API uses |
type Rep MessageId Source # | |
type ToResponse MessageId Source # | |
URL pointing attached file of message.
newtype MessageList Source #
MessageList
is decoded from response JSON of List Messages REST call. It is list of Message
.
Constructors
MessageList | |
Fields
|
Instances
Eq MessageList Source # | |
Show MessageList Source # | |
ToJSON MessageList Source # | |
FromJSON MessageList Source # |
|
data MessageFilter Source #
Optional query strings for message list API
Constructors
MessageFilter | |
Fields
|
Instances
Eq MessageFilter Source # | |
Show MessageFilter Source # | |
WebexTeamsFilter MessageFilter Source # | User can list messages with filter parameter. |
WebexTeamsResponse MessageFilter Source # | List messages API uses |
WebexTeamsApiPath MessageFilter Source # | List messages API uses |
type ToResponse MessageFilter Source # | |
data MentionedPeople Source #
Sum type for mentionedPeople query string. It can be "me" or PersonId
.
Constructors
MentionedPeopleMe | |
MentionedPeople PersonId |
Instances
data CreateMessage Source #
CreateMessage
is encoded to request body JSON of Create a Message REST call.
Constructors
CreateMessage | |
Fields
|
Instances
Eq CreateMessage Source # | |
Show CreateMessage Source # | |
ToJSON CreateMessage Source # | |
FromJSON CreateMessage Source # |
|
WebexTeamsCreate CreateMessage Source # | User can create a message. |
WebexTeamsResponse CreateMessage Source # | Create message API uses "CreateMessage' and responses |
WebexTeamsApiPath CreateMessage Source # | Create message API uses |
type ToResponse CreateMessage Source # | |
Team related types
Name of Team
Identifying Team.
Instances
Eq TeamId Source # | |
Show TeamId Source # | |
Generic TeamId Source # | |
ToJSON TeamId Source # | |
FromJSON TeamId Source # | |
WebexTeamsDetail TeamId Source # | User can get detail of a team. |
WebexTeamsResponse TeamId Source # | Get detail for a team API uses "TeamId' and responses |
WebexTeamsApiPath TeamId Source # | Get detail for a team API uses |
type Rep TeamId Source # | |
type ToResponse TeamId Source # | |
Team
is group of Person
and group of Room
.
A Person can belong to multiple Team but a Room can belong to at most one Team.
Team is decoded from response JSON of Get Team Details REST call.
It is also element type of response of List Teams call.
Constructors
Team | |
Fields
|
Constructors
TeamList | |
Fields
|
newtype CreateTeam Source #
CreateTeam
is encoded to request body JSON of Create a Team REST call.
Constructors
CreateTeam | |
Fields |
Instances
Eq CreateTeam Source # | |
Show CreateTeam Source # | |
ToJSON CreateTeam Source # | |
FromJSON CreateTeam Source # |
|
WebexTeamsCreate CreateTeam Source # | User can create a team. |
WebexTeamsResponse CreateTeam Source # | Create team API uses "CreateTeam' and responses |
WebexTeamsApiPath CreateTeam Source # | Create team API uses |
type ToResponse CreateTeam Source # | |
newtype UpdateTeam Source #
UpdateTeam
is encoded to request body JSON of Update a Team REST call.
Constructors
UpdateTeam | |
Fields |
Instances
Eq UpdateTeam Source # | |
Show UpdateTeam Source # | |
ToJSON UpdateTeam Source # | |
FromJSON UpdateTeam Source # |
|
WebexTeamsUpdate UpdateTeam Source # | User can update a team. |
WebexTeamsResponse UpdateTeam Source # | Update team API uses "UpdateTeam' and responses |
WebexTeamsApiPath UpdateTeam Source # | Update team API uses |
type ToResponse UpdateTeam Source # | |
Team Membership related types
data TeamMembership Source #
TeamMembership
is association between Team
and Person
.
It can be N:N relation. A Person can belong to multiple Team.
TeamMembership is decoded from response JSON of Get Team Membership Details REST call.
It is also element type of response of List Team Memberships call.
Constructors
TeamMembership | |
Fields
|
Instances
Eq TeamMembership Source # | |
Show TeamMembership Source # | |
ToJSON TeamMembership Source # | |
FromJSON TeamMembership Source # |
|
WebexTeamsListItem TeamMembership Source # | |
type ToList TeamMembership Source # | |
newtype TeamMembershipId Source #
Identifying TeamMembership.
Constructors
TeamMembershipId Text |
Instances
Eq TeamMembershipId Source # | |
Show TeamMembershipId Source # | |
Generic TeamMembershipId Source # | |
ToJSON TeamMembershipId Source # | |
FromJSON TeamMembershipId Source # | |
WebexTeamsDetail TeamMembershipId Source # | User can get detail of a team membership. |
WebexTeamsResponse TeamMembershipId Source # | Get detail for a team membership API uses "TeamMembershipId' and responses |
WebexTeamsApiPath TeamMembershipId Source # | Get detail for a team membership API uses |
type Rep TeamMembershipId Source # | |
type ToResponse TeamMembershipId Source # | |
newtype TeamMembershipList Source #
TeamMembershipList
is decoded from response JSON of List Team Memberships REST call. It is list of TeamMembership
.
Constructors
TeamMembershipList | |
Fields |
Instances
Eq TeamMembershipList Source # | |
Show TeamMembershipList Source # | |
ToJSON TeamMembershipList Source # | |
FromJSON TeamMembershipList Source # |
|
newtype TeamMembershipFilter Source #
Optional query strings for team membership list API
Constructors
TeamMembershipFilter | |
Fields
|
Instances
Eq TeamMembershipFilter Source # | |
Show TeamMembershipFilter Source # | |
WebexTeamsFilter TeamMembershipFilter Source # | User can list team membership with filter parameter. |
WebexTeamsResponse TeamMembershipFilter Source # | List team memberships API uses |
WebexTeamsApiPath TeamMembershipFilter Source # | List team memberships API uses |
type ToResponse TeamMembershipFilter Source # | |
data CreateTeamMembership Source #
CreateTeamMembership
is encoded to request body JSON of Create a Team Membership REST call.
Constructors
CreateTeamMembership | |
Fields
|
Instances
Eq CreateTeamMembership Source # | |
Show CreateTeamMembership Source # | |
ToJSON CreateTeamMembership Source # | |
FromJSON CreateTeamMembership Source # |
|
WebexTeamsCreate CreateTeamMembership Source # | User can create a teamMembership. |
WebexTeamsResponse CreateTeamMembership Source # | Create teamMembership API uses "CreateTeamMembership' and responses |
WebexTeamsApiPath CreateTeamMembership Source # | Create teamMembership API uses |
type ToResponse CreateTeamMembership Source # | |
newtype UpdateTeamMembership Source #
UpdateTeamMembership
is encoded to request body JSON of Update a Team Membership REST call.
Constructors
UpdateTeamMembership | |
Fields |
Instances
Eq UpdateTeamMembership Source # | |
Show UpdateTeamMembership Source # | |
ToJSON UpdateTeamMembership Source # | |
FromJSON UpdateTeamMembership Source # |
|
WebexTeamsUpdate UpdateTeamMembership Source # | User can update a teamMembership. |
WebexTeamsResponse UpdateTeamMembership Source # | Update teamMembership API uses "UpdateTeamMembership' and responses |
WebexTeamsApiPath UpdateTeamMembership Source # | Update teamMembership API uses |
type ToResponse UpdateTeamMembership Source # | |
Organization related types
data Organization Source #
Organization
is an administrative group of Webex Teams users.
Each Person
belongs to one Organization.
Organization is decoded from response JSON of Get Organization Details REST call.
It is also element type of response of List Organizations call.
Constructors
Organization | |
Fields
|
Instances
Eq Organization Source # | |
Show Organization Source # | |
ToJSON Organization Source # | |
FromJSON Organization Source # |
|
WebexTeamsListItem Organization Source # |
|
type ToList Organization Source # | |
newtype OrganizationId Source #
Organization
identifier which user or team belongs to.
Constructors
OrganizationId Text |
Instances
Eq OrganizationId Source # | |
Show OrganizationId Source # | |
Generic OrganizationId Source # | |
ToJSON OrganizationId Source # | |
FromJSON OrganizationId Source # | |
WebexTeamsDetail OrganizationId Source # | User can get detail of a organization. |
WebexTeamsResponse OrganizationId Source # | Get detail for a organization API uses "OrganizationId' and responses |
WebexTeamsApiPath OrganizationId Source # | Get detail for organization API uses |
type Rep OrganizationId Source # | |
type ToResponse OrganizationId Source # | |
newtype OrganizationDisplayName Source #
Display name of Organization
Constructors
OrganizationDisplayName Text |
newtype OrganizationList Source #
OrganizationList
is decoded from response JSON of List Organizations REST call. It is list of Organization
.
Constructors
OrganizationList | |
Fields |
Instances
Eq OrganizationList Source # | |
Show OrganizationList Source # | |
ToJSON OrganizationList Source # | |
FromJSON OrganizationList Source # |
|
License related types
License
is allowance for features and services of Webex Teams subscription.
License is decoded from response JSON of Get License Details REST call.
It is also element type of response of List Licenses call.
Constructors
License | |
Fields
|
Instances
Eq LicenseId Source # | |
Show LicenseId Source # | |
Generic LicenseId Source # | |
ToJSON LicenseId Source # | |
FromJSON LicenseId Source # | |
WebexTeamsDetail LicenseId Source # | User can get detail of a license. |
WebexTeamsResponse LicenseId Source # | Get detail for a license API uses "LicenseId' and responses |
WebexTeamsApiPath LicenseId Source # | Get detail for license API uses |
type Rep LicenseId Source # | |
type ToResponse LicenseId Source # | |
newtype LicenseUnit Source #
Counting number of granted or consumed License
Constructors
LicenseUnit Integer |
Instances
newtype LicenseList Source #
LicenseList
is decoded from response JSON of List Licenses REST call. It is list of License
.
Constructors
LicenseList | |
Fields
|
Instances
Eq LicenseList Source # | |
Show LicenseList Source # | |
ToJSON LicenseList Source # | |
FromJSON LicenseList Source # |
|
newtype LicenseFilter Source #
Optional query strings for license list API
Constructors
LicenseFilter | |
Fields
|
Instances
Eq LicenseFilter Source # | |
Show LicenseFilter Source # | |
Generic LicenseFilter Source # | |
Default LicenseFilter Source # | |
WebexTeamsFilter LicenseFilter Source # | User can list licenses with filter parameter. |
WebexTeamsResponse LicenseFilter Source # | List licenses API uses |
WebexTeamsApiPath LicenseFilter Source # | List licenses API uses |
type Rep LicenseFilter Source # | |
type ToResponse LicenseFilter Source # | |
Role related types
A persona for an authenticated user, corresponding to a set of privileges within an organization. Role is decoded from response JSON of Get Role Details REST call. It is also element type of response of List Roles call.
Constructors
Role | |
Instances
Eq RoleId Source # | |
Show RoleId Source # | |
Generic RoleId Source # | |
ToJSON RoleId Source # | |
FromJSON RoleId Source # | |
WebexTeamsDetail RoleId Source # | User can get detail of a role. |
WebexTeamsResponse RoleId Source # | Get detail for a role API uses "RoleId' and responses |
WebexTeamsApiPath RoleId Source # | Get detail for role API uses |
type Rep RoleId Source # | |
type ToResponse RoleId Source # | |
Name of Role
.
Constructors
RoleList | |
Fields
|
Functions
Getting detail of an entity
Arguments
:: (MonadIO m, WebexTeamsDetail key) | |
=> Authorization | Authorization string against Webex Teams API. |
-> WebexTeamsRequest | Predefined part of |
-> key | One of PersonId, RoomId, MembershipId, MessageId, TeamId, TeamMembershipId, OrganizationId, LicenseId and RoleId. |
-> m (Response (ToResponse key)) |
Get details of a Webex Teams entity.
Obtaining detail of an entity identified by key. The key can be a value in one of
following types: PersonId
, RoomId
, MembershipId
, MessageId
, TeamId
, TeamMembershipId
,
OrganizationId
, LicenseId
, RoleId
. API is automatically selected by type of the key.
A JSONException runtime exception will be thrown on an JSON parse errors.
getDetailEither :: (MonadIO m, WebexTeamsDetail key) => Authorization -> WebexTeamsRequest -> key -> m (Response (Either JSONException (ToResponse key))) Source #
Get details of a Webex Teams entity. A Left value will be returned on an JSON parse errors.
Streaming response of List API with auto pagenation
type ListReader a = IO [a] Source #
ListReader
is IO action returned by functions for list API (getListWithFilter
, getTeamList
etc).
It is containing URL inside to be accessed. When you call the IO action, it accesses to Webex Teams REST API,
parse next page URL if available, then return new IO action. The new IO action contains list of responded items and
new URL for next page so you can call the new IO action to get the next page.
Following example demonstrates how you can get all items into single list.
readAllList :: ListReader i -> IO [i] readAllList reader = go [] where go xs = reader >>= chunk -> case chunk of [] -> pure xs ys -> go (xs <> ys)
Note that this example is only for explaining how ListReader
works. Practically you should not do the above
because it eagerly creates entire list. You should use streaming APIs instead. Streaming APIs are available via
webex-teams-conduit and webex-teams-pipes package.
getListWithFilter :: (MonadIO m, WebexTeamsFilter filter, WebexTeamsListItem (ToResponse filter)) => Authorization -> WebexTeamsRequest -> filter -> m (ListReader (ToResponse filter)) Source #
Get list with query parameter.
getTeamList :: MonadIO m => Authorization -> WebexTeamsRequest -> m (ListReader Team) Source #
Return ListReader
for Team
.
getOrganizationList :: MonadIO m => Authorization -> WebexTeamsRequest -> m (ListReader Organization) Source #
Return ListReader
for Team
.
getRoleList :: MonadIO m => Authorization -> WebexTeamsRequest -> m (ListReader Role) Source #
Return ListReader
for Team
.
streamEntityWithFilter :: (MonadIO m, WebexTeamsFilter filter, WebexTeamsListItem (ToResponse filter)) => Authorization -> WebexTeamsRequest -> filter -> ConduitT () (ToResponse filter) m () Source #
Deprecated: Use getListWithFilter or streamListWithFilter of webex-teams-conduit
Get list of entities with query parameter and stream it into Conduit pipe. It automatically performs pagination.
streamTeamList :: MonadIO m => Authorization -> WebexTeamsRequest -> ConduitT () Team m () Source #
Deprecated: Use getTeamList or streamTeamList of webex-teams-conduit
List of Team
and stream it into Conduit pipe. It automatically performs pagination.
streamOrganizationList :: MonadIO m => Authorization -> WebexTeamsRequest -> ConduitT () Organization m () Source #
Deprecated: Use getOrganizationList or streamOrganizationList of webex-teams-conduit
Filter list of Organization
and stream it into Conduit pipe. It automatically performs pagination.
streamRoleList :: MonadIO m => Authorization -> WebexTeamsRequest -> ConduitT () Role m () Source #
Deprecated: Use getRoleList or streamRoleList of webex-teams-conduit
List of Role
and stream it into Conduit pipe. It automatically performs pagination.
Creating an entity
Arguments
:: (MonadIO m, WebexTeamsCreate createParams) | |
=> Authorization | Authorization string against Webex Teams API. |
-> WebexTeamsRequest | Predefined part of |
-> createParams | One of |
-> m (Response (ToResponse createParams)) |
Create a Webex Teams entity with given parameters.
Creating a new entity of Webex Teams such as space, team, membership or message. REST API path is automatically selected by type of createParams. A JSONException runtime exception will be thrown on an JSON parse errors.
createEntityEither :: (MonadIO m, WebexTeamsCreate createParams) => Authorization -> WebexTeamsRequest -> createParams -> m (Response (Either JSONException (ToResponse createParams))) Source #
Create a Webex Teams entity with given parameters. A Left value will be returned on an JSON parse errors.
Updating an entity
Arguments
:: (MonadIO m, WebexTeamsUpdate updateParams) | |
=> Authorization | Authorization string against Webex Teams API. |
-> WebexTeamsRequest | Predefined part of |
-> updateParams | One of |
-> m (Response (ToResponse updateParams)) |
Update a Webex Teams entity with given parameters.
Creating a new entity of Webex Teams such as space, team, or membership. REST API path is automatically selected by type of updateParams. A JSONException runtime exception will be thrown on an JSON parse errors.
updateEntityEither :: (MonadIO m, WebexTeamsUpdate updateParams) => Authorization -> WebexTeamsRequest -> updateParams -> m (Response (Either JSONException (ToResponse updateParams))) Source #
Update a Webex Teams entity with given parameters. A Left value will be returned on an JSON parse errors.
Creating default filter spec from mandatory field
defaultMessageFilter :: RoomId -> MessageFilter Source #
Default value of query strings for message list API.
Because RoomId
is mandatory, user have to supply it in order to get rest of defaults.
defaultTeamMembershipFilter :: TeamId -> TeamMembershipFilter Source #
Default value of query strings for team membership list API.
Because TeamId
is mandatory, user have to supply it in order to get rest of defaults.
As of writing, there is no filter parameter other than TeamId but TeamMembershipFilter
is
used for providing consistent API like streamEntityWithFilter
.
Deleting an entity
Arguments
:: MonadIO m | |
=> Authorization | Authorization string against Webex Teams API. |
-> WebexTeamsRequest | Predefined part of |
-> RoomId | Identifier of a space to be deleted. |
-> m (Response ()) |
Deletes a room, by ID.
Arguments
:: MonadIO m | |
=> Authorization | Authorization string against Webex Teams API. |
-> WebexTeamsRequest | Predefined part of |
-> MembershipId | Identifier of a space to be deleted. |
-> m (Response ()) |
Deletes a membership, by ID.
Arguments
:: MonadIO m | |
=> Authorization | Authorization string against Webex Teams API. |
-> WebexTeamsRequest | Predefined part of |
-> MessageId | Identifier of a space to be deleted. |
-> m (Response ()) |
Deletes a message, by ID.
Arguments
:: MonadIO m | |
=> Authorization | Authorization string against Webex Teams API. |
-> WebexTeamsRequest | Predefined part of |
-> TeamId | Identifier of a space to be deleted. |
-> m (Response ()) |
Deletes a team, by ID.
Arguments
:: MonadIO m | |
=> Authorization | Authorization string against Webex Teams API. |
-> WebexTeamsRequest | Predefined part of |
-> TeamMembershipId | Identifier of a space to be deleted. |
-> m (Response ()) |
Deletes a teamMembership, by ID.