Habr•October 6, 2026•🇷🇺Translated from Russian

How a Node.js Bridge Connects MAX and VK Messengers to Chatwoot with Secure Bidirectional Sync

A technical walkthrough details the construction of a bidirectional bridge that integrates the MAX messenger and VK communities into Chatwoot as separate API inboxes. The solution avoids web scraping and personal account automation by relying exclusively on official bot endpoints and community callback mechanisms.

The architecture consists of a minimal Node.js service exposing four webhook routes: incoming events from MAX, VK Callback API confirmations and messages, plus protected outgoing routes triggered by Chatwoot message_created events. All traffic terminates at a reverse proxy while the container itself remains isolated on an internal Docker network.

Contacts are created with stable identifiers prefixed by channel (max: or vk:) to prevent cross-platform collisions. Conversations are then linked via source_id returned by the Chatwoot Application API, and mappings are persisted in a JSON file inside a named Docker volume to survive container restarts.

Incoming MAX messages are authenticated using the X-Max-Bot-Api-Secret header and filtered to exclude bot-generated updates. VK events undergo group_id and secret validation, with only message_new events processed. Photographs from VK are downloaded at maximum resolution and forwarded as multipart attachments.

Outbound messages from Chatwoot are filtered to ensure only genuine operator replies are relayed. MAX messages use the platform-api2 endpoint with Authorization tokens supplied via mounted secrets. VK image uploads follow the three-step photos.getMessagesUploadServer, upload, and photos.saveMessagesPhoto flow.

Deduplication relies on message IDs stored in limited ring buffers of the last 2000 events. The author notes that this provides protection against duplicate webhooks but does not guarantee exactly-once semantics. SSRF risks are mitigated by enforcing HTTPS, exact origin matching for Chatwoot URLs, MIME-type restrictions, size limits, and redirect validation.

The implementation is packaged as a minimal Alpine-based Docker image running as an unprivileged user. Production recommendations include replacing the JSON state file with a transactional database, adding a durable queue with dead-letter handling, and implementing structured logging plus rate-limit awareness.

Related articles

Securitylab•Other

OpenAI Releases GPT-6.1 Terra: Cost-Effective Model Focused on Computer Control, Image Analysis and Practical Automation

OpenAI has launched GPT-6.1 Terra, a new model positioned between its high-end GPT-6 Astra and more affordable options in the GPT-6 family. The model emphasizes real-world computer interaction, visual understanding of documents and interfaces, and reduced error rates rather than raw reasoning benchmarks. It supports a 1.05 million token context window, image inputs, and tool use through the Responses API while cutting input token prices by half compared with its predecessor. Published benchmarks show substantial gains on Terminal-Bench 4.0, OSWorld 2.1 and Agents' Last Exam, with error rates dropping sharply at both low and maximum reasoning levels. OpenAI stresses that the model still requires human oversight for high-stakes actions and does not directly process audio or video. The release targets developers and enterprises seeking reliable automation of repetitive multi-step tasks at lower cost than flagship models.

Habr•Other

Yandex Black October: How Architectural Flaws and Capacity Mismanagement Turned Data Center Losses Into a 11-Day Fintech Coma

In October 2026 three Yandex data centers in Central Russia were physically destroyed within days, triggering the collapse of Yandex Cloud and multiple core services. Between the first and third site failures engineers had 74 hours to restore quorum and rebalance workloads yet failed to do so because Control Plane components remained tied to the lost zone and spare capacity had been eliminated to cut costs. Core banking and BNPL systems entered Read-Only mode after losing quorum, forcing a complete stop-the-world reconciliation that lasted until 22 October. Backups stored inside the same regional S3 buckets proved unusable, resulting in a seven-day RPO and primary-key collisions after restoration. The incident exposed that Metro-Cluster designs had been incorrectly treated as full Disaster Recovery and that aggressive AP microservice patterns created logical split-brain conditions outside the database layer.

AntiMalware•Other

Astra Group Releases Low-Code Astra AI Platform for Building Corporate AI Agents in Closed Environments

Astra Group has launched the Astra AI Platform, a low-code constructor designed for creating corporate AI applications that operate entirely within closed circuits without reliance on foreign clouds. The platform targets small and medium businesses as well as large corporations, enabling rapid deployment of AI secretaries, technical support assistants, and other agents in days rather than months. It forms part of the broader Astra AI ecosystem and includes two main constructors: one for machine learning model training and deployment, and another for LLM-based language assistants, document search, and process automation. Users can assemble scenarios from visual blocks, debug them in real time, or extend functionality with custom Python code when needed. The solution supports RAG-based knowledge bases, integration with external tools such as CRM and ERP systems, and the coordination of multiple agents for distributed task handling. One demonstrated use case involves processing ten pages of engineering drawings and specifications in five minutes to prepare data for downstream systems. The product is already listed in the Russian domestic software registry and available to customers.

Habr•Other

Multi-Tenancy Isolation in VictoriaMetrics, VictoriaLogs and Grafana: Building Client Separation in a Shared Stack

Voltir runs a single shared monitoring stack consisting of VictoriaMetrics, VictoriaLogs, Grafana and vmalert for all customers instead of deploying separate instances per tenant. Isolation relies on numeric account IDs enforced at every layer: nginx validates tokens against the platform API before proxying writes, Grafana data sources hard-code tenant accounts, and vmalert rules receive automatic account filters. The team discovered that a single malformed rule or template could break alerting for every tenant because vmalert loads the entire rules directory at once. They also found that Grafana automatically created personal organizations granting Org Admin rights, accumulating hundreds of orphaned organizations and users that consumed disk space and resources. A dedicated cleanup module plus hourly reconciliation now removes rules, organizations, series and users when a tenant is deleted, while isolation tests verify both data and API objects across tenants.