Как делать опрос в вк: Опросы в ВК — как создать + ТОП-6 идей

Содержание

Зачем нужны опросы ВКонтакте, в Одноклассниках, социальных сетях

Опросы ВКонтакте

Опросы ВКонтакте имеют достаточно широкий функционал. Радует и то, что зачастую у постов с опросами охват выше. Вот несколько советов о том, что можно сделать с их помощью:

1. Напоминать подписчикам о себе

У опросов ВКонтакте есть очень удобная фишка. Можно выставлять время, до которого можно поучаствовать в опросе. Как только время истекает — каждый участник получает уведомление об окончании. Это повод для участников снова зайти в группу и узнать правильный ответ.

Главное — выбрать интересный вопрос, ради ответа на который люди снова откроют пост.

2. Настроить таргет на нужную аудиторию

А ещё опросы помогают таргетологам. С помощью опроса вы можете сегментировать целевую аудиторию своей группы, а уже потом под каждый сегмент создавать персональное предложение. Сделать это достаточно просто.

Допустим, у вас интернет-магазин кроссовок. Вы можете спросить у своих подписчиков, кроссовки какой марки им по душе. А затем использовать специальные сервисы-парсеры, которые помогут найти нужную аудиторию. И показать рекламу именно тем, кто выбрал в нашем опросе кроссовки Nike.

 

Или у вас курс по похудению. Просто сделайте опрос в рекламном объявлении “Хотите попасть на консультацию к пластическому хирургу?” А далее уже предлагайте свой оффер тем, кто ответил ДА.

3. Вовлечь в обсуждение тех пользователей, которые заходят на ваш сайт

На сайте можно разместить виджет с опросом от ВКонтакте. Такой виджет покажет, что у вас есть живая страница в социальной сети. А количество участвующих в опросе людей послужит для вас репутационным плюсом.

Хотите узнать 7 приёмов, делающих текст интересным и вовлекающим — переходите по ссылке и забирайте бесплатные материалы.

4. Выбрать лучшие темы для постинга

Не знаете, какие посты хочет читать ваша целевая аудитория? Вместо того, чтобы гадать, можно спросить напрямую! Так вы поймете, что для вашей ЦА интереснее всего.

И уже исходя из этого будете выстраивать стратегию продвижения и вести человека по воронке продаж. Ведь сначала нужно выстроить доверительные отношения с вашей аудиторией, а уже потом стимулировать людей к покупке.

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

 

Радует и возможность создавать индивидуальный дизайн в опросах. Вы можете не только выбрать стандартный фон, но и загрузить свою картинку.

5. Получить обратную связь

Так уж сложилось, что людям больше нравится участвовать в опросах, чем оставлять комментарии или ставить лайки. Часто мы не можем однозначно оценить, насколько интересен наш пост. Допустим, вы делаете серию постов на какую-то тему. Чтобы понять, хотят ли подписчики читать дальше, лучше спросить прямо.

6. Понять точки роста для вашего продукта

Не бойтесь быть откровенными. Спрашивайте честно, с какими проблемами клиенты столкнулись при использовании вашей плиты/ноутбука/сервиса доставки. Так вы покажете подписчикам, что открыты к обсуждению и не боитесь признавать ошибки.

7. Постоянно узнавать вашу ЦА

Лучший способ продать товар — залезть в голову потребителя и понять, что там происходит. Именно это помогло герою Мела Гибсона в фильме “Чего хотят женщины”. Но, поскольку мы не умеем читать мысли, приходится пользоваться более реальными методами.

Опросы — один из способов лучше познакомиться с подписчиками. Допустим, вы продаете курсы по английскому. Спросите подписчиков, как давно они пытаются выучить язык? Что в изучении языка для них самое сложное? Почему они бросали учить английский раньше?

Так вы составите портрет ваших покупателей, поймете их боли, желания и потребности. В результате, с помощью контента вы сможете показать экспертность и закрыть боли подписчиков (потенциальных клиентов). Что не только улучшит качество вашего контента, но и в перспективе повлияет на продажи.

Опросы в Одноклассниках

Также, как и ВКонтакте в Одноклассниках можно прикреплять опросы прямо к посту. Несомненный плюс — возможность вставлять сразу две фотографии.

 

Аудитория в Одноклассниках отзывчивая и активная, поэтому смело задавайте подписчикам все вопросы. Здесь можно создать анонимные опросы, ограничить время голосования и дать подписчикам возможность выбрать несколько вариантов ответа.

Подытожим, опросы — важный и нужный инструмент для взаимодействия с вашими подписчиками. Без них страница вашего бренда выглядит отстраненной. Без постоянного общения с подписчиками вы становитесь брендом-эгоистом, которого не интересует мнение своей аудитории. Поэтому советуем использовать фишки и механики, описанные в нашей статье.

Применяя опросы, вы:

  1. Узнаете мнение подписчиков о вашем товаре или услуге.
  2. Поймете вкусы и предпочтения вашей целевой аудитории.
  3. Вовлечете пользователей в обсуждение.
  4. Проанализируете реакцию людей на ваши посты.
  5. Определите точки роста для вашего продукта.
  6. Создадите интересную игру, от которой пользователь не сможет оторваться.

Не бойтесь общаться с вашими подписчиками. Интересуйтесь их мнением, проблемами и желаниями. Будьте открыты. Спокойно воспринимайте критику и смело обсуждайте ваш продукт с пользователями. Именно такая искренность поможет сделать ваш продукт ещё лучше и завоевать сердца подписчиков.

Понравилась статья? Будем рады проконсультировать вас по вашему проекту. С уважением, команда TESLA TARGET.

Автор: Елена Бельченко

Как сделать интеллектуального чат-бота для проведения опросов/интервью / Хабр

В современном мире всё большую популярность приобретает методика под названием customer development для тестирования идей и гипотез о будущем продукте. Методику придумал «крёстный отец Кремниевой долины» Стив Бланк.
Одним из числа сильных инструментов в «разработке клиентов» является интервью, когда вы можете побеседовать с респондентом. Однако им не всегда можно воспользоваться ввиду разных причин, которые условно можно свести к объёму бюджета и имеющемуся времени. Но во многих ситуациях можно воспользоваться опросом. Причём опросом, который можно автоматизировать за счёт применения чат-бота и нейронной сети для определения смысла слов, которые написал респондент в ответ на заданный вопрос.

В этой статье сконцентрируюсь на алгоритме работы чат-бота для проведения опроса. Как сделать чат-бота для VK писал в отдельной статье на Хабре. Использовал: Python, MySQL, API VK и готовую нейросеть от RusVectores.

Статья будет полезна для тех, кто только начинает погружаться в тему и хотел бы получить информацию, изложенную в более простой, упрощённой форме.

Дисклеймер. Не претендую на академическую точность изложения, говорю лишь о том, что удалось понять на текущий момент по итогу изучения различных материалов. Не рекламирую какие-либо технологии и сервисы.

Содержание

  • Нейросеть для понимания смысла текста, вводимого пользователем

  • База данных для хранения вопросов интервью

  • Описание алгоритма работы чат-бота

Нейросеть для понимания смысла текста, вводимого пользователем

Сделать бота, который распознаёт только ключевые слова в фразе пользователя — не очень жизненно. Проверку всех ключевых слов можно постараться прописать в коде, но это трудоёмко и негибко. Поэтому стоит воспользоваться возможностями нейросетей для определения смысла введённых пользователем слов.

В данном решении была использована готовая нейросеть от сервиса RusVectores, обученная на корпусе НКРЯ с использованием алгоритма word2vec CBOW с длиной вектора 300.

НКРЯ – это совокупность русскоязычных текстов, Национальный Корпус Русского Языка в полном объёме. Содержит 270 миллионов слов, объём словаря 189 193 слова.

Word2vec CBOW — алгоритм, благодаря которому слово на естественном языке представляется в виде числового вектора. Т.е. определяет «координату» слова в «смысловом пространстве». CBOW – это аббревиатура Continuous Bag of Words. Она обозначает алгоритм, который есть в word2vec. Данный алгоритм называют моделью «мешка слов», он предсказывает слово по контексту. Ещё один алгоритм в word2vec — Skip-gram предсказывает контекст по слову.

С помощью данных алгоритмов генерируют близкие по смыслу слова при запросе в поисковой системе, сравнивают документы по смыслу, определяют смысловую близость слов и предложений.

Более подробно о word2vec можно почитать в статье «Немного про word2vec: полезная теория».

О векторном представлении слов (эмбеддинге) хорошо и с примерами описано в статье «Что такое эмбеддинги и как они помогают машинам понимать тексты».

Представление слова в виде вектора позволяет оценивать его смысловую близость с другими словами, так же представленными в виде вектора. Для оценки близости слов можно вычислить косинус угла между их векторами. Чем ближе к 1 будет косинус угла между векторами слов, тем они ближе по смыслу. Единице будет соответствовать косинус угла 0 градусов, т. е. когда векторы слов совпадают.

Чтобы создать такой набор векторов почти для 200 000 слов и постоянно иметь к ним доступ, нужно располагать вычислительными мощностями. Т.к. у меня таких мощностей нет, я воспользовался доступным онлайн сервисом RusVectores.

База данных для хранения вопросов

Для проведения опроса я подготовил табличку с вопросами и разместил её в базе данных MySQL. Как видно из рисунка ниже, вопросы имеют ответвления, похожие на древовидную структуру или структуру графа.

Структура вопросов

В базе данных таблица с вопросами выглядит так (фрагмент):

Фрагмент таблицы в БД с вопросами

Поле question_num служит для того, чтобы определить порядок вопросов и ответвления. Это путь от корневого элемента дерева вопросов до листового, разделённый точкой.

Описание алгоритма работы чат-бота

Начало опроса

По договорённости с пользователем он заходит на страницу сообщества в ВК и инициирует диалог, нажав кнопку «Сообщение».

Бот здоровается и спрашивает разрешения начать опрос. Текст приветствия задавал в разделе «Управление»→ «Сообщения» на странице сообщества в ВК.

Если пользователь ответил что-то близкое по смыслу со словом «да», то бот начинает задавать вопросы. Как определить, что пользователь одобрил старт интервью? Для этого как раз нужна нейросеть, чтобы определить смысловую близость введённых пользователем слов к словам: да, можем, можно, начинай, ок. Для этого воспользуемся API сервиса RusVectores.

Далее приведён код функции, которая определяет начинать интервью или нет. Если интервью уже было начато, то функция определяет какой вопрос задать следующим.

фрагменты кода из bot_methods.py
модуля, в котором реализованы все методы бота

def _identify_phrase(user_id, user_message):
    """
    identify start question or greeting
    return number of phrase in database
    """
    # identification variable, on start set "I don't know"
    identi = 'I dont know'
    # find in database current position in conversation between user and chatbot
    identi = get_current_position_in_conversation(user_id)
    if identi != 'err':
        # if the conversation has just begun
        if identi == '0':
            # define greetings
            similarity = _get_similarity(user_message, u'привет здравствуйте добрый')
            if similarity > 0. 5:
                identi = "greetings"
            else:
                # define start interview or not
                identi = _start_or_not(user_message)
        # if the conversation continues
        elif identi == '1':
            # define start interview or not
            identi = _start_or_not(user_message)
        else:
            pass
            
    return identi

Вначале определим возможность начать опрос исходя из ответа пользователя с помощью метода _start_or_not():

def _start_or_not(user_message):
    """
    define <identi>: start or don't start interview
    """
    if user_message != 'старт' or user_message != 'Старт':
        _identi = 'I dont know'
        # define if user agree to start interview
        start = _get_similarity(user_message, u'да можем можно начинай ок')
        # define if user don't agree to start interview
        later = _get_similarity(user_message, u'нет позже потом завтра')
        if start > later and start > 0. 15:
            _identi = 'start'
        elif later > start and later > 0.15:
            _identi = 'later'
    else:
        _identi = "start"
    return _identi

Если пользователь решил сначала поприветствовать бота, то нужно понять это и поприветствовать в ответ. Для этого проверим на смысловую близость сообщения от пользователя со словами приветствия с помощью метода _get_similarity(). Данный метод будет использоваться и далее для определения смысловой близости сообщений пользователя.

def _get_similarity(text1, text2):
    """
    Function return similarity between text1 and text2
    text1 - user message
    text2 - key words
    """
    text1.strip()  # delete empty space on start and end of string
    text2.strip()
    text1_words = text1.split(' ')
    text2_words = text2.split(' ')
    similarity = 0.0 # init variable
    try:
        for word1 in text1_words:
            if word1 != '':
                for word2 in text2_words:
                    if word2 != '':
                        # prepare url for request to API rusvectores.
org # url example https://rusvectores.org/ruscorpora_upos_cbow_300_20_2019/дело__папка/api/similarity/ url = '/'.join(['https://rusvectores.org/ruscorpora_upos_cbow_300_20_2019', word1 + '__' + word2, 'api', 'similarity/']) # GET request to API rusvectores.org r = requests.get(url, stream=True) # sum similarity of couple of words similarity = similarity + float(r.text.split('\t')[0]) except Exception as e: log_exception = str(e) # average similarity similarity = similarity/len(text2_words) # return similarity between text1 and text2 return similarity

Переменная similarity содержит числовое обозначение смысловой близость фраз text1 и text2. Чем ближе similarity к 1, тем ближе фразы по смыслу.

Метод _identify_phrase() используется для обработки всех фраз, которые пользователь пишет в чат. Поэтому необходимо заложить в него логику проверки как начального этапа — приветствие и старт интервью, так и последующее движение по вопросам. Для этого необходимо определять на каком вопросе и на какой развилке находится диалог. Текущую позицию в беседе определяем с помощью метода get_current_position_in_conversation()

фрагмент кода из mysqldb_methods.py
модуля, в котором реализованы все методы для работы с MySQL базой данных

def get_current_position_in_conversation(user_id):
    """
    find in database current position in conversation between user and chatbot
    using in bot_methods.py
    """
    try:
        conn = MySQLdb.connect(host=HOST, user=USER, passwd=PASSWORD, 
                               db=DATABASE, charset='utf8', init_command='SET NAMES UTF8')
        cursor = conn.cursor()
        query = "SELECT `question_num` FROM `conversations` WHERE `user_id`=%(user_id)s LIMIT 1"
        cursor.execute(query, {'user_id': user_id})
        result = cursor.
fetchone() if result is None: identi = '0' else: identi = result[0] conn.close() except Exception as e: identi = 'err' return identi

Таким образом мы обрабатываем три сценария взаимодействия с чат-ботом:
— старт опроса (понимаем согласен пользователь начать опрос или нет с помощью функции _start_or_not()),
— обмен приветствиями, если пользователь поздоровался (понимаем по смысловой близости к словам приветствия с помощью функции _get_similarity());
— движение по структуре вопросов с помощью функции

get_current_position_in_conversation() для определения текущего положения в структуре вопросов.

Давайте рассмотрим движение по структуре вопросов более подробно.

Стоп-слова

Одним из важных моментов является удаление «стоп-слов», т.е. слов, которые можно с лёгкостью удалить из предложения и при этом его смысл не потеряется. Вот набор стоп-слов, которые я использовал в данном проекте:

stop_words = [
u'а',
u'большой',u'бы',u'быть',
u'в',u'весь',u'вот',u'всей',u'вы',
u'говорить',u'год',
u'для',u'до',
u'еще',u'если',
u'же',
u'знать',
u'и',u'из',u'или',
u'к',u'как',u'который',
u'мочь',u'мы',u'мне',
u'на',u'наш',u'него',u'нее',u'них',u'но',
u'о',u'один',u'она',u'они',u'оно',u'оный',u'от',u'ото',
u'по',
u'с',u'свой',u'себя',u'сказать',
u'та',u'такой',u'такое',u'только',u'тот',u'ты',u'то',
u'у',
u'что',
u'это',u'этот',
u'я'
]
stop_characters = [u'.
',u',',u' - ',u'- ',u' -',u':',u';',u'?',u'№',u'!',u'_',u'(', u')',u'=',u'+',u"#",u'$',u'@',u'%',u'*',u' ',u'<',u'>','1','2','3','4','5','6', '7','8','9','0']

С помощью метода _clear_text() очищаю предложение от стоп-слов:

Движение по структуре вопросов

Для определения в каком направлении опроса двигаться исходя из ответов респондента воспользуемся функцией _define_conversation_way():

def _define_conversation_way(user_message, identi):
    """
    define in which way we are goin to?
    """
    # all questions, unless № 3 has two ways: 'yes' (positive) or 'no' (negative)
    if identi != '3' and identi != '6':
        yes = _get_similarity(user_message, u'да заказывал просить')
        no = _get_similarity(user_message, u'нет никогда')
    elif identi == '6':
        # the question number 6 has different ways: 'delivery' or 'self-delivery'
        yes = _get_similarity(user_message, u'заказываю доставку')
        no = _get_similarity(user_message, u'еду сам ищу аналог')
    elif identi == '3':
        # the question number 3 has different ways: 'from store' or 'delivery'
        yes = _get_similarity(user_message, u'магазин сам')
        no = _get_similarity(user_message, u'доставка почта все перечисленное курьер дом')
    if yes > no and yes > 0.
15: _way = 'yes' elif no > yes and no > 0.15: _way = 'no' else: _way = 'I dont know' return _way

Для удобства использования я сгруппировал всю логику по определению того что бот должен ответить в функцию _get_bot_answer(). Для удобства восприятия приведу ниже не только данный метод, а модуль с методами бота в целом:

bot_methods.py
полный код модуля, в котором реализованы все методы бота

# -*- coding: utf-8 -*-
"""
Bot methods.
Realizes all what bot can do.
"3. Использование API сервиса RusVectores"
https://github.com/akutuzov/webvectors/blob/master/preprocessing/rusvectores_tutorial.ipynb
"""
import re  # for work with regular expressions
import requests  # for using HTTP requests
from bot_config import stop_words
from bot_config import stop_characters
from mysqldb_methods import get_current_position_in_conversation
from mysqldb_methods import get_question_from_DB
from mysqldb_methods import write_current_question_number_for_user
def get_bot_answer(user_id, user_message):
    """
    using in views. py
    make answer to user
    """
    answer = ''
    # delete stop-words and punctuation characters in sentence
    user_message = _clear_text(user_message)
    # identify what to do: start or continue conversation
    identi = _identify_phrase(user_id, user_message)
    if identi == 'greetings':
        answer = get_question_from_DB('1')
        write_current_question_number_for_user(user_id, '1')
    elif identi == 'start':
        answer = get_question_from_DB('2')
        write_current_question_number_for_user(user_id, '2')
    elif identi == 'later':
        answer = "Когда у вас будет возможность пройти интервью напишите мне 'старт'."
    elif identi == 'I dont know':
        answer = "Я не совсем вас понимаю...\nУточните, пожалуйста."
    elif identi == 'end':
        answer = "Спасибо за ваше участие в интервью!"
    else:
        # if top-level question: 1, 2 or 3 etc.
        if len(identi) == 1:
            # define in which way we are goin to?
            way = _define_conversation_way(user_message, identi)
            if way == 'yes' or way == 'no':
                if way == 'yes':
                    # going to positive way
                    question_num = '. '.join([identi,'1','1'])
                if way == 'no':
                    # going to negative way
                    question_num = '.'.join([identi,'2','1'])
                answer = get_question_from_DB(question_num)
                if answer != 'None':
                    write_current_question_number_for_user(user_id, question_num)
                else:
                    question_num = str(int(identi) + 1)
                    answer = get_question_from_DB(question_num)
                    write_current_question_number_for_user(user_id, question_num)
            else:
                # if way='I dont know'
                answer = "Я не совсем вас понимаю...\nУточните, пожалуйста."
        else:
            # if subquestion: e.g. identi=2.1.1 or 3.2.2 etc.
            identi_numbers = identi.split('.')
            next_num = str(int(identi_numbers[2]) + 1)
            question_num = '.'.join([identi_numbers[0],identi_numbers[1],next_num])
            answer = get_question_from_DB(question_num)
            # if we get end of subquestions in this top-level-question
            if answer == 'None':
                # going to the next top-level question
                question_num = str(int(identi_numbers[0]) + 1)
                # checking that the question is the last
                if _is_the_last_question(question_num):
                    answer = get_question_from_DB(question_num)
                    question_num = 'end'
                else:
                    # is not the last question
                    answer = get_question_from_DB(question_num)
            
            write_current_question_number_for_user(user_id, question_num)
        
    return answer
def _is_the_last_question(question_num):
    """
    define is the last question?
    by the condition (len(identi) == 1) of the function "get_bot_answer"
    question_num has lenght 1
    """
    is_the_last = True
    question_num = str(int(question_num) + 1)
    question = get_question_from_DB(question_num)
    if question != 'None':
        is_the_last = False
    return is_the_last
def _define_conversation_way(user_message, identi):
    """
    define in which way we are goin to?
    """
    # all questions, unless № 3 has two ways: 'yes' (positive) or 'no' (negative)
    if identi != '3' and identi != '6':
        yes = _get_similarity(user_message, u'да заказывал просить')
        no = _get_similarity(user_message, u'нет никогда')
    elif identi == '6':
        # the question number 6 has different ways: 'delivery' or 'self-delivery'
        yes = _get_similarity(user_message, u'заказываю доставку')
        no = _get_similarity(user_message, u'еду сам ищу аналог')
    elif identi == '3':
        # the question number 3 has different ways: 'from store' or 'delivery'
        yes = _get_similarity(user_message, u'магазин сам')
        no = _get_similarity(user_message, u'доставка почта все перечисленное курьер дом')
    if yes > no and yes > 0. 15:
        _way = 'yes'
    elif no > yes and no > 0.15:
        _way = 'no'
    else:
        _way = 'I dont know'
    return _way
def _identify_phrase(user_id, user_message):
    """
    identify start question or greeting
    return number of phrase in database
    """
    # identification variable, on start set "I don't know"
    identi = 'I dont know'
    # find in database current position in conversation between user and chatbot
    identi = get_current_position_in_conversation(user_id)
    if identi != 'err':
        # if the conversation has just begun
        if identi == '0':
            # define greetings
            similarity = _get_similarity(user_message, u'привет здравствуйте добрый')
            if similarity > 0.5:
                identi = "greetings"
            else:
                # define start interview or not
                identi = _start_or_not(user_message)
        # if the conversation continues
        elif identi == '1':
            # define start interview or not
            identi = _start_or_not(user_message)
        else:
            pass
            
    return identi
def _start_or_not(user_message):
    """
    define <identi>: start or don't start interview
    """
    if user_message != 'старт' or user_message != 'Старт':
        _identi = 'I dont know'
        # define if user agree to start interview
        start = _get_similarity(user_message, u'да можем можно начинай ок')
        # define if user don't agree to start interview
        later = _get_similarity(user_message, u'нет позже потом завтра')
        if start > later and start > 0. 15:
            _identi = 'start'
        elif later > start and later > 0.15:
            _identi = 'later'
    else:
        _identi = "start"
    return _identi
def _clear_text(sentence):
    """
    delete stop-words and punctuation characters in sentence
    """
    try:
        # sentence to low-case
        sentence = sentence.lower()
        # delete stop-characters
        for char in stop_characters:
            sentence = sentence.replace(char, '')
        # delete stop-words
        words_of_sentence = sentence.split(' ')
        result = ''
        for word in words_of_sentence:
            if word not in stop_words:
                result = result + ' ' + word
    except Exception as e:
        result = str(e)
    return result
def _get_similarity(text1, text2):
    """
    Function return similarity between text1 and text2
    :param text1: user message
    :param text2: key words
    """
    text1.strip()  # delete empty space on start and end of string
    text2.strip()
    text1_words = text1. split(' ')
    text2_words = text2.split(' ')
    similarity = 0.0 # init variable
    try:
        for word1 in text1_words:
            if word1 != '':
                for word2 in text2_words:
                    if word2 != '':
                        # prepare url for request to API rusvectores.org
                        # url example http://rusvectores.org/araneum_none_fasttextcbow_300_5_2018/дело__папка/api/similarity/
                        url = '/'.join(['http://rusvectores.org/araneum_none_fasttextcbow_300_5_2018', 
                                        word1 + '__' + word2, 'api', 'similarity/'])
                        # GET request to API rusvectores.org
                        r = requests.get(url, stream=True)
                        # sum similarity of couple of words
                        similarity = similarity + float(r.text.split('\t')[0])
    except Exception as e:
        log_exception = str(e)
    # average similarity
    similarity = similarity/len(text2_words)
    # return similarity between text1 and text2
    return similarity

Как видно из кода, с помощью метода write_current_question_number_for_user() бот сохраняет в базу данных текущую позицию в диалоге с пользователем. Это необходимо для того, чтобы бот понимал какой следующий вопрос нужно задать респонденту.
Функция get_question_from_DB() возвращает текст вопроса из базы данных для того, чтобы бот задал его в чате.

Для удобства приведу полный код модуля с методами для работы с базой данных:

mysqldb_methods.py
полный код модуля, в котором реализованы все методы для работы с MySQL базой данных

# -*- coding: utf-8 -*-
"""
Methods for work with MySQL database.
"""
import MySQLdb  # before using it do in ssh: pip install mysqlclient
""" 
import configuration variables for connect to MySQL database:
"""
from mysqldb_config import HOST
from mysqldb_config import USER
from mysqldb_config import PASSWORD
from mysqldb_config import DATABASE
def write_current_question_number_for_user(user_id, question_num):
    """
    write question number to database for this user
    """
    try:
        conn = MySQLdb.connect(host=HOST, user=USER, passwd=PASSWORD, 
                               db=DATABASE, charset='utf8', init_command='SET NAMES UTF8')
        cursor = conn. cursor()
        if question_num == '2':
            query = (
                "INSERT INTO `conversations`(`user_id`, `question_num`) "
                "VALUES (%s, %s)"
            )
            data = (user_id, question_num)
        else:
            query = (
                "UPDATE `conversations` "
                "SET `question_num`=%s "
                "WHERE `user_id`=%s "
            )
            data = (question_num, user_id)
        cursor.execute(query,data)
        conn.commit()  # commit transaction
        conn.close()
    except Exception as e:
        exception = str(e)
def get_current_position_in_conversation(user_id):
    """
    find in database current position in conversation between user and chatbot
    using in bot_methods.py
    """
    try:
        conn = MySQLdb.connect(host=HOST, user=USER, passwd=PASSWORD, 
                               db=DATABASE, charset='utf8', init_command='SET NAMES UTF8')
        cursor = conn.cursor()
        query = "SELECT `question_num` FROM `conversations` WHERE `user_id`=%(user_id)s LIMIT 1"
        cursor. execute(query, {'user_id': user_id})
        result = cursor.fetchone()
        if result is None:
            identi = '0'
        else:
            identi = result[0]
        conn.close()
    except Exception as e:
        identi = 'err'
    
    return identi
def get_question_from_DB(question_num):
    """
    return question text from database
    """
    try:
        conn = MySQLdb.connect(host=HOST, user=USER, passwd=PASSWORD, 
                               db=DATABASE, charset='utf8', init_command='SET NAMES UTF8')
        cursor = conn.cursor()
        query = "SELECT `question_text` FROM `questions` WHERE `question_num`=%(num)s LIMIT 1"
        cursor.execute(query, {'num': question_num})
        result = cursor.fetchone()
        if result is not None:
            question_text = result[0]
        else:
            question_text = "None"
        conn.close()
    except Exception as e:
        question_text = str(e)
    
    return question_text

Теперь для полноты картины приведу код скрипта, который резюмирует всю логику работы чат-бота.

скрипт views.py
«точка входа» для приёма сообщений пользователя и отправки ответов бота в чат

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import json
import threading  # for async executing tasks with VK API
import vk  # vk is library from VK
from django.views.decorators.csrf import csrf_exempt
from django.shortcuts import render
from django.http import HttpResponse
from bot_config import *  # import token, confirmation_token and over constants from bot_config.py
from bot_methods import get_bot_answer
@csrf_exempt  # exempt index() function from built-in Django protection
def index(request):  # requested url
    if (request.method == "POST"):
        data = json.loads(request.body)  # take POST request from auto-generated variable <request.body> in json format
        if (data['secret'] == secret_key):  # if json request contain secret key and it's equal my secret key
            if (data['type'] == 'confirmation'):  # if VK server request confirmation
                """
                For confirmation my server (webhook) it must return
                confirmation token, which issuing in administration web-panel
                your public group in vk. com.
                Using <content_type="text/plain"> in HttpResponse function allows you
                response only plain text, without any format symbols.
                Parameter <status=200> response to VK server as VK want.
                """
                # confirmation_token from bot_config.py
                return HttpResponse(confirmation_token, 
                                    content_type="text/plain", 
                                    status=200)
            if (data['type'] == 'message_new'):  # if VK server send a message
                # t - is new thread to async execute answer_to_message()
                t = threading.Thread(target=_answer_to_message, args=(data,))
                t.start()
                return HttpResponse('ok', content_type="text/plain", status=200)
    else:
        return HttpResponse('see you :)')
# send anser to user message
def _answer_to_message(data):
    session = vk.Session()
    api = vk.API(session, v=5.5)
    user_id = data['object']['user_id']
    user_message = data['object']['body']
    # get bot answer
    answer = get_bot_answer(user_id, user_message)
    # token from bot_config. py
    api.messages.send(access_token = token, user_id = str(user_id), message = answer)

О том как устроена структура файлов приложения, его настройка описывал в подробностях в отдельной статье на Хабре.

Успехов!

Уверен, что для решения изложенной задачи существуют более элегантные решения и подходы. Несмотря на это надеюсь что изложенный материал найдёт своего читателя и будет полезен как в целом, так и в каких-то аспектах.
Желаю всем интересных проектов и успехов в их реализации!

Интеграция API SurveyMonkey с API vk

Обзор

/

Приложения

/

SurveyMonkey

/

vk

Настройте триггер API SurveyMonkey для запуска рабочего процесса, который интегрируется с API vk. Платформа интеграции Pipedream позволяет удивительно быстро интегрировать SurveyMonkey и vk. Бесплатно для разработчиков.

Популярные триггеры SurveyMonkey и vk#

Новые настраиваемые события веб-перехватчика из SurveyMonkey API

Выдавать новое настраиваемое событие веб-перехватчика

 

Попробовать

Новый опрос из API SurveyMonkey

Отправить новый созданный опрос

 

Попробовать

Новый ответ опроса из API SurveyMonkey

Отправить новый ответ на опрос

 

Попробуйте

Popular SurveyMonkey и vk Actions#

Получение сведений о коллекторе с помощью API SurveyMonkey

Получение сведений о коллекторе. См. документы здесь

 

Попробуйте

Получите мою информацию с помощью SurveyMonkey API

Получить данные вашей учетной записи. См. документацию здесь

 

Попробуйте

Получите подробные сведения об ответе с помощью SurveyMonkey API

Получите подробные сведения об ответе. См. документацию здесь

 

Попробуйте

Получите сведения об опросе с помощью SurveyMonkey API

Получите сведения об опросе. См. документы здесь

 

Попробуйте

Получение списка коллекторов опроса с помощью SurveyMonkey API

Получение коллекторов опроса. См. документы здесь

 

Попробуйте

Обзор SurveyMonkey#

API-интерфейс SurveyMonkey предоставляет разработчикам удобный способ создания удивительных решений для опросов
. Благодаря разработке API у разработчиков появился безграничный потенциал
для создания продуктов, которые упрощают сбор, анализ и обмен данными опроса
, как никогда прежде.

API SurveyMonkey позволяет

  • создавать мобильные приложения на основе опросов
  • Создание пользовательских опросов
  • Расширьте существующее программное обеспечение с помощью возможностей опроса
  • Создание опросов по электронной почте
  • Более быстрый анализ данных опроса
  • Интеграция опросов в онлайновые и физические продукты
  • Разработка пользовательских дизайнов опросов
  • Программное создание и редактирование опросов
  • Создать сложную логику опроса
  • и больше!

Возможности SurveyMonkey API безграничны. Благодаря мощным функциям
существует целый мир решений, возможных для компаний и частных лиц
похожи. Позвольте SurveyMonkey удовлетворить ваши потребности в сборе и анализе данных.

Connect SurveyMonkey#

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

 импорт { axios } из "@pipedream/platform"
экспортировать по умолчанию defineComponent({
  реквизит: {
    Survey_monkey: {
      тип: "приложение",
      приложение: "survey_monkey",
    }
  },
  асинхронный запуск ({шаги, $}) {
    возврат ожидания axios($, {
      URL-адрес: `https://api. surveymonkey.com/v3/users/me`,
      заголовки: {
        Авторизация: `Bearer ${this.survey_monkey.$auth.oauth_access_token}`,
      },
    })
  },
})
 

Обзор vk#

ВКонтакте, ранее известная как Вконтакте, — это популярная российская социальная сеть
, которая предлагает обширный набор веб-API для разработчиков.
С помощью VK API разработчики могут создавать ряд приложений и сервисов
, которые могут взаимодействовать с пользователями и ресурсами ВКонтакте. С помощью VK API разработчики
могут создавать различные сервисы, начиная от традиционных функций социальных сетей
и заканчивая более сложными приложениями и играми.

Вот некоторые вещи, которые можно создать с помощью VK API:

  • Платформы социальных сетей: Дайте пользователям возможность устанавливать связи, отправлять сообщения,
    обмениваться мультимедиа, а также создавать группы и события и управлять ими.
  • Платформы потоковой передачи музыки и видео
  • : Создавайте платформы потоковой передачи музыки и видео
    с поддержкой потоковой передачи популярного аудио- и видеоконтента из ВКонтакте.
  • Games: Реализуйте полнофункциональные игровые приложения, которые можно интегрировать с
    VK для категорий лидеров, игровых сообществ и многого другого.
  • Чат-боты: Создайте своего личного чат-бота для пользователей ВКонтакте,
    позволяя им общаться с другими пользователями ВКонтакте в автоматическом режиме.
  • Электронная коммерция: используйте VK API для создания онлайн-рынков и магазинов электронной коммерции
    с интеграцией VK.
  • Геолокационные сервисы: разрабатывайте приложения, которые можно использовать для определения местоположения и
    обмена событиями, местами и достопримечательностями с пользователями ВКонтакте.
  • Аналитика и отслеживание: сбор данных и внедрение аналитических инструментов для ВК
    пользователей и предприятий.
  • Реклама и продвижение: разрабатывайте кампании и рекламные мероприятия с интеграцией
    ВКонтакте.
  • Персонализация: Позвольте пользователям настраивать свою работу в ВКонтакте с помощью различных
    методов, включая пользовательские скины, макеты страниц и многое другое.

Connect vk#

1

2

3

4

5

6

7

9 0002 8

9

10

11

12

13

14

15

16

17

18

19

90 002 20

21

 импорт { axios } из "@pipedream/platform"
экспортировать по умолчанию defineComponent({
  реквизит: {
    вк: {
      тип: "приложение",
      приложение: "вк",
    }
  },
  асинхронный запуск ({шаги, $}) {
    возврат ожидания axios($, {
      адрес: `https://api.vk.com/method/users.get`,
      заголовки: {
        Авторизация: `Bearer ${this.vk.$auth.oauth_access_token}`,
      },
      параметры: {
        "в": `5.131`,
      },
    })
  },
})
 

Пожалуйста, примите участие в этом кратком опросе, чтобы мы могли узнать, что вы любите есть

ОСНОВНЫЕ БЛЮДА ЛЮБИМОЕ, ​​ПРИПРАВЫ и заправки

Подпишитесь на специальные предложения и уведомления о новых продуктах

Подпишитесь, чтобы узнавать от нас о наших специальных предложениях, последних новостях и события

Адрес электронной почты

ОПИСАНИЕ ПРОДУКТА : ЧЕТЫРЕ КЛАССИЧЕСКИХ БЛЮДА

ГУМБО в новоорлеанском стиле

Гамбо определенно стоит добавить в свой список супов! Уникальными по своей богатой сложности являются гумбо ру, напильник* и бамия. Вариации этого блюда бесконечны — к этому блюду можно добавить курицу, креветки и курицу, бамию и морепродукты. Сделайте его своим, добавив свои любимые белки. Это особый суп, который традиционно подают во время Марди Гра. Теперь вы можете в любое время испытать настоящий Новый Орлеанский Гамбо с Gumbo от Vegetable Kingdom.

Наш гамбо выполнен в классическом новоорлеанском стиле. Это означает, что мы начинаем с ру, добавляем троицу из болгарского перца, лука и сельдерея, затем бамию и немного напильника*. Есть много способов насладиться Гамбо; прибрежные жители обычно добавляют морепродукты, но куриный гамбо так же прекрасен. Любой протеин или его заменители будут вкусными. См. «Вариации гамбо» в разделе «Рецепты» ниже.

ИНГРЕДИЕНТЫ 

Помидоры, лук, перец, сельдерей, бамия, вода, петрушка, чеснок, тимьян, орегано, лавровый лист, пшеничная мука, масло канолы без ГМО, уксус, патока, анчоусы, гвоздика, экстракт тамаринда, перец чили экстракт, соль, перец, специи, напильник*, лимонная кислота. Содержит пшеницу и рыбу (анчоусы).

Easy one pot food:

Обжарить колбасу и курицу, влить Гамбо, добавить морепродукты перед подачей к рису.

Любой вид мяса, птицы или морепродуктов может быть добавлен отдельно или в комбинации.

Также вкусно с тофу и заменителями мяса из растительных белков

Подавайте с хлебом и салатом, чтобы приготовить сытный суп, который понравится вашей семье.

Жареный рис Гамбо — быстрое и простое блюдо, приготовленное в одной кастрюле!

ТУШЕНОЕ БРЮНСВИК

Ищете быстрый и полезный ужин, который понравится вашим детям и который сможет приготовить ваша няня?

Вы нашли его! Наше рагу Брансуик наполнено свежеприготовленной кукурузой, молодой фасолью, картофелем и помидорами в вкусном соусе, который понравится всем возрастам.

Способ приготовления: Вылейте содержимое банки в кастрюлю, добавив 1/2 банки бульона, томатный сок или воду и заменители мяса или вареное мясо – курицу, свинину, говяжий фарш или дичь. Тушите часто помешивая. При желании подавайте с отварным рисом. Приправьте по вкусу и наслаждайтесь.

Ингредиенты:

Картофель, помидоры, лук, вода, лимская фасоль, кукуруза, уксус, анчоусы, гвоздика, экстракт тамаринда, экстракт перца чили, лимонный сок, масло канолы без ГМО, соль, перец, специи, лимонная кислота.

Содержит рыбу (анчоусы).

Наше рагу Brunswick настолько вкусное, что его можно есть как есть или добавлять в него мясные или овощные крошки.

МАССАМАН КАРРИ

Хотите знать, почему массаман карри считается одним из самых популярных блюд в мире?

Попробуйте наши, и вы узнаете. Massaman Curry со свежими овощами и экзотическими специями, приготовленными в сливочном кокосовом молоке, легко полюбить. Густые, насыщенные и вкусные, когда вы настроены на тарелку тайского комфорта, вы найдете это по-настоящему приятным.

Способ применения: Вылейте содержимое банки в кастрюлю. Добавьте по своему выбору вареное мясо, заменители мяса или овощи. Подавайте с рисом и украсьте кинзой по желанию.

Massaman Curry от Vegetable Kingdom:

  • вкусный и приятный в одиночестве с рисом
  • подходит для любого сочетания белков и овощей для плотного ужина с карри
  • прекрасно сочетается с нашим манговым чатни
  • восхитительно украшен жареными орехами и кинзой

ИНГРЕДИЕНТЫ 

Картофель, морковь, лук, вода, имбирь, кокосовое молоко, чеснок, лайм, сахар, рыбный соус, кокосовое масло, тамаринд, сельдерей, лемонграсс, кинза, специи.

Содержит рыбу, сою.

Наше карри Massaman в тайском стиле просто необходимо, чтобы удовлетворить вашу дневную тягу.

Креольский соус Etouffee (вегетарианский)

Ищете что-нибудь новенькое на ужин? Попробуйте наш соус Creole Etouffee. Обычно этот соус используется с креветками на рисе, этот соус также можно приготовить с курицей, колбасой и красной фасолью или только с овощами.

Это один из лучших способов подать сытное и сытное блюдо, наполненное энергией и витамином С, которые делают помидоры любимым вкусом на протяжении многих лет.


Этот крепкий красный соус имеет множество применений.

Можно использовать при приготовлении домашних овощных супов и тушеных блюд.

Еще больше идей:

• легко приготовить куриный томатный суп, добавить рис и кусочки овощей

добавить водку и сливки для особого розового соуса пенне

• для красной фасоли и риса (см. страницу рецептов)

•для манхэттенского супа добавьте моллюсков и картофель

•для вкусного соуса для пасты добавьте грибы, орегано, базилик и тимьян; подавать с лингвини или кабачковыми спагетти с тертым пармезаном и фрикадельками по желанию

• намазать на корж для пиццы или брускетты, добавить начинку по вашему выбору

использовать в качестве соуса для жареных тостов или лепешек

• с баклажанами и цуккини в качестве рататуя

• Наслаждайтесь домашним томатным супом в одиночестве — просто добавьте кусочек сливочного масла и немного свежего базилика

ИНГРЕДИЕНТЫ 

Помидоры, лук, перец, сельдерей, вода, петрушка, томатная паста, томатный соус, чеснок, тимьян, орегано, лавровый лист, пшеничная мука, масло канолы без ГМО, специи, соль.

Creole Etouffee с креветками и рисом.

Соус Фета по-гречески

Вкусно к салатам и многим другим блюдам:

— к овощам, приготовленным на пару

— к мясу на гриле

— к рулетам и бутербродам

— к блюдам из яиц

Ингредиенты: 

Вода, канола без ГМО Масло, оливковое масло, сыр фета, лимон, обезжиренное молоко, яйцо, уксус, лук, чеснок, укроп, петрушка, специи.

Эта густая заправка прекрасно сочетается с салатами, мясом на гриле и растительным белком. Попробуйте тушеные овощи и с яйцами.

Соус Фета в греческом стиле «Овощное царство»

Соусы

Горчичный винегрет по-французски

Первоначально назывался «Бриллиантовая заправка Ди» (по рецепту друга из ВК, рецепта ДиЭнн). Это классический острый винегрет во французском стиле. Идеально подходит для любого варианта салата из листьев салата и помидоров, особенно хорош для салата Ди, рецепт которого приведен ниже.

Это также отличный маринад для курицы и морепродуктов.

Ингредиенты:   

Уксус, оливковое масло Extra Virgin, горчица, масло канолы без ГМО, вода, чеснок, соль, перец. Этот острый винегрет восхитителен к любому зеленому салату. Также отлично подходит для маринования тофу, мяса, морепродуктов, овощей и злаков. Смотрите раздел рецептов.

Рецепт на этикетке — это быстрый и вкусный салат. Подруга ВКонтакте Ди поделилась этим рецептом, а также своими прекрасными рецептами салатов. Спасибо Ди!

Французский горчичный винегрет от Vegetable Kingdom

Японская заправка из тофу

Мы уверены, что вы не знали, что тофу может быть таким вкусным! Превратите свой салат в полноценную еду, наполняющую желудок. Белок тофу в сочетании с богатством оливкового масла первого холодного отжима и свежей зеленью наверняка убедит вас изменить свое мнение о тофу.

Соус тофу превращает салат в блюдо. Создайте здоровый, используя вашу любимую зелень и начинки. Добавьте заправку из тофу и готовьте! Богатый белком тофу и оливковое масло первого холодного отжима удовлетворят ваши вкусовые рецепторы и аппетит.

Состав: тофу, оливковое масло Extra Virgin, лук, уксус, соя, вода, чеснок, базилик, ксантан.

Заправка из тофу в японском стиле от Vegetable Kingdom

Рецепты

Креольская красная фасоль с рисом от Nana
Гамбо с курицей и сосисками с вариациями
Хрустящий тофу и карри из сладкого картофеля
90 003

1 – 32-унциевая банка креольского соуса VK

1 стакан лука

1 стакан сельдерея

1 стакан зеленого перца

1/4 стакана чеснока

Оливковое масло

1 фунт нарезанной колбасы

2 банки красной фасоли

2 T петрушки

2 лавровых листа

Инструкции:

В большой суповой кастрюле, обжарить 1 по ложке лука, сельдерея и зеленого перца , плюс 1/4 стакана чеснока в 2-3 ч. л. оливкового масла.

Добавьте нарезанную колбасу весом 1 фунт.

Добавьте банку креольского соуса VK, 2 банки красной фасоли, 2 листа петрушки и 2 лавровых листа.

Готовьте, помешивая, пока ароматы не смешаются. Подавайте с рисом и украсьте петрушкой.

Хрустящий тофу и карри из сладкого картофеля
Гамбо с курицей и сосисками с вариациями
Хрустящий тофу и карри из сладкого картофеля

1 банка емкостью 32 унции Massaman Curry

1 упаковка фирмы To фу.

1 очищенный сладкий картофель

1/4 стакана арахисового масла

вареный рис

Нарежьте сладкий картофель тонкими полосками. Выложить на смазанный маслом противень и поставить в разогретую до 350 градусов духовку. Выпекать до мягкости.

Пока картофель запекается, обсушите тофу и нарежьте его тонкими прямоугольными полосками.

Поместите арахисовое масло в сковороду и нагрейте до температуры жарки.

Положите полоски тофу в горячее масло и готовьте до золотистого цвета. Выложите тофу на подушку из бумажных полотенец, чтобы впитать излишки масла. Нагрейте Massaman Curry в кастрюле до горячего состояния. Выложите приготовленный рис в тарелки. Вылейте массуман карри на рис. Добавьте хрустящий тофу и жареный сладкий картофель. Подавайте с гарниром из петрушки.

Гамбо с курицей и сосисками с вариациями
Гамбо с курицей и сосисками с вариациями
Гамбо с курицей и сосисками с вариациями

 Простое блюдо:

Обжарить колбасу и курицу, влить гамбо, добавить морепродукты перед подачей к рису.

Любой вид мяса, птицы или морепродуктов может быть добавлен отдельно или в комбинации.

Также вкусно с тофу и заменителями мяса из растительных белков.

Другие рецепты можно найти в нашем блоге в конце веб-сайта ниже.

Салат из жареной свеклы и яблок с жареными грецкими орехами, швейцарским сыром и соусом из горчицы
Салат из жареной свеклы и яблок с жареными грецкими орехами, швейцарским сыром и соусом из горчицы
Салат из жареной свеклы и яблок с жареными грецкими орехами, швейцарским сыром и Горчичный винегрет

Жареная свекла

Яблоки

Швейцарский сыр

Поджаренные грецкие орехи

Зелень по вашему выбору

Инструкции

яблоко нарезать кусочками одинакового размера.

Измельчить швейцарский сыр

Смешать свеклу с горчичным соусом из растительного царства

Добавить яблоки и сыр

Выложить на зелень и посыпать сверху грецкими орехами

Очень простые зеленые чипсы из капусты и свеклы с горчичным соусом
Жареная свекла и Салат из яблок с поджаренными грецкими орехами, швейцарским сыром и горчичной заправкой
Салат из жареной свеклы и яблок с поджаренными грецкими орехами, швейцарским сыром и заправкой из горчицы

 

Разогрейте до 250°С.

Вымойте и открутите или высушите полотенцем капусту и т. д. по вашему выбору.

Поместите в большую миску.

На каждую большую горсть вам понадобится 2-3 t Dee’s, в зависимости от впитывающей способности листа. Вылейте заправку на зелень и аккуратно перемешайте. (Для этого подойдет перчатка.)

Убедитесь, что каждый кусочек покрыт тонким слоем, но не намок. Выложить на смазанный маслом противень в один слой.

Выпекать 30 минут, проверить через 20. Если вы смешиваете разные виды зелени, они будут запекаться в разное время, поэтому уберите все, что стало хрустящим, на решетку.

Переверните оставшиеся и запекайте еще 15 минут или до хрустящей корочки.

Свежесть из зимнего сада с горчичным соусом
Свежесть из зимнего сада с горчичным соусом
Свежесть из зимнего сада с горчичным соусом

Очень простой салат «свежий с сада» с салатом-ассорти, зеленым луковая ботва, молодая спаржа, морковь и редис. .. НЯМ!

Свежесть из Летнего сада плюс горчичный винегрет
Свежесть из Зимнего сада плюс горчичный винегрет
Свежесть из Зимнего сада плюс горчичный винегрет

У вас есть салат, стручковая фасоль, фиолетовый лук и желтый помидор, с гренками и яйцом сверху!

Пицца с креольским соусом
Пицца с креольским соусом
Пицца с креольским соусом

Наш креольский соус приготовлен с луком, чесноком, перцами, травами и специями.

Приготовьте салат из блюд
Пицца с креольским соусом
Пицца с креольским соусом

Благодаря белку тофу и насыщенности оливковым маслом первого отжима вы почувствуете себя сытым и счастливым от основного блюда салата.

Ромейн как основное блюдо
Пицца с креольским соусом
Лук-порей, маринованный в горчичном винегрете

Возьмите большую салатницу. Одну головку промытого ромэна порвите на мелкие кусочки. Добавьте заправку Фета и аккуратно перемешайте. Добавьте гренки и тертый пармезан. Копай!

Лук-порей, маринованный в соусе из горчицы
Салат из свеклы и поджаренного ячменя с заправкой из феты
Лук-порей, маринованный в соусе из горчицы

Лук-порей, представитель семейства луковых, очень вкусен в салате или в качестве гарнира. Хорошо очищенный лук-порей пропарить в корзине пароварки, пока он не станет мягким. Слейте воду и добавьте заправку. Перемешайте и подавайте.

Салат из свеклы и яблок с горчицей и соусом винегрет
Салат из свеклы и жареного ячменя с заправкой из феты
Салат из свеклы и поджаренного ячменя с заправкой из феты

Поджарьте или отварите очищенную свеклу до готовности. Очистить и нарезать. Добавить к яблокам. Перемешайте с заправкой. Добавьте грецкие орехи и наслаждайтесь.

Салат из свеклы и поджаренного ячменя с заправкой из феты
Салат из свеклы и поджаренного ячменя с заправкой из феты
Салат из свеклы и поджаренного ячменя с заправкой из феты

Отделить свеклу и ботву. Сварить и очистить свеклу. Тщательно вымойте верхушки. Приготовьте ячмень в соответствии с инструкцией на упаковке, затем разложите на противне и поджарьте в духовке 350°С. Передайте заправку Фета.

Мы будем рады услышать от вас! Поделитесь своими блюдами, приготовленными из продуктов ВКонтакте. Используйте контактную форму ниже или свяжитесь с нами через социальные сети.

НАЙТИ НАС

Северная Каролина
Северная Каролина
Северная Каролина

Advance
Lowe’s Foods
90 276 Asheville
Ingles 
Harris Teeter
Publix
Savvy Gourmet Foods
Banner Elk
Lowe’s Foods
Белмонт
Belmont Specialty Foods
Harris Teeter
Publix
Boone
Publix
Brevard
Food Matters Market
Historic Toxaway Market
Old Store Produce 9 0081 Берлингтон
Харрис Титер
Шарлотта
Харрис Титер
Публикс
Concord
Harris Teeter
Publix
Conover
Универсальный магазин Burton Farms
Cornelius
Harris Teeter
Пабликс
Клеммонс
Харрис Титер
Пабликс
Дэвидсон
Харрис Титер
Денвер
Пабликс
Gastonia
Harris Teeter
Publix
Germanton
Daily Basket
Greensboro
Harris Teeter
Lowe’s Foods
Harrisburg
Lowe’s Foods
Harris Teeter
Publix
Hendersonville
Harris Teeter
Publix
The Fresh Market
Хикори
Lowe’s Foods
Publix
High Point
Publix
Huntersville
Harris Teeter
Publix
9027 6 Indian Trail
Harris Teeter
Jamestown
Lowe’s Foods
Kernersville
Lowe’s Foods
King
Lowe’s Foods
Lake Wylie
Publix
Lewisville
Lowe’s Foods
Matthews
Harris Teeter
Publix
Mint Hill
Publix
Monroe
Publix
Morganton
Mooresville
Lowe’s Foods
Harris Teeter
Publix
Morgantown
Food Matters Market
Mount Airy
Lowe’s Foods
Oak Ridge
Lowe’s Foods
Raleigh
Wegmans
Reidsville
Lowe’s Foods
Saluda
Исторический магазин Thompson
Шерилс Форд
Publix
Siler City
Oasis Fresh Market & Deli
Стейтсвилль
Publix
Sylva
IGA-Harold’s Supermarket
Waxhaw
Harris Teeter
Waynesville
Publix
Weaverville
Ingles
Publix
Winston-Salem
Lowe’s Foods
Harris Teeter
Publix

Южная Каролина
Северная Каролина
Северная Каролина

Бофорт

Туристический центр Бофорта

Колумбия

Lowe’s Foods

9 0276 Fort Mill

Publix

The Peach Stand

Greenville

Harris Teeter

Greer

Lowe’s Foods

Indian Land

Harris Teeter

Kernersville

Lowe’s Foods

Lake Wylie

Publix

Lexington

Lowe’s Foods

Mount Pleasant 9000 3

Lowe’s Foods

Pawley’s Island

Lowe’s Foods

Rock Hill

Publix

Summerville

Lowe’s Food

Simpsonville

Lowe’s Foods

Проверяйте чаще, мы постоянно добавляем магазины!

Грузия
Магазины
Магазины

Декейтер
Продуктовый рынок Дэвида
Мюррейвилл 9 0081 Помидорный дом.
Продуктовый рынок Давида

Магазины
Магазины
Магазины

Кэмп-Лежен

Авиабаза Чарльстон

Чарльстон NWS 900 03

футов. Bragg S. Post

Fort Jackson

Проверяйте чаще, мы постоянно добавляем магазины!

Любая из наших баночек + Ваш желаемый белок = Вкусность

Что, если еда быстрого приготовления ускорится, а фаст-фуд отстанет?

  

Мы знаем, что существует огромный спрос на полуфабрикаты, но мы не думаем, что вам нужно так жертвовать качеством и питательной ценностью только для того, чтобы иметь еду, которую можно съесть второпях.

Оставить комментарий

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *