{"id":18635077,"url":"https://github.com/wenewzhang/mixin_network-nodejs-bot2","last_synced_at":"2025-08-04T19:38:31.977Z","repository":{"id":140159467,"uuid":"163956980","full_name":"wenewzhang/mixin_network-nodejs-bot2","owner":"wenewzhang","description":" This article will show you howto create a nodejs-bot which let your bot receive message from any user.","archived":false,"fork":false,"pushed_at":"2019-05-19T05:00:04.000Z","size":4297,"stargazers_count":8,"open_issues_count":0,"forks_count":9,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-10T20:32:09.236Z","etag":null,"topics":["mixin-messenger","nodejs","nodejs-bot","payment"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wenewzhang.png","metadata":{"files":{"readme":"README-russian.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-01-03T10:15:46.000Z","updated_at":"2020-02-22T12:52:53.000Z","dependencies_parsed_at":"2023-05-13T09:30:56.430Z","dependency_job_id":null,"html_url":"https://github.com/wenewzhang/mixin_network-nodejs-bot2","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wenewzhang%2Fmixin_network-nodejs-bot2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wenewzhang%2Fmixin_network-nodejs-bot2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wenewzhang%2Fmixin_network-nodejs-bot2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wenewzhang%2Fmixin_network-nodejs-bot2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wenewzhang","download_url":"https://codeload.github.com/wenewzhang/mixin_network-nodejs-bot2/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248361450,"owners_count":21090900,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["mixin-messenger","nodejs","nodejs-bot","payment"],"created_at":"2024-11-07T05:23:19.671Z","updated_at":"2025-04-11T08:30:30.940Z","avatar_url":"https://github.com/wenewzhang.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Туториал по работе с Bitcoin через Node.js на базе Mixin Network\n![cover](https://github.com/wenewzhang/mixin_network-nodejs-bot2/raw/master/Bitcoin_node.jpg)\nС помощью данного туториала вы сможете создать бота для мессенджера Mixin Messenger. Это будет echo-бот на платформе Node.js, который сможет принимать Bitcoin от пользователей. \n\nПолный [каталог](https://github.com/awesome-mixin-network/index_of_Mixin_Network_resource) ресурсов по Mixin Network \n\n## С помощью данного туториала вы научитесь \n1. [Создавать бота для Mixin Messenger и формировать ответные сообщения пользователям](https://github.com/wenewzhang/mixin_network-nodejs-bot2/blob/master/README-russian.md)\n2. [Получать и отправлять биткойны в Mixin Messenger](https://github.com/wenewzhang/mixin_network-nodejs-bot2/blob/master/README2-russian.md)\n\n## Как создать бота для Mixin Messenger и сформировать ответные сообщения пользователям\n\n### Установка среды node.js:\nДанный туториал написан для платформы [Node.js](https://nodejs.org) с  менеджером пакетов [yarn](https://yarnpkg.com). Сначала надо установить ноду yarn:\n\nmacOS\n```bash\nbrew install node yarn\n```\n\nUbuntu\n```bash\ncurl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -\necho \"deb https://dl.yarnpkg.com/debian/ stable main\" | sudo tee /etc/apt/sources.list.d/yarn.list\napt update\napt upgrade\napt install node yarn\n```\n\n### Создайте папку проекта yarn\nОткройте терминал, перейдите в рабочее пространство и создайте директорию nodejs-bot:\n```bash\nmkdir nodejs-bot\ncd nodejs-bot/\n```\nЧтобы создать проект, запустите команду **yarn init** и следуйте инструкциям:\n```bash\nyarn init\n```\nКоманда создаст новый файл package.json с таким кодом:\n```json\n{\n  \"name\": \"nodejs-bot\",\n  \"version\": \"1.0.0\",\n  \"main\": \"app.js\",//Default name is main.js\n  \"license\": \"MIT\"\n}\n```\nДля данного туториала требуется библиотека [wangshijun/mixin-node-client](https://github.com/wangshijun/mixin-node-client), поэтому нужно её скачать.\n\nЧтобы добавить пакет, выполните в этой папке команду **yarn add mixin-node-client**:\n```bash\nyarn add mixin-node-client\n```\nТеперь в файле package.json в список зависимостей пропишется пакет библиотек: \n```json\n\"dependencies\": {\n  \"mixin-node-client\": \"^0.6.0\"\n}\n```\nЕсли вы клонируете этот репозиторий, просто выполните команду **yarn**, чтобы загрузить все зависимости пакетов.\n\n### Создайте своё первое приложение в панели инструментов для разработчиков Mixin Network \nВам нужно создать приложение в панели инструментов, в этом вам поможет данный [туториал](https://mixin-network.gitbook.io/mixin-network/mixin-messenger-app/create-bot-account).\n\n### Сгенерируйте ключ вашего приложения в панели инструментов\nПосле того, как вы создадите приложение в панели инструментов, вам нужно ещё [сгенерировать ключ](https://mixin-network.gitbook.io/mixin-network/mixin-messenger-app/create-bot-account#generate-secure-parameter-for-your-app),\nсохранить его в надежном месте, а затем записать необходимое содержимое в config.js.\n\n![mixin_network-keys](https://github.com/wenewzhang/mixin_network-nodejs-bot2/raw/master/mixin_network-keys.png)\nСоздайте в папке файл config.js, скопируйте в него следующий код:\n\n\u003e config.js\n```javascript\n// ВАЖНО: добавьте в этот файл ключ вашего приложения\nmodule.exports = {\n  clientId: '21042518-85c7-4903-bb19-f311813d1f51',\n  clientSecret: 'will-generate-later',\n  assetPin: 'will-generate-later',\n  sessionId: '6ca194a4-727f-4e5f-a348-3c62987536ba',\n  aesKey: 'will-generate-later',\n  privateKey: `-----BEGIN RSA PRIVATE KEY-----\nMIICWwIBAAKBgQC1P7QK7rK8lyX7X5t4A/reu7Q94xJkAllf1NPsW7zUdVgs/BCV\nf4RA6YK2prTpHHqXSCAzToEmou8R0xBMdnT/IQqijt0NzMpvrphiQrKrXEHrKrLm\nat6eZHYvLoGEPYjVq6RrgLkt2Mjld+RfHWd4zHXeqSCVfHAH67+gcPHYCwIDAQAB\nAoGADGotoeYRthtATcSRuJnFMEZ5JRgNpW4HwymnznPGLmNPQ92MIUFXxL555prq\nn2EFAKG/GuSQsh3M9FKZtjMS9l0aXpXy4T4ieBptkhahKbGVMLbQBru8wo/Pow3r\nr+DuNJs64ELvBYyydS7r1Fm/mtrd38Aq+4+04Z3UDW50AUkCQQDuhy8FoA3TKdZM\nmIEiPFb2dW8ohe8MsGM370S8HFPk7kdCaarJbiJCx1E+KjUxbkAeEFcLqKgaALTu\nIVCikIHNAkEAwoZvPaY0yFB1+V8HuToIR4X7AqWMy6WTBZ9U4wp34aNO21DLcrqf\nP40FHrHvqbWNK5bS8nSxLiv0kYL6+ezJNwJAO/GxOYKttsGu33T8DvSHDk0Y8GAo\nYVH6vVXeOkAMPV48fk47439QEOQyYKMO1ytT5bpJhd6O0GoZDjdFInWaiQJAAq4l\nhDzxBz2MkpYLnjK9gHbJIZ00Vm3+m5o5ajNvuW0tnfn8A6WsogyIYIblHXqB6nLW\njz6qXk9+vC6I1L69ewJAasE+oC3TMblSOC9xqeBQgm8BPhb0UwJL4UuZLOSyUETr\n+bAwyiZ37Cc7r/nxKhVH+FwMCVoeNUMcRIYYMRjwmg==\n-----END RSA PRIVATE KEY-----`,\n};\n\n```\nЗамените значение **кодом, сгенерированным в панели инструментов**..\n\n\n### Первое приложение на платформе Node.js\nВставьте следующий код в файл app.js. Создайте файл app.js, если его нет в папке:\n```javascript\nconst { SocketClient, isMessageType } = require('mixin-node-client');\nconst { HttpClient } = require('mixin-node-client');\nconst config = require('./config');\nconst client = new SocketClient(config);\nconst ValidActions = [\"ACKNOWLEDGE_MESSAGE_RECEIPT\" ,\"CREATE_MESSAGE\", \"LIST_PENDING_MESSAGES\"];\n\nconsole.log('Supported MessageSenders by SocketClient', client.getMessageSenders());\nconsole.log(client.getMessageSenders());\n// Слушаем сообщения на сокете и реагируем на них\nclient.on(\n  'message',\n  client.getMessageHandler(message =\u003e {\n    console.log('Message Received', message);\n    if (ValidActions.indexOf(message.action) \u003e -1) {\n      if (message.action === 'ACKNOWLEDGE_MESSAGE_RECEIPT') {console.log(\"ignore receipt\");return;}\n\n      if (isMessageType(message, 'text')) {\n        const text = message.data.data.toLowerCase();\n        if ( (message.data.category === \"PLAIN_TEXT\") \u0026\u0026 (message.action === \"CREATE_MESSAGE\") ) {\n      \t  var parameter4IncomingMsg = {\"message_id\":message.data.message_id, \"status\":\"READ\"};\n      \t  var RspMsg = {\"id\":client.getUUID(), \"action\":\"ACKNOWLEDGE_MESSAGE_RECEIPT\", \"params\":parameter4IncomingMsg};\n      \t  client.sendRaw(RspMsg);\n          if (text === 'pay') {\n          // todo: pay\n          }\n          return client.sendText(text, message);\n        }\n      }\n\n      return Promise.resolve(message);\n  } else console.log(\"unknow action\")\n  }));\nclient.on('error', err =\u003e console.error(err.message));\n```\nЗапускаем код:\n```bash\nnode app.js\n```\nКонсоль что-то выводит:\n```bash\n➜  nodejsdemo node app.js\nSupported MessageSenders by SocketClient [ 'sendText',\n  'sendImage',\n  'sendVideo',\n  'sendData',\n  'sendSticker',\n  'sendContact',\n  'sendButton',\n  'sendButtons',\n  'sendApp' ]\n[ 'sendText',\n  'sendImage',\n  'sendVideo',\n  'sendData',\n  'sendSticker',\n  'sendContact',\n  'sendButton',\n  'sendButtons',\n  'sendApp' ]\nMessage Received { id: '00000000-0000-0000-0000-000000000000',\n  action: 'ERROR',\n  error:\n   { status: 202,\n     code: 401,\n     description: 'Unauthorized, maybe invalid token.' } }\n```\nКонсоль выводит лог: \n```\n➜  nodejsdemo node app.js\nSupported MessageSenders by SocketClient [ 'sendText',\n  'sendImage',\n  'sendVideo',\n  'sendData',\n  'sendSticker',\n  'sendContact',\n  'sendButton',\n  'sendButtons',\n  'sendApp' ]\n[ 'sendText',\n  'sendImage',\n  'sendVideo',\n  'sendData',\n  'sendSticker',\n  'sendContact',\n  'sendButton',\n  'sendButtons',\n  'sendApp' ]\nMessage Received { id: '30e3c929-f6b7-46c2-9e46-6634af66daab',\n  action: 'LIST_PENDING_MESSAGES' }\n```\nДобавьте бота в свой список контактов в [Mixin Messenger](https://mixin.one/messenger) и отправьте какой-нибудь текст (например, id этого бота 7000101639).\n\n![mixin_messenger](https://github.com/wenewzhang/mixin_network-nodejs-bot2/raw/master/mixin_messenger-sayhi.png)\n\nКонсоль выведет текст: \n```bash\nMessage Received { id: 'de4671c2-8873-419b-92b0-0d6ae8381940',\n  action: 'LIST_PENDING_MESSAGES' }\nMessage Received { id: 'a41816ca-2b65-4668-abdd-4526c1d29015',\n  action: 'CREATE_MESSAGE',\n  data:\n   { type: 'message',\n     representative_id: '',\n     quote_message_id: '',\n     conversation_id: 'c5458ec8-5e95-3e64-ae63-d4dfc3135c9e',\n     user_id: '28ee416a-0eaa-4133-bc79-9676909b7b4e',\n     message_id: 'a93ebfca-3d3f-44a9-9d63-3ad41ddca4b8',\n     category: 'PLAIN_TEXT',\n     data: 'hi',\n     status: 'SENT',\n     source: 'CREATE_MESSAGE',\n     created_at: '2019-01-10T03:44:12.600158Z',\n     updated_at: '2019-01-10T03:44:12.600158Z' } }\nMessage Received { id: '810b93d9-56d4-413a-9837-6dc241e36ed0',\n  action: 'ACKNOWLEDGE_MESSAGE_RECEIPT' }\nignore receipt\nMessage Received { id: 'd45c5139-8201-4f8a-aa2f-86c98ba3a849',\n  action: 'CREATE_MESSAGE',\n  data:\n   { type: 'message',\n     representative_id: '',\n     quote_message_id: '',\n     conversation_id: '',\n     user_id: 'daf8b473-39a0-4419-991a-77f30d28dd6d',\n     message_id: '9054acea-1a62-4716-9fa3-1a8c70a2165a',\n     category: '',\n     data: '',\n     status: 'SENT',\n     source: 'CREATE_MESSAGE',\n     created_at: '2019-01-10T03:44:22.540536153Z',\n     updated_at: '2019-01-10T03:44:22.540536153Z' } }\nMessage Received { id: 'cf69c7a2-787b-4a91-be22-f51f38338179',\n  action: 'ACKNOWLEDGE_MESSAGE_RECEIPT',\n  data:\n   { type: 'message',\n     representative_id: '',\n     quote_message_id: '',\n     conversation_id: '',\n     user_id: '',\n     message_id: '9054acea-1a62-4716-9fa3-1a8c70a2165a',\n     category: '',\n     data: '',\n     status: 'DELIVERED',\n     source: 'ACKNOWLEDGE_MESSAGE_RECEIPT',\n     created_at: '0001-01-01T00:00:00Z',\n     updated_at: '2019-01-10T03:44:23.236843Z' } }\nignore receipt\nMessage Received { id: 'daa66945-abb6-4b8f-bc6a-04c4ccb6a837',\n  action: 'ACKNOWLEDGE_MESSAGE_RECEIPT',\n  data:\n   { type: 'message',\n     representative_id: '',\n     quote_message_id: '',\n     conversation_id: '',\n     user_id: '',\n     message_id: '9054acea-1a62-4716-9fa3-1a8c70a2165a',\n     category: '',\n     data: '',\n     status: 'READ',\n     source: 'ACKNOWLEDGE_MESSAGE_RECEIPT',\n     created_at: '0001-01-01T00:00:00Z',\n     updated_at: '2019-01-10T03:44:23.787562Z' } }\nignore receipt\n```\n\n\n### Краткое описание исходного кода\nЧтобы получить сообщение от пользователя Mixin messenger, приложению необходимо создать соединение с сервером мессенджера. Приложению также необходимо создать API-токен, чтобы обмениваться данными. \n\n[API по операциям](https://developers.mixin.one/api/beta-mixin-message/authentication/), [Руководство по операциям](https://mixin-network.gitbook.io/mixin-network/mixin-messenger-app/receive-asset-change-notification)\n\n\u003e app.js\n```javascript\nconst { SocketClient, isMessageType } = require('mixin-node-client');\nconst config = require('./config');\nconst client = new SocketClient(config);\n```\nЗатем включите прослушивание сокета, чтобы получать и анализировать входящие сообщения:\n\n```javascript\nclient.on(\n  'message',\n  client.getMessageHandler(message =\u003e {\n    console.log('Message Received', message);\n    return Promise.resolve(message);\n  })\n);\n```\nПроверьте сообщение от пользователя, затем запустите действие, которое должно выполняться при получении сообщения с текстом 'pay' **pay**:\n\n```javascript\nif (ValidActions.indexOf(message.action) \u003e -1) {\n  if (message.action === 'ACKNOWLEDGE_MESSAGE_RECEIPT') {\n    console.log(\"ignore receipt\");return;\n  }\n  if (isMessageType(message, 'text')) {\n    const text = message.data.data.toLowerCase();\n    if ( (message.data.category === \"PLAIN_TEXT\") \u0026\u0026 (message.action === \"CREATE_MESSAGE\") ) {\n      var parameter4IncomingMsg = {\"message_id\":message.data.message_id, \"status\":\"READ\"};\n      var RspMsg = {\"id\":client.getUUID(), \"action\":\"ACKNOWLEDGE_MESSAGE_RECEIPT\", \"params\":parameter4IncomingMsg};\n      client.sendRaw(RspMsg);\n      if (text === 'pay') {\n        // todo: pay\n      }\n      return client.sendText(text, message);\n    }\n  }\n  return Promise.resolve(message);\n} else console.log(\"unknow action\")\n```\nМожно получать не только текстовые сообщения, изображения и т. п. Подробнее о форматах сообщений см. [здесь](https://developers.mixin.one/api/beta-mixin-message/websocket-messages/).\n\n\nОтправляйте  на сервер сообщения READ, чтобы подтверждать, что сообщение прочитано.  Если их не отправить, сообщения будут дублироваться боту при каждом подключении к серверу:\n\n```javascript\n\n    if ( (message.data.category === \"PLAIN_TEXT\") \u0026\u0026 (message.action === \"CREATE_MESSAGE\") ) {\n    //  READ message start\n        var parameter4IncomingMsg = {\"message_id\":message.data.message_id, \"status\":\"READ\"};\n        var RspMsg = {\"id\":client.getUUID(), \"action\":\"ACKNOWLEDGE_MESSAGE_RECEIPT\", \"params\":parameter4IncomingMsg};\n        client.sendRaw(RspMsg);\n    // READ message end\n      return client.sendText(text, message);\n```\n\n### Конец\nТеперь ваш бот работает. Дальше дело уже за вами.\n\nДалее: [Получить и отправить биткойн](https://github.com/wenewzhang/mixin_network-nodejs-bot2/blob/master/README2.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwenewzhang%2Fmixin_network-nodejs-bot2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwenewzhang%2Fmixin_network-nodejs-bot2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwenewzhang%2Fmixin_network-nodejs-bot2/lists"}