Mautrix whatsapppull/21/head
| @@ -2,7 +2,7 @@ | |||||
| The playbook can install and configure [mautrix-telegram](https://github.com/tulir/mautrix-telegram) for you. | The playbook can install and configure [mautrix-telegram](https://github.com/tulir/mautrix-telegram) for you. | ||||
| See that project's [documentation](https://github.com/tulir/mautrix-telegram/wiki#usage) to learn what it does and why it might be useful to you. | |||||
| See the project's [documentation](https://github.com/tulir/mautrix-telegram/wiki#usage) to learn what it does and why it might be useful to you. | |||||
| You'll need to obtain API keys from `https://my.telegram.org/apps` and then use the following playbook configuration: | You'll need to obtain API keys from `https://my.telegram.org/apps` and then use the following playbook configuration: | ||||
| ``` | ``` | ||||
| @@ -10,3 +10,5 @@ matrix_mautrix_telegram_enabled: true | |||||
| matrix_mautrix_telegram_api_id: YOUR_TELEGRAM_APP_ID | matrix_mautrix_telegram_api_id: YOUR_TELEGRAM_APP_ID | ||||
| matrix_mautrix_telegram_api_hash: YOUR_TELEGRAM_API_HASH | matrix_mautrix_telegram_api_hash: YOUR_TELEGRAM_API_HASH | ||||
| ``` | ``` | ||||
| You then need to start a chat with `@telegrambot:{{ hostname_identity }}` | |||||
| @@ -0,0 +1,12 @@ | |||||
| # Setting up Mautrix Whatsapp | |||||
| The playbook can install and configure [mautrix-whatsapp](https://github.com/tulir/mautrix-whatsapp) for you. | |||||
| See the project's [documentation](https://github.com/tulir/mautrix-whatsapp/wiki) to learn what it does and why it might be useful to you. | |||||
| Use the following playbook configuration: | |||||
| ``` | |||||
| matrix_mautrix_whatsapp_enabled: true | |||||
| ``` | |||||
| You then need to start a chat with `@whatsappbot:{{ hostname_identity }}` | |||||
| @@ -137,6 +137,7 @@ matrix_coturn_base_path: "{{ matrix_base_data_path }}/coturn" | |||||
| matrix_coturn_config_path: "{{ matrix_coturn_base_path }}/turnserver.conf" | matrix_coturn_config_path: "{{ matrix_coturn_base_path }}/turnserver.conf" | ||||
| matrix_scratchpad_dir: "{{ matrix_base_data_path }}/scratchpad" | matrix_scratchpad_dir: "{{ matrix_base_data_path }}/scratchpad" | ||||
| matrix_mautrix_telegram_base_path: "{{ matrix_base_data_path }}/mautrix-telegram" | matrix_mautrix_telegram_base_path: "{{ matrix_base_data_path }}/mautrix-telegram" | ||||
| matrix_mautrix_whatsapp_base_path: "{{ matrix_base_data_path }}/mautrix-whatsapp" | |||||
| matrix_static_files_base_path: "{{ matrix_base_data_path }}/static-files" | matrix_static_files_base_path: "{{ matrix_base_data_path }}/static-files" | ||||
| matrix_docker_image_postgres_v9: "postgres:9.6.10-alpine" | matrix_docker_image_postgres_v9: "postgres:9.6.10-alpine" | ||||
| @@ -151,6 +152,7 @@ matrix_docker_image_coturn: "instrumentisto/coturn:4.5.0.8" | |||||
| matrix_docker_image_mailer: "panubo/postfix:latest" | matrix_docker_image_mailer: "panubo/postfix:latest" | ||||
| matrix_docker_image_mxisd: "kamax/mxisd:1.1.1" | matrix_docker_image_mxisd: "kamax/mxisd:1.1.1" | ||||
| matrix_docker_image_mautrix_telegram: "tulir/mautrix-telegram:v0.3.0" | matrix_docker_image_mautrix_telegram: "tulir/mautrix-telegram:v0.3.0" | ||||
| matrix_docker_image_mautrix_whatsapp: "tulir/mautrix-whatsapp:latest" | |||||
| # The Docker network that all services would be put into | # The Docker network that all services would be put into | ||||
| matrix_docker_network: "matrix" | matrix_docker_network: "matrix" | ||||
| @@ -252,6 +254,9 @@ matrix_mautrix_telegram_api_hash: YOUR_TELEGRAM_API_HASH | |||||
| # Use an uuid so it's not easily discoverable | # Use an uuid so it's not easily discoverable | ||||
| matrix_mautrix_telegram_public_endpoint: "/{{ matrix_synapse_macaroon_secret_key | password_hash('sha512', 'telegram') | to_uuid }}" | matrix_mautrix_telegram_public_endpoint: "/{{ matrix_synapse_macaroon_secret_key | password_hash('sha512', 'telegram') | to_uuid }}" | ||||
| # Matrix mautrix is a Matrix <-> Whatsapp bridge | |||||
| # Enable whatsapp bridge | |||||
| matrix_mautrix_whatsapp_enabled: false | |||||
| # By default, this playbook sets up its own nginx proxy server on port 80/443. | # By default, this playbook sets up its own nginx proxy server on port 80/443. | ||||
| # This is fine if you're dedicating the whole server to Matrix. | # This is fine if you're dedicating the whole server to Matrix. | ||||
| @@ -5,3 +5,5 @@ | |||||
| - include: tasks/setup/setup_synapse_ext_shared_secret_auth.yml | - include: tasks/setup/setup_synapse_ext_shared_secret_auth.yml | ||||
| - include: tasks/setup/setup_synapse_ext_mautrix_telegram.yml | - include: tasks/setup/setup_synapse_ext_mautrix_telegram.yml | ||||
| - include: tasks/setup/setup_synapse_ext_mautrix_whatsapp.yml | |||||
| @@ -34,11 +34,11 @@ | |||||
| when: "matrix_mautrix_telegram_enabled" | when: "matrix_mautrix_telegram_enabled" | ||||
| - stat: "path={{ matrix_mautrix_telegram_base_path }}/registration.yaml" | - stat: "path={{ matrix_mautrix_telegram_base_path }}/registration.yaml" | ||||
| register: mautrix_registration_file | |||||
| register: mautrix_telegram_registration_file | |||||
| - name: Generate matrix-mautrix-telegram registration.yaml if it doesn't exist | - name: Generate matrix-mautrix-telegram registration.yaml if it doesn't exist | ||||
| shell: /usr/bin/docker run --rm --name matrix-mautrix-telegram-gen -v {{ matrix_mautrix_telegram_base_path }}:/data:z {{ matrix_docker_image_mautrix_telegram }} python3 -m mautrix_telegram -g -c /data/config.yaml -r /data/registration.yaml | shell: /usr/bin/docker run --rm --name matrix-mautrix-telegram-gen -v {{ matrix_mautrix_telegram_base_path }}:/data:z {{ matrix_docker_image_mautrix_telegram }} python3 -m mautrix_telegram -g -c /data/config.yaml -r /data/registration.yaml | ||||
| when: "matrix_mautrix_telegram_enabled and mautrix_registration_file.stat.exists == False" | |||||
| when: "matrix_mautrix_telegram_enabled and mautrix_telegram_registration_file.stat.exists == False" | |||||
| - set_fact: | - set_fact: | ||||
| matrix_synapse_app_service_config_file_mautrix_telegram: '/app-registration/mautrix-telegram.yml' | matrix_synapse_app_service_config_file_mautrix_telegram: '/app-registration/mautrix-telegram.yml' | ||||
| @@ -0,0 +1,68 @@ | |||||
| --- | |||||
| - name: Ensure Mautrix Whatsapp image is pulled | |||||
| docker_image: | |||||
| name: "{{ matrix_docker_image_mautrix_whatsapp }}" | |||||
| when: "matrix_mautrix_whatsapp_enabled" | |||||
| - name: Ensure Mautrix Whatsapp configuration path exists | |||||
| file: | |||||
| path: "{{ matrix_mautrix_whatsapp_base_path }}" | |||||
| state: directory | |||||
| mode: 0750 | |||||
| owner: "{{ matrix_user_username }}" | |||||
| group: "{{ matrix_user_username }}" | |||||
| when: "matrix_mautrix_whatsapp_enabled" | |||||
| - stat: "path={{ matrix_mautrix_whatsapp_base_path }}/config.yaml" | |||||
| register: mautrix_config_file | |||||
| - name: Ensure Matrix Mautrix whatsapp config installed | |||||
| template: | |||||
| src: "{{ role_path }}/templates/mautrix-whatsapp/config.yaml.j2" | |||||
| dest: "{{ matrix_mautrix_whatsapp_base_path }}/config.yaml" | |||||
| mode: 0644 | |||||
| owner: "{{ matrix_user_username }}" | |||||
| group: "{{ matrix_user_username }}" | |||||
| when: "matrix_mautrix_whatsapp_enabled and mautrix_config_file.stat.exists == False" | |||||
| - name: Ensure matrix-mautrix-whatsapp.service installed | |||||
| template: | |||||
| src: "{{ role_path }}/templates/systemd/matrix-mautrix-whatsapp.service.j2" | |||||
| dest: "/etc/systemd/system/matrix-mautrix-whatsapp.service" | |||||
| mode: 0644 | |||||
| when: "matrix_mautrix_whatsapp_enabled" | |||||
| - stat: "path={{ matrix_mautrix_whatsapp_base_path }}/registration.yaml" | |||||
| register: mautrix_whatsapp_registration_file | |||||
| - name: Generate matrix-mautrix-whatsapp registration.yaml if it doesn't exist | |||||
| shell: /usr/bin/docker run --rm --name matrix-mautrix-whatsapp-gen -v {{ matrix_mautrix_whatsapp_base_path }}:/data:z {{ matrix_docker_image_mautrix_whatsapp }} /usr/bin/mautrix-whatsapp -g -c /data/config.yaml -r /data/registration.yaml | |||||
| when: "matrix_mautrix_whatsapp_enabled and mautrix_whatsapp_registration_file.stat.exists == False" | |||||
| - set_fact: | |||||
| matrix_synapse_app_service_config_file_mautrix_whatsapp: '/app-registration/mautrix-whatsapp.yml' | |||||
| - set_fact: | |||||
| matrix_synapse_container_additional_volumes: > | |||||
| {{ matrix_synapse_container_additional_volumes }} | |||||
| + | |||||
| {{ [{'src': '{{ matrix_mautrix_whatsapp_base_path }}/registration.yaml', 'dst': '{{ matrix_synapse_app_service_config_file_mautrix_whatsapp }}', 'options': 'ro'}] }} | |||||
| when: "matrix_mautrix_whatsapp_enabled" | |||||
| - set_fact: | |||||
| matrix_synapse_app_service_config_files: > | |||||
| {{ matrix_synapse_app_service_config_files }} | |||||
| + | |||||
| {{ ["{{ matrix_synapse_app_service_config_file_mautrix_whatsapp }}"] | to_nice_json }} | |||||
| when: "matrix_mautrix_whatsapp_enabled" | |||||
| # | |||||
| # Tasks related to getting rid of matrix-mautrix-whatsapp (if it was previously enabled) | |||||
| # | |||||
| - name: Ensure matrix-mautrix-whatsapp.service doesn't exist | |||||
| file: | |||||
| path: "/etc/systemd/system/matrix-mautrix-whatsapp.service" | |||||
| state: absent | |||||
| when: "not matrix_mautrix_whatsapp_enabled" | |||||
| @@ -37,3 +37,7 @@ | |||||
| - name: Ensure matrix-mautrix-telegram autoruns and is restarted | - name: Ensure matrix-mautrix-telegram autoruns and is restarted | ||||
| service: name=matrix-mautrix-telegram enabled=yes state=restarted daemon_reload=yes | service: name=matrix-mautrix-telegram enabled=yes state=restarted daemon_reload=yes | ||||
| when: matrix_mautrix_telegram_enabled | when: matrix_mautrix_telegram_enabled | ||||
| - name: Ensure matrix-mautrix-whatsapp autoruns and is restarted | |||||
| service: name=matrix-mautrix-whatsapp enabled=yes state=restarted daemon_reload=yes | |||||
| when: matrix_mautrix_whatsapp_enabled | |||||
| @@ -0,0 +1,86 @@ | |||||
| # Homeserver details. | |||||
| homeserver: | |||||
| # The address that this appservice can use to connect to the homeserver. | |||||
| address: https://{{ hostname_matrix }} | |||||
| # The domain of the homeserver (for MXIDs, etc). | |||||
| domain: {{ hostname_identity }} | |||||
| # Application service host/registration related details. | |||||
| # Changing these values requires regeneration of the registration. | |||||
| appservice: | |||||
| # The address that the homeserver can use to connect to this appservice. | |||||
| address: http://matrix-mautrix-whatsapp:8080 | |||||
| # The hostname and port where this appservice should listen. | |||||
| hostname: 0.0.0.0 | |||||
| port: 8080 | |||||
| # Database config. | |||||
| database: | |||||
| # The database type. Only "sqlite3" is supported. | |||||
| type: sqlite3 | |||||
| # The database URI. Usually file name. https://github.com/mattn/go-sqlite3#connection-string | |||||
| uri: mautrix-whatsapp.db | |||||
| # Path to the Matrix room state store. | |||||
| state_store_path: ./mx-state.json | |||||
| # The unique ID of this appservice. | |||||
| id: whatsapp | |||||
| # Appservice bot details. | |||||
| bot: | |||||
| # Username of the appservice bot. | |||||
| username: whatsappbot | |||||
| # Display name and avatar for bot. Set to "remove" to remove display name/avatar, leave empty | |||||
| # to leave display name/avatar as-is. | |||||
| displayname: WhatsApp bridge bot | |||||
| avatar: remove | |||||
| # Authentication tokens for AS <-> HS communication. Autogenerated; do not modify. | |||||
| as_token: "This value is generated when generating the registration" | |||||
| hs_token: "This value is generated when generating the registration" | |||||
| # Bridge config. Currently unused. | |||||
| bridge: | |||||
| # {% raw %} | |||||
| # protecting the go templates inside the raw section. | |||||
| # Localpart template of MXIDs for WhatsApp users. | |||||
| # {{.}} is replaced with the phone number of the WhatsApp user. | |||||
| username_template: whatsapp_{{.}} | |||||
| # Displayname template for WhatsApp users. | |||||
| # {{.Notify}} - nickname set by the WhatsApp user | |||||
| # {{.Jid}} - phone number (international format) | |||||
| # The following variables are also available, but will cause problems on multi-user instances: | |||||
| # {{.Name}} - display name from contact list | |||||
| # {{.Short}} - short display name from contact list | |||||
| displayname_template: "{{if .Notify}}{{.Notify}}{{else}}{{.Jid}}{{end}} (WA)" | |||||
| # {% endraw %} | |||||
| # The prefix for commands. Only required in non-management rooms. | |||||
| command_prefix: "!wa" | |||||
| # Permissions for using the bridge. | |||||
| # Permitted values: | |||||
| # user - Access to use the bridge to chat with a WhatsApp account. | |||||
| # admin - User level and some additional administration tools | |||||
| # Permitted keys: | |||||
| # * - All Matrix users | |||||
| # domain - All users on that homeserver | |||||
| # mxid - Specific user | |||||
| permissions: | |||||
| '{{ hostname_identity }}': user | |||||
| # Logging config. | |||||
| logging: | |||||
| # The directory for log files. Will be created if not found. | |||||
| directory: ./logs | |||||
| # Available variables: .Date for the file date and .Index for different log files on the same day. | |||||
| file_name_format: {% raw %}"{{.Date}}-{{.Index}}.log"{% endraw %} | |||||
| # Date format for file names in the Go time format: https://golang.org/pkg/time/#pkg-constants | |||||
| file_date_format: 2006-01-02 | |||||
| # Log file permissions. | |||||
| file_mode: 0600 | |||||
| # Timestamp format for log entries in the Go time format. | |||||
| timestamp_format: Jan _2, 2006 15:04:05 | |||||
| # Minimum severity for log messages. | |||||
| # Options: debug, info, warn, error, fatal | |||||
| print_level: debug | |||||
| @@ -0,0 +1,24 @@ | |||||
| [Unit] | |||||
| Description=Matrix Mautrix Whatsapp server | |||||
| After=docker.service | |||||
| Requires=docker.service | |||||
| Requires=matrix-synapse.service | |||||
| After=matrix-synapse.service | |||||
| [Service] | |||||
| Type=simple | |||||
| ExecStartPre=-/usr/bin/docker kill matrix-mautrix-whatsapp | |||||
| ExecStartPre=-/usr/bin/docker rm matrix-mautrix-whatsapp | |||||
| ExecStart=/usr/bin/docker run --rm --name matrix-mautrix-whatsapp \ | |||||
| --log-driver=none \ | |||||
| -e "UID={{ matrix_user_uid }}" -e "GID={{ matrix_user_gid }}" \ | |||||
| --network={{ matrix_docker_network }} \ | |||||
| -v {{ matrix_mautrix_whatsapp_base_path }}:/data:z \ | |||||
| {{ matrix_docker_image_mautrix_whatsapp }} | |||||
| ExecStop=-/usr/bin/docker kill matrix-mautrix-whatsapp | |||||
| ExecStop=-/usr/bin/docker rm matrix-mautrix-whatsapp | |||||
| Restart=always | |||||
| RestartSec=30 | |||||
| [Install] | |||||
| WantedBy=multi-user.target | |||||