Hangouts Chat Helper
Description
Helper Python classes for handling and responding to Hangouts Chat events.
Installation
Install with pip:
pip install hangouts-helper
Message Components
This library contains several component classes to assist with constructing a Hangouts Chat message.
MessageSectionCardCardActionCardHeaderTextParagraphKeyValueImageButtonListImageButtonTextButton
Example
Using the Pizza Bot example from the official Hangouts Chat API documentation, this is how you'd construct the same message using the components above.
from hangouts_helper.message import (Message, Card, CardHeader, Section,
Image, KeyValue, ButtonList, TextButton)
message = Message()
message.add_card(
Card(
CardHeader(
title='Pizza Bot Customer Support',
subtitle='pizzabot@example.com',
image_url='https://goo.gl/aeDtrS'),
Section(
KeyValue(top_label='Order No.', content='12345'),
KeyValue(top_label='Status', content='In Delivery')),
Section(
'Location',
Image(image_url='https://maps.googleapis.com/...')),
Section(
ButtonList(
TextButton(text='OPEN ORDER').add_link(url='https://example.com/orders/...')))))
Calling message.output() produces a dict that can be converted to JSON... perfect for returning a response to a synchronous chat event, or sending a new message via the Hangouts Chat API.
{
"cards": [
{
"header": {
"imageUrl": "https://goo.gl/aeDtrS",
"subtitle": "pizzabot@example.com",
"title": "Pizza Bot Customer Support"
},
"sections": [
{
"widgets": [
{
"keyValue": {
"content": "12345",
"topLabel": "Order No."
}
},
{
"keyValue": {
"content": "In Delivery",
"topLabel": "Status"
}
}
]
},
{
"header": "Location",
"widgets": [
{
"image": {
"imageUrl": "https://maps.googleapis.com/..."
}
}
]
},
{
"widgets": [
{
"buttons": [
{
"textButton": {
"onClick": {
"openLink": {
"url": "https://example.com/orders/..."
}
},
"text": "OPEN ORDER"
}
}
]
}
]
}
]
}
]
}
Chat Handler
The library also includes a class to help with handling incoming chat events. The methods contained in HangoutsChatHandler correspond to the different event types you can expect to receive. Each method should return a message response.
Example
from enum import Enum
from hangouts_helper.handler import HangoutsChatHandler, SpaceType
from hangouts_helper.message import Message
class ActionMethod(Enum):
BUTTON_CLICKED = 'BUTTON_CLICKED'
class MyHangoutsChatHandler(HangoutsChatHandler):
ActionMethod = ActionMethod
def handle_added_to_space(self, space_type, event):
if space_type == SpaceType.DM:
return Message(text="Thanks for DM'ing me!")
elif space_type == SpaceType.ROOM:
return Message(text="Thanks adding me to your room!")
def handle_message(self, message, event):
return Message(text="Thanks for your message!")
def handle_card_clicked(self, action_method, action_parameters, event):
if action_method == ActionMethod.BUTTON_CLICKED:
return Message(text="I've processed your button click!")
def handle_removed_from_space(self, event):
pass
A Flask app that repsonds to Hangouts Chat events might look like:
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/')
def bot_handler():
event = request.json
handler = MyHangoutsChatHandler()
response_message = handler.handle_event(event)
return jsonify(response_message.output())
TODO
- Add examples for each component type in README
- Document and add examples for adding OnClick events to widgets
- Document Enums (
SpaceType,EventType,ActionMethod,Icon,ImageStyle,ResponseType) - Document usage scenarios for
HangoutsChatHandler - Add methods for interacting with Hangouts Chat API to
HangoutsChatHandler
Metadata
Release files for hangouts-helper 19.12.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| hangouts-helper-19.12.0.tar.gz | 11.8 kB | Without provenance | Details for hangouts-helper-19.12.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| hangouts_helper-19.12.0-py2.py3-none-any.whl | Python 3, Python 2 | none | any | Details for hangouts_helper-19.12.0-py2.py3-none-any.whl |
Total release size: 20.5 kB
Release files / hangouts-helper-19.12.0.tar.gz
| Download URL | hangouts-helper-19.12.0.tar.gz |
|---|---|
| Size | 11.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ac2165d2fab4bdce6643e463d5b98e82f3a2264442033b77e348f415ea92b2c8
|
|
BLAKE2b-256 checksum How to use checksums |
151f68a094c4eea7a3b5b7cb1be72a9ed610fac9b6a3f43832ff563e0dd2ec19
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/42.0.2 requests-toolbelt/0.9.1 tqdm/4.41.0 CPython/3.6.7
|
Release files / hangouts_helper-19.12.0-py2.py3-none-any.whl
| Download URL | hangouts_helper-19.12.0-py2.py3-none-any.whl |
|---|---|
| Size | 8.7 kB |
| Tags | Python 2 Python 3 |
|
SHA-256 checksum How to use checksums |
885c3e5f256c37d49bb0063c735cc31187b32268b020d99e49930b0e51f5c684
|
|
BLAKE2b-256 checksum How to use checksums |
f8322f133c8a5fce4760e0d68f655446184a597d96b47071c99a1363097b4f2a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/42.0.2 requests-toolbelt/0.9.1 tqdm/4.41.0 CPython/3.6.7
|
Security for hangouts-helper 19.12.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.