from datetime import datetime, timedelta
from typing import Optional
import pytz
from wxc_sdk.api_child import ApiChild
from wxc_sdk.base import ApiModel
__all__ = ['Guest', 'GuestManagementApi']
[docs]
class Guest(ApiModel):
#: The unique id of the guest. This is a `personId`
#: example: Y2lzY29zcGFyazovL3VzL1BFT1BMRS8zNzlhNWQ4ZC1hNTE4LTQ3NmQtYmY1NC1mZmE5MWQ3OWM4MTI
id: Optional[str] = None
#: The external unique identifier of the guest.
#: example: PersonNo#1
subject: Optional[str] = None
#: The guest’s display name shown in Webex applications
#: example: Person of Interest
display_name: Optional[str] = None
#: The person’s synthetic email in Webex.
#: example: 1ad14c30-59a6-31a7-b345-963e3d167e10@appid.ciscospark.com
email: Optional[str] = None
#: The guests access token. Guest tokens usually are over 2000 characters in length.
#: example: eyJhbGciOiJSUzI1NiJ9.eyJkw1zx5iIDv7FL3cWQ_JEjehqtPVRmFf572q7RZwSIZgQRziAw
access_token: Optional[str] = None
#: The token expiration in seconds from the time of issuance.
#: example: 64799
expires_in: Optional[int] = None
#: absolute time of guest access token expiration
expires_at: Optional[datetime] = None #: expiration, calculated at time of guest creation
[docs]
class GuestManagementApi(ApiChild, base='guests'):
"""
Guest Management
Guests in Webex are users with only a temporary identity and are often used for single-transaction collaborations.
Examples include click-to-call and click-to-chat applications where the guest interacts with the agent only for
the duration of the call or chat session.
Guests in Webex are created and managed via a Service App with the scope guest-issuer:write and guest-issuer:read
and are represented by a token with a fixed and predefined set of scopes.
Since the Service App manages its own pool of guests, you need to insert the Service App token into the developer
portal's Try-It mode rather than your default personal token.
The `guests/token` endpoint is used to create and retrieve guest tokens, and the `guests/count` is used to assess
the number of current guests.
Creating guests via the guest-issuer application type is deprecated and will
be removed in the future.
"""
[docs]
def create(self, subject: str, display_name: str) -> Guest:
"""
Create a Guest
Create a new token for a single guest user. The Service App that creates the guest must have the scope
`guest-issuer:write`.
Guests are implicitly created by retrieving the guest access token.
Repeated calls to this API with the same `subject` will create additional tokens without invalidating previous
ones. Tokens are valid until the `expiresIn`.
Guests can be renamed by supplying the same `subject` and changing the `displayName.`
To retrieve a new token for an existing guest, please provide the existing guest's `subject`. Tokens are valid
until `expiresIn`.
:param subject: The unique and external identifier of the guest.
:type subject: str
:param display_name: The display name shown in the Webex application.
:type display_name: str
:rtype: :class:`Guest`
"""
body = dict()
body['subject'] = subject
body['displayName'] = display_name
url = self.ep('token')
data = super().post(url, json=body)
guest = Guest.model_validate(data)
now = datetime.utcnow().replace(tzinfo=pytz.UTC)
if not guest.expires_at and guest.expires_in:
delta = timedelta(seconds=guest.expires_in)
guest.expires_at = now + delta
return guest
[docs]
def guest_count(self) -> int:
"""
Get Guest Count
To retrieve the number of guests, the scopes `guest-issuer:read` or `guest-issuer:write` are needed.
:rtype: int
"""
url = self.ep('count')
data = super().get(url)
return data