Skip to content

Commit 024e229

Browse files
author
bird-release[bot]
committed
Release v0.58.0 (sdk-python/v0.58.0)
1 parent 549ecf3 commit 024e229

15 files changed

Lines changed: 1311 additions & 117 deletions

‎CHANGELOG.md‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# Changelog
22

3+
## 0.58.0
4+
5+
- Add `client.whatsapp.templates` methods to list and get WhatsApp templates, their versions, and each version's languages.
6+
- **Breaking:** a WhatsApp send of a template you authored now picks its language the way that template says to, so a call that already worked can resolve to a different language or stop resolving at all: omitting `language` sends the template's `default_language` rather than the sole approved language, and a language the template does not stock is served by the closest match or refused according to the template's `on_missing_language` setting. Check that each template's `default_language` is one WhatsApp approved, and handle three refusals new to those sends: `E15007` for a language tag WhatsApp does not support, `E15077` when the template cannot send in the language you asked for, and `E15076` when the template sets `language_source_required` and your send names no language. A send served by a language other than the one you asked for is priced at that language's category, because WhatsApp categorizes each language separately, so sends already made under a template WhatsApp recategorized are worth re-checking.
7+
- Fields with custom examples now enforce their declared validation rules, including template `slug` and `language` values and WhatsApp `in_reply_to_message_id`.
8+
39
## 0.57.0
410

511
- A sending domain's DNS record now sets `error` while its status is still `pending`, reporting that the record published in DNS does not match the expected value.

‎examples/examples.gen.py‎

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1011,5 +1011,41 @@ async def _ex_151() -> None:
10111011

10121012

10131013
async def _ex_152() -> None:
1014+
tpl = client.whatsapp.templates.get("bird_otp")
1015+
print(tpl.default_language, tpl.available_languages)
1016+
1017+
1018+
async def _ex_153() -> None:
1019+
for tpl in client.whatsapp.templates.list():
1020+
print(tpl.slug, tpl.status)
1021+
1022+
1023+
async def _ex_154() -> None:
1024+
version = client.whatsapp.templates.versions.get("bird_otp", "wav_01ky4x8e4genzb7way45txfkm1")
1025+
print(version.id, list(version.languages))
1026+
1027+
1028+
async def _ex_155() -> None:
1029+
language = client.whatsapp.templates.versions.languages.get(
1030+
"bird_otp", "wav_01ky4x8e4genzb7way45txfkm1", "nl-BE"
1031+
)
1032+
for component in language.components:
1033+
print(component.type)
1034+
1035+
1036+
async def _ex_156() -> None:
1037+
languages = client.whatsapp.templates.versions.languages.list(
1038+
"bird_otp", "wav_01ky4x8e4genzb7way45txfkm1"
1039+
)
1040+
for language in languages.data:
1041+
print(language.language, language.status)
1042+
1043+
1044+
async def _ex_157() -> None:
1045+
for version in client.whatsapp.templates.versions.list("bird_otp"):
1046+
print(version.id, version.version_number)
1047+
1048+
1049+
async def _ex_158() -> None:
10141050
workspace = client.workspace.get()
10151051
print(workspace.id, workspace.name)

‎examples/reference/whatsapp.py‎

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,39 @@ def whatsapp_list_events() -> None:
2626
events = client.whatsapp.list_events("wa_abc123")
2727
for event in events.data:
2828
print(event.type, event.occurred_at)
29+
30+
31+
def whatsapp_templates_list() -> None:
32+
for tpl in client.whatsapp.templates.list():
33+
print(tpl.slug, tpl.status)
34+
35+
36+
def whatsapp_templates_get() -> None:
37+
tpl = client.whatsapp.templates.get("bird_otp")
38+
print(tpl.default_language, tpl.available_languages)
39+
40+
41+
def whatsapp_templates_versions_list() -> None:
42+
for version in client.whatsapp.templates.versions.list("bird_otp"):
43+
print(version.id, version.version_number)
44+
45+
46+
def whatsapp_templates_versions_get() -> None:
47+
version = client.whatsapp.templates.versions.get("bird_otp", "wav_01ky4x8e4genzb7way45txfkm1")
48+
print(version.id, list(version.languages))
49+
50+
51+
def whatsapp_templates_versions_languages_list() -> None:
52+
languages = client.whatsapp.templates.versions.languages.list(
53+
"bird_otp", "wav_01ky4x8e4genzb7way45txfkm1"
54+
)
55+
for language in languages.data:
56+
print(language.language, language.status)
57+
58+
59+
def whatsapp_templates_versions_languages_get() -> None:
60+
language = client.whatsapp.templates.versions.languages.get(
61+
"bird_otp", "wav_01ky4x8e4genzb7way45txfkm1", "nl-BE"
62+
)
63+
for component in language.components:
64+
print(component.type)

‎scripts/surface_ops.py‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,12 @@
5353
"/v1/whatsapp/messages/{message_id}": {"get"},
5454
"/v1/whatsapp/messages/{message_id}/events": {"get"},
5555
"/v1/whatsapp/messages/{message_id}/media/{media_id}": {"get"},
56+
"/v1/whatsapp/templates": {"get"},
57+
"/v1/whatsapp/templates/{template_ref}": {"get"},
58+
"/v1/whatsapp/templates/{template_ref}/versions": {"get"},
59+
"/v1/whatsapp/templates/{template_ref}/versions/{version_id}": {"get"},
60+
"/v1/whatsapp/templates/{template_ref}/versions/{version_id}/languages": {"get"},
61+
"/v1/whatsapp/templates/{template_ref}/versions/{version_id}/languages/{language}": {"get"},
5662
"/v1/voice/calls": {"get"},
5763
"/v1/voice/calls/{call_id}": {"get"},
5864
"/v1/verify/verifications": {"post"},

‎src/bird/__init__.py‎

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,12 @@
8989
WhatsAppEvent,
9090
WhatsAppEventList,
9191
WhatsAppMessage,
92+
WhatsAppTemplate,
93+
WhatsAppTemplateLanguage,
94+
WhatsAppTemplateLanguageList,
95+
WhatsAppTemplateList,
96+
WhatsAppTemplateVersion,
97+
WhatsAppTemplateVersionSummary,
9298
)
9399
from bird.resources.audiences_gen import (
94100
AudienceAddContactsParams,
@@ -168,7 +174,10 @@
168174
WhatsAppInteractiveReplyType,
169175
WhatsAppInteractiveType,
170176
WhatsAppTemplateCategory,
177+
WhatsAppTemplateLanguageStatus,
171178
WhatsAppTemplateParameterType,
179+
WhatsAppTemplateQualityScore,
180+
WhatsAppTemplateRejectionCategory,
172181
)
173182
from bird.resources.realtime import ChannelAuthorization
174183
from bird.resources.webhooks import GenericWebhookEvent
@@ -300,6 +309,12 @@
300309
"WhatsAppMessage",
301310
"WhatsAppEvent",
302311
"WhatsAppEventList",
312+
"WhatsAppTemplate",
313+
"WhatsAppTemplateList",
314+
"WhatsAppTemplateVersion",
315+
"WhatsAppTemplateVersionSummary",
316+
"WhatsAppTemplateLanguage",
317+
"WhatsAppTemplateLanguageList",
303318
"VerifyVerificationsCreateParams",
304319
"VerifyVerificationsCheckParams",
305320
"VerifyVerificationsNextChannelParams",
@@ -341,7 +356,10 @@
341356
"WhatsAppInteractiveReplyType",
342357
"WhatsAppInteractiveType",
343358
"WhatsAppTemplateCategory",
359+
"WhatsAppTemplateLanguageStatus",
344360
"WhatsAppTemplateParameterType",
361+
"WhatsAppTemplateQualityScore",
362+
"WhatsAppTemplateRejectionCategory",
345363
"BirdError",
346364
"APIError",
347365
"APIStatusError",

0 commit comments

Comments
 (0)