|
21 | 21 | if TYPE_CHECKING: |
22 | 22 | from .client import WhatsApp |
23 | 23 |
|
24 | | - |
25 | 24 | _MESSAGE_TYPES: dict[MessageType, type[handlers.Handler]] = { |
26 | 25 | MessageType.BUTTON: handlers.CallbackButtonHandler, |
27 | 26 | MessageType.EDIT: handlers.EditedMessageHandler, |
|
33 | 32 | } |
34 | 33 | _SYSTEM_TYPES: dict[SystemType | str, type[handlers.Handler]] = { |
35 | 34 | SystemType.USER_CHANGED_NUMBER: handlers.PhoneNumberChangeHandler, |
36 | | - SystemType.USER_CHANGED_USER_ID: handlers.PhoneNumberChangeHandler, # That's the new system message type for phone number changes, according to BSUID documentation |
37 | | - "customer_changed_number": handlers.PhoneNumberChangeHandler, # https://developers.facebook.com/docs/whatsapp/cloud-api/webhooks/components#messages-object |
| 35 | + SystemType.USER_CHANGED_USER_ID: handlers.PhoneNumberChangeHandler, |
| 36 | + # That's the new system message type for phone number changes, according to BSUID documentation |
| 37 | + "customer_changed_number": handlers.PhoneNumberChangeHandler, |
| 38 | + # https://developers.facebook.com/docs/whatsapp/cloud-api/webhooks/components#messages-object |
38 | 39 | SystemType.CUSTOMER_IDENTITY_CHANGED: handlers.IdentityChangeHandler, |
39 | 40 | } |
40 | 41 | _INTERACTIVE_TYPES: dict[str, type[handlers.Handler]] = { |
41 | 42 | "button_reply": handlers.CallbackButtonHandler, |
42 | 43 | "list_reply": handlers.CallbackSelectionHandler, |
43 | | - "nfm_reply": handlers.FlowCompletionHandler, |
44 | 44 | "call_permission_reply": handlers.CallPermissionUpdateHandler, |
45 | 45 | } |
| 46 | +_NFM_REPLY_TYPES: dict[str, type[handlers.Handler]] = { |
| 47 | + "flow": handlers.FlowCompletionHandler, |
| 48 | +} |
46 | 49 | _CALL_EVENTS: dict[str, type[handlers.Handler]] = { |
47 | 50 | "connect": handlers.CallConnectHandler, |
48 | 51 | "terminate": handlers.CallTerminateHandler, |
49 | 52 | } |
50 | 53 |
|
51 | | - |
52 | 54 | _logger = logging.getLogger(__name__) |
53 | 55 |
|
54 | 56 | MAX_PROCESSED_UPDATES = 100_000 |
@@ -567,12 +569,14 @@ def _handle_messages_field( |
567 | 569 | if msg_type == MessageType.INTERACTIVE: |
568 | 570 | try: |
569 | 571 | interactive_type = value["messages"][0]["interactive"]["type"] |
570 | | - except ( |
571 | | - KeyError |
572 | | - ): # value with errors, when a user tries to send the interactive msg again |
| 572 | + except KeyError: # value has `errors`, when a user tries to send the interactive msg again |
573 | 573 | return handlers.MessageHandler |
574 | 574 | if (handler := _INTERACTIVE_TYPES.get(interactive_type)) is not None: |
575 | 575 | return handler |
| 576 | + if interactive_type == "nfm_reply": |
| 577 | + return _NFM_REPLY_TYPES.get( |
| 578 | + value["messages"][0]["interactive"]["nfm_reply"]["name"] |
| 579 | + ) |
576 | 580 | _logger.warning( |
577 | 581 | "Webhook ('%s'): Unknown interactive message type: %s. Falling back to MessageHandler.", |
578 | 582 | wa._webhook_endpoint, |
|
0 commit comments