diff --git a/temba_client/exceptions.py b/temba_client/exceptions.py
index 253903c..95594ba 100644
--- a/temba_client/exceptions.py
+++ b/temba_client/exceptions.py
@@ -56,7 +56,8 @@ class TembaHttpError(TembaException):
 
 
 class TembaSerializationException(TembaException):
-    pass
+    def __init__(self, message):
+        self.message = message
 
 
 class TembaMultipleResultsError(TembaException):

TembaSerializationException always has the message <exception str() failed>
Hello,

I was using the `TembaObject.deserialize()` method to deserialize archived `Run` objects in my project (https://github.com/JustFixNYC/tenants2/pull/902) and noticed that an unusual exception was occurring.  It's easily reproducible in the REPL:

```
>>> from temba_client.serialization import TembaSerializationException
>>>
>>> raise TembaSerializationException('boop')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
temba_client.exceptions.TembaSerializationException: <exception str() failed>
```

The actual cause of `str()` failing can be found via:

```
>>> str(TembaSerializationException('boop'))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/venv/lib/python3.8/site-packages/temba_client/exceptions.py", line 3, in __str__
    return self.message
AttributeError: 'TembaSerializationException' object has no attribute 'message'
```

So it looks like `.message` isn't being set in the constructor for `TembaSerializationException`?  For now I'm just catching the exceptions and logging their `args[0]` attribute, but fixing these so they have meaningful error messages would be helpful.

diff --git a/temba_client/tests.py b/temba_client/tests.py
index 35578a2..1da8715 100644
--- a/temba_client/tests.py
+++ b/temba_client/tests.py
@@ -106,6 +106,12 @@ class TestType(TembaObject):
     meh = ObjectDictField(item_class=TestSubType)
 
 
+class TembaSerializationExceptionTest(TembaTest):
+    def test_str_works(self):
+        err = TembaSerializationException("boop")
+        self.assertEqual(str(err), "boop")
+
+
 class FieldsTest(TembaTest):
     def test_boolean(self):
         field = BooleanField()

pip install -e .
parse_log_pytest
requirements.txt
nose coverage pytest
3.9
requirements/base.txt requirements/tests.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
certifi==2025.1.31
charset-normalizer==3.4.1
coverage==7.8.0
exceptiongroup==1.2.2
flake8==7.2.0
idna==3.10
iniconfig==2.1.0
iso8601==2.1.0
mccabe==0.7.0
nose==1.3.7
packaging==24.2
pluggy==1.5.0
pycodestyle==2.13.0
pyflakes==3.3.1
pytest==8.3.5
pytz==2025.2
-e git+https://github.com/rapidpro/rapidpro-python.git@5872006fa0f407bd2a859b07b1cb6d8d9bb11768#egg=rapidpro_python
requests==2.32.3
tomli==2.2.1
urllib3==2.3.0

name: rapidpro-python
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=3.0.16=h5eee18b_0
  - pip=25.0=py39h06a4308_0
  - python=3.9.21=he870216_1
  - readline=8.2=h5eee18b_0
  - setuptools=75.8.0=py39h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tzdata=2025a=h04d1e81_0
  - wheel=0.45.1=py39h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - certifi==2025.1.31
      - charset-normalizer==3.4.1
      - coverage==7.8.0
      - exceptiongroup==1.2.2
      - flake8==7.2.0
      - idna==3.10
      - iniconfig==2.1.0
      - iso8601==2.1.0
      - mccabe==0.7.0
      - nose==1.3.7
      - packaging==24.2
      - pluggy==1.5.0
      - pycodestyle==2.13.0
      - pyflakes==3.3.1
      - pytest==8.3.5
      - pytz==2025.2
      - requests==2.32.3
      - tomli==2.2.1
      - urllib3==2.3.0
prefix: /opt/conda/envs/rapidpro-python

temba_client/tests.py::TembaSerializationExceptionTest::test_str_works
temba_client/tests.py::UtilsTest::test_format_iso8601 temba_client/tests.py::UtilsTest::test_parse_iso8601 temba_client/tests.py::FieldsTest::test_boolean temba_client/tests.py::FieldsTest::test_integer temba_client/tests.py::FieldsTest::test_object_dict temba_client/tests.py::FieldsTest::test_object_list temba_client/tests.py::TembaObjectTest::test_create temba_client/tests.py::TembaObjectTest::test_deserialize temba_client/tests.py::TembaObjectTest::test_serialize temba_client/tests.py::BaseClientTest::test_init
temba_client/exceptions.py
temba_client/exceptions.py