Отправьте простое сообщение в чат Google Hangouts с помощью webhook - PullRequest
0 голосов
/ 28 мая 2018

Я настроил webhook в чате в моем чате Hangouts Google .

Я могу успешно запустить их пример кода , который генерирует сообщениеот бота, связанного с webhook в чате:

from httplib2 import Http
from json import dumps

#
# Hangouts Chat incoming webhook quickstart
#
def main():
    url = '<INCOMING-WEBHOOK-URL>'
    bot_message = {
        'text' : 'Hello from Python script!'}

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

    http_obj = Http()

    response = http_obj.request(
        uri=url,
        method='POST',
        headers=message_headers,
        body=dumps(bot_message),
    )

    print(response)

if __name__ == '__main__':
    main()

Однако я хочу отправить это сообщение с использованием стандартных библиотечных пакетов, таких как urllib .

Нокогда я использую urllib и запускаю приведенный ниже код, я получаю urllib.error.HTTPError: HTTP Error 400: Bad Request.Почему я получаю эту ошибку?

import json
import urllib.parse
import urllib.request


def main():
    # python 3.6

    url = '<INCOMING-WEBHOOK-URL>'
    bot_message = {'text': 'Hello from Python script!'}
    message_headers = {'Content-Type': 'application/json; charset=UTF-8'}

    url_encoded = urllib.parse.urlencode(bot_message)
    byte_encoded = url_encoded.encode('utf-8')
    req = urllib.request.Request(url=url, data=byte_encoded, headers=message_headers)
    response = urllib.request.urlopen(req)
    print(response.read())


if __name__ == '__main__':
    main()

1 Ответ

0 голосов
/ 30 мая 2018

Разница заключается в формате тела.В первой версии вы создаете дамп в json, а во второй - его код.

замените

url_encoded = urllib.parse.urlencode(bot_message)
byte_encoded = url_encoded.encode('utf-8')

на

byte_encoded = json.dumps(bot_message).encode('utf-8')
...