Ale*_*lex 1 google-api hangouts-chat
我正在尝试为谷歌环聊创建一个简单的“聊天机器人”,在聊天中发送常规消息。我找到了这个文档,但我发现它非常复杂。
它包含一个“完整示例”,但我不确定如何为现有的谷歌环聊找到“空间”ID。这是无处解释的。如何找到现有谷歌聊天的“空间”ID?
此外:是否有一个简单的(!!!) 文档如何简单地向现有聊天发布消息?
您可以使用spaces.list获取机器人所属空间的列表,然后spaces.get获取有关空间的其他信息,或者设置特定于房间的 Webhook。
重要说明: 如果您拥有 Google Workspace 帐户,则只能使用 Google Hangouts Chat API - 它不能单独用于 Gmail。第二种解决方案使用 Webhook,需要访问https://chat.google.com,该网站仅适用于 Google Workspace 域。不幸的是,使用消费者@gmail.com帐户根本不可能做到这一点。
按照此页面上的第 1 步设置服务帐户后,您可以从 Google Cloud Project UI 下载服务帐户的凭据,方法是单击?服务帐户名称右侧的按钮,然后单击Create key按钮并选择 JSON 作为密钥类型。请确保妥善保存此文件,因为此密钥只有一个副本。
下载此 JSON 文件后,您可以在 Python 代码中将其用作设置服务对象时的凭据:
from httplib2 import Http
from oauth2client.service_account import ServiceAccountCredentials
from apiclient.discovery import build
scopes = 'https://www.googleapis.com/auth/chat.bot'
credentials = ServiceAccountCredentials.from_json_keyfile_name(
'credentials.json', scopes)
chat_service = build('chat', 'v1', http=credentials.authorize(Http()))
Run Code Online (Sandbox Code Playgroud)
要发出spaces.list请求,您可以使用这个新构建的chat_service,并从响应中提取空格列表:
def extract(n):
return n['name']
spaces_list = chat_service.spaces().list().execute()
all_spaces = map(extract, spaces_list['spaces'])
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用这些空格之一从 python 程序发送消息:
response = chat_service.spaces().messages().create(
parent=all_spaces[0],
body={'text': 'Test message'}).execute()
print(response)
Run Code Online (Sandbox Code Playgroud)
Apps Script project空的已部署项目选择并输入部署 ID。您可以不直接使用 API,而是为特定聊天设置 webhook,并使用硬编码 URL,您可以从外部脚本向房间发送消息。
此页面上列出了完整的步骤,但我也会在这里进行介绍。
在https://chat.google.com 上转到您要向其发送消息的房间,然后从房间名称旁边的下拉菜单中选择Manage Webhooks。
为您的机器人输入名称和可选头像,然后按SAVE。这将为您提供一个在 Python 脚本中使用的 webhook URL。
在本地,请确保您已httplib2安装在您的环境中,并将以下脚本复制到一个新.py文件中:
from json import dumps
from httplib2 import Http
def main():
"""Hangouts Chat incoming webhook quickstart."""
url = 'webhook-url'
bot_message = {
'text' : 'Hello from a 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()
Run Code Online (Sandbox Code Playgroud)
Manking 确保webhook-url使用上一步中聊天 UI 中提供的 webhook替换字符串。
现在您可以保存文件并运行它 - 这将自动向上述聊天空间发送一条消息:
我希望这对你有帮助!
| 归档时间: |
|
| 查看次数: |
3057 次 |
| 最近记录: |