google-api - 如何使用 python 向 google hangouts 发送消息?

标签 google-api hangouts-chat

我正在尝试为 google hangouts 创建一个简单的“聊天机器人”,它可以在聊天中发送常规消息。我找到了 this documentation但我发现它非常复杂。

它包含一个“完整示例”,但我不确定如何找到现有谷歌环聊聊天的“空间”ID。这无处解释。如何找到现有 Google 聊天的“空间”ID?

此外:是否有某个地方的SIMPLE (!!!) 文档如何简单地向现有聊天发布消息?

最佳答案

回答:

您可以使用 spaces.list获取机器人所属的空间列表,后跟 spaces.get获取有关该空间的更多信息,或者设置特定于房间的 Webhook。

附加信息:

  • 要在没有响应触发器的情况下向房间发送消息,您必须使用 service account
  • 可以找到 Bot 发起的消息文档 here .

重要说明: 如果您拥有 Google Workspace 帐户,则只能使用 Google Hangouts Chat API - 它不能单独与 Gmail 一起使用。第二种解决方案使用 Webhook,需要访问 https://chat.google.com仅适用于 Google Workspace 网域。不幸的是,使用消费者 @gmail.com 帐户根本不可能。

使用 Hangouts Chat API:

设置服务帐户后as per Step 1 on this page ,您可以从 Google Cloud 项目 UI 下载服务帐户的凭据,方法是单击服务帐户名称右侧的 按钮,然后按照 Create 键 按钮并选择 JSON 作为 key 类型。 请务必妥善保存此文件,因为此 key 只有一份副本。

下载此 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()))

要发出 spaces.list 请求,您可以使用这个新建的 chat_service,并从响应中提取 hte 空间列表:

def extract(n):
    return n['name']

spaces_list = chat_service.spaces().list().execute()
all_spaces = map(extract, spaces_list['spaces'])

然后您可以使用这些空格之一从 python 程序发送消息:

response = chat_service.spaces().messages().create(
    parent=all_spaces[0],
    body={'text': 'Test message'}).execute()
print(response)

要记住的事情:

  • 确保为您的项目启用 Hangouts Chat API https://console.cloud.google.com
  • 启用后,确保为机器人配置了名称、 Logo 和描述。
  • 还必须设置机器人的连接设置;方法不是那么重要;例如,您可以选择 Apps Script project 并输入空部署项目的部署 ID。

使用 Webhook:

您可以为特定聊天设置网络钩子(Hook),而不是直接使用 API,并使用硬编码 URL,您可以从外部脚本向房间发送消息。

完整步骤载于 this page但我也会在这里进行介绍。

转到您希望发送消息的房间 https://chat.google.com ,然后从房间名称旁边的下拉菜单中选择 Manage Webhooks

为您的机器人输入名称和可选头像,然后按 SAVE。这将为您提供一个 webhook URL 以在您的 python 脚本中使用。

在本地,确保您的环境中安装了 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()

确保将 webhook-url 字符串替换为上一步中聊天 UI 中提供的 webhook。

现在您只需保存文件并运行它 - 这将自动向上述聊天空间发送一条消息:

enter image description here

引用资料:

关于google-api - 如何使用 python 向 google hangouts 发送消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65641069/

相关文章:

c - Google 日历推送通知 channel 创建

jquery-mobile - Google Transit API 巴士停靠在路线上不可见且在 map 上已禁用

google-apps-script - 使用 Google Chat API 和 Google Apps Scripts 制作类似 Slack 的消息提醒

hangouts-chat - 使用个人 gmail 帐户的 hangout chat api

python - 使用 google.appengine.api.mail.send_mail 发送电子邮件时如何显示发件人姓名而不是电子邮件地址

php - 如何使用google api通过ip地址获取国家名称

javascript - 检测关闭 "Request for Permission"窗口(谷歌账户登录)

hangouts-api - 已编辑和已删除的环聊聊天消息不会发送给机器人

chat - 环聊聊天 : get all messages in a thread