Flask + Heroku: реализация веб-крюка Qualtrics для прослушивания ответов на опрос в реальном времени и получения идентификаторов ответов - PullRequest
0 голосов
/ 14 февраля 2020

Итак, ранее я сделал flask приложение для онлайн-эксперимента. Я развернул его в Heroku, чтобы сделать это онлайн. Я надеялся, что смогу провести существующий опрос по квалификациям под общей учетной записью, встроить этот опрос в html веб-приложения и каким-то образом легко извлечь ответ из чьего-либо заполненного опроса, а затем сохранить его в моем приложении flask. Мне было немного сложнее, как человеку, который не очень интенсивно работал с rest apis (хотя у меня достаточно опыта работы с webdev). Несмотря на это, я чувствую, что это действительно важно, чтобы попытаться упростить, особенно для психологов и людей, занимающихся социальными и поведенческими науками, которые могут не иметь большого опыта работы с webdev и хотят провести простой онлайн-эксперимент, связанный с опросом по квалификациям.

В последние несколько дней я спускался по кроличьей норе, просматривая документы по квалификациям, просто пытаясь понять, что можно сделать. Этот пример в их документации получения ответов в реальном времени был у меня на уме: https://api.qualtrics.com/docs/listen-to-and-retrieve-responses-in-real-time

В этом руководстве обсуждается следующее:

Здесь мы показываем как создать прослушиватель событий в Qualtrics, который будет запускать обратный вызов webhook при получении ответа на опрос. Таким образом, пользователь может сразу же отправить эти ответы в любую систему, которую он sh подключит, как только они будут введены в Qualtrics.

У них есть большие фрагменты кода для создания небольшого python приложения. что может сделать это слушая. Они не имеют ничего адаптированного к Flask или heroku, хотя этот код создает свой собственный экземпляр сервера и использует предварительно настроенный URL-адрес publi c для приложения. Я хочу выяснить, как я должен адаптировать это к Flask и Heroku.

Вот вопросы, которые возникли.

  • Q: Хотя веб-зацепкам обычно нужно Ваше приложение должно быть доступно по общедоступной ссылке. Сначала я хочу внедрить эту функцию локально и протестировать ее локально, а затем развернуть ее на heroku. Как я могу это сделать?
  • A: Я нашел этот вопрос и заставил приложение работать публично на моем IPv4-адресе, но примите во внимание предостережения безопасности. Настройка Flask dev-сервера, чтобы он был виден в сети
  • Q: Как мне создать подписку на событие qualtrics? В учебнике по квалитрике это делается с помощью вызова curl. Это не похоже на github api, где, например, я могу ввести URL полезной нагрузки для подписки на событие в GUI.
  • A: Я нашел эту статью https://blog.heroku.com/the_new_heroku_1_process_model_procfile. Это говорит о том, что heroku run curl из каталога, содержащего мое приложение heroku, должно работать. Так что я сделаю это, как только буду готов развернуть эти изменения на героку. Но сейчас, использование вызова curl в моей оболочке на моей локальной машине должно работать, и я надеюсь, что передача моего ipv4 url в качестве publication_url даст мне то, что мне нужно.
  • Q: Хорошо. Так какой код мне нужен сейчас в моем файле app.py? Как мне подключить это к конечной точке моего flask приложения и получить идентификатор ответа? Как мне адаптировать код из учебника по квалификациям?

Последний вопрос - единственное, в чем я не уверен, я действительно надеюсь, что все получится. Я следовал этому руководству по использованию flask и github api / создание github webhook - https://www.youtube.com/watch?v=YMBzb_RBDAA. Я попытался создать URL-адрес конечной точки /api/linkqualtrics

@app.route('/api/linkqualtrics', methods=['POST'])
def get_qualtrics_responseid():
    if request.headers['Content-Type'] == 'application/json':
        my_info = json.dumps(request.json)
        print(my_info)
        return my_info

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

...