Incoming webhook with Python

Complete the steps described in the rest of this page, and in about fifteen minutes you'll have created a Google Chat app that sends messages to a Google Chat space. This quickstart uses a simple Python script that sends HTTP requests to an incoming webhook registered to a Google Chat space.


To run this quickstart, you need:

  • Python 2.6 or greater.
  • A Google account.
  • An existing Google Chat space.

Run the following command to install the library using pip:

pip install httplib2

Step 1: Register the incoming webhook

  1. Open Google Chat in your browser.
  2. Go to the space to which you want to add a app.
  3. From the menu at the top of the page, select Configure webhooks.
  4. Under Incoming Webhooks, click ADD WEBHOOK.
  5. Name the new webhook 'Quickstart Webhook' and click SAVE.
  6. Copy the URL listed next to your new webhook in the Webhook Url column.
  7. Click outside the dialog box to close.

Step 2: Create the Python script

Create a file named in your working directory and copy the following code:


from json import dumps

from httplib2 import Http

def main():
    """Hangouts Chat incoming webhook quickstart."""
    bot_message = {
        'text' : 'Hello from a Python script!'}

    message_headers = {'Content-Type': 'application/json; charset=UTF-8'}

    http_obj = Http()

    response = http_obj.request(


if __name__ == '__main__':

Be sure to replace the value for the url variable in the code snippet with the URL provided to you by Google Chat when you registered the incoming webhook. (If you need to find the URL again, go to the Google Chat space, select Configure webhooks, and then copy the URL associated with your new incoming webhook in the Webhook Url column.)

Step 3: Run the sample

Run the sample by running the following command from your working directory:

$ python3

Further reading


403: The caller does not have permission

Incoming webhooks for spaces will fail with this error if not all users in your domain have apps enabled. See the webhooks documentation for more information.