juftin/camply

Generic webhook notification

zdwolfe opened this issue ยท 6 comments

Is your feature request related to a problem? Please describe.
As the administrator of an application in the local travel space, I want camply to send a webhook (HTTP/POST) to a configuration-specified URL with configuration-specified headers and a JSON representation of the campsite so my application can programmatically handle the notification.

Describe the solution you'd like
When WEBHOOK_URL, WEBHOOK_HEADERS, and --notifications webhook are specified, the notification should be POST'ed to the WEBHOOK_URL with the WEBHOOK_HEADERS. The request body should be JSON with machine-readable fields (example, dates should be epoch timestamps or other common time format).

Something like:

{
  "campsite": {
    "campsite_id": "1234",
    "booking_date": 1694499820,
    "booking_url": "http://blahblah",
    "...": "etc"
  }
}

and

WEBHOOK_URL="http://foobar" \
  WEBHOOK_HEADERS=$(echo '{"Content-Type": "application/json", "x-api-key": "super-secret"}' | base64) \
  camply campsites --rec-area 12345

Describe alternatives you've considered

The open Discord PR is close, as is Slack, but the fields are human friendly or formatted, not generically machine-readable.

Additional context
If this sounds reasonable to you, I am willing to contribute a PR.

juftin commented

Pydantic made this super easy to dump the camply.containers.AvailableCampsite objects into JSON:

def send_message(
self, message: List[Union[AvailableCampsite, Dict[str, Any]]], **kwargs
) -> requests.Response:
"""
Send a message via Webhook
Parameters
----------
message: str
Returns
-------
requests.Response
"""
json_message = json.dumps(message, default=pydantic_encoder)
resp = self.session.post(url=self.webhook_url, json=json_message)
return resp

Thanks! I left minor feedback in #296 (review)

Love this idea!

juftin commented

๐ŸŽ‰ This issue has been resolved in version 0.30.0 ๐ŸŽ‰

The release is available on GitHub release

Your semantic-release bot ๐Ÿ“ฆ๐Ÿš€

juftin commented