Sending messages and attachments

In the previous section we explored how to retrieve existing chats, or create new ones.

Now we can see how to send messages and attachments through the chat.post() method.

Sending a text message

Sending a text message is as easy as invoking chat.post() with a string message argument:

from teamwire_api import Connection

async def send_message(connection):
    # find chats with title 'test'
    chats = await connection.chats.get_by_title('test')

    if len(chats) == 0:
        print('no chats found')
        return

    # get the last matching chat
    chat = chats[-1]

    # send text message "hello"
    await chat.post(message='hello')

with Connection() as connection:
    connection.exec_async(send_message(connection))

Sending an attachment

The chat.post() method can also be invoked with an attachments argument, which can be either a list of Attachment objects, or an Attachments object.

In the general case, we should first create a new Attachments object and add attachments to it, then we can send them in the chat.

The following example shows how to send a location attachment:

from teamwire_api import Connection

async def send_message(connection):
    # get the target chat
    chat = await connection.chats.get_by_thread_id('7MQKchz6wsSzmWTVnppGAc')

    if not chat:
        print('Chat not found')

    attachments = chat.new_attachments()
    await attachments.add_location(
        name='Munich',
        lat=48.1377183,
        lon=11.5774404
    )

    # send the attachment
    await chat.post(attachments=attachments)

with Connection() as connection:
    connection.exec_async(send_message(connection))

Note

If multiple attachments are added to the Attachments object, these will be sent in separate messages by the SDK when invoking chat.post()

Sending an image file

Sending images or other kinds of attachments based on binary content is similar. We can for example send a PNG image from a file:

from teamwire_api import Connection

async def send_message(connection):
    # get the target chat
    chat = await connection.chats.get_by_thread_id('7MQKchz6wsSzmWTVnppGAc')

    if not chat:
        print('Chat not found')

    attachments = chat.new_attachments()
    # add image attachment
    await attachments.add_gallery('image.png')

    # send
    await chat.post(attachments=attachments)

with Connection() as connection:
    connection.exec_async(send_message(connection))

Sending a base64 encoded image

Besides loading asset based attachments from file, attachments can also be created by directly passing a byte array to the add_*() methods (where * stands for 'gallery', 'sound', 'video' and 'file')

from teamwire_api import Connection
import base64

async def send_message(connection):
    # get the target chat
    chat = await connection.chats.get_by_thread_id('7MQKchz6wsSzmWTVnppGAc')

    if not chat:
        print('Chat not found')

    attachments = chat.new_attachments()

    # image data encoded as a base64 string
    base64_img = "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"
    # convert the string to bytes
    b64_bytes = base64_img.encode('utf-8')
    # decode the base64 content into a byte array
    image_data = base64.decodebytes(b64_bytes)

    await attachments.add_gallery(image_data)

    await chat.post(attachments=attachments)

with Connection() as connection:
    connection.exec_async(send_message(connection))