Skip to content

Commit 06d9a92

Browse files
authored
Initial campaign API (#65)
1 parent e0ea0d2 commit 06d9a92

File tree

4 files changed

+271
-0
lines changed

4 files changed

+271
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ pip install stream-chat
3333
- User devices
3434
- User search
3535
- Channel search
36+
- Campaign API (alpha - susceptible changes and even won't be available in some regions yet)
3637

3738
### Quickstart
3839

stream_chat/async_chat/client.py

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -461,6 +461,92 @@ async def list_roles(self):
461461
"""
462462
return await self.get("custom_role")
463463

464+
async def create_segment(self, segment):
465+
"""
466+
Create a segment
467+
"""
468+
return await self.post("segments", data={"segment": segment})
469+
470+
async def get_segment(self, segment_id):
471+
"""
472+
Get a segment by id
473+
"""
474+
return await self.get(f"segments/{segment_id}")
475+
476+
async def list_segments(self, **params):
477+
"""
478+
List segments
479+
"""
480+
return await self.get("segments", params)
481+
482+
async def update_segment(self, segment_id, data):
483+
"""
484+
Update a segment by id
485+
"""
486+
return await self.put(f"segments/{segment_id}", data={"segment": data})
487+
488+
async def delete_segment(self, segment_id):
489+
"""
490+
Delete a segment by id
491+
"""
492+
return await self.delete(f"segments/{segment_id}")
493+
494+
async def create_campaign(self, campaign):
495+
"""
496+
Create a campaign
497+
"""
498+
return await self.post("campaigns", data={"campaign": campaign})
499+
500+
async def get_campaign(self, campaign_id):
501+
"""
502+
Get a campaign by id
503+
"""
504+
return await self.get(f"campaigns/{campaign_id}")
505+
506+
async def list_campaigns(self, **params):
507+
"""
508+
List campaigns
509+
"""
510+
return await self.get("campaigns/", params)
511+
512+
async def update_campaign(self, campaign_id, data):
513+
"""
514+
Update a campaign
515+
"""
516+
return await self.put(f"campaigns/{campaign_id}", data={"campaign": data})
517+
518+
async def delete_campaign(self, campaign_id):
519+
"""
520+
Delete a campaign by id
521+
"""
522+
return await self.delete(f"campaigns/{campaign_id}")
523+
524+
async def schedule_campaign(self, campaign_id, send_at):
525+
"""
526+
Schedule a campaign at given time
527+
"""
528+
return await self.patch(
529+
f"campaigns/{campaign_id}/schedule", data={"send_at": send_at}
530+
)
531+
532+
async def stop_campaign(self, campaign_id):
533+
"""
534+
Stop a in progress campaign
535+
"""
536+
return await self.patch(f"campaigns/{campaign_id}/stop")
537+
538+
async def resume_campaign(self, campaign_id):
539+
"""
540+
Resume a stopped campaign
541+
"""
542+
return await self.patch(f"campaigns/{campaign_id}/resume")
543+
544+
async def test_campaign(self, campaign_id, users):
545+
"""
546+
Trigger a test send of the given campaing to given users
547+
"""
548+
return await self.post(f"campaigns/{campaign_id}/test", data={"users": users})
549+
464550
async def revoke_tokens(self, before):
465551
"""
466552
Revokes tokens for an application

stream_chat/base/client.py

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -431,6 +431,104 @@ def list_roles(self):
431431
"""
432432
pass
433433

434+
@abc.abstractmethod
435+
def create_segment(self, segment):
436+
"""
437+
Create a segment
438+
"""
439+
pass
440+
441+
@abc.abstractmethod
442+
def get_segment(self, segment_id):
443+
"""
444+
Get a segment by id
445+
"""
446+
pass
447+
448+
@abc.abstractmethod
449+
def list_segments(self, **params):
450+
"""
451+
List segments
452+
"""
453+
pass
454+
455+
@abc.abstractmethod
456+
def update_segment(self, segment_id, data):
457+
"""
458+
Update a segment by id
459+
"""
460+
pass
461+
462+
@abc.abstractmethod
463+
def delete_segment(self, segment_id):
464+
"""
465+
Delete a segment by id
466+
"""
467+
pass
468+
469+
@abc.abstractmethod
470+
def create_campaign(self, campaign):
471+
"""
472+
Create a campaign
473+
"""
474+
pass
475+
476+
@abc.abstractmethod
477+
def get_campaign(self, campaign_id):
478+
"""
479+
Get a campaign by id
480+
"""
481+
pass
482+
483+
@abc.abstractmethod
484+
def list_campaigns(self, **params):
485+
"""
486+
List campaigns
487+
"""
488+
pass
489+
490+
@abc.abstractmethod
491+
def update_campaign(self, campaign_id, data):
492+
"""
493+
Update a campaign
494+
"""
495+
pass
496+
497+
@abc.abstractmethod
498+
def delete_campaign(self, campaign_id):
499+
"""
500+
Delete a campaign by id
501+
"""
502+
pass
503+
504+
@abc.abstractmethod
505+
def schedule_campaign(self, campaign_id, send_at):
506+
"""
507+
Schedule a campaign at given time
508+
"""
509+
pass
510+
511+
@abc.abstractmethod
512+
async def stop_campaign(self, campaign_id):
513+
"""
514+
Stop a in progress campaign
515+
"""
516+
pass
517+
518+
@abc.abstractmethod
519+
def resume_campaign(self, campaign_id):
520+
"""
521+
Resume a stopped campaign
522+
"""
523+
pass
524+
525+
@abc.abstractmethod
526+
def test_campaign(self, campaign_id, users):
527+
"""
528+
Trigger a test send of the given campaing to given users
529+
"""
530+
pass
531+
434532
@abc.abstractmethod
435533
def revoke_tokens(self, since):
436534
"""

stream_chat/client.py

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -449,6 +449,92 @@ def list_roles(self):
449449
"""
450450
return self.get("custom_role")
451451

452+
def create_segment(self, segment):
453+
"""
454+
Create a segment
455+
"""
456+
return self.post("segments", data={"segment": segment})
457+
458+
def get_segment(self, segment_id):
459+
"""
460+
Get a segment by id
461+
"""
462+
return self.get(f"segments/{segment_id}")
463+
464+
def list_segments(self, **params):
465+
"""
466+
List segments
467+
"""
468+
return self.get("segments", params)
469+
470+
def update_segment(self, segment_id, data):
471+
"""
472+
Update a segment by id
473+
"""
474+
return self.put(f"segments/{segment_id}", data={"segment": data})
475+
476+
def delete_segment(self, segment_id):
477+
"""
478+
Delete a segment by id
479+
"""
480+
return self.delete(f"segments/{segment_id}")
481+
482+
def create_campaign(self, campaign):
483+
"""
484+
Create a campaign
485+
"""
486+
return self.post("campaigns", data={"campaign": campaign})
487+
488+
def get_campaign(self, campaign_id):
489+
"""
490+
Get a campaign by id
491+
"""
492+
return self.get(f"campaigns/{campaign_id}")
493+
494+
def list_campaigns(self, **params):
495+
"""
496+
List campaigns
497+
"""
498+
return self.get("campaigns/", params)
499+
500+
def update_campaign(self, campaign_id, data):
501+
"""
502+
Update a campaign
503+
"""
504+
return self.put(f"campaigns/{campaign_id}", data={"campaign": data})
505+
506+
def delete_campaign(self, campaign_id):
507+
"""
508+
Delete a campaign by id
509+
"""
510+
return self.delete(f"campaigns/{campaign_id}")
511+
512+
def schedule_campaign(self, campaign_id, send_at):
513+
"""
514+
Schedule a campaign at given time
515+
"""
516+
return self.patch(
517+
f"campaigns/{campaign_id}/schedule", data={"send_at": send_at}
518+
)
519+
520+
def stop_campaign(self, campaign_id):
521+
"""
522+
Stop a in progress campaign
523+
"""
524+
return self.patch(f"campaigns/{campaign_id}/stop")
525+
526+
def resume_campaign(self, campaign_id):
527+
"""
528+
Resume a stopped campaign
529+
"""
530+
return self.patch(f"campaigns/{campaign_id}/resume")
531+
532+
def test_campaign(self, campaign_id, users):
533+
"""
534+
Trigger a test send of the given campaing to given users
535+
"""
536+
return self.post(f"campaigns/{campaign_id}/test", data={"users": users})
537+
452538
def revoke_tokens(self, before):
453539
"""
454540
Revokes tokens for an application

0 commit comments

Comments
 (0)