# huesos Basis for developing chat-robots with "Web App" technology for Telegram ## Installation ### AnangoDB 1. Configure unix-socket Edit the file `/etc/arangodb3/arangod.conf`<br> `endpoint = tcp://127.0.0.1:8529` -> `endpoint = unix:///var/run/arangodb3/arango.sock` (this will disable the web panel)<br> To make the web panel work, you can add this to the NGINX server settings: ```lua server { ... server_name arangodb.domain.zone; ... allow 45.159.249.167; allow 192.168.1.1/24; allow 127.0.0.1; deny all; # ArangoDB location / { proxy_pass http://arangodb; } } upstream arangodb { server unix:/var/run/arangodb3/arango.sock; } ``` <br> [here is my solution for "permission denied" problem on Ubuntu (accepted by ArangoDB maintainer)](https://github.com/arangodb/arangodb/issues/17302)<br> <br> OR JUST<br> Edit the file `/etc/arangodb3/arangod.conf`<br> `endpoint = tcp://127.0.0.1:8529` -> `endpoint = tcp://0.0.0.0:8529`<br> Edit the file `mirzaev/huesos/system/settings/arangodb.php` `unix:///var/run/arangodb3/arango.sock` -> `tcp://YOUR_IP_ADDRESS:8529` (it is slow and not secure)<br> 2. Create a Graph with the specified values **Name:** catalog<br> <br> * Relatin 1 **edgeDefinition:** entry<br> **fromCollections:** categoy, product<br> **toCollections:** category * Relation 2 **edgeDefinition:** reservation<br> **fromCollections:** product<br> **toCollections:** cart 3. Create a Graph with the specified values **Name:** users<br> <br> * Relation 1 **edgeDefinition:** connect<br> **fromCollections:** cart, session<br> **toCollections:** account, session **Orphan Collections:** product 4. Create indexes for the "product" collection **Type:** "Inverted Index"<br> **Fields:** name.ru<br> **Analyzer:** "text_ru"<br> **Search field:** true<br> **Name:** name_ru<br> <br> *Add indexes for all search parameters and for all languages (search language is selected based on the user's language, <br> otherwise from the default language specified in the active settings from **settings** collection document)*<br> <br> *See fields in the `mirzaev/arming_bot/models/product`<br> **name.ru**, **description.ru** and **compatibility.ru*** 4. Create a View with the specified values **type:** search-alias (you can also use "arangosearch")<br> **name:** **product**s_search<br> **indexes:**<br> <br> You can copy an example of view file from here: `/examples/arangodb/views/products_search.json` ```json "indexes": [ { "collection": "product", "index": "title_ru" # THIS IS AN EXAMPLE } ] ``` ### NGINX 1. Create a NGINX server You can copy an example of server file from here: `/examples/nginx/server.conf` 2. Add support for javascript modules Edit the file `/etc/nginx/mime.types`<br> `application/javascript js;` -> `application/javascript js mjs;` ### SystemD (or any alternative you like) You can copy an example of systemd file from here: `/examples/systemd/huesos.service`<br> <br> **Execute:** `sudo cp huesos.service /etc/systemd/system/huesos.service && sudo chmod +x /etc/systemd/system/huesos.service`<br> <br> *before you execute the command think about **what it does** and whether the **paths** are specified correctly*<br> *the configuration file is very simple and you can remake it for any alternative to SystemD that you like* ## Settings Settings of chat-robot and Web App<br> <br> Make sure you have a **settings** collection (can be created automatically) and at least one document with the "status" parameter set to "active"<br> You can copy a clean settings document without comments from here: `/examples/arangodb/collections/settings.json` ```json { "status": "active", "project": { "name": "PROJECT" }, "language": "en", // Will be converted to an instance of enumeration `mirzaev\arming_bot\models\enumerations\language` "currency": "usd", // Will be converted to an instance of enumeration `mirzaev\arming_bot\models\enumerations\currency` "company": { "identifier": null, // Example: "000000000000000" (string|null) (if `null` it will not be displayed) "tax": null, // Example: "000000000000" (string|null) (if `null` it will not be displayed) "name": null, // Example: "COMPANY" (string|null) (if `null` it will not be displayed) "offer": false, // Display the data of a public offer in the footer? (bool) (does not affect the `/offer` page generation) "sim": null, // Examples: "+7 000 000-00-00", "70000000000" (string|null) (if `null` it will not be displayed) "mail": null // Example: "name@domain.zone" (string|null) (if `null` it will not be displayed) } } ``` ## Suspensions System of suspensions of chat-robot and Web App<br> <br> Make sure you have a **suspension** collection (can be created automatically)<br> You can copy a clean suspension document without comments from here: `/examples/arangodb/collections/suspension.json` ```json { "end": 1726068961, // Unixtime "targets": { "chat-robot": true, // Block chat-robot "web app": true // Block "Web App" }, "access": { "tester": true, // Account with `"tester": true` "developer": true // Account with `"developer": true` }, "description": { "ru": "Разрабатываю каталог, поиск и корзину", "en": "I am developing a catalog, search and cart" } } ```