:py:mod:`airflow.providers.telegram.hooks.telegram`
===================================================

.. py:module:: airflow.providers.telegram.hooks.telegram

.. autoapi-nested-parse::

   Hook for Telegram



Module Contents
---------------

Classes
~~~~~~~

.. autoapisummary::

   airflow.providers.telegram.hooks.telegram.TelegramHook




.. py:class:: TelegramHook(telegram_conn_id = None, token = None, chat_id = None)

   Bases: :py:obj:`airflow.hooks.base.BaseHook`

   This hook allows you to post messages to Telegram using the telegram python-telegram-bot library.

   The library can be found here: https://github.com/python-telegram-bot/python-telegram-bot
   It accepts both telegram bot API token directly or connection that has telegram bot API token.
   If both supplied, token parameter will be given precedence, otherwise 'password' field in the connection
   from telegram_conn_id will be used.
   chat_id can also be provided in the connection using 'host' field in connection.
   Following is the details of a telegram_connection:
   name: 'telegram-connection-name'
   conn_type: 'http'
   password: 'TELEGRAM_TOKEN'
   host: 'chat_id' (optional)
   Examples:
   .. code-block:: python

       # Create hook
       telegram_hook = TelegramHook(telegram_conn_id="telegram_default")
       # or telegram_hook = TelegramHook(telegram_conn_id='telegram_default', chat_id='-1xxx')
       # or telegram_hook = TelegramHook(token='xxx:xxx', chat_id='-1xxx')

       # Call method from telegram bot client
       telegram_hook.send_message(None, {"text": "message", "chat_id": "-1xxx"})
       # or telegram_hook.send_message(None', {"text": "message"})

   :param telegram_conn_id: connection that optionally has Telegram API token in the password field
   :param token: optional telegram API token
   :param chat_id: optional chat_id of the telegram chat/channel/group

   .. py:method:: get_conn(self)

      Returns the telegram bot client

      :return: telegram bot client
      :rtype: telegram.bot.Bot


   .. py:method:: send_message(self, api_params)

      Sends the message to a telegram channel or chat.

      :param api_params: params for telegram_instance.send_message. It can also be used to override chat_id



