Agent skill
calendly-api-4-invitees
Sub-skill of calendly-api: 4. Invitees.
Install this agent skill to your Project
npx add-skill https://github.com/vamseeachanta/workspace-hub/tree/main/.claude/skills/_archive/business/communication/calendly-api/4-invitees
SKILL.md
4. Invitees
4. Invitees
# invitees.py
# ABOUTME: Invitee management for scheduled events
# ABOUTME: Retrieve invitee details and custom answers
from client import client
from typing import Optional, List
def list_invitees(
event_uri: str,
status: str = None,
email: str = None,
) -> list:
"""List invitees for a scheduled event
status: active, canceled
"""
uuid = event_uri.split("/")[-1]
params = {}
if status:
params["status"] = status
if email:
params["email"] = email
return client.paginate(f"/scheduled_events/{uuid}/invitees", params=params)
def get_invitee(invitee_uri: str) -> dict:
"""Get invitee details"""
# Parse invitee URI to get event and invitee UUIDs
parts = invitee_uri.split("/")
event_uuid = parts[-3]
invitee_uuid = parts[-1]
response = client.get(f"/scheduled_events/{event_uuid}/invitees/{invitee_uuid}")
return response.get("resource", {})
def get_invitee_no_show(invitee_uri: str) -> Optional[dict]:
"""Get no-show status for an invitee"""
parts = invitee_uri.split("/")
invitee_uuid = parts[-1]
try:
response = client.get(f"/invitee_no_shows/{invitee_uuid}")
return response.get("resource")
except Exception:
return None
def mark_invitee_no_show(invitee_uri: str) -> dict:
"""Mark an invitee as a no-show"""
response = client.post("/invitee_no_shows", json={"invitee": invitee_uri})
return response.get("resource", {})
def unmark_invitee_no_show(no_show_uri: str) -> bool:
"""Remove no-show status from an invitee"""
uuid = no_show_uri.split("/")[-1]
client.delete(f"/invitee_no_shows/{uuid}")
return True
def format_invitee_summary(invitee: dict) -> dict:
"""Format invitee for display"""
return {
"uri": invitee.get("uri"),
"name": invitee.get("name"),
"email": invitee.get("email"),
"status": invitee.get("status"),
"timezone": invitee.get("timezone"),
"created_at": invitee.get("created_at"),
"rescheduled": invitee.get("rescheduled"),
"questions_and_answers": [
{
"question": qa.get("question"),
"answer": qa.get("answer"),
}
for qa in invitee.get("questions_and_answers", [])
],
"tracking": invitee.get("tracking", {}),
"utm_parameters": {
"source": invitee.get("utm_source"),
"medium": invitee.get("utm_medium"),
"campaign": invitee.get("utm_campaign"),
},
}
def get_invitee_custom_answers(invitee: dict) -> dict:
"""Extract custom question answers from invitee"""
answers = {}
for qa in invitee.get("questions_and_answers", []):
question = qa.get("question")
answer = qa.get("answer")
answers[question] = answer
return answers
def get_all_invitees_for_events(event_uris: list) -> list:
"""Get invitees for multiple events"""
all_invitees = []
for event_uri in event_uris:
invitees = list_invitees(event_uri)
for invitee in invitees:
invitee["event_uri"] = event_uri
all_invitees.extend(invitees)
return all_invitees
if __name__ == "__main__":
from scheduled_events import get_upcoming_events
# Get upcoming events and their invitees
events = get_upcoming_events(days_ahead=7)
for event in events[:5]:
print(f"\nEvent: {event['name']}")
invitees = list_invitees(event["uri"])
for inv in invitees:
summary = format_invitee_summary(inv)
print(f" - {summary['name']} ({summary['email']})")
if summary["questions_and_answers"]:
for qa in summary["questions_and_answers"]:
print(f" Q: {qa['question']}")
print(f" A: {qa['answer']}")
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
gsd-complete-milestone
Archive completed milestone and prepare for next version
gsd-reapply-patches
Reapply local modifications after a GSD update
gsd-verify-work
Validate built features through conversational UAT
gsd-thread
Manage persistent context threads for cross-session work
clinical-trial-protocol
Generate clinical trial protocols for medical devices or drugs through a modular, waypoint-based architecture with research-only and full protocol modes.
single-cell-rna-qc
Performs quality control on single-cell RNA-seq data (.h5ad or .h5 files) using scverse best practices with MAD-based filtering and comprehensive visualizations.
Didn't find tool you were looking for?