"fields": {}
         },
         "start_pause": {
            "name": "Start/Pause",
            "description": "Start, pause, or resume the cleaning task.",
            "fields": {},
            "target": {
               "entity": {
                  "domain": "vacuum"
               }
            }
         },
         "start": {
            "name": "Start",
            "description": "Start or resume the cleaning task.",
            "fields": {},
            "target": {
               "entity": {
                  "domain": "vacuum"
               }
            }
         },
         "pause": {
            "name": "Pause",
            "description": "Pause the cleaning task.",
            "fields": {},
            "target": {
               "entity": {
                  "domain": "vacuum"
               }
            }
         },
         "return_to_base": {
            "name": "Return to base",
            "description": "Tell the vacuum cleaner to return to its dock.",
            "fields": {},
            "target": {
               "entity": {
                  "domain": "vacuum"
               }
            }
         },
         "clean_spot": {
            "name": "Clean spot",
            "description": "Tell the vacuum cleaner to do a spot clean-up.",
            "fields": {},
            "target": {
               "entity": {
                  "domain": "vacuum"
               }
            }
         },
         "locate": {
            "name": "Locate",
            "description": "Locate the vacuum cleaner robot.",
            "fields": {},
            "target": {
               "entity": {
                  "domain": "vacuum"
               }
            }
         },
         "stop": {
            "name": "Stop",
            "description": "Stop the current cleaning task.",
            "fields": {},
            "target": {
               "entity": {
                  "domain": "vacuum"
               }
            }
         },
         "set_fan_speed": {
            "name": "Set fan speed",
            "description": "Set the fan speed of the vacuum cleaner.",
            "fields": {
               "fan_speed": {
                  "name": "Fan speed",
                  "description": "Platform dependent vacuum cleaner fan speed, with speed steps, like 'medium' or by percentage, between 0 and 100.",
                  "required": true,
                  "example": "low",
                  "selector": {
                     "text": null
                  }
               }
            },
            "target": {
               "entity": {
                  "domain": "vacuum"
               }
            }
         },
         "send_command": {
            "name": "Send command",
            "description": "Send a raw command to the vacuum cleaner.",
            "fields": {
               "command": {
                  "name": "Command",
                  "description": "Command to execute.",
                  "required": true,
                  "example": "set_dnd_timer",
                  "selector": {
                     "text": null
                  }
               },
               "params": {
                  "name": "Parameters",
                  "description": "Parameters for the command.",
                  "example": "{ \"key\": \"value\" }",
                  "selector": {
                     "object": null
                  }
               }
            },
            "target": {
               "entity": {
                  "domain": "vacuum"
               }
            }
         }
      }
   },
   {
      "domain": "notify",
      "services": {
         "persistent_notification": {
            "name": "Send a persistent notification",
            "description": "Sends a notification that is visible in the front-end.",
            "fields": {
               "message": {
                  "name": "Message",
                  "description": "Message body of the notification.",
                  "required": true,
                  "example": "The garage door has been open for 10 minutes.",
                  "selector": {
                     "text": null
                  }
               },
               "title": {
                  "name": "Title",
                  "description": "Title for your notification.",
                  "example": "Your Garage Door Friend",
                  "selector": {
                     "text": null
                  }
               }
            }
         },
         "mobile_app_sm_g986b": {
            "name": "Send a notification via mobile_app_sm_g986b",
            "description": "Sends a notification message using the mobile_app_sm_g986b integration.",
            "fields": {
               "message": {
                  "name": "Message",
                  "description": "Message body of the notification.",
                  "required": true,
                  "example": "The garage door has been open for 10 minutes.",
                  "selector": {
                     "text": null
                  }
               },
               "title": {
                  "name": "Title",
                  "description": "Title for your notification.",
                  "example": "Your Garage Door Friend",
                  "selector": {
                     "text": null
                  }
               },
               "target": {
                  "name": "Target",
                  "description": "An array of targets to send the notification to. Optional depending on the platform.",
                  "example": "platform specific",
                  "selector": {
                     "object": null
                  }
               },
               "data": {
                  "name": "Data",
                  "description": "Extended information for notification. Optional depending on the platform.",
                  "example": "platform specific",
                  "selector": {
                     "object": null
                  }
               }
            }
         },
         "notify": {
            "name": "Send a notification with notify",
            "description": "Sends a notification message using the notify service.",
            "fields": {
               "message": {
                  "name": "Message",
                  "description": "Message body of the notification.",
                  "required": true,
                  "example": "The garage door has been open for 10 minutes.",
                  "selector": {
                     "text": null
                  }
               },
               "title": {
                  "name": "Title",
                  "description": "Title for your notification.",
                  "example": "Your Garage Door Friend",
                  "selector": {
                     "text": null
                  }
               },
               "target": {
                  "name": "Target",
                  "description": "An array of targets to send the notification to. Optional depending on the platform.",
                  "example": "platform specific",
                  "selector": {
                     "object": null
                  }
               },
               "data": {
                  "name": "Data",
                  "description": "Extended information for notification. Optional depending on the platform.",
                  "example": "platform specific",
                  "selector": {
                     "object": null
                  }
               }
            }
         }
      }
   },
   {
      "domain": "text",
      "services": {
         "set_value": {
            "name": "Set value",
            "description": "Set value of a text entity.",
            "fields": {
               "value": {
                  "name": "Value",
                  "description": "Value to set.",
                  "required": true,
                  "example": "Hello world!",
                  "selector": {
                     "text": null
                  }
               }
            },
            "target": {
               "entity": {
                  "domain": "text"
               }
            }
         }
      }
   },
   {
      "domain": "tts",
      "services": {
         "google_translate_say": {
            "name": "Say a TTS message with google_translate",
            "description": "Say something using text-to-speech on a media player with google_translate.",
            "fields": {
               "entity_id": {
                  "name": "Entity",
                  "description": "Name(s) of media player entities.",
                  "required": true,
                  "selector": {
                     "entity": {
                        "domain": "media_player"
                     }
                  }
               },
               "message": {
                  "name": "Message",
                  "description": "Text to speak on devices.",
                  "example": "My name is hanna",
                  "required": true,
                  "selector": {
                     "text": null
                  }
               },
               "cache": {
                  "name": "Cache",
                  "description": "Control file cache of this message.",
                  "default": false,
                  "selector": {
                     "boolean": null
                  }
               },
               "language": {
                  "name": "Language",
                  "description": "Language to use for speech generation.",
                  "example": "ru",
                  "selector": {
                     "text": null
                  }
               },
               "options": {
                  "name": "Options",
                  "description": "A dictionary containing platform-specific options. Optional depending on the platform.",
                  "advanced": true,
                  "example": "platform specific",
                  "selector": {
                     "object": null
                  }
               }
            }
         },
         "clear_cache": {
            "name": "Clear TTS cache",
            "description": "Remove all text-to-speech cache files and RAM cache.",
            "fields": {}
         },
         "cloud_say": {
            "name": "Say a TTS message with cloud",
            "description": "Say something using text-to-speech on a media player with cloud.",
            "fields": {
               "entity_id": {
                  "name": "Entity",
                  "description": "Name(s) of media player entities.",
                  "required": true,
                  "selector": {
                     "entity": {
                        "domain": "media_player"
                     }
                  }
               },
               "message": {
                  "name": "Message",
                  "description": "Text to speak on devices.",
                  "example": "My name is hanna",
                  "required": true,
                  "selector": {
                     "text": null
                  }
               },
               "cache": {
                  "name": "Cache",
                  "description": "Control file cache of this message.",
                  "default": false,
                  "selector": {
                     "boolean": null
                  }
               },
               "language": {
                  "name": "Language",
                  "description": "Language to use for speech generation.",
                  "example": "ru",
                  "selector": {
                     "text": null
                  }
               },
               "options": {
                  "name": "Options",
                  "description": "A dictionary containing platform-specific options. Optional depending on the platform.",
                  "advanced": true,
                  "example": "platform specific",
                  "selector": {
                     "object": null
                  }
               }
            }
         }
      }
   },
   {
      "domain": "synology_dsm",
      "services": {
         "reboot": {
            "name": "Reboot",
            "description": "Reboot the NAS. This service is deprecated and will be removed in future release. Please use the corresponding button entity.",
            "fields": {
               "serial": {
                  "name": "Serial",
                  "description": "serial of the NAS to reboot; required when multiple NAS are configured.",
                  "example": "1NDVC86409",
                  "selector": {
                     "text": null
                  }
               }
            }
         },
         "shutdown": {
            "name": "Shutdown",
            "description": "Shutdown the NAS. This service is deprecated and will be removed in future release. Please use the corresponding button entity.",
            "fields": {
               "serial": {
                  "name": "Serial",
                  "description": "serial of the NAS to shutdown; required when multiple NAS are configured.",
                  "example": "1NDVC86409",
                  "selector": {
                     "text": null
                  }
               }
            }
         }
      }
   },
   {
      "domain": "backup",
      "services": {
         "create": {
            "name": "Create backup",
            "description": "Create a new backup.",
            "fields": {}
         }
      }
   },
   {
      "domain": "blink",
      "services": {
         "trigger_camera": {
            "name": "Trigger camera",
            "description": "Request camera to take new image.",
            "fields": {},
            "target": {
               "entity": {
                  "integration": "blink",
                  "domain": "camera"
               }
            }
         },
         "blink_update": {
            "name": "Update",
            "description": "Force a refresh.",
            "fields": {}
         },
         "save_video": {
            "name": "Save video",
            "description": "Save last recorded video clip to local file.",
            "fields": {
               "name": {
                  "name": "Name",
                  "description": "Name of camera to grab video from.",
                  "required": true,
                  "example": "Living Room",
                  "selector": {
                     "text": null
                  }
               },
               "filename": {
                  "name": "File name",
                  "description": "Filename to writable path (directory may need to be included in whitelist_dirs in config)",
                  "required": true,
                  "example": "/tmp/video.mp4",
                  "selector": {
                     "text": null
                  }
               }
            }
         },
         "send_pin": {
            "name": "Send pin",
            "description": "Send a new PIN to blink for 2FA.",
            "fields": {
               "pin": {
                  "name": "Pin",
                  "description": "PIN received from blink. Leave empty if you only received a verification email.",
                  "example": "abc123",
                  "selector": {
                     "text": null
                  }
               }
            }
         }
      }
   },
   {
      "domain": "ring",
      "services": {
         "update": {
            "name": "Update",
            "description": "Updates the data we have for all your ring devices",
            "fields": {}
         }
      }
   },
   {
      "domain": "harmony",
      "services": {
         "sync": {
            "name": "Sync",
            "description": "Syncs the remote's configuration.",
            "fields": {},
            "target": {
               "entity": {
                  "integration": "harmony",
                  "domain": "remote"
               }
            }
         },
         "change_channel": {
            "name": "Change channel",
            "description": "Sends change channel command to the Harmony HUB",
            "fields": {
               "channel": {
                  "name": "Channel",
                  "description": "Channel number to change to",
                  "required": true,
                  "selector": {
                     "number": {
                        "min": 1,
                        "max": 100000
                     }
                  }
               }
            },
            "target": {
               "entity": {
                  "integration": "harmony",
                  "domain": "remote"
               }
            }
         }
      }
   }
]

Oh, a bit more progress, thanks to you two.
So, I added a folder data to the local host volume folder on the Synology (of course, this could be any docker host).
So, on the Synology, I have the volume root (mapped to /data/whatsapp-ha/)
|
|--config -
                | -- custom_components -
                                                          | - whatsapp-ha -
                                                                                | - stuff
|--data -
                |-- options.yaml

The data folder contains the 'options.yaml` file as outlined by @piit79 in https://github.com/giuseppecastaldo/ha-addons/issues/8#issuecomment-1367356059
The docker-compose.yaml now contains the following:
  whatsapp-ha:
    image: whatsapp-ha:latest
    container_name: whatsapp-ha
    volumes:
      - /data/whatsapp-ha/config:/config
      - /data/whatsapp-ha/data:/data
    ports:
      - 3000:3000

Now, the container still exits, BUT it does spit out a whole bunch more logs:
logs.txt
HAPPY NEW YEAR (well, it might be if this is resolved).

FWIW, I asked a question regarding converting add-ons to stand-alone docker containers in the HA community, and there was some good info posted (see https://community.home-assistant.io/t/is-it-possible-to-convert-an-addon-for-ha-os-to-run-in-a-standalone-container-for-ha-as-a-docker/511306/4?u=swinster) relating to the need for authentication toward the above API (as shown in https://github.com/giuseppecastaldo/ha-addons/issues/8#issuecomment-1368284184 with the use of a long live token)

Ok, I think I have a docker container running :) without exiting - here are the logs:
s6-rc: info: service s6rc-oneshot-runner: starting
s6-rc: info: service s6rc-oneshot-runner successfully started
s6-rc: info: service fix-attrs: starting
s6-rc: info: service fix-attrs successfully started
s6-rc: info: service legacy-cont-init: starting
s6-rc: info: service legacy-cont-init successfully started
s6-rc: info: service legacy-services: starting
s6-rc: info: service legacy-services successfully started
[20:26:45] INFO: Installed custom component.
[2023-01-02T20:26:46.773] [INFO] default - Whatsapp Addon started.
[2023-01-02T20:26:47.242] [INFO] default - default require authentication over QRCode, please see your notifications...
[2023-01-02T20:27:47.291] [INFO] default - default require authentication over QRCode, please see your notifications...

I edited the index.js file to add some static content, although converting them to parameters and passing in environment variables from the docker-compose.yaml when the docker container starts would be best (I think).

I added a const to contain a Long-lived token (for example):

const token = "eyJhbGciOiJIUzI1NiIsInR5c...........";

Then, there are four references to the supervisor URL, so I changed that code to point to the HA docker and altered the bearer to use the new token constant. For example:

Original code:
const onReady = (key) => {
  logger.info(key, "client is ready.");
  axios.post(
    "http://supervisor/core/api/services/persistent_notification/dismiss",
    {
      notification_id: `whatsapp_addon_qrcode_${key}`,
    },
    {
      headers: {
        Authorization: `Bearer ${process.env.SUPERVISOR_TOKEN}`,
      },
    }
  );
}

Modified code block:
const onReady = (key) => {
  logger.info(key, "client is ready.");
  axios.post(
    "http://<IP_ADDRESS>:8123/api/services/persistent_notification/dismiss",
    {
      notification_id: `whatsapp_addon_qrcode_${key}`,
    },
    {
      headers: {
        Authorization: `Bearer ${token}`,
      },
    }
  );
}

I then rebuilt the image as before and re-ran it, and et voila.
Not sure where to go now though.

OK, I needed to pay more attention to the main HA Settings - a QR code automagically popup up and allowed me to connect to my WhatsApp account. I now have a new device logged in on Ubuntu. So, we are getting there..
Unfortunately, there seem to be some crashes in the Whatsapp-HA docker code:
s6-rc: info: service s6rc-oneshot-runner: starting
s6-rc: info: service s6rc-oneshot-runner successfully started
s6-rc: info: service fix-attrs: starting
s6-rc: info: service fix-attrs successfully started
s6-rc: info: service legacy-cont-init: starting
s6-rc: info: service legacy-cont-init successfully started
s6-rc: info: service legacy-services: starting
s6-rc: info: service legacy-services successfully started
[20:55:25] INFO: Installed custom component.
[2023-01-02T20:55:27.987] [INFO] default - Whatsapp Addon started.
[2023-01-02T20:55:28.383] [INFO] default - default require authentication over QRCode, please see your notifications...
[2023-01-02T20:56:28.424] [INFO] default - default require authentication over QRCode, please see your notifications...
[2023-01-02T20:56:48.460] [INFO] default - default require authentication over QRCode, please see your notifications...
[2023-01-02T20:57:08.478] [INFO] default - default require authentication over QRCode, please see your notifications...
[2023-01-02T20:57:22.268] [INFO] default - default client is ready.
2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 pid=83 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 pid=83 hostname=2022a2f1ac2c 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 pid=83 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 pid=83 hostname=2022a2f1ac2c stack=Error: mutex start
    at /node_modules/@giuseppecastaldo/baileys/lib/Utils/make-mutex.js:15:31
    at Object.mutex (/node_modules/@giuseppecastaldo/baileys/lib/Utils/make-mutex.js:35:15)
    at handleMessage (/node_modules/@giuseppecastaldo/baileys/lib/Socket/messages-recv.js:451:29)
    at execTask (/node_modules/@giuseppecastaldo/baileys/lib/Socket/messages-recv.js:554:20)
    at processNodeWithBuffer (/node_modules/@giuseppecastaldo/baileys/lib/Socket/messages-recv.js:551:15)
    at WebSocket.<anonymous> (/node_modules/@giuseppecastaldo/baileys/lib/Socket/messages-recv.js:560:9)
    at WebSocket.emit (node:events:513:28)
    at /node_modules/@giuseppecastaldo/baileys/lib/Socket/socket.js:222:35
    at Object.decodeFrame (/node_modules/@giuseppecastaldo/baileys/lib/Utils/noise-handler.js:131:17)
    at WebSocket.onMessageRecieved (/node_modules/@giuseppecastaldo/baileys/lib/Socket/socket.js:198:15) 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 pid=83 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 pid=83 hostname=2022a2f1ac2c 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 pid=83 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 pid=83 hostname=2022a2f1ac2c stack=Error: mutex start
    at /node_modules/@giuseppecastaldo/baileys/lib/Utils/make-mutex.js:15:31
    at Object.mutex (/node_modules/@giuseppecastaldo/baileys/lib/Utils/make-mutex.js:35:15)
    at handleMessage (/node_modules/@giuseppecastaldo/baileys/lib/Socket/messages-recv.js:451:29)
    at execTask (/node_modules/@giuseppecastaldo/baileys/lib/Socket/messages-recv.js:554:20)
    at processNodeWithBuffer (/node_modules/@giuseppecastaldo/baileys/lib/Socket/messages-recv.js:551:15)
    at WebSocket.<anonymous> (/node_modules/@giuseppecastaldo/baileys/lib/Socket/messages-recv.js:560:9)
    at WebSocket.emit (node:events:513:28)
    at /node_modules/@giuseppecastaldo/baileys/lib/Socket/socket.js:222:35
    at Object.decodeFrame (/node_modules/@giuseppecastaldo/baileys/lib/Utils/noise-handler.js:131:17)
    at WebSocket.onMessageRecieved (/node_modules/@giuseppecastaldo/baileys/lib/Socket/socket.js:198:15) waitOver=true 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 pid=83 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 pid=83 hostname=2022a2f1ac2c 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 pid=83 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 pid=83 hostname=2022a2f1ac2c stack=Error: mutex start
    at /node_modules/@giuseppecastaldo/baileys/lib/Utils/make-mutex.js:15:31
    at Object.mutex (/node_modules/@giuseppecastaldo/baileys/lib/Utils/make-mutex.js:35:15)
    at handleMessage (/node_modules/@giuseppecastaldo/baileys/lib/Socket/messages-recv.js:451:29)
    at execTask (/node_modules/@giuseppecastaldo/baileys/lib/Socket/messages-recv.js:554:20)
    at processNodeWithBuffer (/node_modules/@giuseppecastaldo/baileys/lib/Socket/messages-recv.js:551:15)
    at WebSocket.<anonymous> (/node_modules/@giuseppecastaldo/baileys/lib/Socket/messages-recv.js:560:9)
    at WebSocket.emit (node:events:513:28)
    at /node_modules/@giuseppecastaldo/baileys/lib/Socket/socket.js:222:35
    at Object.decodeFrame (/node_modules/@giuseppecastaldo/baileys/lib/Utils/noise-handler.js:131:17)
    at WebSocket.onMessageRecieved (/node_modules/@giuseppecastaldo/baileys/lib/Socket/socket.js:198:15) 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 pid=83 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 pid=83 hostname=2022a2f1ac2c 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 pid=83 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 2023-01-02T20:58:23.697Z 2023-01-02T20:58:23.697Z 40 pid=83 hostname=2022a2f1ac2c stack=Error: mutex start
    at /node_modules/@giuseppecastaldo/baileys/lib/Utils/make-mutex.js:15:31
    at Object.mutex (/node_modules/@giuseppecastaldo/baileys/lib/Utils/make-mutex.js:35:15)
    at handleMessage (/node_modules/@giuseppecastaldo/baileys/lib/Socket/messages-recv.js:451:29)
    at execTask (/node_modules/@giuseppecastaldo/baileys/lib/Socket/messages-recv.js:554:20)
    at processNodeWithBuffer (/node_modules/@giuseppecastaldo/baileys/lib/Socket/messages-recv.js:551:15)
    at WebSocket.<anonymous> (/node_modules/@giuseppecastaldo/baileys/lib/Socket/messages-recv.js:560:9)
    at WebSocket.emit (node:events:513:28)
    at /node_modules/@giuseppecastaldo/baileys/lib/Socket/socket.js:222:35
    at Object.decodeFrame (/node_modules/@giuseppecastaldo/baileys/lib/Utils/noise-handler.js:131:17)
    at WebSocket.onMessageRecieved (/node_modules/@giuseppecastaldo/baileys/lib/Socket/socket.js:198:15) waitOver=true msg=possible mutex deadlock
2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 pid=83 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 pid=83 hostname=2022a2f1ac2c 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 pid=83 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 pid=83 hostname=2022a2f1ac2c stack=Error: mutex start
    at /node_modules/@giuseppecastaldo/baileys/lib/Utils/make-mutex.js:15:31
    at Object.mutex (/node_modules/@giuseppecastaldo/baileys/lib/Utils/make-mutex.js:35:15)
    at handleMessage (/node_modules/@giuseppecastaldo/baileys/lib/Socket/messages-recv.js:451:29)
    at execTask (/node_modules/@giuseppecastaldo/baileys/lib/Socket/messages-recv.js:554:20)
    at processNodeWithBuffer (/node_modules/@giuseppecastaldo/baileys/lib/Socket/messages-recv.js:551:15)
    at WebSocket.<anonymous> (/node_modules/@giuseppecastaldo/baileys/lib/Socket/messages-recv.js:560:9)
    at WebSocket.emit (node:events:513:28)
    at /node_modules/@giuseppecastaldo/baileys/lib/Socket/socket.js:222:35
    at Object.decodeFrame (/node_modules/@giuseppecastaldo/baileys/lib/Utils/noise-handler.js:131:17)
    at WebSocket.onMessageRecieved (/node_modules/@giuseppecastaldo/baileys/lib/Socket/socket.js:198:15) 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 pid=83 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 pid=83 hostname=2022a2f1ac2c 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 pid=83 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 pid=83 hostname=2022a2f1ac2c stack=Error: mutex start
    at /node_modules/@giuseppecastaldo/baileys/lib/Utils/make-mutex.js:15:31
    at Object.mutex (/node_modules/@giuseppecastaldo/baileys/lib/Utils/make-mutex.js:35:15)
    at handleMessage (/node_modules/@giuseppecastaldo/baileys/lib/Socket/messages-recv.js:451:29)
    at execTask (/node_modules/@giuseppecastaldo/baileys/lib/Socket/messages-recv.js:554:20)
    at processNodeWithBuffer (/node_modules/@giuseppecastaldo/baileys/lib/Socket/messages-recv.js:551:15)
    at WebSocket.<anonymous> (/node_modules/@giuseppecastaldo/baileys/lib/Socket/messages-recv.js:560:9)
    at WebSocket.emit (node:events:513:28)
    at /node_modules/@giuseppecastaldo/baileys/lib/Socket/socket.js:222:35
    at Object.decodeFrame (/node_modules/@giuseppecastaldo/baileys/lib/Utils/noise-handler.js:131:17)
    at WebSocket.onMessageRecieved (/node_modules/@giuseppecastaldo/baileys/lib/Socket/socket.js:198:15) waitOver=true 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 pid=83 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 pid=83 hostname=2022a2f1ac2c 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 pid=83 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 pid=83 hostname=2022a2f1ac2c stack=Error: mutex start
    at /node_modules/@giuseppecastaldo/baileys/lib/Utils/make-mutex.js:15:31
    at Object.mutex (/node_modules/@giuseppecastaldo/baileys/lib/Utils/make-mutex.js:35:15)
    at handleMessage (/node_modules/@giuseppecastaldo/baileys/lib/Socket/messages-recv.js:451:29)
    at execTask (/node_modules/@giuseppecastaldo/baileys/lib/Socket/messages-recv.js:554:20)
    at processNodeWithBuffer (/node_modules/@giuseppecastaldo/baileys/lib/Socket/messages-recv.js:551:15)
    at WebSocket.<anonymous> (/node_modules/@giuseppecastaldo/baileys/lib/Socket/messages-recv.js:560:9)
    at WebSocket.emit (node:events:513:28)
    at /node_modules/@giuseppecastaldo/baileys/lib/Socket/socket.js:222:35
    at Object.decodeFrame (/node_modules/@giuseppecastaldo/baileys/lib/Utils/noise-handler.js:131:17)
    at WebSocket.onMessageRecieved (/node_modules/@giuseppecastaldo/baileys/lib/Socket/socket.js:198:15) 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 pid=83 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 pid=83 hostname=2022a2f1ac2c 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 pid=83 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 2023-01-02T20:58:23.728Z 2023-01-02T20:58:23.728Z 40 pid=83 hostname=2022a2f1ac2c stack=Error: mutex start
    at /node_modules/@giuseppecastaldo/baileys/lib/Utils/make-mutex.js:15:31
    at Object.mutex (/node_modules/@giuseppecastaldo/baileys/lib/Utils/make-mutex.js:35:15)
    at handleMessage (/node_modules/@giuseppecastaldo/baileys/lib/Socket/messages-recv.js:451:29)
    at execTask (/node_modules/@giuseppecastaldo/baileys/lib/Socket/messages-recv.js:554:20)
    at processNodeWithBuffer (/node_modules/@giuseppecastaldo/baileys/lib/Socket/messages-recv.js:551:15)
    at WebSocket.<anonymous> (/node_modules/@giuseppecastaldo/baileys/lib/Socket/messages-recv.js:560:9)
    at WebSocket.emit (node:events:513:28)
    at /node_modules/@giuseppecastaldo/baileys/lib/Socket/socket.js:222:35
    at Object.decodeFrame (/node_modules/@giuseppecastaldo/baileys/lib/Utils/noise-handler.js:131:17)
    at WebSocket.onMessageRecieved (/node_modules/@giuseppecastaldo/baileys/lib/Socket/socket.js:198:15) waitOver=true msg=possible mutex deadlock
2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 pid=83 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 pid=83 hostname=2022a2f1ac2c 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 pid=83 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 pid=83 hostname=2022a2f1ac2c stack=Error: mutex start
    at /node_modules/@giuseppecastaldo/baileys/lib/Utils/make-mutex.js:15:31
    at Object.mutex (/node_modules/@giuseppecastaldo/baileys/lib/Utils/make-mutex.js:35:15)
    at handleMessage (/node_modules/@giuseppecastaldo/baileys/lib/Socket/messages-recv.js:451:29)
    at execTask (/node_modules/@giuseppecastaldo/baileys/lib/Socket/messages-recv.js:554:20)
    at processNodeWithBuffer (/node_modules/@giuseppecastaldo/baileys/lib/Socket/messages-recv.js:551:15)
    at WebSocket.<anonymous> (/node_modules/@giuseppecastaldo/baileys/lib/Socket/messages-recv.js:560:9)
    at WebSocket.emit (node:events:513:28)
    at /node_modules/@giuseppecastaldo/baileys/lib/Socket/socket.js:222:35
    at Object.decodeFrame (/node_modules/@giuseppecastaldo/baileys/lib/Utils/noise-handler.js:131:17)
    at WebSocket.onMessageRecieved (/node_modules/@giuseppecastaldo/baileys/lib/Socket/socket.js:198:15) 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 pid=83 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 pid=83 hostname=2022a2f1ac2c 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 pid=83 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 pid=83 hostname=2022a2f1ac2c stack=Error: mutex start
    at /node_modules/@giuseppecastaldo/baileys/lib/Utils/make-mutex.js:15:31
    at Object.mutex (/node_modules/@giuseppecastaldo/baileys/lib/Utils/make-mutex.js:35:15)
    at handleMessage (/node_modules/@giuseppecastaldo/baileys/lib/Socket/messages-recv.js:451:29)
    at execTask (/node_modules/@giuseppecastaldo/baileys/lib/Socket/messages-recv.js:554:20)
    at processNodeWithBuffer (/node_modules/@giuseppecastaldo/baileys/lib/Socket/messages-recv.js:551:15)
    at WebSocket.<anonymous> (/node_modules/@giuseppecastaldo/baileys/lib/Socket/messages-recv.js:560:9)
    at WebSocket.emit (node:events:513:28)
    at /node_modules/@giuseppecastaldo/baileys/lib/Socket/socket.js:222:35
    at Object.decodeFrame (/node_modules/@giuseppecastaldo/baileys/lib/Utils/noise-handler.js:131:17)
    at WebSocket.onMessageRecieved (/node_modules/@giuseppecastaldo/baileys/lib/Socket/socket.js:198:15) waitOver=true 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 pid=83 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 pid=83 hostname=2022a2f1ac2c 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 pid=83 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 pid=83 hostname=2022a2f1ac2c stack=Error: mutex start
    at /node_modules/@giuseppecastaldo/baileys/lib/Utils/make-mutex.js:15:31
    at Object.mutex (/node_modules/@giuseppecastaldo/baileys/lib/Utils/make-mutex.js:35:15)
    at handleMessage (/node_modules/@giuseppecastaldo/baileys/lib/Socket/messages-recv.js:451:29)
    at execTask (/node_modules/@giuseppecastaldo/baileys/lib/Socket/messages-recv.js:554:20)
    at processNodeWithBuffer (/node_modules/@giuseppecastaldo/baileys/lib/Socket/messages-recv.js:551:15)
    at WebSocket.<anonymous> (/node_modules/@giuseppecastaldo/baileys/lib/Socket/messages-recv.js:560:9)
    at WebSocket.emit (node:events:513:28)
    at /node_modules/@giuseppecastaldo/baileys/lib/Socket/socket.js:222:35
    at Object.decodeFrame (/node_modules/@giuseppecastaldo/baileys/lib/Utils/noise-handler.js:131:17)
    at WebSocket.onMessageRecieved (/node_modules/@giuseppecastaldo/baileys/lib/Socket/socket.js:198:15) 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 pid=83 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 pid=83 hostname=2022a2f1ac2c 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 pid=83 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 2023-01-02T20:58:23.788Z 2023-01-02T20:58:23.788Z 40 pid=83 hostname=2022a2f1ac2c stack=Error: mutex start
    at /node_modules/@giuseppecastaldo/baileys/lib/Utils/make-mutex.js:15:31
    at Object.mutex (/node_modules/@giuseppecastaldo/baileys/lib/Utils/make-mutex.js:35:15)
    at handleMessage (/node_modules/@giuseppecastaldo/baileys/lib/Socket/messages-recv.js:451:29)
    at execTask (/node_modules/@giuseppecastaldo/baileys/lib/Socket/messages-recv.js:554:20)
    at processNodeWithBuffer (/node_modules/@giuseppecastaldo/baileys/lib/Socket/messages-recv.js:551:15)
    at WebSocket.<anonymous> (/node_modules/@giuseppecastaldo/baileys/lib/Socket/messages-recv.js:560:9)
    at WebSocket.emit (node:events:513:28)
    at /node_modules/@giuseppecastaldo/baileys/lib/Socket/socket.js:222:35
    at Object.decodeFrame (/node_modules/@giuseppecastaldo/baileys/lib/Utils/noise-handler.js:131:17)
    at WebSocket.onMessageRecieved (/node_modules/@giuseppecastaldo/baileys/lib/Socket/socket.js:198:15) waitOver=true msg=possible mutex deadlock

If I tried to add:
whatsapp:

to the HA configuration.yaml  file (as you would do with an add-on, as directed per https://github.com/giuseppecastaldo/ha-addons#installation-guide), HA doesn't like it:
2023-01-02 21:02:00.425 ERROR (MainThread) [homeassistant.components.homeassistant] The system cannot restart because the configuration is not valid: Integration error: whatsapp - Integration 'whatsapp' not found.
2023-01-02 21:02:00.455 ERROR (MainThread) [homeassistant.components.websocket_api.http.connection] [140585782764368] The system cannot restart because the configuration is not valid: Integration error: whatsapp - Integration 'whatsapp' not found.
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/components/websocket_api/commands.py", line 200, in handle_call_service
await hass.services.async_call(
File "/usr/src/homeassistant/homeassistant/core.py", line 1745, in async_call
task.result()
File "/usr/src/homeassistant/homeassistant/core.py", line 1782, in _execute_service
await cast(Callable[[ServiceCall], Awaitable[None]], handler.job.target)(
File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 748, in admin_handler
await result
File "/usr/src/homeassistant/homeassistant/components/homeassistant/__init__.py", line 174, in async_handle_core_service
raise HomeAssistantError(
homeassistant.exceptions.HomeAssistantError: The system cannot restart because the configuration is not valid: Integration error: whatsapp - Integration 'whatsapp' not found.

@swinster
Good progress! I'm not sure what the mutex issues mean, or what could be causing them unfortunately...

If I tried to add: whatsapp:

That would mean you don't have the custom component installed yet, or it's installed, but not active. If you've installed it and want to avoid a double restart, just restart the main HA docker manually (skipping the configuration check).
Or remove the whatsapp: key from configuration.yaml, restart, and then add it back and restart again. Then you should be able to see the new whatsapp.* services.

Ok, I'm not entirely sure how to install the custom component yet. It's not an integration (and doesn't appear in that list), and other is no concept of add-ons in HA Docker. I will re-read the above to see if there are things I glossed over, but whatever I do to either restart HA or the HA docker (with the WhatsApp docker running), as soon as I re-add whatsapp: to the configuration.yaml, I get an invalid config.

The custom component is the code that provides the new whatsapp integration that you can then add to your configuration.
If you check the docker entrypoint script run.sh, it's installed there automatically - it goes into $CONFIG/custom_components (where $CONFIG is your configuration folder that contains configuration.yaml). To manually install the custom component, copy the contents of custom_component folder into $CONFIG/custom_components/whatsapp. You will want to modify whatsapp.py first and change HOST =  to the IP address/hostname of your whatsapp docker container.
Then restart HA, add whatsapp: to your configuration.yaml and you should be able to see the new services.

Awesome. I guess this is what you were talking about previously regarding mapping volumes. After sleeping on it, the change is simple and doesn't involve manually copying config, but rather redirecting the config/custom_components directory from the whatsapp contain to the HA container through updating the docker-compose.yaml. The new docker compose config for these containers are:
# Note: the local volume '/data' uses a symbolic link to allow simpler transportation of container data to a new server
# e.g., 'ln -s /volume1/docker /data' on a Synology NAS.
#
version: '3'
services:
  homeassistant:
    container_name: homeassistant
    image: "ghcr.io/home-assistant/home-assistant:stable"
    volumes:
      - /data/homeassistant:/config
      - /etc/localtime:/etc/localtime:ro
    restart: unless-stopped
    privileged: true
    network_mode: host

  whatsapp-ha:
    image: whatsapp-ha:latest
    container_name: whatsapp-ha
    volumes:
      - /data/homeassistant/custom_components:/config/custom_components
      - /data/whatsapp-ha/data:/data
    ports:
      - 3000:3000

And once HA has restarted, we can see the WhatsApp services:

I haven't tried to send anything yet, which may need to wait for a bit but I will try later.

FWIW, I have tried to send some messages via the Dev Tools --> Services, but have not managed it yet. If I log out of the device, I immediately see a QR code to re-link, but I cannot seem to get the send params (and probably the Target User ID) correct.
Will try again tomorrow.

That's great you now see the services in home assistant. Hopefully this is the last stretch and you're nearly there 🙂. I'm not sure what you're using for the send params but this page (hidden away from the home page) already has some example params for each service.

In theWhatsApp container logs, I still see the mutex deadlock, but not also something simpler:
[2023-01-04T00:55:03.787] [ERROR] default - Cannot read properties of undefined (reading 'payload')
[2023-01-04T00:55:34.984] [ERROR] default - Cannot read properties of undefined (reading 'payload')

So I guess I am not creating the body of the message correctly:

That all matches what I see in the documentation apart from body where they've used it in this format. So hopefully that should get it working
body:
  text: Hi it's a simple text message

It seems that all problems have been solved, I close the issue.

@Chief-T1 💥 - that is the issue - I have now send a successful message (albiet last night I had updated my status without issue). It would be good to understand the possibilities with the additional paramaters.
@giuseppecastaldo - whilst this is "working", I wouldn't necessarily say it's "fixed". There is a lot hacking and manual configuration to get this to work (such as WRT authentication, host addressing). It would also be nice to update documentation and examples. I can try to sumarise the steps below taken to get to this stage, but it might required someone with more coding experience to make the solution more elegant.
@piit79 - thanks for the guidance to get us to this stage.

That's great to hear, @swinster! I'm glad I could help a bit.
The body parameter is indeed an object with quite a few possible properties. It's not very easy to find out what they are, as the actual message sending is handled by an external library @adiwajshing/baileys. Looking at the source, the content parameter of the sendMessage method is of type AnyMessageContent defined here (slightly below actually as it's a union type with AnyRegularMessageContent). One would still need to dive into the subtypes used by the various properties to get the full picture. I guess there must be a simpler description somewhere else :)

Hmm, I was looking to see if I could build an image that wouldn't require manual configuration for each user (by hopefully passing docker environment variables into the container to remove the reliance on the template variable {{HOSTNAME}} in the whatsapp.py file, plus the static URL http://supervisor/core and the HA supervisor token ${process.env.SUPERVISOR_TOKEN} from the index.js file), and I seem to now have a build error:
npm ERR! code 128
npm ERR! An unknown git error occurred
npm ERR! command git --no-replace-objects ls-remote<EMAIL_ADDRESS>npm ERR! ssh -oStrictHostKeyChecking=accept-new: line 0: ssh: not found
npm ERR! fatal: Could not read from remote repository.
npm ERR!
npm ERR! Please make sure you have the correct access rights
npm ERR! and the repository exists.

I checked, and the giuseppecastaldo/balieys repo no longer exists. I guess this was forken from adiwajshing/baileys in the first place?

OK, never mind, I see a bunch of things (including this) have changed in the last commit. Just trying to keep me on my toes ;)

whilst this is "working", I wouldn't necessarily say it's "fixed". There is a lot of hacking and manual configuration to get this to work (such as WRT authentication and host addressing). It would also be nice to update documentation and examples. I can try to summarise the steps below to get to this stage, but it might require someone with more coding experience to make the solution more elegant.

This add-on is tested on various supervised home assistant devices. I don't understand everything you did with the docker compose file, it's not included in my repo, sorry.

@Chief-T1 , I think I might have made some progress in creating an image that can be reused (although, TBH, I am kind of randomly bashing the keyboard ;) ). Currently, this is built using the ghcr.io/home-assistant/amd64-base for my Synology device - I am not sure if that is useful for you? You can pull the image from here:
https://hub.docker.com/r/swinster/whatsapp-ha
The following docker-compose should help:
NOTE: I link the /data/ folder to the docker root folder location, just for ease of use. The default Synology docker location is (also assuming that you use the default volume1 when creating a data volume) /volume1/docker/.
  whatsapp-ha:
    image: swinster/whatsapp-ha:amd64-base
    container_name: whatsapp-ha
    volumes:
      - /data/homeassistant/custom_components:/config/custom_components
      - /data/whatsapp-ha/data:/data
    ports:
      - 3000:3000
    environment:
      - API_URL=<IP_Address_of_HA_container>:8123
      - TOKEN=<long_livedHA_token>
      - HOSTNAME_ID=<IP_Address_of_HA_container>

The three environment variables map to variables used in the index.js file and the custom_component/whatsapp.py file, which I have modified to read these variables, but if they do not exist, then ignore them and use what was coded previously. This should allow these files to be used to create both standalone docker images AND still be used to create the add-on.
I'm sure this is an inefficient way of doing things, but its a start :)
For reference, here are the modified index.js and whatsapp.py files (named to .txt) :
whatsapp.py.txt
index.js.txt

whilst this is "working", I wouldn't necessarily say it's "fixed". There is a lot of hacking and manual configuration to get this to work (such as WRT authentication and host addressing). It would also be nice to update documentation and examples. I can try to summarise the steps below to get to this stage, but it might require someone with more coding experience to make the solution more elegant.

This add-on is tested on various supervised home assistant devices. I don't understand everything you did with the docker compose file, it's not included in my repo, sorry. In the README file there is also an installation guide which in my opinion is not that difficult.

@giuseppecastaldo, you are correct, it is not that difficult  - assuming  you are using a supervised HA deployment. If you are running on a HA that is non-supervised (such as in an HA Docker container), there is no facility for an add-on at all, hence this thread. What we have done here is take the add-on and turned it into a stand-alone docker image that could then be deployed in non-supervised HA deployments. WIth a bit of luck, the modification above should allow people to deploy it as an add-on OR a stand-alone container.

I need help figuring out (at the moment) how to build the images for other architectures (such as arm7), given I do not have access to those architectures. If the various images could be built and published online as per the amd64 image above, all you would need is the docker-compose yaml info
In the meantime, here is my manual build process:

On your local host that is running docker, clone this git repo. I did this on a Synology NAS, with home folders enabled and the git server package installed. SSH into the host and run:

git clone https://github.com/giuseppecastaldo/ha-addons.git

Move to the correct folder:

cd  ha-addons/whatsapp_addon

Upload/overwrite the index.js.txt to your current folder, and the whatsapp.py.txt to the custom_component/ folder .

Edit the Dockerfile file build from the HA architecture that matches your architecture (edit the second line). For me, this is:

ARG BUILD_FROM
FROM ghcr.io/home-assistant/amd64-base

RUN apk add --no-cache git npm

COPY . /
RUN chmod a+x /run.sh
RUN chmod a+x /finish.sh

RUN cd / && npm install -f

EXPOSE 3000
CMD [ "/run.sh" ]

Other architectures are:
  ghcr.io/home-assistant/aarch64-base
  ghcr.io/home-assistant/amd64-base
  ghcr.io/home-assistant/armhf-base
  ghcr.io/home-assistant/armv7-base
  ghcr.io/home-assistant/i386-base

Build the docker image from the Dockerfile, which will build the docker image locally

sudo docker build -t whatsapp-ha .

Create the docker container. This YAML extract differs from the above as it creates the container based on the local image (rather than pulling from the online repo):

  whatsapp-ha:
    image: whatsapp-ha
    container_name: whatsapp-ha
    volumes:
      - /data/homeassistant/custom_components:/config/custom_components
      - /data/whatsapp-ha/data:/data
    ports:
      - 3000:3000
    environment:
      - API_URL=<IP_Address_of_HA_container>:8123
      - TOKEN=<long_livedHA_token>
      - HOSTNAME_ID=<IP_Address_of_HA_container>

NOTE: make sure you then update the API_URL, TOKEN and HOSTNAME_ID.

I was going to look at creating multiple architect stand-alone docker images, but unfortunately (for some reason), I am now seeing a Syntax error in whatsapp.js when attempting to start the container. I could have sworn I had it working a few days ago :( .
[2023-01-07T17:56:58.972] [INFO] default - Whatsapp Addon has started.
undefined:1778
}{
 ^
SyntaxError: Unexpected token { in JSON at position 60391
    at JSON.parse (<anonymous>)
    at useFileAuthState (/utils/useFileAuthState.js:34:43)
    at async WhatsappClient.connect (/whatsapp.js:51:38)
Node.js v18.9.1

It does look like a commit was made that changed things on this line (https://github.com/giuseppecastaldo/ha-addons/commit/5429368a0b48e48f8b526884ecd90627957f4576#diff-042b282ca284738d79e928df8b79cf09d265058fd48103b6a401d9034701a3bf), but I am not skilled enough to understand why this is causing an issue now. Even so, things worked after I pulled these changes, so I wonder why they have broken now.

I was going to look at creating multiple architecture stand-alone docker images, but unfortunately (for some reason), I am now seeing a Syntax error in whatsapp.js when attempting to start the container. I could have sworn I had it working a few days ago :( .

[2023-01-07T17:56:58.972] [INFO] default - Whatsapp Addon has started.

undefined:1778

}{

 ^

SyntaxError: Unexpected token { in JSON at position 60391

    at JSON.parse (<anonymous>)

    at useFileAuthState (/utils/useFileAuthState.js:34:43)

    at async WhatsappClient.connect (/whatsapp.js:51:38)

Node.js v18.9.1

It does look like a commit was made that changed things on this line (https://github.com/giuseppecastaldo/ha-addons/commit/5429368a0b48e48f8b526884ecd90627957f4576#diff-042b282ca284738d79e928df8b79cf09d265058fd48103b6a401d9034701a3bf), but I am not skilled enough to understand why this is causing an issue now. Even so, things worked after I pulled these changes, so I wonder why they have broken now.

I'm checking the problem, thanks for reporting

I was going to look at creating multiple architecture stand-alone docker images, but unfortunately (for some reason), I am now seeing a Syntax error in whatsapp.js when attempting to start the container. I could have sworn I had it working a few days ago :( .
[2023-01-07T17:56:58.972] [INFO] default - Whatsapp Addon has started.
undefined:1778
}{
 ^
SyntaxError: Unexpected token { in JSON at position 60391
    at JSON.parse (<anonymous>)
    at useFileAuthState (/utils/useFileAuthState.js:34:43)
    at async WhatsappClient.connect (/whatsapp.js:51:38)
Node.js v18.9.1

It does look like a commit was made that changed things on this line (5429368#diff-042b282ca284738d79e928df8b79cf09d265058fd48103b6a401d9034701a3bf), but I am not skilled enough to understand why this is causing an issue now. Even so, things worked after I pulled these changes, so I wonder why they have broken now.

I installed the add-on on a clean instance of Home Assistant and there doesn't seem to be any issues. Maybe it's a cache problem. Try uninstalling the addon completely or doing a rebuild.

Hi @swinster
Well done on your work, you've made really great progress. Sorry for the recent radio silence, I haven't had too much time to look at this recently. But am planning to try and follow your installation steps later this week.
I use a Raspberry pi 4 which is ARM64 architecture, so I can test the installation on this.
I just had a couple of questions from your comment here: https://github.com/giuseppecastaldo/ha-addons/issues/8#issuecomment-1371312444
When you say:

NOTE: I link the /data/ folder to the docker root folder location, just for ease of use. The default Synology docker location is (also assuming that you use the default volume1 when creating a data volume) /volume1/docker/.

I use openmediavault and my docker data folders are on different drives. I've never used symbolic links before (although it looks like something I should learn about using in the future) but can I just reference the path location as I normally would or do I need to change something else too?
For this bit here, I already have some custom_components which I want to keep separate, I assume I can just reference the whatsapp component folder inside the custom_component folder instead?

volumes:
- /data/homeassistant/custom_components:/config/custom_components

I currently access HA over https and have an SSL certificate. Is this where the hostname environment variable you mentioned comes into play or would this not work over https?

environment:
- HOSTNAME_ID=<IP_Address_of_HA_container>

Thanks again for all your great work :)

I installed the add-on on a clean instance of Home Assistant and there doesn't seem to be any issues. Maybe it's a cache problem. Try uninstalling the addon completely or doing a rebuild.

@giuseppecastaldo , indeed, whist what we are doing here is NOT working on the add-on and instead we are working on a standalone docker image, I removed all previous configuration, re-cloned this git repo and replace the index.js and whatsapp.py file with the modified versions (which I think should work for both standalone docker image builds as well as the add-on build), then rebuilt the docker image and container, and it looks like everything is back working.
FWIW, I have also figured out how to build separate containers based on different architectures using the HA builder, so with a bit of luck, we should be able to publish standalone docker containers for all architectures.
@Chief-T1 in the process of re-building the above and going back to a blank canvas, I realised that there were a couple of bit missing from my build process above. I will add those to the post above (https://github.com/giuseppecastaldo/ha-addons/issues/8#issuecomment-1371347953 - which will be UPDATE 2). However, if the build process works as I hope, then YOU would NOT need to build, merely add the relevant docker-compose configuration to grab the correct docker whatsapp-ha image .

When you say:

NOTE: I link the /data/ folder to the docker root folder location, just for ease of use. The default Synology docker location is (also assuming that you use the default volume1 when creating a data volume) /volume1/docker/.

I use openmediavault and my docker data folders are on different drives. I've never used symbolic links before (although it looks like something I should learn about using in the future) but can I just reference the path location as I normally would or do I need to change something else too?

Yes, you can use your path - i.e.  /whatever/path/you/have/to/openmediavault/docker/
FWIW, think of a symbolic link as an alias to that folder. For example, if you ran:
ln -s /whatever/path/you/have/to/openmediavault/docker /data

it maps the /data folder to your actual folder. If you then list the contents of the root folder and show links (using the -l parameter), you will see the link. For me this looks like:
$ ls / -l
total 68
...
lrwxrwxrwx+   1 root root    15 Dec 28 03:36 data -> /volume1/docker
...

For this bit here, I already have some custom_components which I want to keep separate, I assume I can just reference the whatsapp component folder inside the custom_component folder instead?

volumes:

/data/homeassistant/custom_components:/config/custom_components

In this case, you do NOT want to keep it sperate. You actually WANT the WhatsApp container to able to access this folder as this is what would normally happen when running it as an add on. It will create it own whatsapp folder within the HA custom_component folder, which itself will contain files (such as the whatapp.py file) that HA will need to access and run. For example:

I currently access HA over https and have an SSL certificate. Is this where the hostname environment variable you mentioned comes into play or would this not work over https?

environment:
- HOSTNAME_ID=<IP_Address_of_HA_container>

So what I'm doing here is trying to tell the WhatsApp container where to find the HA container, and indeed, vice versa. The modified index.js file in the whatsapp-ha container uses this information in place of the supervisor/core  that would be used if it was run as an add-on. I think the modifications I made to this file should allow it to continue to work for the add-on build AND work for the standalone image build. There is a little logical if statement in there that looks to see if this environment variable exists or not. In addition, the whatsapp.py (which need to copied the the HA custom_component folder as outlined above) will be run by HA, and a similar logical if statement will allow HA to find the whatsapp-ha container, for both add-in and standalone builds.
In your case, as long as the whatsapp-ha container can resolve the host name of the HA container, I don't see what it wouldn't work (I haven't tested it though - thanks for volunteering ;) ).

okey-dokey, looks like we have something resembling an actual resolution for this issue :)
@Chief-T1 , I have created a cross-architectural image that allows this add-on to run a standalone container, which finally resembles a resolution to this issue.  There are still some things to think about, but it's close. I have had to post the images to individual Docker hub repositories as I can't figure out how to post the same image:tag to the same repo for different architectures. This means there are currently the following repos:
swinster/whatsapp-ha-armv7
swinster/whatsapp-ha-i386
swinster/whatsapp-ha-aarch64
swinster/whatsapp-ha-armhf
swinster/whatsapp-ha-amd64

To make use of these, you need to pull the image using the following docker-compose for this service:
  whatsapp-ha:
    image: swinster/whatsapp-ha-amd64
    container_name: whatsapp-ha
    restart: "no"
    depends_on:
      - homeassistant
    volumes:
      - /data/homeassistant/custom_components:/config/custom_components
      - /data/whatsapp-ha/data:/data
    ports:
      - 3000:3000
    environment:
      #- HA_PORT=8123
      - HA_HOSTNAME=<your_hostname_or_ip_of_the_HA_container>
      - TOKEN=<long_lived_API_token>

NOTE 1: Select the correct image for your architecture by updating the image parameter.
NOTE: 2 Ensure the  /data/whatsapp-ha/data folder exists on the host, which will be used as a persistent volume for the whatsapp-ha container. The path is arbitrary - I use /data, but you can specify whatever path works for you. The image now contains an options.json file that will be compiled to the containers /data folder IF it is running only as a stand-alone container (this was achieved through a slight modification to the run.sh bash script.
NOTE 3: The  /data/homeassistant/custom_component persistent volume should point to the same path used by the HA config/custom_component folder on the host.
NOTE 4: I have also changed the environment variable names (e.g. HA_HOSTNAME) to make them more obvious. The HA_PORT environment variable is now optional and will default to using port 8123 is not defined, AND this will be used in stand-alone mode.

In addition, you need to update the Home Assistant docker-compose service (for example):
  homeassistant:
    container_name: homeassistant
    image: "ghcr.io/home-assistant/home-assistant:stable"
    volumes:
      - /data/homeassistant:/config
      - /etc/localtime:/etc/localtime:ro
    restart: unless-stopped
    privileged: true
    network_mode: host
    environment:
      - WHATSAPP_HOSTNAME=<your_hostname_or_ip_of_the_whatsapp-ha_container>
      #- WHATSAPP_PORT=3000

NOTE: This is an example of my HA docker-compose, so you only need to update the environment options. The WHATSAPP_HOSTNAME point Home Assitant back to the whatsapp-ha container (for me, as both HA and whatsapp-ha are running in a single stack on the same host, I use the same IP address in both places (I have not tested using TLS services and host names yet). The WHATSAPP_PORT is optional but defaults to using port 3000

Once deployed, you still need to update the HA configuration.yaml file with:
whatsapp:

I might do a little video on all of this.
It would be super cool (@giuseppecastaldo) if the changes to the index.js, whatsapp.py, run.sh and options.json` files could be added to this repo, meaning that in the future, this project could be built as a HA add-on or as a stand-alone container. I'm hopeful that the alterations should work for both cases.

@Chief-T1 - there was an update to this repo by @giuseppecastaldo in the last couple of days, and the version bumped to 1.3. I thought I would rebuild the standalone image, but unfortunately, in the first instance, it failed :(
I have no idea what this issue is, but will plug away again to see if we can get this version working.
#0 10.06 npm WARN using --force Recommended protections disabled.
#0 17.18 npm WARN skipping integrity check for git dependency<EMAIL_ADDRESS>#0 69.79 npm WARN skipping integrity check for git dependency<EMAIL_ADDRESS>#0 79.73 npm WARN deprecated<EMAIL_ADDRESS>The querystring API is considered Legacy. new code should use the URLSearchParams API instead.
#0 80.56 npm WARN deprecated<EMAIL_ADDRESS>Use your platform's native performance.now() and performance.timeOrigin.
#0 101.5 npm ERR! code 1
#0 101.6 npm ERR! path /Baileys/node_modules/sharp
#0 101.6 npm ERR! command failed
#0 101.6 npm ERR! command sh -c (node install/libvips && node install/dll-copy && prebuild-install) || (node install/can-compile && node-gyp rebuild && node install/dll-copy)
#0 101.6 npm ERR! sharp: Please see https://sharp.pixelplumbing.com/install for required dependencies
#0 101.6 npm ERR! sharp: Installation error: Intel Architecture 32-bit systems require manual installation of libvips >= 8.12.2
#0 101.6
#0 101.6 npm ERR! A complete log of this run can be found in:
#0 101.6 npm ERR!     /root/.npm/_logs/2023-01-21T18_46_26_442Z-debug-0.log
------
error: failed to solve: executor failed running [/bin/ash -o pipefail -c cd /Baileys && npm i -f && cd .. && npm install -f]: exit code: 1

Hmm - the folder /Baileys/node_modules/sharp doesn't exist in this repo. I think @giuseppecastaldo was originally forking the entire Baileys repo (which seems to do all the WhatsApp stuff), then instead pointed to the repo where that is contained, and now has returned to pulling in some of that repo.
Again, apologies if I do not understand this correctly.

A quick update. I thought this was my issue, as I had forked this repo to add the relevant changes to the index.js, run.sh, options.json and custom_component/whatsapp.py files, then built using my repo. However, the same thing happens if it try to build directly from this repo and with no additions. Interestingly, the arm64 build completes, but the ha-builder fails when building the other architectures (which was working last week)
The error printed above:
Installation error: Intel Architecture 32-bit systems require manual installation of libvips >= 8.12.2

seem to be similar to the issue https://github.com/giuseppecastaldo/ha-addons/issues/6

Having an issue with the docker install. I've changed the port to 3001 as 3000 was already in use. upon sending a message i get the following error, any help would be appreciated:
Logger: homeassistant.components.websocket_api.http.connection
Source: custom_components/whatsapp/whatsapp.py:20
Integration: Home Assistant WebSocket API (documentation, issues)
First occurred: 01:24:15 (7 occurrences)
Last logged: 14:00:33
[139975312049536] Error handling message: Unknown error (unknown_error) from <IP_ADDRESS> (Mozilla/5.0 (X11; CrOS x86_64 14541.0.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<IP_ADDRESS> Safari/537.36)
[139974092042064] Error handling message: Unknown error (unknown_error) from <IP_ADDRESS> (Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.3 Safari/605.1.15)
[139974112843168] Error handling message: Unknown error (unknown_error) from <IP_ADDRESS> (Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.3 Safari/605.1.15)
[139974332081264] Error handling message: Unknown error (unknown_error) from <IP_ADDRESS> (Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.3 Safari/605.1.15)
Traceback (most recent call last):
File "/usr/local/lib/python3.10/site-packages/urllib3/connection.py", line 174, in _new_conn
conn = connection.create_connection(
File "/usr/local/lib/python3.10/site-packages/urllib3/util/connection.py", line 95, in create_connection
raise err
File "/usr/local/lib/python3.10/site-packages/urllib3/util/connection.py", line 85, in create_connection
sock.connect(sa)
ConnectionRefusedError: [Errno 111] Connection refused
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/local/lib/python3.10/site-packages/urllib3/connectionpool.py", line 703, in urlopen
httplib_response = self._make_request(
File "/usr/local/lib/python3.10/site-packages/urllib3/connectionpool.py", line 398, in _make_request
conn.request(method, url, **httplib_request_kw)
File "/usr/local/lib/python3.10/site-packages/urllib3/connection.py", line 239, in request
super(HTTPConnection, self).request(method, url, body=body, headers=headers)
File "/usr/local/lib/python3.10/http/client.py", line 1282, in request
self._send_request(method, url, body, headers, encode_chunked)
File "/usr/local/lib/python3.10/http/client.py", line 1328, in _send_request
self.endheaders(body, encode_chunked=encode_chunked)
File "/usr/local/lib/python3.10/http/client.py", line 1277, in endheaders
self._send_output(message_body, encode_chunked=encode_chunked)
File "/usr/local/lib/python3.10/http/client.py", line 1037, in _send_output
self.send(msg)
File "/usr/local/lib/python3.10/http/client.py", line 975, in send
self.connect()
File "/usr/local/lib/python3.10/site-packages/urllib3/connection.py", line 205, in connect
conn = self._new_conn()
File "/usr/local/lib/python3.10/site-packages/urllib3/connection.py", line 186, in _new_conn
raise NewConnectionError(
urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0x7f4e616a6290>: Failed to establish a new connection: [Errno 111] Connection refused
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/local/lib/python3.10/site-packages/requests/adapters.py", line 489, in send
resp = conn.urlopen(
File "/usr/local/lib/python3.10/site-packages/urllib3/connectionpool.py", line 787, in urlopen
retries = retries.increment(
File "/usr/local/lib/python3.10/site-packages/urllib3/util/retry.py", line 592, in increment
raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='<IP_ADDRESS>', port=3001): Max retries exceeded with url: /sendMessage (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f4e616a6290>: Failed to establish a new connection: [Errno 111] Connection refused'))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/components/websocket_api/decorators.py", line 27, in _handle_async_response
await func(hass, connection, msg)
File "/usr/src/homeassistant/homeassistant/components/websocket_api/commands.py", line 646, in handle_execute_script
await script_obj.async_run(msg.get("variables"), context=context)
File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 1524, in async_run
await asyncio.shield(run.async_run())
File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 409, in async_run
await self._async_step(log_exceptions=False)
File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 453, in _async_step
self._handle_exception(
File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 476, in _handle_exception
raise exception
File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 451, in _async_step
await getattr(self, handler)()
File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 684, in _async_call_service_step
await service_task
File "/usr/src/homeassistant/homeassistant/core.py", line 1755, in async_call
task.result()
File "/usr/src/homeassistant/homeassistant/core.py", line 1792, in _execute_service
await cast(Callable[[ServiceCall], Awaitable[None]], handler.job.target)(
File "/config/custom_components/whatsapp/init.py", line 18, in send_message
await hass.async_add_executor_job(whatsapp.send_message, call.data)
File "/usr/local/lib/python3.10/concurrent/futures/thread.py", line 58, in run
result = self.fn(*self.args, **self.kwargs)
File "/config/custom_components/whatsapp/whatsapp.py", line 20, in send_message
return requests.post(url_normalize(f'{HOST}/sendMessage'), json=data).content == 'OK'
File "/usr/local/lib/python3.10/site-packages/requests/api.py", line 115, in post
return request("post", url, data=data, json=json, **kwargs)
File "/usr/local/lib/python3.10/site-packages/requests/api.py", line 59, in request
return session.request(method=method, url=url, **kwargs)
File "/usr/local/lib/python3.10/site-packages/requests/sessions.py", line 587, in request
resp = self.send(prep, **send_kwargs)
File "/usr/local/lib/python3.10/site-packages/requests/sessions.py", line 701, in send
r = adapter.send(request, **kwargs)
File "/usr/local/lib/python3.10/site-packages/requests/adapters.py", line 565, in send
raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPConnectionPool(host='<IP_ADDRESS>', port=3001): Max retries exceeded with url: /sendMessage (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f4e616a6290>: Failed to establish a new connection: [Errno 111] Connection refused'))

@chinedu40 Did you verify that node is listening on port 3001 inside the WhatsApp container? The [Errno 111] Connection refused error would suggest that it doesn't.

@chinedu40 Did you verify that node is listening on port 3001 inside the WhatsApp container? The [Errno 111] Connection refused error would suggest that it doesn't.

Thanks a lot for this nudge. It made me realise that if you are changing the ports, only the docker host port needs to change and not the container port. This meant i just needed to change the port mapping to 3001:3000 instead of 3001:3001. It appears for the plugin that port 3000 is a constant container port that the node is listening on.

@chinedu40 , I guess anything is doable. I have some other issue at the moment and haven't had time to figure out the update of this docker image. Hopefully, I can get back to it soon.

@swinster
I finally got around to testing this on my Raspberry Pi. It took me ages as I previously was using a selenium script to automate this with Node Red and while my hacky method wasn't perfect it worked.
First of all, this now works 10 times better and messages send instantly, I've had no issues with it randomly stopping working how I did with my old method.
I had some issues using your image on the Raspberry Pi related to what you mentioned above with the ha-builder not working. So I had to manually change the build argument in the Dockerfile to FROM ghcr.io/home-assistant/aarch64-base
I access home assistant using HTTPS and unfortunately, this failed to work as it's hardcoded to use HTTP. I have raised a pull request on your forked repo to take this into account.
Thanks

Seems like this plugin has stopped working as I can no longer login using a QR Code. I don’t have the expertise to update @swinster image, but a possible fix it to update the version on src/Defaults/baileys-version.json to "version": [2, 2323, 4].
@swinster  would this be possible?

I spent some time fixing the error.
I forked @swinster repo, made the change to src/Defaults/baileys-version.json and changed it to "version": [2, 2323, 4]. I then downloaded the zip file and unpacked it on my synology nas drive. I edited the dockerfile to include ghcr.io/home-assistant/amd64-base architecture. I ran "sudo docker build -t whatsapp-ha ." It was built successfully. I then didn't exactly know where the image was stored but turns out running docker on synology 6.2 listed my image on the docker app and i made a container from there. I had to stop swinters/image so i could use the same settings as before but i hope the above helps someone else to fix the issue.

Hey @chinedu40 . I love this comment, "I don’t have the expertise to update".... There is a queue 🤣
I have recently broken my HA, and have just been fixing it tonight. Maybe I can look at this at the weekend.

Hello, is anybody keeping a how-to on this install somewhere, I am not sure I would be able to re-create it from all the comments?
Also, do you think we could keep swinster's fork up-to-date on the recent castaldo commits (including the required standalone docker install changes of course)?


Error Finishing Epoch

🙂 Expected behavior
Finish epoch, make claims and generate proofs.
🫠 Actual behavior
Dispatcher error, machine loosing state and validator re sending inputs to the machine
🧪 Minimal test case
Create a voucher and increase time to claim epoch
🌎 Environment
Rollups version 0.9.0
sunodo_epoch_error.txt

Sorry for the late reply.
First of all, which version of sunodo-cli did you use?
Please, test with https://github.com/sunodo/sunodo/releases/tag/%40sunodo%2Fcli%400.6.0 that uses the rollups-0.9.1

Is it a permission error?

The current cartesi node version needs to share this snapshots directory between server-manager and advance-runner, I'll investigate why this is happening.

I'm assuming this only happens when running the docker engine on Linux.
Using Docker Desktop for macOS|Linux|Windowshis should work fine since they use a VM and mount this via network somehow.


Response Download API

Description:
Refactor the API to provide more consistency and will allow users to save files to their computers.
Acceptance Criteria:

[ ] The Response Download API is functional and allows users to export form responses to CSV files.
[ ] The CSV functionality of the  API is documented for use GC Forms Developer use only.
[ ] Errors with the API show up for clients downloading a form, with a clear CTA to get support and information for our team to action the issue.
[ ] Reliability testing - aim for 1,000 forms with a 0% drop rate

Just remembered this... I'll connect with them this week and see if we need a quick touch point with them on it or email is enough.

API Endpoint PR merged into New Download Formats feature branch https://github.com/cds-snc/platform-forms-client/pull/2831


ValueError: The provided tag was already used for this event type

I am getting the above error multiple times .
I got it while training a new model from scratch.
I also got it while forwarding and tracking from the pre saved model
It works fine for the first video tag (0002), from the next video tag onwards I get the above error.
I also tried passing a single video tag(0006) and I still get the error.

Hey! I have not seen this error before. The Tensorflow profiler seems to be active, which should not happen. Also maybe you can disable the writing of that summary (just comment out line 201 in Trainer.py) , since that seems to be the cause of the issue

How to set the tensorflow profiler to be inactive?
Also increasing the threshold in the summary writing code(line 201) fixed that issue

I'm not too familiar with the profiler, you need to consult the documentation. Good to hear that the issue was fixed.


Incoming Call Transfers

Hello,
It`ll be possible in the future incoming call transfers?
Thanks.

Hi,
you can already transfer active calls:
https://github.com/arnonym/ha-plugins#to-transfer-a-call-to-a-different-sip-uri

Well, when I dial to an extension configured in sip_1 and then execute a transfer using STDIN command, I receive the following message:
| 15:46:18.520947 [ ] Warning: call not in progress: sip:6000@<IP_ADDRESS>:8088

But if I dial using STDIN, the call is transfered. Maybe I`m missing something.

That's currently a bit unlucky in how ha-sip identifies calls. for outgoing calls it uses exactly the string you specified when you dialed the number, for incoming it gets some parsed version of that. In your case that's probably just "6000", but you can look in the logs for "Registering call with id ". The number is the identifier you need to use for the transfer. You also can set the log level to "2" if the log is too noisy.

The incoming call identify for transfer worked well and the STDIN command did its job, but...
If I place the same stdin command in an automation I get the following log message:

I've already tried the input parameter "number:" without quotes, single and double quotes, with the same result.

For some reason the trailing curly brace is missing and I don't have a clue how that can happen. Maybe try "data-template" instead of "data" and hope that home assistant is doing something differently then or check the leading white-space in the yaml for tabs.  :man_shrugging:

Closed because of inactivity.

Hi,
I've never succeeded transferring calls using automation. If you could test it and report if you get the same behavior I'll appreciate.
Only works if I execute the command STDIN, but if I use an automation, I get the error :"Could not deserialize JSON: "command":"transfer","number":"6002","transfer_to":"sip:6001@<IP_ADDRESS>:8088"}"
with a missing curly bracket.

Hi,
I've never succeeded transferring calls using automation. If you could test it and report if you get the same behavior I'll appreciate.
Only works if I execute the command STDIN, but if I use an automation, I get the error :"Could not deserialize JSON: "command":"transfer","number":"6002","transfer_to":"sip:6001@<IP_ADDRESS>:8088"}"
with a missing curly bracket.

Forget about it, after several tests I got the point. The problem was related to webhooks triggering automations. For some reason action is not properly executed. I solved the issue adding a 3 seconds delay before action to be executed and works fine.


error while installing node modules

Error I keep getting everytime i install node_modules
Building the projects in this solution one at a time. To enable parallel build, please add the "/m" switch.
Building the projects in this solution one at a time. To enable parallel build, please add the "/m" switch.
C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppBuild.targets(293,5): error MSB3501: Could not read
 lines from file "Release\obj\action_before_build\action_b.A8ED1804.tlog\action_before_build.lastbuildstate". The proce
ss cannot access the file 'C:\Users\Discord Bots\Desktop\modmailbot\node_modules\sqlite3\build\deps\Release\obj\action_
before_build\action_b.A8ED1804.tlog\action_before_build.lastbuildstate' because it is being used by another process. [C
:\Users\Discord Bots\Desktop\modmailbot\node_modules\sqlite3\build\deps\action_before_build.vcxproj]
Failed to execute 'C:\Program Files\nodejs\node.exe C:\Program Files\nodejs\node_modules\npm\node_modules\node-gyp\bin\node-gyp.js build --fallback-to-build --module=C:\Users\Discord Bots\Desktop\modmailbot\node_modules\sqlite3\lib\binding\node-v64-win32-x64\node_sqlite3.node --module_name=node_sqlite3 --module_path=C:\Users\Discord Bots\Desktop\modmailbot\node_modules\sqlite3\lib\binding\node-v64-win32-x64' (1)

C:\Users\Discord Bots\Desktop\modmailbot>```

This might be fixed in a recent update of node-sqlite3. I'll update it for the bot soon (I'll post a message here when I've pushed the update) and you should then try again.

Can you try again with modmailbot v2.16.0?

Yes it works now.