Skip to content

Commit

Permalink
[webhook] handle error on an interactive message without data (happen…
Browse files Browse the repository at this point in the history
…ed when an interactive message tries to be sent again. e.g. when WhatsApp Web reconnects to network)
  • Loading branch information
david-lev committed Nov 27, 2023
1 parent 7bda367 commit 6927107
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 5 deletions.
14 changes: 9 additions & 5 deletions pywa/webhook.py
Original file line number Diff line number Diff line change
Expand Up @@ -176,15 +176,19 @@ def _get_handler(self: WhatsApp, update: dict) -> type[Handler] | None:
if "messages" in value:
match value["messages"][0]["type"]:
case MessageType.INTERACTIVE:
if (
_type := value["messages"][0]["interactive"]["type"]
) == "button_reply": # button
try:
interactive_type = value["messages"][0]["interactive"][
"type"
]
except KeyError: # value with errors, when a user tries to send the interactive msg again
return MessageHandler
if interactive_type == "button_reply": # button
return CallbackButtonHandler
elif _type == "list_reply": # selection
elif interactive_type == "list_reply": # selection
return CallbackSelectionHandler
_logger.warning(
"PyWa Webhook: Unknown interactive message type: %s"
% _type
% interactive_type
)
case MessageType.BUTTON: # button (quick reply from template)
return CallbackButtonHandler
Expand Down
50 changes: 50 additions & 0 deletions tests/data/18.0/message.json
Original file line number Diff line number Diff line change
Expand Up @@ -814,5 +814,55 @@
]
}
]
},
"interactive_message_with_err": {
"object": "whatsapp_business_account",
"entry": [
{
"id": "1234567890987654321",
"changes": [
{
"value": {
"messaging_product": "whatsapp",
"metadata": {
"display_phone_number": "972123456789",
"phone_number_id": "1122334455667"
},
"contacts": [
{
"profile": {
"name": "Test Name"
},
"wa_id": "972987654321"
}
],
"messages": [
{
"context": {
"from": "972123456789",
"id": "wamid.gvwegfretge=="
},
"from": "972987654321",
"id": "wamid.wegrchytvwcggt=",
"timestamp": "1700505494",
"type": "interactive"
}
],
"errors": [
{
"code": 131000,
"title": "Something went wrong",
"message": "Something went wrong",
"error_data": {
"details": "Unsupported webhook payload"
}
}
]
},
"field": "messages"
}
]
}
]
}
}
3 changes: 3 additions & 0 deletions tests/test_updates.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,9 @@
"reply": [lambda m: m.is_reply],
"forwarded": [lambda m: m.forwarded],
"forwarded_many_times": [lambda m: m.forwarded_many_times],
"interactive_message_with_err": [
lambda m: m.type == MessageType.INTERACTIVE and m.error is not None
],
},
("callback_button", CallbackButton): {
"button": [lambda b: b.type == MessageType.INTERACTIVE],
Expand Down

0 comments on commit 6927107

Please sign in to comment.