diff --git a/docs/README.md b/docs/README.md index 0465471..2fae02d 100644 --- a/docs/README.md +++ b/docs/README.md @@ -459,6 +459,39 @@ def call_support_operator_handler(notification: Notification) -> None: bot.run_forever() ``` +### Получение уведомлений при помощи webhook + +По умолчанию бот читает уведомления, используя long polling метод. Получение уведомлений также возможно с помощью webhook-сервера: + +```python +from whatsapp_chatbot_python import GreenAPIBot, Notification + +bot = GreenAPIBot( + "1101000001", + "d75b3a66374942c5b3c019c698abc2067e151558acbd412345", + # Укажите значение `webhook_mode` равное True (False по-умолчанию) + webhook_mode = True, + # Укажите хост вебхук-сервера ("0.0.0.0" по-умолчанию) + webhook_host = "0.0.0.0", + # Укажите порт вебхук-сервера (8080 по-умолчанию) + webhook_port = 8080, + # При необходимости, укажите заголовок авторизации (:str), который + # установлен в консоли инстанса. Если указать None, то + # заголовок авторизации не будет проверяться вебхук-сервером + webhook_auth_header = None, +) + + +@bot.router.outgoing_message() +def outgoint_message_handler(notification: Notification) -> None: + print("Outgoint message received") + +if __name__ == "__main__": + bot.run_forever() + +``` +Для того, чтобы этот режим работал корректно, укажите корректный URL вебхук-севрера в настройках инстанса. В качестве вебхук-сервера используется [whatsapp-api-webhook-server-python-v2](https://github.com/green-api/whatsapp-api-webhook-server-python-v2) (`python >= 3.8`) + ## Документация по методам сервиса [Документация по методам сервиса](https://green-api.com/docs/api/) diff --git a/setup.py b/setup.py index 46a6eb8..0909aee 100644 --- a/setup.py +++ b/setup.py @@ -7,8 +7,7 @@ name="whatsapp-chatbot-python", version="0.9.1", description=( - "This library helps you easily create" - " a Python chatbot with WhatsApp API." + "This library helps you easily create a Python chatbot with WhatsApp API." ), long_description=long_description, long_description_content_type="text/markdown", @@ -37,12 +36,14 @@ "Topic :: Communications :: Chat", "Topic :: Software Development", "Topic :: Software Development :: Libraries", - "Topic :: Software Development :: Libraries :: Application Frameworks" + "Topic :: Software Development :: Libraries :: Application Frameworks", ], license=( - "Creative Commons Attribution-NoDerivatives 4.0 International" - " (CC BY-ND 4.0)" + "Creative Commons Attribution-NoDerivatives 4.0 International" " (CC BY-ND 4.0)" ), - install_requires=["whatsapp-api-client-python==0.0.45"], - python_requires=">=3.7" + install_requires=[ + "whatsapp-api-client-python==0.0.45", + "whatsapp-api-webhook-server-python-v2==0.1.0", + ], + python_requires=">=3.7", ) diff --git a/tests/test_manager.py b/tests/test_manager.py index efec34c..bde1714 100644 --- a/tests/test_manager.py +++ b/tests/test_manager.py @@ -8,9 +8,9 @@ "messageData": { "typeMessage": "textMessage", "textMessageData": { - "textMessage": "Hello" - } - } + "textMessage": "Hello", + }, + }, } @@ -44,12 +44,12 @@ def handler(_): self.assertEqual(len(bot.router.message.handlers), 2) - @patch("whatsapp_chatbot_python.bot.Bot._update_settings") - def create_bot(self, mock__update_settings: MagicMock) -> GreenAPIBot: - mock__update_settings.return_value = None + @patch("whatsapp_chatbot_python.bot.Bot._Bot__init_instance_settings") + def create_bot(self, mock__init_instance_settings: MagicMock) -> GreenAPIBot: + mock__init_instance_settings.return_value = None return GreenAPIBot("", "", delete_notifications_at_startup=False) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/whatsapp_chatbot_python/bot.py b/whatsapp_chatbot_python/bot.py index 520fb9c..2a053a4 100644 --- a/whatsapp_chatbot_python/bot.py +++ b/whatsapp_chatbot_python/bot.py @@ -47,6 +47,9 @@ def __init__( - `bot_debug_mode: bool` - (default: `False`) Debug mode (extended logging) for bot + - `settings: dict | None` - (default: `None`) + dict for updating instance settings if provided + - `delete_notifications_at_startup: bool` - (default: `True`) Remove all notifications from notification queue on bot startup. If `bot_debug_mode` is `True` - this arg will be setted as `True` when bot object init @@ -57,7 +60,7 @@ def __init__( - `webhook_host: str` - (default: `"0.0.0.0"`) Host for webhook server. - - `webhook_post: int` - (default: `8080`) Port for webhook server. + - `webhook_port: int` - (default: `8080`) Port for webhook server. - `webhook_auth_header: str | None` - (default: `None`) Check that the authorization header matches the specified value.