使用 webhook 向 Google 个环聊聊天机器人发送简单消息
Send simple message to Google Hangouts Chat bot using webhook
我在 Google Hangouts Chat 的聊天室中设置了 webhook。
我可以成功 运行 他们的 example code,它从聊天中与 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()
区别在于正文格式。在第一个版本中,您转储到 json,而在第二个版本中,您对其进行 urlencode。
替换
url_encoded = urllib.parse.urlencode(bot_message)
byte_encoded = url_encoded.encode('utf-8')
和
byte_encoded = json.dumps(bot_message).encode('utf-8')
我在 Google Hangouts Chat 的聊天室中设置了 webhook。
我可以成功 运行 他们的 example code,它从聊天中与 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()
区别在于正文格式。在第一个版本中,您转储到 json,而在第二个版本中,您对其进行 urlencode。
替换
url_encoded = urllib.parse.urlencode(bot_message)
byte_encoded = url_encoded.encode('utf-8')
和
byte_encoded = json.dumps(bot_message).encode('utf-8')