Лотерея в сообществе ВКонтакте

Этот поток создает лотерею в сообществе ВКонтакте.

  • Когда пользователь пишет кодовое слово ЛОТЕРЕЯ в диалоге с сообществом первый раз за день, ему приходит ответ:
    • В 50% случаев - о выигрыше купона на скидку 5%;
    • В 30% случаев - о выигрыше купона на скидку 10%;
    • В 15% случаев - о выигрыше купона на скидку 15%;
    • В 4% случаев - о выигрыше купона на скидку 20%;
    • В 1% случаев - о выигрыше подарочного сертификата;
  • При выигрыше подарочного сертификата, менеджер сообщества получает оповещение о выигравшем пользователе;
  • При вводе кодового слова второй раз за день, ему приходит ответ, что он уже участвовал сегодня в лотерее;

Поток лотереи в сообществе ВКонтакте

JSON потока#

[
{
"id": "76933f27.ac51b",
"type": "tab",
"label": "VK Лотерея",
"disabled": false,
"info": ""
},
{
"id": "5518fd87.5a0464",
"type": "drom-vk-bots-long-poll",
"z": "76933f27.ac51b",
"name": "",
"property": "vkEvent",
"client": "b1f965a9.7d72c8",
"x": 190,
"y": 440,
"wires": [
[
"8fe5857c.125ef8"
]
]
},
{
"id": "8fe5857c.125ef8",
"type": "drom-vk-switch-c-event",
"z": "76933f27.ac51b",
"name": "Какое событие?",
"vkEvent": "vkEvent",
"property": "vkEventObj",
"events": [
"message_new"
],
"outputs": 1,
"x": 410,
"y": 440,
"wires": [
[
"2d2205c1.fd7d3a"
]
]
},
{
"id": "2d2205c1.fd7d3a",
"type": "drom-switch-str",
"z": "76933f27.ac51b",
"name": "Какое сообщение?",
"inString": "vkEventObj.message.text",
"inStringType": "msg",
"rules": [
{
"t": "eq",
"v": "ЛОТЕРЕЯ",
"vt": "str",
"case": false
}
],
"outputs": 1,
"property": "payload",
"x": 650,
"y": 440,
"wires": [
[
"2a13eaca.d02fc6"
]
]
},
{
"id": "3cbd1b60.39c484",
"type": "drom-randomizer",
"z": "76933f27.ac51b",
"generator": "int",
"min": "1",
"minType": "num",
"max": "100",
"maxType": "num",
"template": "CODE-#####-#####",
"templateType": "str",
"useChars": "",
"useCharsType": "set1",
"count": "10",
"countType": "num",
"name": "Число от 1 до 100",
"property": "dice",
"x": 1330,
"y": 480,
"wires": [
[
"855c5593.6861d8"
]
]
},
{
"id": "855c5593.6861d8",
"type": "switch",
"z": "76933f27.ac51b",
"name": "Какое число?",
"property": "dice",
"propertyType": "msg",
"rules": [
{
"t": "lte",
"v": "50",
"vt": "num"
},
{
"t": "lte",
"v": "80",
"vt": "num"
},
{
"t": "lte",
"v": "95",
"vt": "num"
},
{
"t": "lte",
"v": "99",
"vt": "num"
},
{
"t": "eq",
"v": "100",
"vt": "num"
}
],
"checkall": "false",
"repair": false,
"outputs": 5,
"x": 1340,
"y": 540,
"wires": [
[
"cf114038.b63c2"
],
[
"22273aa8.78d566"
],
[
"408cba99.8e1004"
],
[
"c3ed3755.ab4378"
],
[
"e0bc9a78.1e4c08"
]
]
},
{
"id": "b0624158.e43db",
"type": "change",
"z": "76933f27.ac51b",
"name": "Данные vk api",
"rules": [
{
"t": "set",
"p": "apiData.random_id",
"pt": "msg",
"to": "",
"tot": "date"
},
{
"t": "set",
"p": "apiData.user_id",
"pt": "msg",
"to": "vkEventObj.message.from_id",
"tot": "msg"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 1900,
"y": 540,
"wires": [
[
"400574e7.bffa9c"
]
]
},
{
"id": "400574e7.bffa9c",
"type": "drom-vk-api-call",
"z": "76933f27.ac51b",
"name": "Отправка ответа",
"data": "apiData",
"dataType": "msg",
"method": "messages.send",
"methodType": "str",
"property": "payload",
"client": "b1f965a9.7d72c8",
"apiV": "5.126",
"x": 1910,
"y": 580,
"wires": [
[]
]
},
{
"id": "cf114038.b63c2",
"type": "drom-template",
"z": "76933f27.ac51b",
"name": "Скидка 5%",
"field": "apiData.message",
"fieldType": "msg",
"syntax": "handlebars",
"htmlEscape": false,
"template": "Скидка 5%. Ваш купон: КУПОН5",
"x": 1610,
"y": 440,
"wires": [
[
"b0624158.e43db"
]
]
},
{
"id": "22273aa8.78d566",
"type": "drom-template",
"z": "76933f27.ac51b",
"name": "Скидка 10%",
"field": "apiData.message",
"fieldType": "msg",
"syntax": "handlebars",
"htmlEscape": false,
"template": "Скидка 10%. Ваш купон: КУПОН10",
"x": 1610,
"y": 480,
"wires": [
[
"b0624158.e43db"
]
]
},
{
"id": "408cba99.8e1004",
"type": "drom-template",
"z": "76933f27.ac51b",
"name": "Скидка 15%",
"field": "apiData.message",
"fieldType": "msg",
"syntax": "handlebars",
"htmlEscape": false,
"template": "Скидка 15%. Ваш купон: КУПОН15",
"x": 1610,
"y": 520,
"wires": [
[
"b0624158.e43db"
]
]
},
{
"id": "c3ed3755.ab4378",
"type": "drom-template",
"z": "76933f27.ac51b",
"name": "Скидка 20%",
"field": "apiData.message",
"fieldType": "msg",
"syntax": "handlebars",
"htmlEscape": false,
"template": "Скидка 20%. Ваш купон: КУПОН20",
"x": 1610,
"y": 560,
"wires": [
[
"b0624158.e43db"
]
]
},
{
"id": "f03badb7.39bd6",
"type": "drom-template",
"z": "76933f27.ac51b",
"name": "Сертификат",
"field": "apiData.message",
"fieldType": "msg",
"syntax": "handlebars",
"htmlEscape": false,
"template": "Какая удача! Вы выиграли подарочный сертификат. Скоро наш менеджер свяжется с Вами.",
"x": 1610,
"y": 720,
"wires": [
[
"b0624158.e43db"
]
]
},
{
"id": "a0e3621e.d21c1",
"type": "change",
"z": "76933f27.ac51b",
"name": "Данные vk api",
"rules": [
{
"t": "set",
"p": "apiData.random_id",
"pt": "msg",
"to": "",
"tot": "date"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 1340,
"y": 740,
"wires": [
[
"7ba01186.5b41c"
]
]
},
{
"id": "7ba01186.5b41c",
"type": "drom-vk-api-call",
"z": "76933f27.ac51b",
"name": "Отправка оповещения",
"data": "apiData",
"dataType": "msg",
"method": "messages.send",
"methodType": "str",
"property": "payload",
"client": "b1f965a9.7d72c8",
"apiV": "5.126",
"x": 1370,
"y": 780,
"wires": [
[
"f03badb7.39bd6"
]
]
},
{
"id": "e0bc9a78.1e4c08",
"type": "drom-template",
"z": "76933f27.ac51b",
"name": "Оповещение менеджеру",
"field": "apiData.message",
"fieldType": "msg",
"syntax": "handlebars",
"htmlEscape": false,
"template": "[ВЫИГРЫШ СЕРТИФИКАТА]\nСсылка на выигравшее сообщение: https://vk.com/gim{{vkEvent.group_id}}?sel={{vkEventObj.message.peer_id}}&msgid={{vkEventObj.message.id}}",
"x": 1370,
"y": 660,
"wires": [
[
"2c2d8067.cb8ea"
]
]
},
{
"id": "2c2d8067.cb8ea",
"type": "change",
"z": "76933f27.ac51b",
"name": "👨‍💼 Id менеджера",
"rules": [
{
"t": "set",
"p": "apiData.user_id",
"pt": "msg",
"to": "1",
"tot": "num"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 1350,
"y": 700,
"wires": [
[
"a0e3621e.d21c1"
]
]
},
{
"id": "e36c31cb.37112",
"type": "drom-data-journal-num",
"z": "76933f27.ac51b",
"storage": "6c999ed1.7d41f",
"action": "setup-journal",
"journal": "lottery_user",
"journalType": "storId",
"time": "",
"timeType": "current",
"timeFixed": [
0,
0,
0,
0,
0,
0
],
"timeRange": "30d",
"timeFrom": "",
"timeFromType": "fixed",
"timeFromFixed": [
1970,
0,
1,
0,
0
],
"timeTo": "",
"timeToType": "fixed",
"timeToFixed": [
2099,
11,
31,
23,
59
],
"key": "userId",
"keyType": "msg",
"keys": "userIds",
"keysType": "msg",
"value": "points",
"valueType": "msg",
"values": "eventTypes",
"valuesType": "msg",
"filter": "",
"groupBy": "",
"dataIn": "data",
"dataInType": "msg",
"name": "",
"property": "payload",
"x": 550,
"y": 140,
"wires": [
[]
]
},
{
"id": "d51b4f65.b2395",
"type": "inject",
"z": "76933f27.ac51b",
"name": "Запустить настройку",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "",
"payloadType": "date",
"x": 240,
"y": 140,
"wires": [
[
"e36c31cb.37112"
]
]
},
{
"id": "b3dd2830.06e4a8",
"type": "drom-data-journal-num",
"z": "76933f27.ac51b",
"storage": "6c999ed1.7d41f",
"action": "get",
"journal": "lottery_user",
"journalType": "storId",
"time": "",
"timeType": "current",
"timeFixed": [
0,
0,
0,
0,
0,
0
],
"timeRange": "today",
"timeFrom": "",
"timeFromType": "fixed",
"timeFromFixed": [
1970,
0,
1,
0,
0
],
"timeTo": "",
"timeToType": "fixed",
"timeToFixed": [
2099,
11,
31,
23,
59
],
"key": "userId",
"keyType": "msg",
"keys": "arrGroupId",
"keysType": "msg",
"value": "points",
"valueType": "msg",
"values": "arrUserId",
"valuesType": "msg",
"filter": "",
"groupBy": "",
"dataIn": "data",
"dataInType": "msg",
"name": "",
"property": "lotteryEvents",
"x": 970,
"y": 440,
"wires": [
[
"b13841e1.29d97"
]
]
},
{
"id": "2a13eaca.d02fc6",
"type": "change",
"z": "76933f27.ac51b",
"name": "Подготов данные",
"rules": [
{
"t": "set",
"p": "arrGroupId",
"pt": "msg",
"to": "[vkEvent.group_id]",
"tot": "jsonata"
},
{
"t": "set",
"p": "arrUserId",
"pt": "msg",
"to": "[vkEventObj.message.from_id]",
"tot": "jsonata"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 970,
"y": 400,
"wires": [
[
"b3dd2830.06e4a8"
]
]
},
{
"id": "b13841e1.29d97",
"type": "switch",
"z": "76933f27.ac51b",
"name": "Уже было сегодня?",
"property": "lotteryEvents",
"propertyType": "msg",
"rules": [
{
"t": "nempty"
},
{
"t": "else"
}
],
"checkall": "false",
"repair": false,
"outputs": 2,
"x": 980,
"y": 500,
"wires": [
[
"74642743.b4db78"
],
[
"1bdfaccd.18fc13"
]
],
"outputLabels": [
"Да",
"Нет"
]
},
{
"id": "74642743.b4db78",
"type": "drom-template",
"z": "76933f27.ac51b",
"name": "Уже участвовали",
"field": "apiData.message",
"fieldType": "msg",
"syntax": "handlebars",
"htmlEscape": false,
"template": "Вы уже участвовали сегодня в лотерее. Попробуйте завтра еще раз.",
"x": 1590,
"y": 360,
"wires": [
[
"b0624158.e43db"
]
]
},
{
"id": "1bdfaccd.18fc13",
"type": "drom-data-journal-num",
"z": "76933f27.ac51b",
"storage": "6c999ed1.7d41f",
"action": "add-one",
"journal": "lottery_user",
"journalType": "storId",
"time": "",
"timeType": "current",
"timeFixed": [
0,
0,
0,
0,
0,
0
],
"timeRange": "today",
"timeFrom": "",
"timeFromType": "fixed",
"timeFromFixed": [
1970,
0,
1,
0,
0
],
"timeTo": "",
"timeToType": "fixed",
"timeToFixed": [
2099,
11,
31,
23,
59
],
"key": "vkEvent.group_id",
"keyType": "msg",
"keys": "",
"keysType": "msg",
"value": "vkEventObj.message.from_id",
"valueType": "msg",
"values": "",
"valuesType": "msg",
"filter": "",
"groupBy": "",
"dataIn": "data",
"dataInType": "msg",
"name": "Запомнить участие",
"property": "lotteryEvents",
"x": 980,
"y": 560,
"wires": [
[
"3cbd1b60.39c484"
]
]
},
{
"id": "5592feeb.6bcd6",
"type": "comment",
"z": "76933f27.ac51b",
"name": "Администрирование",
"info": "",
"x": 220,
"y": 80,
"wires": []
},
{
"id": "b2840b88.acc298",
"type": "drom-data-journal-num",
"z": "76933f27.ac51b",
"storage": "6c999ed1.7d41f",
"action": "clear-journal",
"journal": "lottery_user",
"journalType": "storId",
"time": "",
"timeType": "current",
"timeFixed": [
0,
0,
0,
0,
0,
0
],
"timeRange": "30d",
"timeFrom": "",
"timeFromType": "fixed",
"timeFromFixed": [
1970,
0,
1,
0,
0
],
"timeTo": "",
"timeToType": "fixed",
"timeToFixed": [
2099,
11,
31,
23,
59
],
"key": "userId",
"keyType": "msg",
"keys": "userIds",
"keysType": "msg",
"value": "points",
"valueType": "msg",
"values": "eventTypes",
"valuesType": "msg",
"filter": "",
"groupBy": "",
"dataIn": "data",
"dataInType": "msg",
"name": "",
"property": "payload",
"x": 550,
"y": 200,
"wires": [
[]
]
},
{
"id": "899f21e.23a75e",
"type": "inject",
"z": "76933f27.ac51b",
"name": "Очистить журнал лотерей",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "",
"payloadType": "date",
"x": 250,
"y": 200,
"wires": [
[
"b2840b88.acc298"
]
]
},
{
"id": "48f4a66c.bc3678",
"type": "comment",
"z": "76933f27.ac51b",
"name": "ЛОТЕРЕЯ",
"info": "",
"x": 940,
"y": 340,
"wires": []
},
{
"id": "b1f965a9.7d72c8",
"type": "drom-vk-api-config",
"apiV": "5.126",
"name": "Мое сообщество VK"
},
{
"id": "6c999ed1.7d41f",
"type": "drom-data-config",
"name": "",
"dbType": "sqlite",
"sqliteFile": "my-data.sqlite"
}
]

Настройка#

  1. Скопируйте JSON потока и импортируйте в ваш Ботодром - у вас появится новая вкладка "VK Лотерея"
  2. Откройте боковую панель узлов конфигурации и настройте конфиг-узлы:
    • Мое сообщество VK - Введите токен вашего сообщества ВКонтакте. Инструкции по получению токена сообщества вы можете найти на боковой панели справки, в документации к узлу drom-vk-api-config. При настройке Long Poll API в вашем сообществе выберите версию API "5.126", и убедитесь, что в типах события включена опция "Входящее сообщение".
    • Файл my-data.sqlite - Для хранения данных используется файл my-data.sqlite. При желании можно выбрать другой файл.
  3. Найдите в потоке узел под названием "👨‍💼 Id менеджера", щелкните дважды по нему мышью и введите ваши данные:
    • apiData.user_id - Замените значение 1 на id пользователя ВКонтакте, которому будет приходить оповещение о пользователе, выигравшем подарочный сертификат.
  4. Нажмите Готово.
  5. Нажмите Развернуть.
  6. В потоке найдите секцию "Администрирование" (верхняя левая часть потока). Нажмите кнопку узла "Запустить настройку", чтобы настроить хранилище данных лотереи.
  7. Готово. Попробуйте теперь написать лотерея в диалоге с сообществом.
Совет

В секции "Администрирование" также есть узел "Очистить журнал лотереи". Он может пригодиться при тестировании. Нажатие по кнопке этого узла очищает журнал лотереи, чтобы можно было делать повторные вызовы без необходимости ждать следующего дня.